From a4a99f8cc891d55dd4e196046ee2be6a4e3fd00c Mon Sep 17 00:00:00 2001 From: D G Turner Date: Thu, 7 Jul 2011 19:18:13 +0100 Subject: TSAGE: Add Spanish CD Detection Entry From Bug #3357777 --- engines/tsage/detection_tables.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 8b80edf89d..f9ced562c2 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -24,7 +24,7 @@ namespace tSage { static const tSageGameDescription gameDescriptions[] = { - // Ringworld CD and First Wave versions + // Ringworld English CD and First Wave versions { { "ring", @@ -38,6 +38,20 @@ static const tSageGameDescription gameDescriptions[] = { GType_Ringworld, GF_CD | GF_ALT_REGIONS }, + // Ringworld Spanish CD + { + { + "ring", + "CD", + AD_ENTRY1s("ring.rlb", "cb8bba91b30cd172712371d7123bd763", 7427980), + Common::ES_ESP, + Common::kPlatformPC, + ADGF_UNSTABLE, + Common::GUIO_NOSPEECH | Common::GUIO_NOSFX + }, + GType_Ringworld, + GF_CD | GF_ALT_REGIONS + }, // Ringworld English Floppy version { { -- cgit v1.2.3 From b3a05ee089e8f657f8ad1e5416ec06c56d95adf3 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 18 Jul 2011 21:13:39 +1000 Subject: TSAGE: Bugfix to make Return to Launcher work correctly --- engines/tsage/converse.cpp | 6 +++--- engines/tsage/core.cpp | 2 +- engines/tsage/dialogs.cpp | 8 ++++---- engines/tsage/events.cpp | 4 ++-- engines/tsage/graphics.cpp | 6 +++--- engines/tsage/ringworld_logic.cpp | 2 +- engines/tsage/ringworld_scenes3.cpp | 6 +++--- engines/tsage/scenes.cpp | 2 +- engines/tsage/tsage.cpp | 4 ++++ engines/tsage/tsage.h | 1 + 10 files changed, 23 insertions(+), 18 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index b475310533..0ae575c557 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -416,13 +416,13 @@ int ConversationChoiceDialog::execute(const Common::StringArray &choiceList) { // Event handling loop Event event; - while (!_vm->getEventManager()->shouldQuit()) { + while (!_vm->shouldQuit()) { while (!_globals->_events.getEvent(event, EVENT_KEYPRESS | EVENT_BUTTON_DOWN | EVENT_MOUSE_MOVE) && - !_vm->getEventManager()->shouldQuit()) { + !_vm->shouldQuit()) { g_system->delayMillis(10); g_system->updateScreen(); } - if (_vm->getEventManager()->shouldQuit()) + if (_vm->shouldQuit()) break; if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode >= Common::KEYCODE_1) && diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 76714a6f10..d0075d5acf 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1552,7 +1552,7 @@ void SceneItem::display(int resNum, int lineNum, ...) { Event event; // Keep event on-screen until a mouse or keypress - while (!_vm->getEventManager()->shouldQuit() && !_globals->_events.getEvent(event, + while (!_vm->shouldQuit() && !_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS)) { g_system->updateScreen(); g_system->delayMillis(10); diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index 86fbbc8e43..d315ce092b 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -243,7 +243,7 @@ void RightClickDialog::execute() { // Dialog event handler loop _gfxManager.activate(); - while (!_vm->getEventManager()->shouldQuit() && (_selectedAction == -1)) { + while (!_vm->shouldQuit() && (_selectedAction == -1)) { Event evt; while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) { evt.mousePos.x -= _bounds.left; @@ -465,14 +465,14 @@ void InventoryDialog::execute() { bool lookFlag = false; _gfxManager.activate(); - while (!_vm->getEventManager()->shouldQuit()) { + while (!_vm->shouldQuit()) { // Get events Event event; - while (!_globals->_events.getEvent(event) && !_vm->getEventManager()->shouldQuit()) { + while (!_globals->_events.getEvent(event) && !_vm->shouldQuit()) { g_system->delayMillis(10); g_system->updateScreen(); } - if (_vm->getEventManager()->shouldQuit()) + if (_vm->shouldQuit()) break; hiliteObj = NULL; diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index a24f65421b..010117ec78 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -78,7 +78,7 @@ bool EventsClass::pollEvent() { void EventsClass::waitForPress(int eventMask) { Event evt; - while (!_vm->getEventManager()->shouldQuit() && !getEvent(evt, eventMask)) + while (!_vm->shouldQuit() && !getEvent(evt, eventMask)) g_system->delayMillis(10); } @@ -86,7 +86,7 @@ void EventsClass::waitForPress(int eventMask) { * Standard event retrieval, which only returns keyboard and mouse clicks */ bool EventsClass::getEvent(Event &evt, int eventMask) { - while (pollEvent() && !_vm->getEventManager()->shouldQuit()) { + while (pollEvent() && !_vm->shouldQuit()) { evt.handled = false; evt.eventType = EVENT_NONE; evt.mousePos = _event.mouse; diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index fce9e1317d..87ffdf4494 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -408,7 +408,7 @@ bool GfxSurface::displayText(const Common::String &msg, const Common::Point &pt) // Write for a mouse or keypress Event event; - while (!_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !_vm->getEventManager()->shouldQuit()) + while (!_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !_vm->shouldQuit()) ; // Restore the display area @@ -718,7 +718,7 @@ bool GfxElement::focusedEvent(Event &event) { int xOffset = mousePos.x - _globals->_events._mousePos.x; int yOffset = mousePos.y - _globals->_events._mousePos.y; - while (event.eventType != EVENT_BUTTON_UP && !_vm->getEventManager()->shouldQuit()) { + while (event.eventType != EVENT_BUTTON_UP && !_vm->shouldQuit()) { g_system->delayMillis(10); if (_bounds.contains(mousePos)) { @@ -1029,7 +1029,7 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) { GfxButton *selectedButton = NULL; bool breakFlag = false; - while (!_vm->getEventManager()->shouldQuit() && !breakFlag) { + while (!_vm->shouldQuit() && !breakFlag) { Event event; while (_globals->_events.getEvent(event) && !breakFlag) { // Adjust mouse positions to be relative within the dialog diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 58501172af..070d8afd25 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -296,7 +296,7 @@ void SceneArea::draw(bool flag) { void SceneArea::wait() { // Wait until a mouse or keypress Event event; - while (!_vm->getEventManager()->shouldQuit() && !_globals->_events.getEvent(event)) { + while (!_vm->shouldQuit() && !_globals->_events.getEvent(event)) { g_system->updateScreen(); g_system->delayMillis(10); } diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp index 824a96a18b..3f9921b0ad 100644 --- a/engines/tsage/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld_scenes3.cpp @@ -526,7 +526,7 @@ void Scene2100::Action1::signal() { _state = 0; _globals->_events.setCursor(CURSOR_USE); - while (!_state && !_vm->getEventManager()->shouldQuit()) { + while (!_state && !_vm->shouldQuit()) { // Wait for an event Event event; if (!_globals->_events.getEvent(event)) { @@ -2257,7 +2257,7 @@ void Scene2150::Action1::signal() { _state = 0; _globals->_events.setCursor(CURSOR_USE); - while (!_state && !_vm->getEventManager()->shouldQuit()) { + while (!_state && !_vm->shouldQuit()) { // Wait for an event Event event; if (!_globals->_events.getEvent(event)) { @@ -5112,7 +5112,7 @@ void Scene2320::Action3::signal() { _state = 0; _globals->_events.setCursor(CURSOR_USE); - while (!_state && !_vm->getEventManager()->shouldQuit()) { + while (!_state && !_vm->shouldQuit()) { // Wait for an event Event event; if (!_globals->_events.getEvent(event)) { diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 18b3da2698..b94e95c696 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -511,7 +511,7 @@ void Game::execute() { activeFlag = true; } } - } while (activeFlag && !_vm->getEventManager()->shouldQuit()); + } while (activeFlag && !_vm->shouldQuit()); } } // End of namespace tSage diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 41f3d58897..23a0193b7c 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -147,4 +147,8 @@ void TSageEngine::syncSoundSettings() { _globals->_soundManager.syncSounds(); } +bool TSageEngine::shouldQuit() { + return getEventManager()->shouldQuit() || getEventManager()->shouldRTL(); +} + } // End of namespace tSage diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h index f004c7f625..805461886a 100644 --- a/engines/tsage/tsage.h +++ b/engines/tsage/tsage.h @@ -78,6 +78,7 @@ public: uint32 getGameID() const; uint32 getFeatures() const; Common::String getPrimaryFilename() const; + bool shouldQuit(); virtual Common::Error init(); virtual Common::Error run(); -- cgit v1.2.3 From d6422468a9c71a3700783467c6054abb618aed65 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 24 Jul 2011 21:25:00 +1000 Subject: TSAGE: Reverted to using a single thread for audio playback --- engines/tsage/sound.cpp | 53 +++++++++++++++++++++++++++++-------------------- engines/tsage/sound.h | 5 +++++ 2 files changed, 37 insertions(+), 21 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index e26b3d1544..f5c59a709c 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -66,7 +66,7 @@ SoundManager::~SoundManager() { } _sfTerminate(); - g_system->getTimerManager()->removeTimerProc(_sfUpdateCallback); +// g_system->getTimerManager()->removeTimerProc(_sfUpdateCallback); } _soundManager = NULL; @@ -78,9 +78,12 @@ void SoundManager::postInit() { _saver->addLoadNotifier(&SoundManager::loadNotifier); _saver->addListener(this); - // Install a timer for handling sound manager updates at 60Hz - g_system->getTimerManager()->installTimerProc(_sfUpdateCallback, 1000000 / GAME_FRAME_RATE, NULL); +// I originally separated the sound manager update method into a separate thread, since +// it handles updates for both music and Fx. However, since Adlib updates also get done in a +// thread, and doesn't get too far ahead, I've left it to the AdlibSoundDriver class to +// call the update method, rather than having it be called separately +// g_system->getTimerManager()->installTimerProc(_sfUpdateCallback, 1000000 / SOUND_FREQUENCY, NULL); __sndmgrReady = true; } } @@ -2488,7 +2491,12 @@ AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() { _opl = OPL::Config::create(); assert(_opl); _opl->init(_sampleRate); - + + _samplesTillCallback = 0; + _samplesTillCallbackRemainder = 0; + _samplesPerCallback = getRate() / CALLBACKS_PER_SECOND; + _samplesPerCallbackRemainder = getRate() % CALLBACKS_PER_SECOND; + _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); Common::set_to(_channelVoiced, _channelVoiced + ADLIB_CHANNEL_COUNT, false); @@ -2750,26 +2758,29 @@ void AdlibSoundDriver::setFrequency(int channel) { } int AdlibSoundDriver::readBuffer(int16 *buffer, const int numSamples) { - update(buffer, numSamples); - return numSamples; -} - -void AdlibSoundDriver::update(int16 *buf, int len) { - static int samplesLeft = 0; - while (len != 0) { - int count = samplesLeft; - if (count > len) { - count = len; - } - samplesLeft -= count; - len -= count; - _opl->readBuffer(buf, count); - if (samplesLeft == 0) { + int32 samplesLeft = numSamples; + memset(buffer, 0, sizeof(int16) * numSamples); + while (samplesLeft) { + if (!_samplesTillCallback) { + SoundManager::_sfUpdateCallback(NULL); flush(); - samplesLeft = _sampleRate / 50; + + _samplesTillCallback = _samplesPerCallback; + _samplesTillCallbackRemainder += _samplesPerCallbackRemainder; + if (_samplesTillCallbackRemainder >= CALLBACKS_PER_SECOND) { + _samplesTillCallback++; + _samplesTillCallbackRemainder -= CALLBACKS_PER_SECOND; + } } - buf += count; + + int32 render = MIN(samplesLeft, _samplesTillCallback); + samplesLeft -= render; + _samplesTillCallback -= render; + + _opl->readBuffer(buffer, render); + buffer += render; } + return numSamples; } /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 6a47a1aaf5..f954a65610 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -41,6 +41,7 @@ class Sound; #define ROLAND_DRIVER_NUM 2 #define ADLIB_DRIVER_NUM 3 #define SBLASTER_DRIVER_NUM 4 +#define CALLBACKS_PER_SECOND 60 struct trackInfoStruct { int _numTracks; @@ -411,6 +412,10 @@ private: const byte *_patchData; int _masterVolume; Common::Queue _queue; + int _samplesTillCallback; + int _samplesTillCallbackRemainder; + int _samplesPerCallback; + int _samplesPerCallbackRemainder; bool _channelVoiced[ADLIB_CHANNEL_COUNT]; int _channelVolume[ADLIB_CHANNEL_COUNT]; -- cgit v1.2.3 From 77908a9357c30d2ff6325d552a26903499c718f1 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 25 Jul 2011 21:30:17 +1000 Subject: TSAGE: Re-factored sound driver method #32 with extra parameters needed by Sound Fx driver --- engines/tsage/sound.cpp | 18 +++++++++--------- engines/tsage/sound.h | 10 +++++----- 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index f5c59a709c..d31dba21d3 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -1970,9 +1970,9 @@ void Sound::_soServiceTrackType0(int trackIndex, const byte *channelData) { if (channelNum != -1) { if (voiceType != VOICETYPE_0) { if (chFlags & 0x10) - _soProc42(vtStruct, channelNum, chVoiceType, v); + _soProc42(vtStruct, channelData, channelNum, chVoiceType, v); else - _soProc32(vtStruct, channelNum, chVoiceType, v, b); + _soProc32(vtStruct, channelData, channelNum, chVoiceType, v, b); } else if (voiceNum != -1) { assert(driver); driver->proc20(voiceNum, chVoiceType); @@ -2140,7 +2140,7 @@ void Sound::_soUpdateDamper(VoiceTypeStruct *voiceType, int channelNum, VoiceTyp } } -void Sound::_soProc32(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int v0, int v1) { +void Sound::_soProc32(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0, int v1) { int entryIndex = _soFindSound(vtStruct, channelNum); if (entryIndex != -1) { SoundDriver *driver = vtStruct->_entries[entryIndex]._driver; @@ -2150,11 +2150,11 @@ void Sound::_soProc32(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voice vtStruct->_entries[entryIndex]._type1._field4 = v0; vtStruct->_entries[entryIndex]._type1._field5 = 0; - driver->proc32(this, vtStruct->_entries[entryIndex]._voiceNum, _chProgram[channelNum], v0, v1); + driver->proc32(channelData, 0, _chProgram[channelNum], vtStruct->_entries[entryIndex]._voiceNum, v0, v1); } } -void Sound::_soProc42(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int v0) { +void Sound::_soProc42(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0) { for (int trackCtr = 0; trackCtr < _trackInfo._numTracks; ++trackCtr) { const byte *instrument = _channelData[trackCtr]; if ((*(instrument + 13) == v0) && (*instrument == 1)) { @@ -2169,7 +2169,7 @@ void Sound::_soProc42(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voice vtStruct->_entries[entryIndex]._type1._field5 = 0; int v1, v2; - driver->proc32(this, vtStruct->_entries[entryIndex]._voiceNum, -1, v0, 0x7F); + driver->proc32(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, v0, 0x7F); driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, voiceType, 0, &v1, &v2); } break; @@ -2298,7 +2298,7 @@ void Sound::_soServiceTrackType1(int trackIndex, const byte *channelData) { vtStruct->_entries[entryIndex]._type1._field5 = 0; int v1, v2; - driver->proc32(this, vtStruct->_entries[entryIndex]._voiceNum, -1, *(channelData + 1), 0x7f); + driver->proc32(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), 0x7f); driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), _loop ? 1 : 0, &v1, &v2); } @@ -2566,7 +2566,7 @@ int AdlibSoundDriver::setMasterVolume(int volume) { return oldVolume; } -void AdlibSoundDriver::proc32(Sound *sound, int channel, int program, int v0, int v1) { +void AdlibSoundDriver::proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { if (program == -1) return; @@ -2865,7 +2865,7 @@ int AdlibFxSoundDriver::setMasterVolume(int volume) { return oldVolume; } -void AdlibFxSoundDriver::proc32(Sound *sound, int channel, int program, int v0, int v1) { +void AdlibFxSoundDriver::proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { if (program == -1) return; diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index f954a65610..05cbb86114 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -108,7 +108,7 @@ public: virtual void setProgram(int channel, int program) {} // Method #13 virtual void setVolume1(int channel, int v2, int v3, int volume) {} virtual void setPitchBlend(int channel, int pitchBlend) {} // Method #15 - virtual void proc32(Sound *sound, int channel, int program, int v0, int v1) {}// Method #16 + virtual void proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) {}// Method #16 virtual void updateVoice(int channel) {} // Method #17 virtual void proc36() {} // Method #18 virtual void proc38(int channel, int cmd, int value) {} // Method #19 @@ -349,8 +349,8 @@ public: void _soRemoteReceive(); void _soServiceTrackType0(int trackIndex, const byte *channelData); void _soUpdateDamper(VoiceTypeStruct *voiceType, int channelNum, VoiceType mode, int v0); - void _soProc32(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int v0, int v1); - void _soProc42(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int v0); + void _soProc32(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0, int v1); + void _soProc42(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0); void _soProc38(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int cmd, int value); void _soProc40(VoiceTypeStruct *vtStruct, int channelNum, int pitchBlend); void _soDoTrackCommand(int channelNum, int command, int value); @@ -445,7 +445,7 @@ public: virtual const GroupData *getGroupData(); virtual void installPatch(const byte *data, int size); virtual int setMasterVolume(int volume); - virtual void proc32(Sound *sound, int channel, int program, int v0, int v1); + virtual void proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1); virtual void updateVoice(int channel); virtual void proc38(int channel, int cmd, int value); virtual void setPitch(int channel, int pitchBlend); @@ -492,7 +492,7 @@ public: virtual const GroupData *getGroupData(); virtual void poll(); virtual int setMasterVolume(int volume); - virtual void proc32(Sound *sound, int channel, int program, int v0, int v1); + virtual void proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1); virtual void updateVoice(int channel); virtual void proc38(int channel, int cmd, int value); virtual void proc42(int channel, int cmd, int value, int *v1, int *v2); -- cgit v1.2.3 From a877167bfef8189bb0f8aa8483bc70d0f292106b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 27 Jul 2011 19:38:10 +1000 Subject: TSAGE: Beginning of implementation of Fx method #32 --- engines/tsage/sound.cpp | 25 ++++++++++++++----------- engines/tsage/sound.h | 3 ++- 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index d31dba21d3..3f02d635ab 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2796,11 +2796,11 @@ AdlibFxSoundDriver::AdlibFxSoundDriver(): SoundDriver() { _groupData.groupMask = 1; _groupData.v1 = 0x3E; _groupData.v2 = 0; - _groupData.pData = &adlib_group_data[0]; + _groupData.pData = &adlibFx_group_data[0]; _mixer = _vm->_mixer; _sampleRate = _mixer->getOutputRate(); - _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); +// _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); /* Common::set_to(_channelVoiced, _channelVoiced + ADLIB_CHANNEL_COUNT, false); memset(_channelVolume, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); @@ -2817,7 +2817,7 @@ AdlibFxSoundDriver::AdlibFxSoundDriver(): SoundDriver() { } AdlibFxSoundDriver::~AdlibFxSoundDriver() { - _mixer->stopHandle(_soundHandle); +// _mixer->stopHandle(_soundHandle); } bool AdlibFxSoundDriver::open() { @@ -2866,23 +2866,26 @@ int AdlibFxSoundDriver::setMasterVolume(int volume) { } void AdlibFxSoundDriver::proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { - if (program == -1) + if (program != -1) return; - if (_sound) + // If sound data has been previously set, then release it + if (_channelData) updateVoice(channel); - // TODO: Stuff - - + // Set the new channel data + _channelData = channelData + dataOffset; + _soundData = _channelData + 18; + // Start the new sound + debug("Start sound"); } void AdlibFxSoundDriver::updateVoice(int channel) { - if (_sound) { + if (_channelData) { write(208); - _sound = NULL; + _channelData = NULL; _v45062 = 0; _v45066 = 0; _v45068 = 0; @@ -2902,7 +2905,7 @@ void AdlibFxSoundDriver::proc42(int channel, int cmd, int value, int *v1, int *v *v2 = 0; _v4506B = 0; - if (!_sound) + if (!_channelData) *v2 = 1; } diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 05cbb86114..923b3e05f2 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -475,7 +475,8 @@ private: bool _v45046; byte _masterVolume; byte _channelVolume; - Sound *_sound; + const byte *_channelData; + const byte *_soundData; void write(int v); void flush(); -- cgit v1.2.3 From 034bbde2046ec2db0fdd746e032ca7f19f00f4fe Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 27 Jul 2011 22:07:48 +1000 Subject: TSAGE: Fix problem with sound Fx start method being called multiple times --- engines/tsage/sound.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 3f02d635ab..87c31c3433 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2301,6 +2301,7 @@ void Sound::_soServiceTrackType1(int trackIndex, const byte *channelData) { driver->proc32(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), 0x7f); driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), _loop ? 1 : 0, &v1, &v2); + _trkState[trackIndex] = 2; } } else { for (uint entryIndex = 0; entryIndex < vtStruct->_entries.size(); ++entryIndex) { -- cgit v1.2.3 From 0034257976dc2ad5c91cb3825021681c4919811f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 27 Jul 2011 22:20:29 +1000 Subject: TSAGE: Sound Fx is now playing --- engines/tsage/sound.cpp | 65 +++++++++++++++---------------------------------- engines/tsage/sound.h | 11 ++------- 2 files changed, 22 insertions(+), 54 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 87c31c3433..0e763cd0c3 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -20,6 +20,7 @@ * */ +#include "audio/decoders/raw.h" #include "common/config-manager.h" #include "tsage/core.h" #include "tsage/globals.h" @@ -158,9 +159,7 @@ Common::List &SoundManager::buildDriverList(bool detectFlag) { void SoundManager::installConfigDrivers() { installDriver(ADLIB_DRIVER_NUM); -#ifdef DEBUG installDriver(SBLASTER_DRIVER_NUM); -#endif } Common::List &SoundManager::getDriverList(bool detectFlag) { @@ -2801,6 +2800,7 @@ AdlibFxSoundDriver::AdlibFxSoundDriver(): SoundDriver() { _mixer = _vm->_mixer; _sampleRate = _mixer->getOutputRate(); + _audioStream = NULL; // _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); /* Common::set_to(_channelVoiced, _channelVoiced + ADLIB_CHANNEL_COUNT, false); @@ -2818,7 +2818,7 @@ AdlibFxSoundDriver::AdlibFxSoundDriver(): SoundDriver() { } AdlibFxSoundDriver::~AdlibFxSoundDriver() { -// _mixer->stopHandle(_soundHandle); + _mixer->stopHandle(_soundHandle); } bool AdlibFxSoundDriver::open() { @@ -2878,14 +2878,28 @@ void AdlibFxSoundDriver::proc32(const byte *channelData, int dataOffset, int pro _channelData = channelData + dataOffset; _soundData = _channelData + 18; + // Make a copy of the buffer + int dataSize = _vm->_memoryManager.getSize(channelData); + byte *soundData = (byte *)malloc(dataSize - dataOffset); + Common::copy(_channelData, _channelData + (dataSize - dataOffset), soundData); + + _audioStream = Audio::makeQueuingAudioStream(11025, false); + _audioStream->queueBuffer(soundData, dataSize - dataOffset, DisposeAfterUse::YES, Audio::FLAG_UNSIGNED); + // Start the new sound - debug("Start sound"); + if (!_mixer->isSoundHandleActive(_soundHandle)) + _mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle, _audioStream); } void AdlibFxSoundDriver::updateVoice(int channel) { if (_channelData) { write(208); - +/* + if (_audioStream && _audioStream->numQueuedStreams() != 0) { + _mixer->stopAll(); + _audioStream = NULL; + } +*/ _channelData = NULL; _v45062 = 0; _v45066 = 0; @@ -2911,46 +2925,7 @@ void AdlibFxSoundDriver::proc42(int channel, int cmd, int value, int *v1, int *v } void AdlibFxSoundDriver::write(int v) { - /* - port[adlib_port + 12] = v; - for (int i = 0; i < 100; ++i) { - if (!port[adlib_port + 12] & 0x80) - break; - } - */ -} - -void AdlibFxSoundDriver::flush() { - Common::StackLock slock(SoundManager::sfManager()._serverDisabledMutex); - - // No data output yet -} - - - -int AdlibFxSoundDriver::readBuffer(int16 *buffer, const int numSamples) { - update(buffer, numSamples); - return numSamples; -} - -void AdlibFxSoundDriver::update(int16 *buf, int len) { -/* - static int samplesLeft = 0; - while (len != 0) { - int count = samplesLeft; - if (count > len) { - count = len; - } - samplesLeft -= count; - len -= count; - YM3812UpdateOne(_opl, buf, count); - if (samplesLeft == 0) { - flush(); - samplesLeft = _sampleRate / 50; - } - buf += count; - } -*/ + // No implementation } void AdlibFxSoundDriver::write209() { diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 923b3e05f2..b3403f2145 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -459,12 +459,13 @@ public: void update(int16 *buf, int len); }; -class AdlibFxSoundDriver: public SoundDriver, Audio::AudioStream { +class AdlibFxSoundDriver: public SoundDriver { private: Common::Queue _queue; GroupData _groupData; Audio::Mixer *_mixer; Audio::SoundHandle _soundHandle; + Audio::QueuingAudioStream *_audioStream; int _sampleRate; int _v45062; @@ -497,14 +498,6 @@ public: virtual void updateVoice(int channel); virtual void proc38(int channel, int cmd, int value); virtual void proc42(int channel, int cmd, int value, int *v1, int *v2); - - // AudioStream interface - virtual int readBuffer(int16 *buffer, const int numSamples); - virtual bool isStereo() const { return false; } - virtual bool endOfData() const { return false; } - virtual int getRate() const { return _sampleRate; } - - void update(int16 *buf, int len); }; -- cgit v1.2.3 From 4778bf99eb358df0ba315ac95df3a422c6a94604 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 27 Jul 2011 22:24:06 +1000 Subject: TSAGE: Added sound debugger command --- engines/tsage/debugger.cpp | 14 ++++++++++++++ engines/tsage/debugger.h | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index 9277fd429a..00cd61ae07 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -38,6 +38,7 @@ Debugger::Debugger() : GUI::Debugger() { DCmd_Register("listobjects", WRAP_METHOD(Debugger, Cmd_ListObjects)); DCmd_Register("moveobject", WRAP_METHOD(Debugger, Cmd_MoveObject)); DCmd_Register("hotspots", WRAP_METHOD(Debugger, Cmd_Hotspots)); + DCmd_Register("sound", WRAP_METHOD(Debugger, Cmd_Sound)); } static int strToInt(const char *s) { @@ -434,5 +435,18 @@ bool Debugger::Cmd_Hotspots(int argc, const char **argv) { return false; } +/** + * Play the specified sound + */ +bool Debugger::Cmd_Sound(int argc, const char **argv) { + if (argc != 2) { + DebugPrintf("Usage: %s \n", argv[0]); + return true; + } + + int soundNum = strToInt(argv[1]); + _globals->_soundHandler.play(soundNum); + return false; +} } // End of namespace tSage diff --git a/engines/tsage/debugger.h b/engines/tsage/debugger.h index 3c14cd7bed..44fd61ec5e 100644 --- a/engines/tsage/debugger.h +++ b/engines/tsage/debugger.h @@ -42,8 +42,8 @@ protected: bool Cmd_ClearFlag(int argc, const char **argv); bool Cmd_ListObjects(int argc, const char **argv); bool Cmd_MoveObject(int argc, const char **argv); - bool Cmd_Hotspots(int argc, const char **argv); + bool Cmd_Sound(int argc, const char **argv); }; } // End of namespace tSage -- cgit v1.2.3 From 30005b450bc2b503dc7b43ea351e6e3621882f84 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 28 Jul 2011 20:42:29 +1000 Subject: TSAGE: Clarified some method names in the sound code --- engines/tsage/sound.cpp | 48 +++++++++++++++++++++++------------------------- engines/tsage/sound.h | 10 +++++----- 2 files changed, 28 insertions(+), 30 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 0e763cd0c3..3d725a4522 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -1969,9 +1969,9 @@ void Sound::_soServiceTrackType0(int trackIndex, const byte *channelData) { if (channelNum != -1) { if (voiceType != VOICETYPE_0) { if (chFlags & 0x10) - _soProc42(vtStruct, channelData, channelNum, chVoiceType, v); + _soPlaySound2(vtStruct, channelData, channelNum, chVoiceType, v); else - _soProc32(vtStruct, channelData, channelNum, chVoiceType, v, b); + _soPlaySound(vtStruct, channelData, channelNum, chVoiceType, v, b); } else if (voiceNum != -1) { assert(driver); driver->proc20(voiceNum, chVoiceType); @@ -2139,7 +2139,7 @@ void Sound::_soUpdateDamper(VoiceTypeStruct *voiceType, int channelNum, VoiceTyp } } -void Sound::_soProc32(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0, int v1) { +void Sound::_soPlaySound(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0, int v1) { int entryIndex = _soFindSound(vtStruct, channelNum); if (entryIndex != -1) { SoundDriver *driver = vtStruct->_entries[entryIndex]._driver; @@ -2149,11 +2149,11 @@ void Sound::_soProc32(VoiceTypeStruct *vtStruct, const byte *channelData, int ch vtStruct->_entries[entryIndex]._type1._field4 = v0; vtStruct->_entries[entryIndex]._type1._field5 = 0; - driver->proc32(channelData, 0, _chProgram[channelNum], vtStruct->_entries[entryIndex]._voiceNum, v0, v1); + driver->playSound(channelData, 0, _chProgram[channelNum], vtStruct->_entries[entryIndex]._voiceNum, v0, v1); } } -void Sound::_soProc42(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0) { +void Sound::_soPlaySound2(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0) { for (int trackCtr = 0; trackCtr < _trackInfo._numTracks; ++trackCtr) { const byte *instrument = _channelData[trackCtr]; if ((*(instrument + 13) == v0) && (*instrument == 1)) { @@ -2168,7 +2168,7 @@ void Sound::_soProc42(VoiceTypeStruct *vtStruct, const byte *channelData, int ch vtStruct->_entries[entryIndex]._type1._field5 = 0; int v1, v2; - driver->proc32(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, v0, 0x7F); + driver->playSound(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, v0, 0x7F); driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, voiceType, 0, &v1, &v2); } break; @@ -2297,7 +2297,7 @@ void Sound::_soServiceTrackType1(int trackIndex, const byte *channelData) { vtStruct->_entries[entryIndex]._type1._field5 = 0; int v1, v2; - driver->proc32(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), 0x7f); + driver->playSound(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), 0x7f); driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), _loop ? 1 : 0, &v1, &v2); _trkState[trackIndex] = 2; @@ -2309,9 +2309,9 @@ void Sound::_soServiceTrackType1(int trackIndex, const byte *channelData) { if ((vse._sound == this) && (vse._channelNum == channel) && (vse._field4 == vtStruct->_total)) { SoundDriver *driver = vte._driver; - int v1, v2; - driver->proc42(vte._voiceNum, vtStruct->_total, _loop ? 1 : 0, &v1, &v2); - if (v2) { + int v1, isEnded; + driver->proc42(vte._voiceNum, vtStruct->_total, _loop ? 1 : 0, &v1, &isEnded); + if (isEnded) { _trkState[trackIndex] = 0; } else if (vtStruct->_total) { _timer = 0; @@ -2566,7 +2566,7 @@ int AdlibSoundDriver::setMasterVolume(int volume) { return oldVolume; } -void AdlibSoundDriver::proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { +void AdlibSoundDriver::playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { if (program == -1) return; @@ -2866,7 +2866,7 @@ int AdlibFxSoundDriver::setMasterVolume(int volume) { return oldVolume; } -void AdlibFxSoundDriver::proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { +void AdlibFxSoundDriver::playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { if (program != -1) return; @@ -2892,19 +2892,7 @@ void AdlibFxSoundDriver::proc32(const byte *channelData, int dataOffset, int pro } void AdlibFxSoundDriver::updateVoice(int channel) { - if (_channelData) { - write(208); -/* - if (_audioStream && _audioStream->numQueuedStreams() != 0) { - _mixer->stopAll(); - _audioStream = NULL; - } -*/ - _channelData = NULL; - _v45062 = 0; - _v45066 = 0; - _v45068 = 0; - } + // No implementation } void AdlibFxSoundDriver::proc38(int channel, int cmd, int value) { @@ -2920,7 +2908,17 @@ void AdlibFxSoundDriver::proc42(int channel, int cmd, int value, int *v1, int *v *v2 = 0; _v4506B = 0; + // Note: Checking whether a playing Fx sound had finished was originally done in another + // method in the sample playing code. But since we're using the ScummVM audio soundsystem, + // it's easier simply to do the check right here + if (_audioStream && _audioStream->endOfStream()) { + delete _audioStream; + _audioStream = NULL; + _channelData = NULL; + } + if (!_channelData) + // Flag that sound isn't playing *v2 = 1; } diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index b3403f2145..244b4ddd53 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -108,7 +108,7 @@ public: virtual void setProgram(int channel, int program) {} // Method #13 virtual void setVolume1(int channel, int v2, int v3, int volume) {} virtual void setPitchBlend(int channel, int pitchBlend) {} // Method #15 - virtual void proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) {}// Method #16 + virtual void playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) {}// Method #16 virtual void updateVoice(int channel) {} // Method #17 virtual void proc36() {} // Method #18 virtual void proc38(int channel, int cmd, int value) {} // Method #19 @@ -349,8 +349,8 @@ public: void _soRemoteReceive(); void _soServiceTrackType0(int trackIndex, const byte *channelData); void _soUpdateDamper(VoiceTypeStruct *voiceType, int channelNum, VoiceType mode, int v0); - void _soProc32(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0, int v1); - void _soProc42(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0); + void _soPlaySound(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0, int v1); + void _soPlaySound2(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0); void _soProc38(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int cmd, int value); void _soProc40(VoiceTypeStruct *vtStruct, int channelNum, int pitchBlend); void _soDoTrackCommand(int channelNum, int command, int value); @@ -445,7 +445,7 @@ public: virtual const GroupData *getGroupData(); virtual void installPatch(const byte *data, int size); virtual int setMasterVolume(int volume); - virtual void proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1); + virtual void playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1); virtual void updateVoice(int channel); virtual void proc38(int channel, int cmd, int value); virtual void setPitch(int channel, int pitchBlend); @@ -494,7 +494,7 @@ public: virtual const GroupData *getGroupData(); virtual void poll(); virtual int setMasterVolume(int volume); - virtual void proc32(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1); + virtual void playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1); virtual void updateVoice(int channel); virtual void proc38(int channel, int cmd, int value); virtual void proc42(int channel, int cmd, int value, int *v1, int *v2); -- cgit v1.2.3 From 53e5522e5a895ba8bdd7fc20b03d0c67bc840eeb Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 28 Jul 2011 21:36:15 +1000 Subject: TSAGE: Fixed a problem with only the first Fx sound being played --- engines/tsage/sound.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 3d725a4522..da70ea2ab7 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2306,16 +2306,17 @@ void Sound::_soServiceTrackType1(int trackIndex, const byte *channelData) { for (uint entryIndex = 0; entryIndex < vtStruct->_entries.size(); ++entryIndex) { VoiceStructEntry &vte = vtStruct->_entries[entryIndex]; VoiceStructEntryType1 &vse = vte._type1; - if ((vse._sound == this) && (vse._channelNum == channel) && (vse._field4 == vtStruct->_total)) { + if ((vse._sound == this) && (vse._channelNum == channel) && (vse._field4 == *(channelData + 1))) { SoundDriver *driver = vte._driver; - int v1, isEnded; - driver->proc42(vte._voiceNum, vtStruct->_total, _loop ? 1 : 0, &v1, &isEnded); + int isEnded, resetTimer; + driver->proc42(vte._voiceNum, vtStruct->_total, _loop ? 1 : 0, &isEnded, &resetTimer); if (isEnded) { _trkState[trackIndex] = 0; - } else if (vtStruct->_total) { + } else if (resetTimer) { _timer = 0; } + return; } } @@ -2911,15 +2912,18 @@ void AdlibFxSoundDriver::proc42(int channel, int cmd, int value, int *v1, int *v // Note: Checking whether a playing Fx sound had finished was originally done in another // method in the sample playing code. But since we're using the ScummVM audio soundsystem, // it's easier simply to do the check right here - if (_audioStream && _audioStream->endOfStream()) { - delete _audioStream; + if (_audioStream && (_audioStream->numQueuedStreams() == 0)) { + _mixer->stopHandle(_soundHandle); _audioStream = NULL; _channelData = NULL; } if (!_channelData) // Flag that sound isn't playing - *v2 = 1; + *v1 = 1; + + // TODO: v2 is used for flagging a reset of the timer. I'm not sure if it's needed + *v2 = 0; } void AdlibFxSoundDriver::write(int v) { -- cgit v1.2.3 From 95b49a4cc3c74bc8e7f54f27a1306fd2ed597c91 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 29 Jul 2011 19:57:29 +1000 Subject: TSAGE: Removed no longer needed fields from the Fx sound driver --- engines/tsage/sound.cpp | 60 ++----------------------------------------------- engines/tsage/sound.h | 15 ------------- 2 files changed, 2 insertions(+), 73 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index da70ea2ab7..2f2f550614 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2802,20 +2802,6 @@ AdlibFxSoundDriver::AdlibFxSoundDriver(): SoundDriver() { _mixer = _vm->_mixer; _sampleRate = _mixer->getOutputRate(); _audioStream = NULL; -// _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); -/* - Common::set_to(_channelVoiced, _channelVoiced + ADLIB_CHANNEL_COUNT, false); - memset(_channelVolume, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); - memset(_v4405E, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); - memset(_v44067, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); - memset(_v44070, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); - memset(_v44079, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); - memset(_v44082, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); - _v44082[ADLIB_CHANNEL_COUNT] = 0x90; - Common::set_to(_pitchBlend, _pitchBlend + ADLIB_CHANNEL_COUNT, 0x2000); - memset(_v4409E, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); - _patchData = NULL; -*/ } AdlibFxSoundDriver::~AdlibFxSoundDriver() { @@ -2823,26 +2809,13 @@ AdlibFxSoundDriver::~AdlibFxSoundDriver() { } bool AdlibFxSoundDriver::open() { - write209(); - write(64); - write(165); - - // for (int idx = 0; idx < 5000 * 16; ++idx) al = port[21h] - -// _v45071 = 1; -// _v4506F = 0; - return true; } void AdlibFxSoundDriver::close() { - write(208); - write211(); - } bool AdlibFxSoundDriver::reset() { - return true; } @@ -2850,16 +2823,6 @@ const GroupData *AdlibFxSoundDriver::getGroupData() { return &_groupData; } -void AdlibFxSoundDriver::poll() { - if (!_masterVolume || !_channelVolume) { - if (_v45046) - write211(); - } else { - if (!_v45046) - write209(); - } -} - int AdlibFxSoundDriver::setMasterVolume(int volume) { int oldVolume = _masterVolume; _masterVolume = volume; @@ -2877,7 +2840,6 @@ void AdlibFxSoundDriver::playSound(const byte *channelData, int dataOffset, int // Set the new channel data _channelData = channelData + dataOffset; - _soundData = _channelData + 18; // Make a copy of the buffer int dataSize = _vm->_memoryManager.getSize(channelData); @@ -2904,10 +2866,9 @@ void AdlibFxSoundDriver::proc38(int channel, int cmd, int value) { } void AdlibFxSoundDriver::proc42(int channel, int cmd, int value, int *v1, int *v2) { - _v4506A = value; - *v1 = _v4506B; + // TODO: v2 is used for flagging a reset of the timer. I'm not sure if it's needed + *v1 = 0; *v2 = 0; - _v4506B = 0; // Note: Checking whether a playing Fx sound had finished was originally done in another // method in the sample playing code. But since we're using the ScummVM audio soundsystem, @@ -2921,23 +2882,6 @@ void AdlibFxSoundDriver::proc42(int channel, int cmd, int value, int *v1, int *v if (!_channelData) // Flag that sound isn't playing *v1 = 1; - - // TODO: v2 is used for flagging a reset of the timer. I'm not sure if it's needed - *v2 = 0; -} - -void AdlibFxSoundDriver::write(int v) { - // No implementation -} - -void AdlibFxSoundDriver::write209() { - write(209); - _v45046 = true; -} - -void AdlibFxSoundDriver::write211() { - write(211); - _v45046 = false; } } // End of namespace tSage diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 244b4ddd53..295ad3dd33 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -461,29 +461,15 @@ public: class AdlibFxSoundDriver: public SoundDriver { private: - Common::Queue _queue; GroupData _groupData; Audio::Mixer *_mixer; Audio::SoundHandle _soundHandle; Audio::QueuingAudioStream *_audioStream; int _sampleRate; - int _v45062; - int _v45066; - int _v45068; - int _v4506A; - int _v4506B; - bool _v45046; byte _masterVolume; byte _channelVolume; const byte *_channelData; - const byte *_soundData; - - void write(int v); - void flush(); - void sub_4556E(); - void write209(); - void write211(); public: AdlibFxSoundDriver(); virtual ~AdlibFxSoundDriver(); @@ -492,7 +478,6 @@ public: virtual void close(); virtual bool reset(); virtual const GroupData *getGroupData(); - virtual void poll(); virtual int setMasterVolume(int volume); virtual void playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1); virtual void updateVoice(int channel); -- cgit v1.2.3 From c1870551b07b0ea16ecfc4bd8e1ce7175a08978e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 29 Jul 2011 20:05:02 +1000 Subject: TSAGE: Renamed AdlibFxSoundDriver to a more accurate SoundBlasterDriver --- engines/tsage/sound.cpp | 28 ++++++++++++++-------------- engines/tsage/sound.h | 6 +++--- 2 files changed, 17 insertions(+), 17 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 2f2f550614..2d51d5dedf 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -228,7 +228,7 @@ SoundDriver *SoundManager::instantiateDriver(int driverNum) { case ADLIB_DRIVER_NUM: return new AdlibSoundDriver(); case SBLASTER_DRIVER_NUM: - return new AdlibFxSoundDriver(); + return new SoundBlasterDriver(); default: error("Unknown sound driver - %d", driverNum); } @@ -2786,10 +2786,10 @@ int AdlibSoundDriver::readBuffer(int16 *buffer, const int numSamples) { /*--------------------------------------------------------------------------*/ -const byte adlibFx_group_data[] = { 3, 1, 1, 0, 0xff }; +const byte soundBlaster_group_data[] = { 3, 1, 1, 0, 0xff }; -AdlibFxSoundDriver::AdlibFxSoundDriver(): SoundDriver() { +SoundBlasterDriver::SoundBlasterDriver(): SoundDriver() { _minVersion = 0x102; _maxVersion = 0x10A; _masterVolume = 0; @@ -2797,40 +2797,40 @@ AdlibFxSoundDriver::AdlibFxSoundDriver(): SoundDriver() { _groupData.groupMask = 1; _groupData.v1 = 0x3E; _groupData.v2 = 0; - _groupData.pData = &adlibFx_group_data[0]; + _groupData.pData = &soundBlaster_group_data[0]; _mixer = _vm->_mixer; _sampleRate = _mixer->getOutputRate(); _audioStream = NULL; } -AdlibFxSoundDriver::~AdlibFxSoundDriver() { +SoundBlasterDriver::~SoundBlasterDriver() { _mixer->stopHandle(_soundHandle); } -bool AdlibFxSoundDriver::open() { +bool SoundBlasterDriver::open() { return true; } -void AdlibFxSoundDriver::close() { +void SoundBlasterDriver::close() { } -bool AdlibFxSoundDriver::reset() { +bool SoundBlasterDriver::reset() { return true; } -const GroupData *AdlibFxSoundDriver::getGroupData() { +const GroupData *SoundBlasterDriver::getGroupData() { return &_groupData; } -int AdlibFxSoundDriver::setMasterVolume(int volume) { +int SoundBlasterDriver::setMasterVolume(int volume) { int oldVolume = _masterVolume; _masterVolume = volume; return oldVolume; } -void AdlibFxSoundDriver::playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { +void SoundBlasterDriver::playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) { if (program != -1) return; @@ -2854,18 +2854,18 @@ void AdlibFxSoundDriver::playSound(const byte *channelData, int dataOffset, int _mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle, _audioStream); } -void AdlibFxSoundDriver::updateVoice(int channel) { +void SoundBlasterDriver::updateVoice(int channel) { // No implementation } -void AdlibFxSoundDriver::proc38(int channel, int cmd, int value) { +void SoundBlasterDriver::proc38(int channel, int cmd, int value) { if (cmd == 7) { // Set channel volume _channelVolume = value; } } -void AdlibFxSoundDriver::proc42(int channel, int cmd, int value, int *v1, int *v2) { +void SoundBlasterDriver::proc42(int channel, int cmd, int value, int *v1, int *v2) { // TODO: v2 is used for flagging a reset of the timer. I'm not sure if it's needed *v1 = 0; *v2 = 0; diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 295ad3dd33..702a2776f7 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -459,7 +459,7 @@ public: void update(int16 *buf, int len); }; -class AdlibFxSoundDriver: public SoundDriver { +class SoundBlasterDriver: public SoundDriver { private: GroupData _groupData; Audio::Mixer *_mixer; @@ -471,8 +471,8 @@ private: byte _channelVolume; const byte *_channelData; public: - AdlibFxSoundDriver(); - virtual ~AdlibFxSoundDriver(); + SoundBlasterDriver(); + virtual ~SoundBlasterDriver(); virtual bool open(); virtual void close(); -- cgit v1.2.3 From 9f00f18e4efd84202146d683abc007508ca0f222 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 29 Jul 2011 20:08:56 +1000 Subject: TSAGE: Explicitly call the mixer stopAll() when shutting down --- engines/tsage/sound.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 2d51d5dedf..60b11e3f8c 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -54,6 +54,7 @@ SoundManager::SoundManager() { SoundManager::~SoundManager() { if (__sndmgrReady) { Common::StackLock slock(_serverDisabledMutex); + _vm->_mixer->stopAll(); for (Common::List::iterator i = _soundList.begin(); i != _soundList.end(); ) { Sound *s = *i; -- cgit v1.2.3 From 4a64e928cf07e8333312a5d74a72034d56aee2fe Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 30 Jul 2011 08:56:16 +1000 Subject: TSAGE: Add missing dispatch method to fix getting shot too quickly in Scene #40 --- engines/tsage/ringworld_scenes1.cpp | 18 ++++++++++++++++++ engines/tsage/ringworld_scenes1.h | 1 + 2 files changed, 19 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp index 8299a05967..6a82ca7e9d 100644 --- a/engines/tsage/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld_scenes1.cpp @@ -1330,6 +1330,24 @@ void Scene40::Action8::signal() { } } +void Scene40::Action8::dispatch() { + if (_action) + _action->dispatch(); + + if (_delayFrames) { + uint32 frameNumber = _globals->_events.getFrameNumber(); + if ((_startFrame + 60) < frameNumber) { + --_delayFrames; + _startFrame = frameNumber; + + if (_delayFrames <= 0) { + _delayFrames = 0; + signal(); + } + } + } +} + /*--------------------------------------------------------------------------*/ void Scene40::DyingKzin::doAction(int action) { diff --git a/engines/tsage/ringworld_scenes1.h b/engines/tsage/ringworld_scenes1.h index 283cf68e07..229dfc7130 100644 --- a/engines/tsage/ringworld_scenes1.h +++ b/engines/tsage/ringworld_scenes1.h @@ -201,6 +201,7 @@ class Scene40 : public Scene { class Action8 : public Action { public: virtual void signal(); + virtual void dispatch(); }; /* Objects */ -- cgit v1.2.3 From 471815e00c2d5190067d4063d500d1fa9cc0973b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 30 Jul 2011 09:13:47 +1000 Subject: TSAGE: Fix base hotspot classes of hotspots in Scene #40 --- engines/tsage/ringworld_scenes1.cpp | 6 +++--- engines/tsage/ringworld_scenes1.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp index 6a82ca7e9d..ee16464931 100644 --- a/engines/tsage/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld_scenes1.cpp @@ -1434,7 +1434,7 @@ void Scene40::Item2::doAction(int action) { SceneItem::display2(40, 37); break; default: - SceneItem::doAction(action); + SceneHotspot::doAction(action); break; } } @@ -1455,7 +1455,7 @@ void Scene40::Item6::doAction(int action) { SceneItem::display2(40, 36); break; default: - SceneItem::doAction(action); + SceneHotspot::doAction(action); break; } } @@ -1464,7 +1464,7 @@ void Scene40::Item6::doAction(int action) { Scene40::Scene40() : _item1(2, OBJECT_SCANNER, 40, 24, OBJECT_STUNNER, 40, 25, CURSOR_LOOK, 40, 7, CURSOR_USE, 40, 16, LIST_END), - _item3(5, OBJECT_SCANNER, 40, 26, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 9, CURSOR_USE, 40, 17, LIST_END), + _item3(5, OBJECT_SCANNER, 40, 28, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 2, CURSOR_USE, 40, 30, LIST_END), _item4(6, OBJECT_SCANNER, 40, 31, OBJECT_STUNNER, 40, 32, CURSOR_LOOK, 40, 5, CURSOR_USE, 40, 33, LIST_END), _item5(0, CURSOR_LOOK, 40, 11, LIST_END), _item7(4, OBJECT_SCANNER, 40, 26, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 9, CURSOR_USE, 40, 17, LIST_END), diff --git a/engines/tsage/ringworld_scenes1.h b/engines/tsage/ringworld_scenes1.h index 229dfc7130..0f9bf61117 100644 --- a/engines/tsage/ringworld_scenes1.h +++ b/engines/tsage/ringworld_scenes1.h @@ -215,15 +215,15 @@ class Scene40 : public Scene { }; /* Items */ - class Item2 : public SceneItem { + class Item2 : public SceneHotspot { public: virtual void doAction(int action); }; - class Item6 : public SceneItem { + class Item6 : public SceneHotspot { public: virtual void doAction(int action); }; - class Item8 : public SceneItem { + class Item8 : public SceneHotspot { public: virtual void doAction(int action); }; -- cgit v1.2.3 From f482e25f2a7419828351e0eb598247275646b8c2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 30 Jul 2011 09:32:26 +1000 Subject: TSAGE: Fix call to correct base class in Scene #60 items --- engines/tsage/ringworld_scenes1.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp index ee16464931..f97cfa4ae6 100644 --- a/engines/tsage/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld_scenes1.cpp @@ -2289,7 +2289,7 @@ void Scene60::Item::doAction(int action) { setAction(&scene->_sequenceManager, this, 62, NULL); break; default: - SceneItem::doAction(action); + SceneHotspot::doAction(action); break; } } -- cgit v1.2.3 From 5e726f604316d31695dbf289870abfef08c8b9b9 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 30 Jul 2011 19:18:00 +1000 Subject: TSAGE: Tweaks to better detect when a playing sound effect has ended --- engines/tsage/sound.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 60b11e3f8c..69ac426964 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2803,6 +2803,7 @@ SoundBlasterDriver::SoundBlasterDriver(): SoundDriver() { _mixer = _vm->_mixer; _sampleRate = _mixer->getOutputRate(); _audioStream = NULL; + _channelData = NULL; } SoundBlasterDriver::~SoundBlasterDriver() { @@ -2835,6 +2836,8 @@ void SoundBlasterDriver::playSound(const byte *channelData, int dataOffset, int if (program != -1) return; + assert(channel == 0); + // If sound data has been previously set, then release it if (_channelData) updateVoice(channel); @@ -2856,7 +2859,12 @@ void SoundBlasterDriver::playSound(const byte *channelData, int dataOffset, int } void SoundBlasterDriver::updateVoice(int channel) { - // No implementation + // Stop the playing voice + if (_mixer->isSoundHandleActive(_soundHandle)) + _mixer->stopHandle(_soundHandle); + + _audioStream = NULL; + _channelData = NULL; } void SoundBlasterDriver::proc38(int channel, int cmd, int value) { @@ -2875,9 +2883,7 @@ void SoundBlasterDriver::proc42(int channel, int cmd, int value, int *v1, int *v // method in the sample playing code. But since we're using the ScummVM audio soundsystem, // it's easier simply to do the check right here if (_audioStream && (_audioStream->numQueuedStreams() == 0)) { - _mixer->stopHandle(_soundHandle); - _audioStream = NULL; - _channelData = NULL; + updateVoice(channel); } if (!_channelData) -- cgit v1.2.3 From 61472ad2c590a34979a8366bcd7f5db46c54afc6 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 1 Aug 2011 19:33:04 +1000 Subject: TSAGE: Shift mutex locking to resolve a deadlock issue --- engines/tsage/sound.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 69ac426964..e47a0ed572 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -360,9 +360,6 @@ void SoundManager::rethinkVoiceTypes() { } void SoundManager::_sfSoundServer() { - Common::StackLock slock1(sfManager()._serverDisabledMutex); - Common::StackLock slock2(sfManager()._serverSuspendedMutex); - if (sfManager()._needToRethink) { _sfRethinkVoiceTypes(); sfManager()._needToRethink = false; @@ -2760,6 +2757,9 @@ void AdlibSoundDriver::setFrequency(int channel) { } int AdlibSoundDriver::readBuffer(int16 *buffer, const int numSamples) { + Common::StackLock slock1(SoundManager::sfManager()._serverDisabledMutex); + Common::StackLock slock2(SoundManager::sfManager()._serverSuspendedMutex); + int32 samplesLeft = numSamples; memset(buffer, 0, sizeof(int16) * numSamples); while (samplesLeft) { -- cgit v1.2.3 From 78c4675c927e5f227e4dd7d165f950e942b3aad0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 1 Aug 2011 19:45:49 +1000 Subject: TSAGE: SoundBLaster method #38 now actually updates the channel volume --- engines/tsage/sound.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index e47a0ed572..d054949f2d 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2871,6 +2871,7 @@ void SoundBlasterDriver::proc38(int channel, int cmd, int value) { if (cmd == 7) { // Set channel volume _channelVolume = value; + _mixer->setChannelVolume(_soundHandle, (byte)MIN(255, value * 2)); } } -- cgit v1.2.3 From 97c4dd02a2465ecf1a864b0819ecd7d4493b9247 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 1 Aug 2011 21:52:30 +1000 Subject: TSAGE: Fix parameters in various calls to fadeOut method --- engines/tsage/ringworld_scenes3.cpp | 6 +++--- engines/tsage/ringworld_scenes8.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp index 3f9921b0ad..209144766a 100644 --- a/engines/tsage/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld_scenes3.cpp @@ -324,7 +324,7 @@ void Scene2000::Action14::signal() { scene->_stripManager.start(2001, this, scene); break; case 6: - _globals->_soundHandler.fadeOut(0/* was false */); + _globals->_soundHandler.fadeOut(NULL); scene->_object8.setStrip(1); scene->_object8.setFrame(scene->_object8.getFrameCount()); scene->_object8.animate(ANIM_MODE_6, this); @@ -786,7 +786,7 @@ void Scene2100::Action9::signal() { scene->_stripManager.start(6051, this, scene); break; case 4: - scene->_soundHandler.fadeOut(0/* was false */); + scene->_soundHandler.fadeOut(NULL); scene->_object4.setStrip(1); scene->_object4.setFrame(scene->_object4.getFrameCount()); scene->_object4.animate(ANIM_MODE_6, this); @@ -1105,7 +1105,7 @@ void Scene2100::Action14::signal() { scene->_stripManager.start(6009, this, scene); break; case 6: - scene->_soundHandler.fadeOut(0/* was false */); + scene->_soundHandler.fadeOut(NULL); scene->_object4.setStrip(1); scene->_object4.setFrame(scene->_object4.getFrameCount()); scene->_object4.animate(ANIM_MODE_6, this); diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index 2b329b958a..be79e833b4 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -2223,7 +2223,7 @@ void Scene7700::signal() { } break; case 7702: - _soundHandler.fadeOut(0); + _soundHandler.fadeOut(NULL); _globals->_sceneManager.changeScene(7600); break; case 7703: -- cgit v1.2.3 From d71b38b6dec151459dec087ed83a7ab47f62bc1d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 1 Aug 2011 22:03:18 +1000 Subject: TSAGE: Changed debugging statements from warning() to debug() --- engines/tsage/scenes.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index b94e95c696..f6c2c03f64 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -45,7 +45,7 @@ SceneManager::~SceneManager() { } void SceneManager::setNewScene(int sceneNumber) { - warning("SetNewScene(%d)", sceneNumber); + debug(1, "SetNewScene(%d)", sceneNumber); _nextSceneNumber = sceneNumber; } @@ -146,7 +146,7 @@ void SceneManager::fadeInIfNecessary() { } void SceneManager::changeScene(int newSceneNumber) { - warning("changeScene(%d)", newSceneNumber); + debug(1, "changeScene(%d)", newSceneNumber); // Fade out the scene ScenePalette scenePalette; uint32 adjustData = 0; @@ -296,7 +296,7 @@ void Scene::dispatch() { } void Scene::loadScene(int sceneNum) { - warning("loadScene(%d)", sceneNum); + debug(1, "loadScene(%d)", sceneNum); _screenNumber = sceneNum; if (_globals->_scenePalette.loadPalette(sceneNum)) _globals->_sceneManager._hasPalette = true; -- cgit v1.2.3 From 10033ca976feabf365c9378f4156724d76fe64c5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 1 Aug 2011 22:35:32 +1000 Subject: TSAGE: Fix for background music to properly fade when leaving Scene #7700 --- engines/tsage/ringworld_scenes8.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index be79e833b4..d0e7491d4a 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -2223,7 +2223,7 @@ void Scene7700::signal() { } break; case 7702: - _soundHandler.fadeOut(NULL); + _globals->_soundHandler.fadeOut(NULL); _globals->_sceneManager.changeScene(7600); break; case 7703: -- cgit v1.2.3 From 8f70ee9afc877b22123269669d155e710a467c4b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 1 Aug 2011 22:36:21 +1000 Subject: TSAGE: Wait for fading sounds to completely fade when changing scenes --- engines/tsage/scenes.cpp | 5 +++++ engines/tsage/sound.cpp | 16 ++++++++++++++++ engines/tsage/sound.h | 1 + 3 files changed, 22 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index f6c2c03f64..3e23205633 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -173,6 +173,11 @@ void SceneManager::changeScene(int newSceneNumber) { // Blank out the screen _globals->_screenSurface.fillRect(_globals->_screenSurface.getBounds(), 0); + // If there are any fading sounds, wait until fading is complete + while (_globals->_soundManager.isFading()) { + g_system->delayMillis(10); + } + // Set the new scene to be loaded setNewScene(newSceneNumber); } diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index d054949f2d..1754bd71b9 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -451,6 +451,22 @@ void SoundManager::_sfProcessFading() { } } +bool SoundManager::isFading() { + Common::StackLock slock(sfManager()._serverSuspendedMutex); + + // Loop through any active sounds to see if any are being actively faded + Common::List::iterator i = sfManager()._playList.begin(); + while (i != sfManager()._playList.end()) { + Sound *s = *i; + ++i; + + if (s->_fadeDest != -1) + return true; + } + + return false; +} + void SoundManager::_sfUpdateVoiceStructs() { for (int voiceIndex = 0; voiceIndex < SOUND_ARR_SIZE; ++voiceIndex) { VoiceTypeStruct *vs = sfManager()._voiceTypeStructPtrs[voiceIndex]; diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 702a2776f7..46a29e57a4 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -225,6 +225,7 @@ public: int getMasterVol() const; void loadSound(int soundNum, bool showErrors); void unloadSound(int soundNum); + bool isFading(); // _sf methods static SoundManager &sfManager(); -- cgit v1.2.3 From 04139ae1b5489b3b8ab97001f3d8c24a18c3502b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 3 Aug 2011 18:42:05 +1000 Subject: TSAGE: Workaround for original game bug of inventory being available after credits end --- engines/tsage/ringworld_scenes10.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index ba4060548e..839fa0f008 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -1746,7 +1746,8 @@ void Scene9900::strAction2::signal() { frameWidth = _txtArray2[_txtArray1Index].getFrame().getBounds().width(); _txtArray2[_txtArray1Index].setPosition(Common::Point((320 - frameWidth) / 2, 200 + frameHeight)); } else { - _globals->_player.enableControl(); + // WORKAROUND: Fix inventory becoming available at end of credits + _globals->_events.setCursor(CURSOR_WALK); _actionIndex = 3; signal(); } -- cgit v1.2.3 From b9fe3c151fe2a02b596b6366b296ea67023dae94 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 3 Aug 2011 19:44:16 +1000 Subject: TSAGE: Bugfix to correctly display cursor after loading a savegame if appropriate --- engines/tsage/events.cpp | 10 ++++++++++ engines/tsage/events.h | 1 + 2 files changed, 11 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 010117ec78..7aadf62b8d 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -40,6 +40,7 @@ EventsClass::EventsClass() { _priorFrameTime = 0; _prevDelayFrame = 0; _saver->addListener(this); + _saver->addLoadNotifier(&EventsClass::loadNotifierProc); } bool EventsClass::pollEvent() { @@ -315,4 +316,13 @@ void EventsClass::listenerSynchronize(Serializer &s) { } } +void EventsClass::loadNotifierProc(bool postFlag) { + if (postFlag) { + if (_globals->_events._lastCursor == CURSOR_NONE) + _globals->_events._lastCursor = _globals->_events._currentCursor; + else + _globals->_events._lastCursor = CURSOR_NONE; + } +} + } // end of namespace tSage diff --git a/engines/tsage/events.h b/engines/tsage/events.h index e0fbd88745..772de24b5a 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -100,6 +100,7 @@ public: void delay(int numFrames); virtual void listenerSynchronize(Serializer &s); + static void loadNotifierProc(bool postFlag); }; } // End of namespace tSage -- cgit v1.2.3 From 5f2402bd36d98378b73aab4f12f44379e441b533 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 4 Aug 2011 08:35:24 +1000 Subject: TSAGE: Fix incorrect sample data being used in _soPlaySound2. This fixes the playback of the Intruder Alert message in Scene #95. --- engines/tsage/sound.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 1754bd71b9..2121526498 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2176,13 +2176,14 @@ void Sound::_soPlaySound2(VoiceTypeStruct *vtStruct, const byte *channelData, in if (entryIndex != -1) { SoundDriver *driver = vtStruct->_entries[entryIndex]._driver; assert(driver); + byte *trackData = _channelData[trackCtr]; vtStruct->_entries[entryIndex]._type1._field6 = 0; vtStruct->_entries[entryIndex]._type1._field4 = v0; vtStruct->_entries[entryIndex]._type1._field5 = 0; int v1, v2; - driver->playSound(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, v0, 0x7F); + driver->playSound(trackData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, v0, 0x7F); driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, voiceType, 0, &v1, &v2); } break; -- cgit v1.2.3 From 75ca55eaec14cc47a55c091a0d059166682ee6e1 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 5 Aug 2011 19:03:12 +1000 Subject: TSAGE: Updated Ringworld detection entries to ADGF_TESTING --- engines/tsage/detection_tables.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index f9ced562c2..1792d293c3 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -32,7 +32,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("ring.rlb", "466f0e6492d9d0f34d35c5cd088de90f", 37847618), Common::EN_ANY, Common::kPlatformPC, - ADGF_UNSTABLE, + ADGF_TESTING, Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_Ringworld, @@ -46,7 +46,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("ring.rlb", "cb8bba91b30cd172712371d7123bd763", 7427980), Common::ES_ESP, Common::kPlatformPC, - ADGF_UNSTABLE, + ADGF_TESTING, Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_Ringworld, @@ -60,7 +60,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("ring.rlb", "7b7f0c5b37b58fa5ec06ebb2ca0d0d9d", 8438770), Common::EN_ANY, Common::kPlatformPC, - ADGF_UNSTABLE, + ADGF_TESTING, Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_Ringworld, -- cgit v1.2.3 From 4c89f4ac222142341292315afed7bfe70a929b66 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 6 Aug 2011 17:48:37 +1000 Subject: TSAGE: Fix compilation on AmigaOS4 --- engines/tsage/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 2121526498..1d932fd9ba 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2792,7 +2792,7 @@ int AdlibSoundDriver::readBuffer(int16 *buffer, const int numSamples) { } } - int32 render = MIN(samplesLeft, _samplesTillCallback); + int32 render = MIN(samplesLeft, _samplesTillCallback); samplesLeft -= render; _samplesTillCallback -= render; -- cgit v1.2.3 From 78f1ea769060cd631c210fc01020bb921afe3607 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 5 Aug 2011 10:15:20 +0100 Subject: OSYSTEM: extended installTimerProc() with timer ID parameter --- engines/tsage/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 1d932fd9ba..9ee32e4927 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -85,7 +85,7 @@ void SoundManager::postInit() { // it handles updates for both music and Fx. However, since Adlib updates also get done in a // thread, and doesn't get too far ahead, I've left it to the AdlibSoundDriver class to // call the update method, rather than having it be called separately -// g_system->getTimerManager()->installTimerProc(_sfUpdateCallback, 1000000 / SOUND_FREQUENCY, NULL); +// g_system->getTimerManager()->installTimerProc(_sfUpdateCallback, 1000000 / SOUND_FREQUENCY, NULL, "tsageSoundUpdate"); __sndmgrReady = true; } } -- cgit v1.2.3 From 72160f53aaa7d24a381d14976ab6b61bc4fbb744 Mon Sep 17 00:00:00 2001 From: Alyssa Milburn Date: Sat, 6 Aug 2011 17:57:34 +0200 Subject: TSAGE: Remove incorrect endian-specific read in audio code. --- engines/tsage/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 9ee32e4927..b83b39dcf8 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -1357,7 +1357,7 @@ bool SoundManager::_sfInstallDriver(SoundDriver *driver) { sfManager()._installedDrivers.push_back(driver); driver->_groupOffset = driver->getGroupData(); - driver->_groupMask = READ_LE_UINT32(driver->_groupOffset); + driver->_groupMask = driver->_groupOffset->groupMask; _sfExtractGroupMask(); _sfRethinkSoundDrivers(); -- cgit v1.2.3 From 622f8a166c4dd9a3bb2f902e3976edfb1db23c36 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 7 Aug 2011 11:07:02 +1000 Subject: TSAGE: Changed game Id from 'ring' to 'ringworld' This should help avoid name conflicts in the future with the Ring engine --- engines/tsage/detection.cpp | 2 +- engines/tsage/detection_tables.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp index aaa9030a04..c8aa415914 100644 --- a/engines/tsage/detection.cpp +++ b/engines/tsage/detection.cpp @@ -59,7 +59,7 @@ Common::String TSageEngine::getPrimaryFilename() const { static const PlainGameDescriptor tSageGameTitles[] = { { "tsage", "Unknown Tsunami TSAGE-based Game" }, - { "ring", "Ringworld: Revenge of the Patriarch" }, + { "ringworld", "Ringworld: Revenge of the Patriarch" }, { "blueforce", "Blue Force" }, { 0, 0 } }; diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 1792d293c3..7fbfa55c95 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -27,7 +27,7 @@ static const tSageGameDescription gameDescriptions[] = { // Ringworld English CD and First Wave versions { { - "ring", + "ringworld", "CD", AD_ENTRY1s("ring.rlb", "466f0e6492d9d0f34d35c5cd088de90f", 37847618), Common::EN_ANY, @@ -41,7 +41,7 @@ static const tSageGameDescription gameDescriptions[] = { // Ringworld Spanish CD { { - "ring", + "ringworld", "CD", AD_ENTRY1s("ring.rlb", "cb8bba91b30cd172712371d7123bd763", 7427980), Common::ES_ESP, @@ -55,7 +55,7 @@ static const tSageGameDescription gameDescriptions[] = { // Ringworld English Floppy version { { - "ring", + "ringworld", "Floppy", AD_ENTRY1s("ring.rlb", "7b7f0c5b37b58fa5ec06ebb2ca0d0d9d", 8438770), Common::EN_ANY, @@ -69,7 +69,7 @@ static const tSageGameDescription gameDescriptions[] = { // Ringworld English Floppy Demo #1 version { { - "ring", + "ringworld", "Floppy Demo", AD_ENTRY1s("tsage.rlb", "3b3604a97c06c91f3735d3e9d341f63f", 833453), Common::EN_ANY, @@ -84,7 +84,7 @@ static const tSageGameDescription gameDescriptions[] = { // Ringworld English Floppy Demo #2 version { { - "ring", + "ringworld", "Floppy Demo", AD_ENTRY1s("demoring.rlb", "64050e1806203b15bb03876140eb4f56", 832206), Common::EN_ANY, -- cgit v1.2.3 From 2c3b7392b80137eb8e51e2a740d74863fa8ea634 Mon Sep 17 00:00:00 2001 From: Tarek Soliman Date: Sat, 6 Aug 2011 23:33:23 -0500 Subject: TSAGE: Flag CD titles with ADGF_CD --- engines/tsage/detection_tables.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 7fbfa55c95..34aa13ca11 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -32,7 +32,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("ring.rlb", "466f0e6492d9d0f34d35c5cd088de90f", 37847618), Common::EN_ANY, Common::kPlatformPC, - ADGF_TESTING, + ADGF_TESTING | ADGF_CD, Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_Ringworld, @@ -46,7 +46,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("ring.rlb", "cb8bba91b30cd172712371d7123bd763", 7427980), Common::ES_ESP, Common::kPlatformPC, - ADGF_TESTING, + ADGF_TESTING | ADGF_CD, Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_Ringworld, @@ -134,7 +134,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("blue.rlb", "99983f48cb218f1f3760cf2f9a7ef11d", 63863322), Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_CD, Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_BlueForce, -- cgit v1.2.3 From 47f0ce2fa755e0d3a1717981b3528200f4da1235 Mon Sep 17 00:00:00 2001 From: Tarek Soliman Date: Sat, 6 Aug 2011 23:34:44 -0500 Subject: TSAGE: Flag Blue Force with ADGF_UNSTABLE --- engines/tsage/detection_tables.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 34aa13ca11..9e7b853b48 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -120,7 +120,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("blue.rlb", "17eabb456cb1546c66baf1aff387ba6a", 10032614), Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_BlueForce, @@ -134,7 +134,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("blue.rlb", "99983f48cb218f1f3760cf2f9a7ef11d", 63863322), Common::EN_ANY, Common::kPlatformPC, - ADGF_CD, + ADGF_CD | ADGF_UNSTABLE, Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_BlueForce, -- cgit v1.2.3 From 23a0f5318c50cdf3dce19e4de0c98fb5ae1c2618 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Sun, 7 Aug 2011 11:39:54 +0200 Subject: JANITORIAL: Remove trailing empty lines. --- engines/tsage/module.mk | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index aefc8b0992..4f76c107fe 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -34,4 +34,3 @@ endif # Include common rules include $(srcdir)/rules.mk - -- cgit v1.2.3 From 680ef797269c214ccd6fb471f6f82decf3add648 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 7 Aug 2011 23:14:09 +1000 Subject: TSAGE: Implemented title screen of Blue Force --- engines/tsage/blueforce_logic.cpp | 3 + engines/tsage/blueforce_scenes0.cpp | 196 ++++++++++++++++++++++++++++++++++++ engines/tsage/blueforce_scenes0.h | 56 +++++++++++ engines/tsage/module.mk | 1 + engines/tsage/scenes.cpp | 8 ++ engines/tsage/scenes.h | 1 + engines/tsage/sound.cpp | 21 ++++ engines/tsage/sound.h | 12 +++ 8 files changed, 298 insertions(+) create mode 100644 engines/tsage/blueforce_scenes0.cpp create mode 100644 engines/tsage/blueforce_scenes0.h (limited to 'engines/tsage') diff --git a/engines/tsage/blueforce_logic.cpp b/engines/tsage/blueforce_logic.cpp index d266d5e1d9..3cf31b0b0a 100644 --- a/engines/tsage/blueforce_logic.cpp +++ b/engines/tsage/blueforce_logic.cpp @@ -21,6 +21,7 @@ */ #include "tsage/blueforce_logic.h" +#include "tsage/blueforce_scenes0.h" #include "tsage/scenes.h" #include "tsage/tsage.h" #include "tsage/staticres.h" @@ -37,6 +38,8 @@ void BlueForceGame::start() { Scene *BlueForceGame::createScene(int sceneNumber) { switch (sceneNumber) { case 20: + // Tsunami Title Screen + return new BF_Scene20(); case 50: case 60: error("Scene group 0 not implemented"); diff --git a/engines/tsage/blueforce_scenes0.cpp b/engines/tsage/blueforce_scenes0.cpp new file mode 100644 index 0000000000..4a0259cb98 --- /dev/null +++ b/engines/tsage/blueforce_scenes0.cpp @@ -0,0 +1,196 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/blueforce_scenes0.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 20 - Tsunami Title Screen + * + *--------------------------------------------------------------------------*/ + +void BF_Scene20::Action1::signal() { + BF_Scene20 *scene = (BF_Scene20 *)_globals->_sceneManager._scene; + static byte black[3] = { 0, 0, 0 }; + + switch (_actionIndex++) { + case 0: + setDelay(2); + break; + case 1: + _sound.play(1); + _globals->_scenePalette.addRotation(64, 127, -1, 1, this); + break; + case 2: + scene->_object1.setVisage(22); + scene->_object1._strip = 1; + scene->_object1._frame = 1; + scene->_object1.changeZoom(100); + + scene->_object2.setVisage(22); + scene->_object2._strip = 2; + scene->_object2._frame = 1; + scene->_object2.changeZoom(100); + + scene->_object3.setVisage(22); + scene->_object3._strip = 3; + scene->_object3._frame = 1; + scene->_object3.changeZoom(100); + + scene->_object4.setVisage(22); + scene->_object4._strip = 4; + scene->_object4._frame = 1; + scene->_object4.changeZoom(100); + + scene->_object5.setVisage(22); + scene->_object5._strip = 5; + scene->_object5._frame = 1; + scene->_object5.changeZoom(100); + + scene->_object6.setVisage(22); + scene->_object6._strip = 6; + scene->_object6._frame = 1; + scene->_object6.changeZoom(100); + + scene->_object7.setVisage(22); + scene->_object7._strip = 7; + scene->_object7._frame = 1; + scene->_object7.changeZoom(100); + + scene->_object8.setVisage(22); + scene->_object8._strip = 8; + scene->_object8._frame = 1; + scene->_object8.changeZoom(100); + + setDelay(1); + break; + case 3: + _globals->_scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this); + break; + case 4: + setDelay(60); + break; + case 5: + scene->_object2.animate(ANIM_MODE_5, NULL); + scene->_object3.animate(ANIM_MODE_5, NULL); + scene->_object4.animate(ANIM_MODE_5, NULL); + scene->_object5.animate(ANIM_MODE_5, NULL); + scene->_object6.animate(ANIM_MODE_5, NULL); + scene->_object7.animate(ANIM_MODE_5, this); + break; + case 6: + setDelay(120); + break; + case 7: + _globals->_scenePalette.addFader(black, 1, 5, this); + break; + case 8: + _globals->_sceneManager.changeScene(100); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void BF_Scene20::postInit(SceneObjectList *OwnerList) { + loadScene(20); + Scene::postInit(); + setZoomPercents(60, 85, 200, 100); + + preloadVisage(21); + preloadVisage(22); + _scenePalette.loadPalette(1); + _scenePalette.loadPalette(22); + + _object1.postInit(); + _object1.setVisage(21); + _object1._strip = 1; + _object1._frame = 1; + _object1.animate(ANIM_MODE_NONE, NULL); + _object1.setPosition(Common::Point(62, 85)); + _object1.changeZoom(100); + + _object2.postInit(); + _object2.setVisage(21); + _object2._strip = 2; + _object2._frame = 1; + _object2.animate(ANIM_MODE_NONE, NULL); + _object2.setPosition(Common::Point(27, 94)); + _object2.changeZoom(100); + + _object3.postInit(); + _object3.setVisage(21); + _object3._strip = 2; + _object3._frame = 2; + _object3.animate(ANIM_MODE_NONE, NULL); + _object3.setPosition(Common::Point(68, 94)); + _object3.changeZoom(100); + + _object4.postInit(); + _object4.setVisage(21); + _object4._strip = 2; + _object4._frame = 3; + _object4.animate(ANIM_MODE_NONE, NULL); + _object4.setPosition(Common::Point(110, 94)); + _object4.changeZoom(100); + + _object5.postInit(); + _object5.setVisage(21); + _object5._strip = 2; + _object5._frame = 4; + _object5.animate(ANIM_MODE_NONE, NULL); + _object5.setPosition(Common::Point(154, 94)); + _object5.changeZoom(100); + + _object6.postInit(); + _object6.setVisage(21); + _object6._strip = 2; + _object6._frame = 5; + _object6.animate(ANIM_MODE_NONE, NULL); + _object6.setPosition(Common::Point(199, 94)); + _object6.changeZoom(100); + + _object7.postInit(); + _object7.setVisage(21); + _object7._strip = 2; + _object7._frame = 6; + _object7.animate(ANIM_MODE_NONE, NULL); + _object7.setPosition(Common::Point(244, 94)); + _object7.changeZoom(100); + + _object8.postInit(); + _object8.setVisage(21); + _object8._strip = 2; + _object8._frame = 7; + _object8.animate(ANIM_MODE_NONE, NULL); + _object8.setPosition(Common::Point(286, 94)); + _object8.changeZoom(100); + + setAction(&_action1); +} + +} // End of namespace tSage diff --git a/engines/tsage/blueforce_scenes0.h b/engines/tsage/blueforce_scenes0.h new file mode 100644 index 0000000000..06f7912959 --- /dev/null +++ b/engines/tsage/blueforce_scenes0.h @@ -0,0 +1,56 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_SCENES0_H +#define TSAGE_BLUEFORCE_SCENES0_H + +#include "common/scummsys.h" +#include "tsage/blueforce_logic.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" + +namespace tSage { + +class BF_Scene20 : public Scene { + /* Actions */ + class Action1 : public Action { + private: + ASoundExt _sound; + public: + virtual void signal(); + }; +public: + Action1 _action1; + ScenePalette _scenePalette; + SceneObject _object1, _object2, _object3, _object4; + SceneObject _object5, _object6, _object7, _object8; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 4f76c107fe..586699593d 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -2,6 +2,7 @@ MODULE := engines/tsage MODULE_OBJS := \ blueforce_logic.o \ + blueforce_scenes0.o \ converse.o \ core.o \ debugger.o \ diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 3e23205633..9a175ea08f 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -28,6 +28,9 @@ namespace tSage { +// TODO: Doesn't seem to be ever set +const bool _v52C9F = false; + SceneManager::SceneManager() { _scene = NULL; _hasPalette = false; @@ -501,6 +504,11 @@ void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent _zoomPercents[yEnd++] = minPercent; } +byte *Scene::preloadVisage(int resNum) { + assert(!_v52C9F); + return _resourceManager->getResource(RES_VISAGE, resNum, 9999, false); +} + /*--------------------------------------------------------------------------*/ void Game::execute() { diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h index 5845efaec9..665da585f8 100644 --- a/engines/tsage/scenes.h +++ b/engines/tsage/scenes.h @@ -67,6 +67,7 @@ public: void loadBackground(int xAmount, int yAmount); void refreshBackground(int xAmount, int yAmount); void loadSceneData(int sceneNum); + byte *preloadVisage(int resNum); }; class SceneManager : public GameHandler, public SaveListener { diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index b83b39dcf8..dd6ec69790 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2455,6 +2455,27 @@ void ASound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFade _sound.fade(fadeDest, fadeSteps, fadeTicks, stopAfterFadeFlag); } +void ASound::fadeSound(int soundNum) { + play(soundNum, NULL, 0); + fade(127, 5, 1, false, NULL); +} + +/*--------------------------------------------------------------------------*/ + +ASoundExt::ASoundExt(): ASound() { + _soundNum = 0; +} + +void ASoundExt::synchronize(Serializer &s) { + ASound::synchronize(s); + s.syncAsSint16LE(_soundNum); +} + +void ASoundExt::signal() { + if (_soundNum != 0) { + fadeSound(_soundNum); + } +} /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 46a29e57a4..2c9221c27a 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -398,8 +398,20 @@ public: int getVol() const { return _sound.getVol(); } void holdAt(int v) { _sound.holdAt(v); } void release() { _sound.release(); } + void fadeSound(int soundNum); }; +class ASoundExt: public ASound { +public: + int _soundNum; + + ASoundExt(); + virtual Common::String getClassName() { return "ASoundExt"; } + virtual void synchronize(Serializer &s); + virtual void signal(); +}; + + #define ADLIB_CHANNEL_COUNT 9 class AdlibSoundDriver: public SoundDriver, Audio::AudioStream { -- cgit v1.2.3 From 08ad90edf633f17e3168353815704ca50cab5e9e Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Sat, 6 Aug 2011 10:02:06 +0200 Subject: TSAGE: Reduce scope of variable. --- engines/tsage/sound.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index dd6ec69790..efffa70574 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2825,8 +2825,6 @@ int AdlibSoundDriver::readBuffer(int16 *buffer, const int numSamples) { /*--------------------------------------------------------------------------*/ -const byte soundBlaster_group_data[] = { 3, 1, 1, 0, 0xff }; - SoundBlasterDriver::SoundBlasterDriver(): SoundDriver() { _minVersion = 0x102; @@ -2836,7 +2834,8 @@ SoundBlasterDriver::SoundBlasterDriver(): SoundDriver() { _groupData.groupMask = 1; _groupData.v1 = 0x3E; _groupData.v2 = 0; - _groupData.pData = &soundBlaster_group_data[0]; + static byte const group_data[] = { 3, 1, 1, 0, 0xff }; + _groupData.pData = group_data; _mixer = _vm->_mixer; _sampleRate = _mixer->getOutputRate(); -- cgit v1.2.3 From e35b4f20c1041b13361aa2ebc4e758873bb1cee3 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Sun, 7 Aug 2011 14:35:01 +0200 Subject: GRAPHICS: Simplify the interface of Graphics::loadThumbnail(). Now it returns the Surface, so the caller does not need to create one and pass it. --- engines/tsage/saveload.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index 40444cd630..e07964d443 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -249,12 +249,9 @@ bool Saver::readSavegameHeader(Common::InSaveFile *in, tSageSavegameHeader &head while ((ch = (char)in->readByte()) != '\0') header.saveName += ch; // Get the thumbnail - header.thumbnail = new Graphics::Surface(); - if (!Graphics::loadThumbnail(*in, *header.thumbnail)) { - delete header.thumbnail; - header.thumbnail = NULL; + header.thumbnail = Graphics::loadThumbnail(*in); + if (!header.thumbnail) return false; - } // Read in save date/time header.saveYear = in->readSint16LE(); -- cgit v1.2.3 From c9034110363ebc031a37784af913ba107411376d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 11 Aug 2011 22:03:57 +1000 Subject: TSAGE: Added support for reverse palette fading --- engines/tsage/core.cpp | 34 ++++++++++++++++++++++++++++++++-- engines/tsage/core.h | 15 +++++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index d0075d5acf..52c1a5c8be 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1161,6 +1161,20 @@ void PaletteFader::remove() { action->signal(); } +void PaletteFader::setPalette(ScenePalette *palette, int step) { + if (step < 0) { + // Reverse step means moving from dest palette to source, so swap the two palettes + byte tempPal[256 * 3]; + Common::copy(&palette->_palette[0], &palette->_palette[256 * 3], &tempPal[0]); + Common::copy(&this->_palette[0], &this->_palette[256 * 3], &palette->_palette[0]); + Common::copy(&tempPal[0], &tempPal[256 * 3], &this->_palette[0]); + + step = -step; + } + + PaletteModifierCached::setPalette(palette, step); +} + /*--------------------------------------------------------------------------*/ ScenePalette::ScenePalette() { @@ -1314,7 +1328,7 @@ PaletteRotation *ScenePalette::addRotation(int start, int end, int rotationMode, return obj; } -PaletteFader *ScenePalette::addFader(const byte *arrBufferRGB, int palSize, int percent, Action *action) { +PaletteFader *ScenePalette::addFader(const byte *arrBufferRGB, int palSize, int step, Action *action) { PaletteFader *fader = new PaletteFader(); fader->_action = action; for (int i = 0; i < 256 * 3; i += 3) { @@ -1326,7 +1340,7 @@ PaletteFader *ScenePalette::addFader(const byte *arrBufferRGB, int palSize, int arrBufferRGB += 3; } - fader->setPalette(this, percent); + fader->setPalette(this, step); _globals->_scenePalette._listeners.push_back(fader); return fader; } @@ -2274,6 +2288,22 @@ void SceneObject::setup(int visage, int stripFrameNum, int frameNum, int posX, i /*--------------------------------------------------------------------------*/ +void SceneObjectExt2::postInit(SceneObjectList *OwnerList) { + _v8A = -1; + _v8C = -1; + _v8E = -1; + SceneObject::postInit(); +} + +void SceneObjectExt2::synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsSint16LE(_v8A); + s.syncAsSint16LE(_v8C); + s.syncAsSint16LE(_v8E); +} + +/*--------------------------------------------------------------------------*/ + void SceneObjectList::draw() { Common::Array objList; int paneNum = 0; diff --git a/engines/tsage/core.h b/engines/tsage/core.h index b86e2f63fe..959f96bf34 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -287,7 +287,7 @@ public: PaletteModifierCached(); - void setPalette(ScenePalette *palette, int step); + virtual void setPalette(ScenePalette *palette, int step); virtual Common::String getClassName() { return "PaletteModifierCached"; } virtual void synchronize(Serializer &s); }; @@ -323,6 +323,7 @@ public: virtual void synchronize(Serializer &s); virtual void signal(); virtual void remove(); + virtual void setPalette(ScenePalette *palette, int step); }; /*--------------------------------------------------------------------------*/ @@ -356,7 +357,7 @@ public: void clearListeners(); void fade(const byte *adjustData, bool fullAdjust, int percent); PaletteRotation *addRotation(int start, int end, int rotationMode, int duration = 0, Action *action = NULL); - PaletteFader *addFader(const byte *arrBufferRGB, int palSize, int percent, Action *action); + PaletteFader *addFader(const byte *arrBufferRGB, int palSize, int step, Action *action); static void changeBackground(const Rect &bounds, FadeMode fadeMode); @@ -569,6 +570,16 @@ public: virtual Common::String getClassName() { return "SceneObjectExt"; } }; +class SceneObjectExt2: public SceneObject { +public: + int _v88, _v8A, _v8C, _v8E; + + virtual Common::String getClassName() { return "BF100Object"; } + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + + class SceneText : public SceneObject { public: int _fontNumber; -- cgit v1.2.3 From 744f04bf5001bf4220ecec40adc299e00b5792a4 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 11 Aug 2011 22:05:44 +1000 Subject: TSAGE: Implemented new Globals for Blue Force, and beginnings of implementation of Scene 100 (Title Screen) --- engines/tsage/blueforce_logic.cpp | 5 + engines/tsage/blueforce_scenes1.cpp | 195 ++++++++++++++++++++++++++++++++++++ engines/tsage/blueforce_scenes1.h | 73 ++++++++++++++ engines/tsage/events.cpp | 2 +- engines/tsage/globals.cpp | 12 +++ engines/tsage/globals.h | 15 +++ engines/tsage/module.mk | 1 + engines/tsage/scenes.cpp | 8 +- engines/tsage/staticres.cpp | 11 ++ engines/tsage/staticres.h | 12 +++ engines/tsage/tsage.cpp | 6 +- 11 files changed, 335 insertions(+), 5 deletions(-) create mode 100644 engines/tsage/blueforce_scenes1.cpp create mode 100644 engines/tsage/blueforce_scenes1.h (limited to 'engines/tsage') diff --git a/engines/tsage/blueforce_logic.cpp b/engines/tsage/blueforce_logic.cpp index 3cf31b0b0a..cad7609abc 100644 --- a/engines/tsage/blueforce_logic.cpp +++ b/engines/tsage/blueforce_logic.cpp @@ -22,6 +22,7 @@ #include "tsage/blueforce_logic.h" #include "tsage/blueforce_scenes0.h" +#include "tsage/blueforce_scenes1.h" #include "tsage/scenes.h" #include "tsage/tsage.h" #include "tsage/staticres.h" @@ -37,13 +38,17 @@ void BlueForceGame::start() { Scene *BlueForceGame::createScene(int sceneNumber) { switch (sceneNumber) { + /* Scene Group #0 */ case 20: // Tsunami Title Screen return new BF_Scene20(); case 50: case 60: error("Scene group 0 not implemented"); + /* Scene Group #1 */ case 100: + // Tsnunami Title Screen #2 + return new BF_Scene100(); case 109: case 110: case 114: diff --git a/engines/tsage/blueforce_scenes1.cpp b/engines/tsage/blueforce_scenes1.cpp new file mode 100644 index 0000000000..81f7d0ac76 --- /dev/null +++ b/engines/tsage/blueforce_scenes1.cpp @@ -0,0 +1,195 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/config-manager.h" +#include "tsage/blueforce_scenes1.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" +#include "tsage/globals.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 100 - Tsunami Title Screen #2 + * + *--------------------------------------------------------------------------*/ + +void BF_Scene100::Action1::signal() { + static byte black[3] = { 0, 0, 0 }; + + switch (_actionIndex++) { + case 0: + _state = 0; + setDelay(6); + break; + case 1: { + Common::String msg1 = _resourceManager->getMessage(100, _state++); + if (!msg1.compareTo("LASTCREDIT")) { + Common::String msg2 = _resourceManager->getMessage(100, _state++); + setTextStrings(msg1, msg2, this); + } else { + setTextStrings(BF_NAME, BF_ALL_RIGHTS_RESERVED, this); + + Common::Point pt(_sceneText1._position.x, 80); + NpcMover *mover = new NpcMover(); + _sceneText1.addMover(mover, &pt, this); + } + break; + } + case 2: + setDelay(600); + break; + case 3: + BF_GLOBALS._sound1.fade(0, 10, 10, 1, this); + GLOBALS._scenePalette.addFader(black, 1, 2, NULL); + break; + case 4: + error("??exit"); + break; + } +} + +void BF_Scene100::Action1::setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action) { + // Set data for first text control + _sceneText1._fontNumber = 10; + _sceneText1._width = 160; + _sceneText1._textMode = ALIGN_RIGHT; + _sceneText1._color1 = _globals->_fontColors.background; + _sceneText1._color2 = _globals->_fontColors.foreground; + _sceneText1._color3 = _globals->_fontColors.background; + _sceneText1.setup(msg1); + _sceneText1.setFrame2(-1); + _sceneText1.setPosition(Common::Point( + (SCREEN_WIDTH - _sceneText1.getFrame().getBounds().width()) / 2, 202)); + _sceneText1._moveRate = 30; + _sceneText1._moveDiff.y = 1; + + // Set data for second text control + _sceneText2._fontNumber = 10; + _sceneText2._width = _sceneText1._width; + _sceneText2._textMode = _sceneText1._textMode; + _sceneText2._color1 = _globals->_fontColors.background; + _sceneText2._color2 = _globals->_fontColors.foreground; + _sceneText2._color3 = _globals->_fontColors.background; + _sceneText2.setup(msg1); + _sceneText2.setFrame2(-1); + GfxSurface textSurface = _sceneText2.getFrame(); + _sceneText2.setPosition(Common::Point((SCREEN_WIDTH - textSurface.getBounds().width()) / 2, 202)); + _sceneText2._moveRate = 30; + _sceneText2._moveDiff.y = 1; + + _textHeight = textSurface.getBounds().height(); + int yp = -(_textHeight * 2); + + Common::Point pt(_sceneText1._position.x, yp); + NpcMover *mover = new NpcMover(); + _sceneText1.addMover(mover, &pt, action); +} + +void BF_Scene100::Action2::signal() { + BF_Scene100 *scene = (BF_Scene100 *)_globals->_sceneManager._scene; + static byte black[3] = {0, 0, 0}; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._scenePalette.addFader(black, 1, -2, this); + break; + case 1: + setDelay(180); + break; + case 2: { + const char *SEEN_INTRO = "seen_intro"; + if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) { + // First time being played, so will need to show the intro + ConfMan.setBool(SEEN_INTRO, true); + ConfMan.flushToDisk(); + } else { + // Prompt user for whether to start play or watch introduction + _globals->_player.enableControl(); + + if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) { + // Signal to start the game + scene->_index = 190; + remove(); + return; + } + } + + // At this point the introduction needs to start + _globals->_scenePalette.addFader(black, 1, 2, this); + break; + } + case 3: + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +BF_Scene100::BF_Scene100(): Scene() { + _index = 0; +} + +void BF_Scene100::postInit(SceneObjectList *OwnerList) { + BF_GLOBALS._scenePalette.loadPalette(2); + BF_GLOBALS._v51C44 = 1; + Scene::postInit(); + BF_GLOBALS._v51C24 = 200; + + _globals->_player.enableControl(); + _globals->_player.hide(); + _globals->_player.disableControl(); + _index = 109; + + if (BF_GLOBALS._v4CEA2 < 6) { + // Title + loadScene(100); + BF_GLOBALS._sound1.play(2); + setAction(&_action2, this); + } else { + // Credits + loadScene(101); + BF_GLOBALS._sound1.play(118); + setAction(&_action1, this); + } + + loadScene(20); + setZoomPercents(60, 85, 200, 100); +} + +void BF_Scene100::signal() { + ++_sceneMode; + if (BF_GLOBALS._v4CEA2 < 6) { + BF_GLOBALS._scenePalette.clearListeners(); + BF_GLOBALS._scenePalette.loadPalette(100); + BF_GLOBALS._sceneManager.changeScene(_index); + } else { + if (_sceneMode > 1) + BF_GLOBALS._events.setCursor(CURSOR_ARROW); + + setAction(this, &_action1, this); + } +} + +} // End of namespace tSage diff --git a/engines/tsage/blueforce_scenes1.h b/engines/tsage/blueforce_scenes1.h new file mode 100644 index 0000000000..d9fcc486c6 --- /dev/null +++ b/engines/tsage/blueforce_scenes1.h @@ -0,0 +1,73 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_SCENES1_H +#define TSAGE_BLUEFORCE_SCENES1_H + +#include "common/scummsys.h" +#include "tsage/blueforce_logic.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" + +namespace tSage { + +class BF_Scene100: public Scene { + /* Actions */ + class Action1: public ActionExt { + private: + void setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action); + public: + SceneText _sceneText1, _sceneText2; + int _textHeight; + + virtual Common::String getClassName() { return "BF100Action1"; } + virtual void synchronize(Serializer &s) { + ActionExt::synchronize(s); + s.syncAsSint16LE(_textHeight); + } + virtual void signal(); + }; + class Action2: public ActionExt { + public: + virtual Common::String getClassName() { return "BF100Action2"; } + virtual void signal(); + }; +public: + SequenceManager _sequenceManager; + Action1 _action1; + Action2 _action2; + ScenePalette _scenePalette; + SceneObjectExt2 _object1, _object2, _object3, _object4, _object5; + int _index; + + BF_Scene100(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 7aadf62b8d..59894f3300 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -155,7 +155,7 @@ void EventsClass::setCursor(CursorType cursorType) { // No cursor _globals->setFlag(122); - if (_vm->getFeatures() & GF_DEMO) { + if ((_vm->getFeatures() & GF_DEMO) || (_vm->getGameID() == GType_BlueForce)) { CursorMan.showMouse(false); return; } diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 34b26ec311..e5572d9058 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -166,5 +166,17 @@ void Globals::dispatchSounds() { Common::for_each(_sounds.begin(), _sounds.end(), Globals::dispatchSound); } +/*--------------------------------------------------------------------------*/ + +BlueForceGlobals::BlueForceGlobals(): Globals() { + _v51C24 = 0; + _v51C44 = 1; + _v4CEA2 = 0; +} + +void BlueForceGlobals::synchronize(Serializer &s) { + Globals::synchronize(s); + error("Sync variables"); +} } // end of namespace tSage diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 7cfec718e2..9d12669fa7 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -96,8 +96,23 @@ public: void dispatchSounds(); }; +class BlueForceGlobals: public Globals { +public: + ASound _sound1, _sound2, _sound3; + int _v4CEA2; + int _v51C44; + int _v51C24; + + BlueForceGlobals(); + virtual Common::String getClassName() { return "BFGlobals"; } + virtual void synchronize(Serializer &s); +}; + extern Globals *_globals; +#define GLOBALS (*_globals) +#define BF_GLOBALS (*((BlueForceGlobals *)_globals)) + // Note: Currently this can't be part of the _globals structure, since it needs to be constructed // prior to many of the fields in Globals execute their constructors extern ResourceManager *_resourceManager; diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 586699593d..7ac1795537 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -3,6 +3,7 @@ MODULE := engines/tsage MODULE_OBJS := \ blueforce_logic.o \ blueforce_scenes0.o \ + blueforce_scenes1.o \ converse.o \ core.o \ debugger.o \ diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 9a175ea08f..6a164a6b1e 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -28,9 +28,6 @@ namespace tSage { -// TODO: Doesn't seem to be ever set -const bool _v52C9F = false; - SceneManager::SceneManager() { _scene = NULL; _hasPalette = false; @@ -505,8 +502,13 @@ void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent } byte *Scene::preloadVisage(int resNum) { + // This isn't being used, since modern systems can load the data much quicker, and in any case + // visage data is specially loaded into the Visage class, and the resources discarded from memory. + return NULL; +/* assert(!_v52C9F); return _resourceManager->getResource(RES_VISAGE, resNum, 9999, false); +*/ } /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 9f36268ce3..5d8f1b057f 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -118,4 +118,15 @@ const char *EXIT_BTN_STRING = "Exit"; const char *DEMO_BTN_STRING = "Demo"; const char *DEMO_RESUME_BTN_STRING = "Resume"; +// Blue Force general messages +const char *BF_NAME = "Blue Force"; +const char *BF_COPYRIGHT = " Copyright, 1993 Tsunami Media, Inc."; +const char *BF_ALL_RIGHTS_RESERVED = "All Rights Reserved"; +const char *BF_19840518 = "May 18, 1984"; +const char *BF_19840515 = "May 15, 1984"; +const char *BF_3_DAYS = "Three days later"; +const char *BF_11_YEARS = "Eleven years later."; +const char *BF_NEXT_DAY = "The Next Day"; +const char *BF_ACADEMY = "Here we are at the Academy"; + } // End of namespace tSage diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index fa93511779..bac8976a14 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -86,6 +86,18 @@ extern const char *EXIT_BTN_STRING; extern const char *DEMO_BTN_STRING; extern const char *DEMO_RESUME_BTN_STRING; +// Blue Force messages +extern const char *BF_NAME; +extern const char *BF_COPYRIGHT; +extern const char *BF_ALL_RIGHTS_RESERVED; +extern const char *BF_19840518; +extern const char *BF_19840515; +extern const char *BF_3_DAYS; +extern const char *BF_11_YEARS; +extern const char *BF_NEXT_DAY; +extern const char *BF_ACADEMY; + + } // End of namespace tSage #endif diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 23a0193b7c..3332841188 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -68,18 +68,22 @@ void TSageEngine::initialize() { if (_vm->getFeatures() & GF_DEMO) { // Add the single library file associated with the demo _resourceManager->addLib(getPrimaryFilename()); + _globals = new Globals(); + } else if (_vm->getGameID() == GType_Ringworld) { _resourceManager->addLib("RING.RLB"); _resourceManager->addLib("TSAGE.RLB"); + _globals = new Globals(); + } else if (_vm->getGameID() == GType_BlueForce) { _resourceManager->addLib("BLUE.RLB"); if (_vm->getFeatures() & GF_FLOPPY) { _resourceManager->addLib("FILES.RLB"); _resourceManager->addLib("TSAGE.RLB"); } + _globals = new BlueForceGlobals(); } - _globals = new Globals(); _globals->gfxManager().setDefaults(); // Setup sound settings -- cgit v1.2.3 From e9c8232da864891fafcceb217b291a50096738ce Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 13 Aug 2011 19:49:54 +1000 Subject: TSAGE: Split up the hard-coded logic files for Ringworld and Blue Force into separate sub-folderes --- engines/tsage/blue_force/blueforce_logic.cpp | 128 + engines/tsage/blue_force/blueforce_logic.h | 42 + engines/tsage/blue_force/blueforce_scenes0.cpp | 196 + engines/tsage/blue_force/blueforce_scenes0.h | 56 + engines/tsage/blue_force/blueforce_scenes1.cpp | 195 + engines/tsage/blue_force/blueforce_scenes1.h | 73 + engines/tsage/blueforce_logic.cpp | 128 - engines/tsage/blueforce_logic.h | 42 - engines/tsage/blueforce_scenes0.cpp | 196 - engines/tsage/blueforce_scenes0.h | 56 - engines/tsage/blueforce_scenes1.cpp | 195 - engines/tsage/blueforce_scenes1.h | 73 - engines/tsage/debugger.cpp | 2 +- engines/tsage/dialogs.cpp | 2 +- engines/tsage/globals.cpp | 6 +- engines/tsage/module.mk | 26 +- engines/tsage/ringworld/ringworld_demo.cpp | 120 + engines/tsage/ringworld/ringworld_demo.h | 59 + engines/tsage/ringworld/ringworld_logic.cpp | 1490 ++++++ engines/tsage/ringworld/ringworld_logic.h | 461 ++ engines/tsage/ringworld/ringworld_scenes1.cpp | 3345 +++++++++++++ engines/tsage/ringworld/ringworld_scenes1.h | 538 +++ engines/tsage/ringworld/ringworld_scenes10.cpp | 2089 ++++++++ engines/tsage/ringworld/ringworld_scenes10.h | 532 ++ engines/tsage/ringworld/ringworld_scenes2.cpp | 928 ++++ engines/tsage/ringworld/ringworld_scenes2.h | 149 + engines/tsage/ringworld/ringworld_scenes3.cpp | 6133 ++++++++++++++++++++++++ engines/tsage/ringworld/ringworld_scenes3.h | 895 ++++ engines/tsage/ringworld/ringworld_scenes4.cpp | 250 + engines/tsage/ringworld/ringworld_scenes4.h | 92 + engines/tsage/ringworld/ringworld_scenes5.cpp | 4441 +++++++++++++++++ engines/tsage/ringworld/ringworld_scenes5.h | 693 +++ engines/tsage/ringworld/ringworld_scenes6.cpp | 2200 +++++++++ engines/tsage/ringworld/ringworld_scenes6.h | 330 ++ engines/tsage/ringworld/ringworld_scenes8.cpp | 2545 ++++++++++ engines/tsage/ringworld/ringworld_scenes8.h | 490 ++ engines/tsage/ringworld_demo.cpp | 120 - engines/tsage/ringworld_demo.h | 59 - engines/tsage/ringworld_logic.cpp | 1490 ------ engines/tsage/ringworld_logic.h | 461 -- engines/tsage/ringworld_scenes1.cpp | 3345 ------------- engines/tsage/ringworld_scenes1.h | 538 --- engines/tsage/ringworld_scenes10.cpp | 2089 -------- engines/tsage/ringworld_scenes10.h | 532 -- engines/tsage/ringworld_scenes2.cpp | 928 ---- engines/tsage/ringworld_scenes2.h | 149 - engines/tsage/ringworld_scenes3.cpp | 6133 ------------------------ engines/tsage/ringworld_scenes3.h | 895 ---- engines/tsage/ringworld_scenes4.cpp | 250 - engines/tsage/ringworld_scenes4.h | 92 - engines/tsage/ringworld_scenes5.cpp | 4441 ----------------- engines/tsage/ringworld_scenes5.h | 693 --- engines/tsage/ringworld_scenes6.cpp | 2200 --------- engines/tsage/ringworld_scenes6.h | 330 -- engines/tsage/ringworld_scenes8.cpp | 2545 ---------- engines/tsage/ringworld_scenes8.h | 490 -- engines/tsage/scenes.cpp | 2 +- 57 files changed, 28489 insertions(+), 28489 deletions(-) create mode 100644 engines/tsage/blue_force/blueforce_logic.cpp create mode 100644 engines/tsage/blue_force/blueforce_logic.h create mode 100644 engines/tsage/blue_force/blueforce_scenes0.cpp create mode 100644 engines/tsage/blue_force/blueforce_scenes0.h create mode 100644 engines/tsage/blue_force/blueforce_scenes1.cpp create mode 100644 engines/tsage/blue_force/blueforce_scenes1.h delete mode 100644 engines/tsage/blueforce_logic.cpp delete mode 100644 engines/tsage/blueforce_logic.h delete mode 100644 engines/tsage/blueforce_scenes0.cpp delete mode 100644 engines/tsage/blueforce_scenes0.h delete mode 100644 engines/tsage/blueforce_scenes1.cpp delete mode 100644 engines/tsage/blueforce_scenes1.h create mode 100644 engines/tsage/ringworld/ringworld_demo.cpp create mode 100644 engines/tsage/ringworld/ringworld_demo.h create mode 100644 engines/tsage/ringworld/ringworld_logic.cpp create mode 100644 engines/tsage/ringworld/ringworld_logic.h create mode 100644 engines/tsage/ringworld/ringworld_scenes1.cpp create mode 100644 engines/tsage/ringworld/ringworld_scenes1.h create mode 100644 engines/tsage/ringworld/ringworld_scenes10.cpp create mode 100644 engines/tsage/ringworld/ringworld_scenes10.h create mode 100644 engines/tsage/ringworld/ringworld_scenes2.cpp create mode 100644 engines/tsage/ringworld/ringworld_scenes2.h create mode 100644 engines/tsage/ringworld/ringworld_scenes3.cpp create mode 100644 engines/tsage/ringworld/ringworld_scenes3.h create mode 100644 engines/tsage/ringworld/ringworld_scenes4.cpp create mode 100644 engines/tsage/ringworld/ringworld_scenes4.h create mode 100644 engines/tsage/ringworld/ringworld_scenes5.cpp create mode 100644 engines/tsage/ringworld/ringworld_scenes5.h create mode 100644 engines/tsage/ringworld/ringworld_scenes6.cpp create mode 100644 engines/tsage/ringworld/ringworld_scenes6.h create mode 100644 engines/tsage/ringworld/ringworld_scenes8.cpp create mode 100644 engines/tsage/ringworld/ringworld_scenes8.h delete mode 100644 engines/tsage/ringworld_demo.cpp delete mode 100644 engines/tsage/ringworld_demo.h delete mode 100644 engines/tsage/ringworld_logic.cpp delete mode 100644 engines/tsage/ringworld_logic.h delete mode 100644 engines/tsage/ringworld_scenes1.cpp delete mode 100644 engines/tsage/ringworld_scenes1.h delete mode 100644 engines/tsage/ringworld_scenes10.cpp delete mode 100644 engines/tsage/ringworld_scenes10.h delete mode 100644 engines/tsage/ringworld_scenes2.cpp delete mode 100644 engines/tsage/ringworld_scenes2.h delete mode 100644 engines/tsage/ringworld_scenes3.cpp delete mode 100644 engines/tsage/ringworld_scenes3.h delete mode 100644 engines/tsage/ringworld_scenes4.cpp delete mode 100644 engines/tsage/ringworld_scenes4.h delete mode 100644 engines/tsage/ringworld_scenes5.cpp delete mode 100644 engines/tsage/ringworld_scenes5.h delete mode 100644 engines/tsage/ringworld_scenes6.cpp delete mode 100644 engines/tsage/ringworld_scenes6.h delete mode 100644 engines/tsage/ringworld_scenes8.cpp delete mode 100644 engines/tsage/ringworld_scenes8.h (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp new file mode 100644 index 0000000000..87e1597e1d --- /dev/null +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -0,0 +1,128 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/blue_force/blueforce_logic.h" +#include "tsage/blue_force/blueforce_scenes0.h" +#include "tsage/blue_force/blueforce_scenes1.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +void BlueForceGame::start() { + // Start the game + _globals->_sceneManager.changeScene(20); + + _globals->_events.setCursor(CURSOR_WALK); +} + +Scene *BlueForceGame::createScene(int sceneNumber) { + switch (sceneNumber) { + /* Scene Group #0 */ + case 20: + // Tsunami Title Screen + return new BF_Scene20(); + case 50: + case 60: + error("Scene group 0 not implemented"); + /* Scene Group #1 */ + case 100: + // Tsnunami Title Screen #2 + return new BF_Scene100(); + case 109: + case 110: + case 114: + case 115: + case 125: + case 140: + case 150: + case 160: + case 180: + case 190: + error("Scene group 1 not implemented"); + case 200: + case 210: + case 220: + case 225: + case 265: + case 270: + case 271: + case 280: + error("Scene group 2 not implemented"); + case 300: + case 315: + case 325: + case 330: + case 340: + case 342: + case 350: + case 355: + case 360: + case 370: + case 380: + case 385: + case 390: + error("Scene group 3 not implemented"); + case 410: + case 415: + case 440: + case 450: + error("Scene group 4 not implemented"); + case 550: + case 551: + case 560: + case 570: + case 580: + case 590: + error("Scene group 5 not implemented"); + case 600: + case 620: + case 666: + case 690: + error("Scene group 6 not implemented"); + case 710: + error("Scene group 7 not implemented"); + case 800: + case 810: + case 820: + case 830: + case 840: + case 850: + case 860: + case 870: + case 880: + error("Scene group 8 not implemented"); + case 900: + case 910: + case 920: + case 930: + case 935: + case 940: + error("Scene group 9 not implemented"); + default: + error("Unknown scene number - %d", sceneNumber); + break; + } +} + +} // End of namespace tSage diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h new file mode 100644 index 0000000000..9237e50a13 --- /dev/null +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -0,0 +1,42 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_LOGIC_H +#define TSAGE_BLUEFORCE_LOGIC_H + +#include "common/scummsys.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace tSage { + +class BlueForceGame: public Game { +public: + virtual void start(); + virtual Scene *createScene(int sceneNumber); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp new file mode 100644 index 0000000000..3eaa2bfdab --- /dev/null +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -0,0 +1,196 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/blue_force/blueforce_scenes0.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 20 - Tsunami Title Screen + * + *--------------------------------------------------------------------------*/ + +void BF_Scene20::Action1::signal() { + BF_Scene20 *scene = (BF_Scene20 *)_globals->_sceneManager._scene; + static byte black[3] = { 0, 0, 0 }; + + switch (_actionIndex++) { + case 0: + setDelay(2); + break; + case 1: + _sound.play(1); + _globals->_scenePalette.addRotation(64, 127, -1, 1, this); + break; + case 2: + scene->_object1.setVisage(22); + scene->_object1._strip = 1; + scene->_object1._frame = 1; + scene->_object1.changeZoom(100); + + scene->_object2.setVisage(22); + scene->_object2._strip = 2; + scene->_object2._frame = 1; + scene->_object2.changeZoom(100); + + scene->_object3.setVisage(22); + scene->_object3._strip = 3; + scene->_object3._frame = 1; + scene->_object3.changeZoom(100); + + scene->_object4.setVisage(22); + scene->_object4._strip = 4; + scene->_object4._frame = 1; + scene->_object4.changeZoom(100); + + scene->_object5.setVisage(22); + scene->_object5._strip = 5; + scene->_object5._frame = 1; + scene->_object5.changeZoom(100); + + scene->_object6.setVisage(22); + scene->_object6._strip = 6; + scene->_object6._frame = 1; + scene->_object6.changeZoom(100); + + scene->_object7.setVisage(22); + scene->_object7._strip = 7; + scene->_object7._frame = 1; + scene->_object7.changeZoom(100); + + scene->_object8.setVisage(22); + scene->_object8._strip = 8; + scene->_object8._frame = 1; + scene->_object8.changeZoom(100); + + setDelay(1); + break; + case 3: + _globals->_scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this); + break; + case 4: + setDelay(60); + break; + case 5: + scene->_object2.animate(ANIM_MODE_5, NULL); + scene->_object3.animate(ANIM_MODE_5, NULL); + scene->_object4.animate(ANIM_MODE_5, NULL); + scene->_object5.animate(ANIM_MODE_5, NULL); + scene->_object6.animate(ANIM_MODE_5, NULL); + scene->_object7.animate(ANIM_MODE_5, this); + break; + case 6: + setDelay(120); + break; + case 7: + _globals->_scenePalette.addFader(black, 1, 5, this); + break; + case 8: + _globals->_sceneManager.changeScene(100); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void BF_Scene20::postInit(SceneObjectList *OwnerList) { + loadScene(20); + Scene::postInit(); + setZoomPercents(60, 85, 200, 100); + + preloadVisage(21); + preloadVisage(22); + _scenePalette.loadPalette(1); + _scenePalette.loadPalette(22); + + _object1.postInit(); + _object1.setVisage(21); + _object1._strip = 1; + _object1._frame = 1; + _object1.animate(ANIM_MODE_NONE, NULL); + _object1.setPosition(Common::Point(62, 85)); + _object1.changeZoom(100); + + _object2.postInit(); + _object2.setVisage(21); + _object2._strip = 2; + _object2._frame = 1; + _object2.animate(ANIM_MODE_NONE, NULL); + _object2.setPosition(Common::Point(27, 94)); + _object2.changeZoom(100); + + _object3.postInit(); + _object3.setVisage(21); + _object3._strip = 2; + _object3._frame = 2; + _object3.animate(ANIM_MODE_NONE, NULL); + _object3.setPosition(Common::Point(68, 94)); + _object3.changeZoom(100); + + _object4.postInit(); + _object4.setVisage(21); + _object4._strip = 2; + _object4._frame = 3; + _object4.animate(ANIM_MODE_NONE, NULL); + _object4.setPosition(Common::Point(110, 94)); + _object4.changeZoom(100); + + _object5.postInit(); + _object5.setVisage(21); + _object5._strip = 2; + _object5._frame = 4; + _object5.animate(ANIM_MODE_NONE, NULL); + _object5.setPosition(Common::Point(154, 94)); + _object5.changeZoom(100); + + _object6.postInit(); + _object6.setVisage(21); + _object6._strip = 2; + _object6._frame = 5; + _object6.animate(ANIM_MODE_NONE, NULL); + _object6.setPosition(Common::Point(199, 94)); + _object6.changeZoom(100); + + _object7.postInit(); + _object7.setVisage(21); + _object7._strip = 2; + _object7._frame = 6; + _object7.animate(ANIM_MODE_NONE, NULL); + _object7.setPosition(Common::Point(244, 94)); + _object7.changeZoom(100); + + _object8.postInit(); + _object8.setVisage(21); + _object8._strip = 2; + _object8._frame = 7; + _object8.animate(ANIM_MODE_NONE, NULL); + _object8.setPosition(Common::Point(286, 94)); + _object8.changeZoom(100); + + setAction(&_action1); +} + +} // End of namespace tSage diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h new file mode 100644 index 0000000000..c176a17110 --- /dev/null +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -0,0 +1,56 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_SCENES0_H +#define TSAGE_BLUEFORCE_SCENES0_H + +#include "common/scummsys.h" +#include "tsage/blue_force/blueforce_logic.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" + +namespace tSage { + +class BF_Scene20 : public Scene { + /* Actions */ + class Action1 : public Action { + private: + ASoundExt _sound; + public: + virtual void signal(); + }; +public: + Action1 _action1; + ScenePalette _scenePalette; + SceneObject _object1, _object2, _object3, _object4; + SceneObject _object5, _object6, _object7, _object8; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp new file mode 100644 index 0000000000..0f0ab6c1c3 --- /dev/null +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -0,0 +1,195 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/config-manager.h" +#include "tsage/blue_force/blueforce_scenes1.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" +#include "tsage/globals.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 100 - Tsunami Title Screen #2 + * + *--------------------------------------------------------------------------*/ + +void BF_Scene100::Action1::signal() { + static byte black[3] = { 0, 0, 0 }; + + switch (_actionIndex++) { + case 0: + _state = 0; + setDelay(6); + break; + case 1: { + Common::String msg1 = _resourceManager->getMessage(100, _state++); + if (!msg1.compareTo("LASTCREDIT")) { + Common::String msg2 = _resourceManager->getMessage(100, _state++); + setTextStrings(msg1, msg2, this); + } else { + setTextStrings(BF_NAME, BF_ALL_RIGHTS_RESERVED, this); + + Common::Point pt(_sceneText1._position.x, 80); + NpcMover *mover = new NpcMover(); + _sceneText1.addMover(mover, &pt, this); + } + break; + } + case 2: + setDelay(600); + break; + case 3: + BF_GLOBALS._sound1.fade(0, 10, 10, 1, this); + GLOBALS._scenePalette.addFader(black, 1, 2, NULL); + break; + case 4: + error("??exit"); + break; + } +} + +void BF_Scene100::Action1::setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action) { + // Set data for first text control + _sceneText1._fontNumber = 10; + _sceneText1._width = 160; + _sceneText1._textMode = ALIGN_RIGHT; + _sceneText1._color1 = _globals->_fontColors.background; + _sceneText1._color2 = _globals->_fontColors.foreground; + _sceneText1._color3 = _globals->_fontColors.background; + _sceneText1.setup(msg1); + _sceneText1.setFrame2(-1); + _sceneText1.setPosition(Common::Point( + (SCREEN_WIDTH - _sceneText1.getFrame().getBounds().width()) / 2, 202)); + _sceneText1._moveRate = 30; + _sceneText1._moveDiff.y = 1; + + // Set data for second text control + _sceneText2._fontNumber = 10; + _sceneText2._width = _sceneText1._width; + _sceneText2._textMode = _sceneText1._textMode; + _sceneText2._color1 = _globals->_fontColors.background; + _sceneText2._color2 = _globals->_fontColors.foreground; + _sceneText2._color3 = _globals->_fontColors.background; + _sceneText2.setup(msg1); + _sceneText2.setFrame2(-1); + GfxSurface textSurface = _sceneText2.getFrame(); + _sceneText2.setPosition(Common::Point((SCREEN_WIDTH - textSurface.getBounds().width()) / 2, 202)); + _sceneText2._moveRate = 30; + _sceneText2._moveDiff.y = 1; + + _textHeight = textSurface.getBounds().height(); + int yp = -(_textHeight * 2); + + Common::Point pt(_sceneText1._position.x, yp); + NpcMover *mover = new NpcMover(); + _sceneText1.addMover(mover, &pt, action); +} + +void BF_Scene100::Action2::signal() { + BF_Scene100 *scene = (BF_Scene100 *)_globals->_sceneManager._scene; + static byte black[3] = {0, 0, 0}; + + switch (_actionIndex++) { + case 0: + BF_GLOBALS._scenePalette.addFader(black, 1, -2, this); + break; + case 1: + setDelay(180); + break; + case 2: { + const char *SEEN_INTRO = "seen_intro"; + if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) { + // First time being played, so will need to show the intro + ConfMan.setBool(SEEN_INTRO, true); + ConfMan.flushToDisk(); + } else { + // Prompt user for whether to start play or watch introduction + _globals->_player.enableControl(); + + if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) { + // Signal to start the game + scene->_index = 190; + remove(); + return; + } + } + + // At this point the introduction needs to start + _globals->_scenePalette.addFader(black, 1, 2, this); + break; + } + case 3: + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +BF_Scene100::BF_Scene100(): Scene() { + _index = 0; +} + +void BF_Scene100::postInit(SceneObjectList *OwnerList) { + BF_GLOBALS._scenePalette.loadPalette(2); + BF_GLOBALS._v51C44 = 1; + Scene::postInit(); + BF_GLOBALS._v51C24 = 200; + + _globals->_player.enableControl(); + _globals->_player.hide(); + _globals->_player.disableControl(); + _index = 109; + + if (BF_GLOBALS._v4CEA2 < 6) { + // Title + loadScene(100); + BF_GLOBALS._sound1.play(2); + setAction(&_action2, this); + } else { + // Credits + loadScene(101); + BF_GLOBALS._sound1.play(118); + setAction(&_action1, this); + } + + loadScene(20); + setZoomPercents(60, 85, 200, 100); +} + +void BF_Scene100::signal() { + ++_sceneMode; + if (BF_GLOBALS._v4CEA2 < 6) { + BF_GLOBALS._scenePalette.clearListeners(); + BF_GLOBALS._scenePalette.loadPalette(100); + BF_GLOBALS._sceneManager.changeScene(_index); + } else { + if (_sceneMode > 1) + BF_GLOBALS._events.setCursor(CURSOR_ARROW); + + setAction(this, &_action1, this); + } +} + +} // End of namespace tSage diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h new file mode 100644 index 0000000000..16d327fe9f --- /dev/null +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -0,0 +1,73 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_BLUEFORCE_SCENES1_H +#define TSAGE_BLUEFORCE_SCENES1_H + +#include "common/scummsys.h" +#include "tsage/blue_force/blueforce_logic.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" + +namespace tSage { + +class BF_Scene100: public Scene { + /* Actions */ + class Action1: public ActionExt { + private: + void setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action); + public: + SceneText _sceneText1, _sceneText2; + int _textHeight; + + virtual Common::String getClassName() { return "BF100Action1"; } + virtual void synchronize(Serializer &s) { + ActionExt::synchronize(s); + s.syncAsSint16LE(_textHeight); + } + virtual void signal(); + }; + class Action2: public ActionExt { + public: + virtual Common::String getClassName() { return "BF100Action2"; } + virtual void signal(); + }; +public: + SequenceManager _sequenceManager; + Action1 _action1; + Action2 _action2; + ScenePalette _scenePalette; + SceneObjectExt2 _object1, _object2, _object3, _object4, _object5; + int _index; + + BF_Scene100(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/blueforce_logic.cpp b/engines/tsage/blueforce_logic.cpp deleted file mode 100644 index cad7609abc..0000000000 --- a/engines/tsage/blueforce_logic.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "tsage/blueforce_logic.h" -#include "tsage/blueforce_scenes0.h" -#include "tsage/blueforce_scenes1.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -void BlueForceGame::start() { - // Start the game - _globals->_sceneManager.changeScene(20); - - _globals->_events.setCursor(CURSOR_WALK); -} - -Scene *BlueForceGame::createScene(int sceneNumber) { - switch (sceneNumber) { - /* Scene Group #0 */ - case 20: - // Tsunami Title Screen - return new BF_Scene20(); - case 50: - case 60: - error("Scene group 0 not implemented"); - /* Scene Group #1 */ - case 100: - // Tsnunami Title Screen #2 - return new BF_Scene100(); - case 109: - case 110: - case 114: - case 115: - case 125: - case 140: - case 150: - case 160: - case 180: - case 190: - error("Scene group 1 not implemented"); - case 200: - case 210: - case 220: - case 225: - case 265: - case 270: - case 271: - case 280: - error("Scene group 2 not implemented"); - case 300: - case 315: - case 325: - case 330: - case 340: - case 342: - case 350: - case 355: - case 360: - case 370: - case 380: - case 385: - case 390: - error("Scene group 3 not implemented"); - case 410: - case 415: - case 440: - case 450: - error("Scene group 4 not implemented"); - case 550: - case 551: - case 560: - case 570: - case 580: - case 590: - error("Scene group 5 not implemented"); - case 600: - case 620: - case 666: - case 690: - error("Scene group 6 not implemented"); - case 710: - error("Scene group 7 not implemented"); - case 800: - case 810: - case 820: - case 830: - case 840: - case 850: - case 860: - case 870: - case 880: - error("Scene group 8 not implemented"); - case 900: - case 910: - case 920: - case 930: - case 935: - case 940: - error("Scene group 9 not implemented"); - default: - error("Unknown scene number - %d", sceneNumber); - break; - } -} - -} // End of namespace tSage diff --git a/engines/tsage/blueforce_logic.h b/engines/tsage/blueforce_logic.h deleted file mode 100644 index 9237e50a13..0000000000 --- a/engines/tsage/blueforce_logic.h +++ /dev/null @@ -1,42 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_BLUEFORCE_LOGIC_H -#define TSAGE_BLUEFORCE_LOGIC_H - -#include "common/scummsys.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" - -namespace tSage { - -class BlueForceGame: public Game { -public: - virtual void start(); - virtual Scene *createScene(int sceneNumber); -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/blueforce_scenes0.cpp b/engines/tsage/blueforce_scenes0.cpp deleted file mode 100644 index 4a0259cb98..0000000000 --- a/engines/tsage/blueforce_scenes0.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "tsage/blueforce_scenes0.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -/*-------------------------------------------------------------------------- - * Scene 20 - Tsunami Title Screen - * - *--------------------------------------------------------------------------*/ - -void BF_Scene20::Action1::signal() { - BF_Scene20 *scene = (BF_Scene20 *)_globals->_sceneManager._scene; - static byte black[3] = { 0, 0, 0 }; - - switch (_actionIndex++) { - case 0: - setDelay(2); - break; - case 1: - _sound.play(1); - _globals->_scenePalette.addRotation(64, 127, -1, 1, this); - break; - case 2: - scene->_object1.setVisage(22); - scene->_object1._strip = 1; - scene->_object1._frame = 1; - scene->_object1.changeZoom(100); - - scene->_object2.setVisage(22); - scene->_object2._strip = 2; - scene->_object2._frame = 1; - scene->_object2.changeZoom(100); - - scene->_object3.setVisage(22); - scene->_object3._strip = 3; - scene->_object3._frame = 1; - scene->_object3.changeZoom(100); - - scene->_object4.setVisage(22); - scene->_object4._strip = 4; - scene->_object4._frame = 1; - scene->_object4.changeZoom(100); - - scene->_object5.setVisage(22); - scene->_object5._strip = 5; - scene->_object5._frame = 1; - scene->_object5.changeZoom(100); - - scene->_object6.setVisage(22); - scene->_object6._strip = 6; - scene->_object6._frame = 1; - scene->_object6.changeZoom(100); - - scene->_object7.setVisage(22); - scene->_object7._strip = 7; - scene->_object7._frame = 1; - scene->_object7.changeZoom(100); - - scene->_object8.setVisage(22); - scene->_object8._strip = 8; - scene->_object8._frame = 1; - scene->_object8.changeZoom(100); - - setDelay(1); - break; - case 3: - _globals->_scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this); - break; - case 4: - setDelay(60); - break; - case 5: - scene->_object2.animate(ANIM_MODE_5, NULL); - scene->_object3.animate(ANIM_MODE_5, NULL); - scene->_object4.animate(ANIM_MODE_5, NULL); - scene->_object5.animate(ANIM_MODE_5, NULL); - scene->_object6.animate(ANIM_MODE_5, NULL); - scene->_object7.animate(ANIM_MODE_5, this); - break; - case 6: - setDelay(120); - break; - case 7: - _globals->_scenePalette.addFader(black, 1, 5, this); - break; - case 8: - _globals->_sceneManager.changeScene(100); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void BF_Scene20::postInit(SceneObjectList *OwnerList) { - loadScene(20); - Scene::postInit(); - setZoomPercents(60, 85, 200, 100); - - preloadVisage(21); - preloadVisage(22); - _scenePalette.loadPalette(1); - _scenePalette.loadPalette(22); - - _object1.postInit(); - _object1.setVisage(21); - _object1._strip = 1; - _object1._frame = 1; - _object1.animate(ANIM_MODE_NONE, NULL); - _object1.setPosition(Common::Point(62, 85)); - _object1.changeZoom(100); - - _object2.postInit(); - _object2.setVisage(21); - _object2._strip = 2; - _object2._frame = 1; - _object2.animate(ANIM_MODE_NONE, NULL); - _object2.setPosition(Common::Point(27, 94)); - _object2.changeZoom(100); - - _object3.postInit(); - _object3.setVisage(21); - _object3._strip = 2; - _object3._frame = 2; - _object3.animate(ANIM_MODE_NONE, NULL); - _object3.setPosition(Common::Point(68, 94)); - _object3.changeZoom(100); - - _object4.postInit(); - _object4.setVisage(21); - _object4._strip = 2; - _object4._frame = 3; - _object4.animate(ANIM_MODE_NONE, NULL); - _object4.setPosition(Common::Point(110, 94)); - _object4.changeZoom(100); - - _object5.postInit(); - _object5.setVisage(21); - _object5._strip = 2; - _object5._frame = 4; - _object5.animate(ANIM_MODE_NONE, NULL); - _object5.setPosition(Common::Point(154, 94)); - _object5.changeZoom(100); - - _object6.postInit(); - _object6.setVisage(21); - _object6._strip = 2; - _object6._frame = 5; - _object6.animate(ANIM_MODE_NONE, NULL); - _object6.setPosition(Common::Point(199, 94)); - _object6.changeZoom(100); - - _object7.postInit(); - _object7.setVisage(21); - _object7._strip = 2; - _object7._frame = 6; - _object7.animate(ANIM_MODE_NONE, NULL); - _object7.setPosition(Common::Point(244, 94)); - _object7.changeZoom(100); - - _object8.postInit(); - _object8.setVisage(21); - _object8._strip = 2; - _object8._frame = 7; - _object8.animate(ANIM_MODE_NONE, NULL); - _object8.setPosition(Common::Point(286, 94)); - _object8.changeZoom(100); - - setAction(&_action1); -} - -} // End of namespace tSage diff --git a/engines/tsage/blueforce_scenes0.h b/engines/tsage/blueforce_scenes0.h deleted file mode 100644 index 06f7912959..0000000000 --- a/engines/tsage/blueforce_scenes0.h +++ /dev/null @@ -1,56 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_BLUEFORCE_SCENES0_H -#define TSAGE_BLUEFORCE_SCENES0_H - -#include "common/scummsys.h" -#include "tsage/blueforce_logic.h" -#include "tsage/converse.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" -#include "tsage/sound.h" - -namespace tSage { - -class BF_Scene20 : public Scene { - /* Actions */ - class Action1 : public Action { - private: - ASoundExt _sound; - public: - virtual void signal(); - }; -public: - Action1 _action1; - ScenePalette _scenePalette; - SceneObject _object1, _object2, _object3, _object4; - SceneObject _object5, _object6, _object7, _object8; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/blueforce_scenes1.cpp b/engines/tsage/blueforce_scenes1.cpp deleted file mode 100644 index 81f7d0ac76..0000000000 --- a/engines/tsage/blueforce_scenes1.cpp +++ /dev/null @@ -1,195 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/config-manager.h" -#include "tsage/blueforce_scenes1.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" -#include "tsage/globals.h" - -namespace tSage { - -/*-------------------------------------------------------------------------- - * Scene 100 - Tsunami Title Screen #2 - * - *--------------------------------------------------------------------------*/ - -void BF_Scene100::Action1::signal() { - static byte black[3] = { 0, 0, 0 }; - - switch (_actionIndex++) { - case 0: - _state = 0; - setDelay(6); - break; - case 1: { - Common::String msg1 = _resourceManager->getMessage(100, _state++); - if (!msg1.compareTo("LASTCREDIT")) { - Common::String msg2 = _resourceManager->getMessage(100, _state++); - setTextStrings(msg1, msg2, this); - } else { - setTextStrings(BF_NAME, BF_ALL_RIGHTS_RESERVED, this); - - Common::Point pt(_sceneText1._position.x, 80); - NpcMover *mover = new NpcMover(); - _sceneText1.addMover(mover, &pt, this); - } - break; - } - case 2: - setDelay(600); - break; - case 3: - BF_GLOBALS._sound1.fade(0, 10, 10, 1, this); - GLOBALS._scenePalette.addFader(black, 1, 2, NULL); - break; - case 4: - error("??exit"); - break; - } -} - -void BF_Scene100::Action1::setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action) { - // Set data for first text control - _sceneText1._fontNumber = 10; - _sceneText1._width = 160; - _sceneText1._textMode = ALIGN_RIGHT; - _sceneText1._color1 = _globals->_fontColors.background; - _sceneText1._color2 = _globals->_fontColors.foreground; - _sceneText1._color3 = _globals->_fontColors.background; - _sceneText1.setup(msg1); - _sceneText1.setFrame2(-1); - _sceneText1.setPosition(Common::Point( - (SCREEN_WIDTH - _sceneText1.getFrame().getBounds().width()) / 2, 202)); - _sceneText1._moveRate = 30; - _sceneText1._moveDiff.y = 1; - - // Set data for second text control - _sceneText2._fontNumber = 10; - _sceneText2._width = _sceneText1._width; - _sceneText2._textMode = _sceneText1._textMode; - _sceneText2._color1 = _globals->_fontColors.background; - _sceneText2._color2 = _globals->_fontColors.foreground; - _sceneText2._color3 = _globals->_fontColors.background; - _sceneText2.setup(msg1); - _sceneText2.setFrame2(-1); - GfxSurface textSurface = _sceneText2.getFrame(); - _sceneText2.setPosition(Common::Point((SCREEN_WIDTH - textSurface.getBounds().width()) / 2, 202)); - _sceneText2._moveRate = 30; - _sceneText2._moveDiff.y = 1; - - _textHeight = textSurface.getBounds().height(); - int yp = -(_textHeight * 2); - - Common::Point pt(_sceneText1._position.x, yp); - NpcMover *mover = new NpcMover(); - _sceneText1.addMover(mover, &pt, action); -} - -void BF_Scene100::Action2::signal() { - BF_Scene100 *scene = (BF_Scene100 *)_globals->_sceneManager._scene; - static byte black[3] = {0, 0, 0}; - - switch (_actionIndex++) { - case 0: - BF_GLOBALS._scenePalette.addFader(black, 1, -2, this); - break; - case 1: - setDelay(180); - break; - case 2: { - const char *SEEN_INTRO = "seen_intro"; - if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) { - // First time being played, so will need to show the intro - ConfMan.setBool(SEEN_INTRO, true); - ConfMan.flushToDisk(); - } else { - // Prompt user for whether to start play or watch introduction - _globals->_player.enableControl(); - - if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) { - // Signal to start the game - scene->_index = 190; - remove(); - return; - } - } - - // At this point the introduction needs to start - _globals->_scenePalette.addFader(black, 1, 2, this); - break; - } - case 3: - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -BF_Scene100::BF_Scene100(): Scene() { - _index = 0; -} - -void BF_Scene100::postInit(SceneObjectList *OwnerList) { - BF_GLOBALS._scenePalette.loadPalette(2); - BF_GLOBALS._v51C44 = 1; - Scene::postInit(); - BF_GLOBALS._v51C24 = 200; - - _globals->_player.enableControl(); - _globals->_player.hide(); - _globals->_player.disableControl(); - _index = 109; - - if (BF_GLOBALS._v4CEA2 < 6) { - // Title - loadScene(100); - BF_GLOBALS._sound1.play(2); - setAction(&_action2, this); - } else { - // Credits - loadScene(101); - BF_GLOBALS._sound1.play(118); - setAction(&_action1, this); - } - - loadScene(20); - setZoomPercents(60, 85, 200, 100); -} - -void BF_Scene100::signal() { - ++_sceneMode; - if (BF_GLOBALS._v4CEA2 < 6) { - BF_GLOBALS._scenePalette.clearListeners(); - BF_GLOBALS._scenePalette.loadPalette(100); - BF_GLOBALS._sceneManager.changeScene(_index); - } else { - if (_sceneMode > 1) - BF_GLOBALS._events.setCursor(CURSOR_ARROW); - - setAction(this, &_action1, this); - } -} - -} // End of namespace tSage diff --git a/engines/tsage/blueforce_scenes1.h b/engines/tsage/blueforce_scenes1.h deleted file mode 100644 index d9fcc486c6..0000000000 --- a/engines/tsage/blueforce_scenes1.h +++ /dev/null @@ -1,73 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_BLUEFORCE_SCENES1_H -#define TSAGE_BLUEFORCE_SCENES1_H - -#include "common/scummsys.h" -#include "tsage/blueforce_logic.h" -#include "tsage/converse.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" -#include "tsage/sound.h" - -namespace tSage { - -class BF_Scene100: public Scene { - /* Actions */ - class Action1: public ActionExt { - private: - void setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action); - public: - SceneText _sceneText1, _sceneText2; - int _textHeight; - - virtual Common::String getClassName() { return "BF100Action1"; } - virtual void synchronize(Serializer &s) { - ActionExt::synchronize(s); - s.syncAsSint16LE(_textHeight); - } - virtual void signal(); - }; - class Action2: public ActionExt { - public: - virtual Common::String getClassName() { return "BF100Action2"; } - virtual void signal(); - }; -public: - SequenceManager _sequenceManager; - Action1 _action1; - Action2 _action2; - ScenePalette _scenePalette; - SceneObjectExt2 _object1, _object2, _object3, _object4, _object5; - int _index; - - BF_Scene100(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index 00cd61ae07..cae9639565 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -23,7 +23,7 @@ #include "tsage/debugger.h" #include "tsage/globals.h" #include "tsage/graphics.h" -#include "tsage/ringworld_logic.h" +#include "tsage/ringworld/ringworld_logic.h" namespace tSage { diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index d315ce092b..8a1b7c6429 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -30,7 +30,7 @@ #include "tsage/dialogs.h" #include "tsage/staticres.h" #include "tsage/globals.h" -#include "tsage/ringworld_logic.h" +#include "tsage/ringworld/ringworld_logic.h" namespace tSage { diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index e5572d9058..39850cd1a5 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -22,9 +22,9 @@ #include "tsage/globals.h" #include "tsage/tsage.h" -#include "tsage/blueforce_logic.h" -#include "tsage/ringworld_demo.h" -#include "tsage/ringworld_logic.h" +#include "tsage/blue_force/blueforce_logic.h" +#include "tsage/ringworld/ringworld_demo.h" +#include "tsage/ringworld/ringworld_logic.h" namespace tSage { diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 7ac1795537..41078cdaaf 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -1,9 +1,9 @@ MODULE := engines/tsage MODULE_OBJS := \ - blueforce_logic.o \ - blueforce_scenes0.o \ - blueforce_scenes1.o \ + blue_force\blueforce_logic.o \ + blue_force\blueforce_scenes0.o \ + blue_force\blueforce_scenes1.o \ converse.o \ core.o \ debugger.o \ @@ -13,16 +13,16 @@ MODULE_OBJS := \ globals.o \ graphics.o \ resources.o \ - ringworld_demo.o \ - ringworld_logic.o \ - ringworld_scenes1.o \ - ringworld_scenes2.o \ - ringworld_scenes3.o \ - ringworld_scenes4.o \ - ringworld_scenes5.o \ - ringworld_scenes6.o \ - ringworld_scenes8.o \ - ringworld_scenes10.o \ + ringworld\ringworld_demo.o \ + ringworld\ringworld_logic.o \ + ringworld\ringworld_scenes1.o \ + ringworld\ringworld_scenes2.o \ + ringworld\ringworld_scenes3.o \ + ringworld\ringworld_scenes4.o \ + ringworld\ringworld_scenes5.o \ + ringworld\ringworld_scenes6.o \ + ringworld\ringworld_scenes8.o \ + ringworld\ringworld_scenes10.o \ saveload.o \ scenes.o \ sound.o \ diff --git a/engines/tsage/ringworld/ringworld_demo.cpp b/engines/tsage/ringworld/ringworld_demo.cpp new file mode 100644 index 0000000000..ce06df8e80 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_demo.cpp @@ -0,0 +1,120 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/ringworld/ringworld_demo.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +void RingworldDemoGame::start() { + // Start the demo's single scene + _globals->_sceneManager.changeScene(1); + + _globals->_events.setCursor(CURSOR_NONE); +} + +Scene *RingworldDemoGame::createScene(int sceneNumber) { + // The demo only has a single scene, so ignore the scene number and always return it + return new RingworldDemoScene(); +} + +void RingworldDemoGame::quitGame() { + if (MessageDialog::show(DEMO_EXIT_MSG, EXIT_BTN_STRING, DEMO_BTN_STRING) == 0) + _vm->quitGame(); +} + +void RingworldDemoGame::pauseGame() { + _globals->_events.setCursor(CURSOR_ARROW); + MessageDialog *dlg = new MessageDialog(DEMO_PAUSED_MSG, EXIT_BTN_STRING, DEMO_RESUME_BTN_STRING); + dlg->draw(); + + GfxButton *selectedButton = dlg->execute(&dlg->_btn2); + bool exitFlag = selectedButton != &dlg->_btn2; + + delete dlg; + _globals->_events.hideCursor(); + + if (exitFlag) + _vm->quitGame(); +} + +void RingworldDemoGame::processEvent(Event &event) { + if (event.eventType == EVENT_KEYPRESS) { + switch (event.kbd.keycode) { + case Common::KEYCODE_F1: + // F1 - Help + MessageDialog::show(DEMO_HELP_MSG, OK_BTN_STRING); + break; + + case Common::KEYCODE_F2: { + // F2 - Sound Options + ConfigDialog *dlg = new ConfigDialog(); + dlg->runModal(); + delete dlg; + _globals->_soundManager.syncSounds(); + _globals->_events.setCursorFromFlag(); + break; + } + + case Common::KEYCODE_F3: + // F3 - Quit + quitGame(); + event.handled = false; + break; + + default: + break; + } + } else if (event.eventType == EVENT_BUTTON_DOWN) { + pauseGame(); + event.handled = true; + } +} + +/*-------------------------------------------------------------------------- + * Ringworld Demo scene + * + *--------------------------------------------------------------------------*/ + +void RingworldDemoScene::postInit(SceneObjectList *OwnerList) { + signal(); +} + +void RingworldDemoScene::signal() { + _soundHandler.play(4); + _actor1.postInit(); + _actor2.postInit(); + _actor3.postInit(); + _actor4.postInit(); + _actor5.postInit(); + _actor6.postInit(); + + setAction(&_sequenceManager, this, 22, &_actor1, &_actor2, &_actor3, &_actor4, &_actor5, &_actor6, NULL); +} + +void RingworldDemoScene::process(Event &event) { + +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_demo.h b/engines/tsage/ringworld/ringworld_demo.h new file mode 100644 index 0000000000..3e7431e107 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_demo.h @@ -0,0 +1,59 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_DEMO_H +#define TSAGE_RINGWORLD_DEMO_H + +#include "common/scummsys.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" + +namespace tSage { + +class RingworldDemoGame: public Game { +private: + void pauseGame(); +public: + virtual void start(); + virtual Scene *createScene(int sceneNumber); + virtual void quitGame(); + virtual void processEvent(Event &event); +}; + +class RingworldDemoScene: public Scene { +public: + SequenceManager _sequenceManager; + SceneObject _actor1, _actor2, _actor3; + SceneObject _actor4, _actor5, _actor6; + ASound _soundHandler; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void process(Event &event); + virtual void signal(); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp new file mode 100644 index 0000000000..99890c90ff --- /dev/null +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -0,0 +1,1490 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/config-manager.h" +#include "common/translation.h" +#include "gui/saveload.h" +#include "tsage/ringworld/ringworld_logic.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" +#include "tsage/ringworld/ringworld_demo.h" +#include "tsage/ringworld/ringworld_scenes1.h" +#include "tsage/ringworld/ringworld_scenes2.h" +#include "tsage/ringworld/ringworld_scenes3.h" +#include "tsage/ringworld/ringworld_scenes4.h" +#include "tsage/ringworld/ringworld_scenes5.h" +#include "tsage/ringworld/ringworld_scenes6.h" +#include "tsage/ringworld/ringworld_scenes8.h" +#include "tsage/ringworld/ringworld_scenes10.h" + +namespace tSage { + +Scene *RingworldGame::createScene(int sceneNumber) { + switch (sceneNumber) { + /* Scene group 1 */ + // Kziniti Palace (Introduction) + case 10: return new Scene10(); + // Outer Space (Introduction) + case 15: return new Scene15(); + // Cut-scenes for Ch'mee house in distance + case 20: return new Scene20(); + // Outside Ch'mee residence + case 30: return new Scene30(); + // Chmeee Home + case 40: return new Scene40(); + // By Flycycles + case 50: return new Scene50(); + // Flycycle controls + case 60: return new Scene60(); + // Shipyard Entrance + case 90: return new Scene90(); + // Ship Close-up + case 95: return new Scene95(); + // Sunflower navigation sequence + case 6100: return new Scene6100(); + + /* Scene group 2 */ + // Title screen + case 1000: return new Scene1000(); + // Fleeing planet cutscene + case 1001: return new Scene1001(); + // Unused + case 1250: return new Scene1250(); + // Ringworld Wall + case 1400: return new Scene1400(); + // Ringworld Space-port + case 1500: return new Scene1500(); + + /* Scene group 3 - Part #1 */ + // Cockpit cutscenes + case 2000: return new Scene2000(); + // Starcraft - Cockpit + case 2100: return new Scene2100(); + // Encyclopedia + case 2120: return new Scene2120(); + // Starcraft - Level 2 + case 2150: return new Scene2150(); + // Starcraft - AutoDoc + case 2200: return new Scene2200(); + // Stasis Field Map + case 2222: return new Scene2222(); + // Starcraft - Quinn's Room + case 2230: return new Scene2230(); + + /* Scene group 3 - Part #2 */ + // Starcraft - Storage Room + case 2280: return new Scene2280(); + // Starcraft - Hanger Bay + case 2300: return new Scene2300(); + // Starcraft - Copy Protection Screen + case 2310: return new Scene2310(); + // Starcraft - Lander Bay + case 2320: return new Scene2320(); + // Scene 2400 - Descending in Lander + case 2400: return new Scene2400(); + + /* Scene group 4 */ + // Ringworld Scan + case 3500: return new Scene3500(); + // Remote Viewer + case 3700: return new Scene3700(); + + /* Scene group 5 */ + // Village + case 4000: return new Scene4000(); + // Village - Outside Lander + case 4010: return new Scene4010(); + // Village - Puzzle Board + case 4025: return new Scene4025(); + // Village - Temple Antechamber + case 4045: return new Scene4045(); + // Village - Temple + case 4050: return new Scene4050(); + // Village - Hut + case 4100: return new Scene4100(); + // Village - Bedroom + case 4150: return new Scene4150(); + // Village - Near Slaver Ship + case 4250: return new Scene4250(); + // Village - Slaver Ship + case 4300: return new Scene4300(); + // Village - Slaver Ship Keypad + case 4301: return new Scene4301(); + + /* Scene group 6 */ + // Caverns - Entrance + case 5000: return new Scene5000(); + // Caverns + case 5100: return new Scene5100(); + // Caverns - Throne-room + case 5200: return new Scene5200(); + // Caverns - Pit + case 5300: return new Scene5300(); + + /* Scene group 8 */ + // Landing near beach + case 7000: return new Scene7000(); + // Underwater: swimming + case 7100: return new Scene7100(); + // Underwater: Entering the cave + case 7200: return new Scene7200(); + // Underwater: Lord Poria + case 7300: return new Scene7300(); + // Floating Buildings: Outside + case 7600: return new Scene7600(); + // Floating Buildings: In the lab + case 7700: return new Scene7700(); + + /* Scene group 10 */ + // Near beach: Slave washing clothes + case 9100: return new Scene9100(); + // Castle: Outside the bulwarks + case 9150: return new Scene9150(); + // Castle: Near the fountain + case 9200: return new Scene9200(); + // Castle: In front of a large guarded door + case 9300: return new Scene9300(); + // Castle: In a hallway + case 9350: return new Scene9350(); + // Castle: In a hallway + case 9360: return new Scene9360(); + // Castle: Black-Smith room + case 9400: return new Scene9400(); + // Castle: Dining room + case 9450: return new Scene9450(); + // Castle: Bedroom + case 9500: return new Scene9500(); + // Castle: Balcony + case 9700: return new Scene9700(); + // Castle: In the garden + case 9750: return new Scene9750(); + // Castle: Dressing room + case 9850: return new Scene9850(); + // Ending + case 9900: return new Scene9900(); + // Space travel + case 9999: return new Scene9999(); + + default: + error("Unknown scene number - %d", sceneNumber); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +DisplayHotspot::DisplayHotspot(int regionId, ...) { + _sceneRegionId = regionId; + + // Load up the actions + va_list va; + va_start(va, regionId); + + int param = va_arg(va, int); + while (param != LIST_END) { + _actions.push_back(param); + param = va_arg(va, int); + } + + va_end(va); +} + +bool DisplayHotspot::performAction(int action) { + for (uint i = 0; i < _actions.size(); i += 3) { + if (_actions[i] == action) { + display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + return true; + } + } + + return false; +} + +/*--------------------------------------------------------------------------*/ + +DisplayObject::DisplayObject(int firstAction, ...) { + // Load up the actions + va_list va; + va_start(va, firstAction); + + int param = firstAction; + while (param != LIST_END) { + _actions.push_back(param); + param = va_arg(va, int); + } + + va_end(va); +} + +bool DisplayObject::performAction(int action) { + for (uint i = 0; i < _actions.size(); i += 3) { + if (_actions[i] == action) { + display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + return true; + } + } + + return false; +} + +/*--------------------------------------------------------------------------*/ + +SceneArea::SceneArea() { + _savedArea = NULL; + _pt.x = _pt.y = 0; +} + +SceneArea::~SceneArea() { + delete _savedArea; +} + +void SceneArea::setup(int resNum, int rlbNum, int subNum, int actionId) { + _resNum = resNum; + _rlbNum = rlbNum; + _subNum = subNum; + _actionId = actionId; + + _surface = surfaceFromRes(resNum, rlbNum, subNum); +} + +void SceneArea::draw2() { + _surface.draw(Common::Point(_bounds.left, _bounds.top)); +} + +void SceneArea::display() { + _bounds.left = _pt.x - (_surface.getBounds().width() / 2); + _bounds.top = _pt.y + 1 - _surface.getBounds().height(); + _bounds.setWidth(_surface.getBounds().width()); + _bounds.setHeight(_surface.getBounds().height()); + + _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); + draw2(); +} + +void SceneArea::restore() { + assert(_savedArea); + _savedArea->draw(Common::Point(_bounds.left, _bounds.top)); + delete _savedArea; + _savedArea = NULL; +} + +void SceneArea::draw(bool flag) { + _surface = surfaceFromRes(_resNum, _rlbNum, flag ? _subNum + 1 : _subNum); + _surface.draw(Common::Point(_bounds.left, _bounds.top)); +} + +void SceneArea::wait() { + // Wait until a mouse or keypress + Event event; + while (!_vm->shouldQuit() && !_globals->_events.getEvent(event)) { + g_system->updateScreen(); + g_system->delayMillis(10); + } + + SynchronizedList::iterator ii; + for (ii = _globals->_sceneItems.begin(); ii != _globals->_sceneItems.end(); ++ii) { + SceneItem *sceneItem = *ii; + if (sceneItem->contains(event.mousePos)) { + sceneItem->doAction(_actionId); + break; + } + } + + _globals->_events.setCursor(CURSOR_ARROW); +} + +void SceneArea::synchronize(Serializer &s) { + if (s.getVersion() >= 2) + SavedObject::synchronize(s); + + s.syncAsSint16LE(_pt.x); + s.syncAsSint16LE(_pt.y); + s.syncAsSint32LE(_resNum); + s.syncAsSint32LE(_rlbNum); + s.syncAsSint32LE(_subNum); + s.syncAsSint32LE(_actionId); + _bounds.synchronize(s); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerGText::SpeakerGText() { + _speakerName = "GTEXT"; + _textWidth = 160; + _textPos = Common::Point(130, 10); + _color1 = 42; + _hideObjects = false; +} + +void SpeakerGText::setText(const Common::String &msg) { + // Set the animation properties + _sceneObject.postInit(); + _sceneObject.setVisage(9405); + _sceneObject.setStrip2(3); + _sceneObject.fixPriority(255); + _sceneObject.changeZoom(100); + _sceneObject._frame = 1; + _sceneObject.setPosition(Common::Point(183, 71)); + _sceneObject.animate(ANIM_MODE_7, 0, NULL); + + // Set the text + Rect textRect; + _globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth); + textRect.center(_sceneObject._position.x, _sceneObject._position.y); + _textPos.x = textRect.left; + Speaker::setText(msg); +} + +void SpeakerGText::removeText() { + _sceneObject.remove(); + Speaker::removeText(); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPOR::SpeakerPOR() { + _speakerName = "POR"; + _newSceneNumber = 7221; + _textPos = Common::Point(10, 30); + _color1 = 41; +} + +void SpeakerPOR::SpeakerAction1::signal(){ + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(60) + 60); + break; + case 1: + static_cast(_owner)->animate(ANIM_MODE_5, this, NULL); + break; + case 2: + setDelay(_globals->_randomSource.getRandomNumber(10)); + _actionIndex = 0; + break; + default: + break; + } +} + +void SpeakerPOR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7223); + _object1.setStrip2(2); + _object1.setPosition(Common::Point(191, 166)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(7223); + _object2.setPosition(Common::Point(159, 86)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(7223); + _object3.setStrip(3); + _object3.setPosition(Common::Point(119, 107)); + _object3.fixPriority(199); + _object3.setAction(&_action2); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerOR::SpeakerOR() { + _speakerName = "OR"; + _newSceneNumber = 9430; + _textPos = Common::Point(8, 36); + _color1 = 42; + _textWidth = 136; +} + +void SpeakerOR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(9431); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(202, 147)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(9431); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.setZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(199, 85)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerOText::SpeakerOText() : SpeakerGText() { + _speakerName = "OTEXT"; + _textWidth = 240; + _textPos = Common::Point(130, 10); + _color1 = 42; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerQText::SpeakerQText() : ScreenSpeaker() { + _speakerName = "QTEXT"; + _textPos = Common::Point(160, 40); + _color1 = 35; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSText::SpeakerSText() : ScreenSpeaker() { + _speakerName = "STEXT"; + _color1 = 13; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPOText::SpeakerPOText() : ScreenSpeaker() { + _speakerName = "POTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 41; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerMText::SpeakerMText() { + _speakerName = "MTEXT"; + _color1 = 22; + _textWidth = 230; + _textMode = ALIGN_CENTER; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCText::SpeakerCText() { + _speakerName = "CTEXT"; + _color1 = 4; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerEText::SpeakerEText() { + _speakerName = "ETEXT"; + _textPos = Common::Point(20, 20); + _color1 = 22; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerGR::SpeakerGR() : AnimatedSpeaker() { + _speakerName = "GR"; + _newSceneNumber = 9220; + _textWidth = 136; + _textPos = Common::Point(168, 36); + _color1 = 14; +} + +void SpeakerGR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(9221); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(101, 70)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerHText::SpeakerHText() { + _speakerName = "HTEXT"; + _textPos = Common::Point(160, 40); + _color1 = 52; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSKText::SpeakerSKText() : ScreenSpeaker() { + _speakerName = "SKTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 9; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPText::SpeakerPText() { + _speakerName = "PTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 5; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCHFText::SpeakerCHFText() { + _speakerName = "CHFTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 56; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCDRText::SpeakerCDRText() { + _speakerName = "CDRTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 52; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerFLText::SpeakerFLText() { + _speakerName = "FLTEXT"; + _textPos = Common::Point(10, 40); + _color1 = 17; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerBatText::SpeakerBatText() { + _speakerName = "BATTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTER; + _color1 = 3; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSKL::SpeakerSKL() : AnimatedSpeaker() { + _speakerName = "SKL"; + _newSceneNumber = 7011; + _textPos = Common::Point(10, 30); + _color1 = 9; +} + +void SpeakerSKL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7013); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(203, 120)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(7013); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(197, 80)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerQL::SpeakerQL() : AnimatedSpeaker() { + _speakerName = "QL"; + _newSceneNumber = 2610; + _textPos = Common::Point(160, 30); + _color1 = 35; + _textMode = ALIGN_CENTER; +} + +void SpeakerQL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2612); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(128, 146)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2612); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(122, 84)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSR::SpeakerSR() { + _speakerName = "SR"; + _newSceneNumber = 2811; + _textPos = Common::Point(10, 30); + _color1 = 13; + _textMode = ALIGN_CENTER; +} + +void SpeakerSR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2813); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(224, 198)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2813); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(203, 96)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(2813); + _object3.setStrip(3); + _object3.setPosition(Common::Point(204, 91)); + _object3.fixPriority(199); + _object3._numFrames = 3; + _object3.animate(ANIM_MODE_7, 0, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSL::SpeakerSL() { + _speakerName = "SL"; + _newSceneNumber = 2810; + _textPos = Common::Point(140, 30); + _textWidth = 160; + _color1 = 13; + _textMode = ALIGN_CENTER; +} + +void SpeakerSL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2812); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(95, 198)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2812); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(116, 96)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerQR::SpeakerQR() { + _speakerName = "QR"; + _newSceneNumber = 2611; + _textPos = Common::Point(10, 30); + _color1 = 35; + _textMode = ALIGN_CENTER; +} + +void SpeakerQR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2613); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(191, 146)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2613); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(197, 84)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerQU::SpeakerQU() { + _speakerName = "QU"; + _newSceneNumber = 7020; + _textPos = Common::Point(160, 30); + _color1 = 35; + _textMode = ALIGN_CENTER; +} + +void SpeakerQU::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7021); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(116, 120)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(7021); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(111, 84)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCR::SpeakerCR() { + _speakerName = "CR"; + _newSceneNumber = 9010; + _textPos = Common::Point(20, 40); + _color1 = 4; +} + +void SpeakerCR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(9011); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.setPosition(Common::Point(219, 168)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(9011); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.setPosition(Common::Point(232, 81)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerMR::SpeakerMR() { + _speakerName = "MR"; + _newSceneNumber = 2711; + _textPos = Common::Point(10, 40); + _color1 = 22; +} + +void SpeakerMR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2713); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(220, 143)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2713); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(215, 99)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSAL::SpeakerSAL() { + _speakerName = "SAL"; + _newSceneNumber = 2851; + _textPos = Common::Point(10, 30); + _color1 = 13; + _textMode = ALIGN_CENTER; +} + +void SpeakerSAL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2853); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(185, 200)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2853); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(170, 92)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerML::SpeakerML() { + _speakerName = "ML"; + _newSceneNumber = 2710; + _textPos = Common::Point(160, 40); + _color1 = 22; +} + +void SpeakerML::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(2712); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(99, 143)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(2712); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(105, 99)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCHFL::SpeakerCHFL() { + _speakerName = "CHFL"; + _newSceneNumber = 4111; + _textPos = Common::Point(10, 40); + _color1 = 56; +} + +void SpeakerCHFL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4113); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(205, 116)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4113); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(202, 71)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCHFR::SpeakerCHFR() { + _speakerName = "CHFR"; + _newSceneNumber = 4110; + _textPos = Common::Point(160, 40); + _color1 = 56; +} + +void SpeakerCHFR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4112); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(103, 116)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4112); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(106, 71)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPL::SpeakerPL() { + _speakerName = "PL"; + _newSceneNumber = 4060; + _textPos = Common::Point(160, 40); + _color1 = 5; +} + +void SpeakerPL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4062); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(107, 117)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4062); + _object2.setStrip2(1); + _object2.fixPriority(200); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(105, 62)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(4062); + _object3.setStrip2(3); + _object3.fixPriority(255); + _object3.changeZoom(100); + _object3._frame = 1; + _object3.setPosition(Common::Point(105, 59)); + _object3.setAction(&_speakerAction2, NULL); + + Speaker::setText(msg); +} + +void SpeakerPL::removeText() { + _object3.remove(); + AnimatedSpeaker::removeText(); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPR::SpeakerPR() { + _speakerName = "PR"; + _newSceneNumber = 4061; + _textPos = Common::Point(10, 40); + _color1 = 5; +} + +void SpeakerPR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4063); + _object1.setStrip2(1); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(212, 117)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4063); + _object2.setStrip2(2); + _object2.fixPriority(200); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(214, 62)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(4063); + _object3.setStrip2(3); + _object3.fixPriority(255); + _object3.changeZoom(100); + _object3._frame = 1; + _object3.setPosition(Common::Point(214, 59)); + _object3.setAction(&_speakerAction2, NULL); + + Speaker::setText(msg); +} + +void SpeakerPR::removeText() { + _object3.remove(); + AnimatedSpeaker::removeText(); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCDR::SpeakerCDR() { + _speakerName = "CDR"; + _newSceneNumber = 4161; + _textPos = Common::Point(10, 40); + _color1 = 52; +} + +void SpeakerCDR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4163); + _object1.setStrip2(1); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(208, 97)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4163); + _object2.setStrip2(2); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(200, 57)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCDL::SpeakerCDL() { + _speakerName = "CDL"; + _newSceneNumber = 4160; + _textPos = Common::Point(160, 40); + _color1 = 52; +} + +void SpeakerCDL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4162); + _object1.setStrip2(1); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(112, 97)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4162); + _object2.setStrip2(2); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(115, 57)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerFLL::SpeakerFLL() { + _speakerName = "FLL"; + _newSceneNumber = 5221; + _textPos = Common::Point(10, 40); + _color1 = 17; +} + +void SpeakerFLL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(5223); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(216, 129)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(5223); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(210, 67)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerBatR::SpeakerBatR() { + _speakerName = "BATR"; + _newSceneNumber = 5360; + _textPos = Common::Point(140, 40); + _color1 = 3; +} + +void SpeakerBatR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(5361); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(137, 122)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(5361); + _object2.setStrip2(1); + _object2.fixPriority(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(137, 104)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +RingworldInvObjectList::RingworldInvObjectList() : + _stunner(2280, 1, 2, OBJECT_STUNNER, "This is your stunner."), + _scanner(1, 1, 3, OBJECT_SCANNER, "A combination scanner comm unit."), + _stasisBox(5200, 1, 4, OBJECT_STASIS_BOX, "A stasis box."), + _infoDisk(40, 1, 1, OBJECT_INFODISK, "The infodisk you took from the assassin."), + _stasisNegator(0, 2, 2, OBJECT_STASIS_NEGATOR, "The stasis field negator."), + _keyDevice(4250, 1, 6, OBJECT_KEY_DEVICE, "A magnetic key device."), + _medkit(2280, 1, 7, OBJECT_MEDKIT, "Your medkit."), + _ladder(4100, 1, 8, OBJECT_LADDER, "The chief's ladder."), + _rope(4150, 1, 9, OBJECT_ROPE, "The chief's rope."), + _key(7700, 1, 11, OBJECT_KEY, "A key."), + _translator(7700, 1, 13, OBJECT_TRANSLATOR, "The dolphin translator box."), + _ale(2150, 1, 10, OBJECT_ALE, "A bottle of ale."), + _paper(7700, 1, 12, OBJECT_PAPER, "A slip of paper with the numbers 2,4, and 3 written on it."), + _waldos(0, 1, 14, OBJECT_WALDOS, "A pair of waldos from the ruined probe."), + _stasisBox2(8100, 1, 4, OBJECT_STASIS_BOX2, "A stasis box."), + _ring(8100, 2, 5, OBJECT_RING, "This is a signet ring sent to you by Louis Wu."), + _cloak(9850, 2, 6, OBJECT_CLOAK, "A fine silk cloak."), + _tunic(9450, 2, 7, OBJECT_TUNIC, "The patriarch's soiled tunic."), + _candle(9500, 2, 8, OBJECT_CANDLE, "A tallow candle."), + _straw(9400, 2, 9, OBJECT_STRAW, "Clean, dry straw."), + _scimitar(9850, 1, 18, OBJECT_SCIMITAR, "A scimitar from the Patriarch's closet."), + _sword(9850, 1, 17, OBJECT_SWORD, "A short sword from the Patriarch's closet."), + _helmet(9500, 2, 4, OBJECT_HELMET, "Some type of helmet."), + _items(4300, 2, 10, OBJECT_ITEMS, "Two interesting items from the Tnuctipun vessel."), + _concentrator(4300, 2, 11, OBJECT_CONCENTRATOR, "The Tnuctipun anti-matter concentrator contained in a stasis field."), + _nullifier(5200, 2, 12, OBJECT_NULLIFIER, "A purported neural wave nullifier."), + _peg(4045, 2, 16, OBJECT_PEG, "A peg with a symbol."), + _vial(5100, 2, 17, OBJECT_VIAL, "A vial of the bat creatures anti-pheromone drug."), + _jacket(9850, 3, 1, OBJECT_JACKET, "A natty padded jacket."), + _tunic2(9850, 3, 2, OBJECT_TUNIC2, "A very hairy tunic."), + _bone(5300, 3, 5, OBJECT_BONE, "A very sharp bone."), + _jar(7700, 3, 4, OBJECT_JAR, "An jar filled with a green substance."), + _emptyJar(7700, 3, 3, OBJECT_EMPTY_JAR, "An empty jar.") { + + // Add the items to the list + _itemList.push_back(&_stunner); + _itemList.push_back(&_scanner); + _itemList.push_back(&_stasisBox); + _itemList.push_back(&_infoDisk); + _itemList.push_back(&_stasisNegator); + _itemList.push_back(&_keyDevice); + _itemList.push_back(&_medkit); + _itemList.push_back(&_ladder); + _itemList.push_back(&_rope); + _itemList.push_back(&_key); + _itemList.push_back(&_translator); + _itemList.push_back(&_ale); + _itemList.push_back(&_paper); + _itemList.push_back(&_waldos); + _itemList.push_back(&_stasisBox2); + _itemList.push_back(&_ring); + _itemList.push_back(&_cloak); + _itemList.push_back(&_tunic); + _itemList.push_back(&_candle); + _itemList.push_back(&_straw); + _itemList.push_back(&_scimitar); + _itemList.push_back(&_sword); + _itemList.push_back(&_helmet); + _itemList.push_back(&_items); + _itemList.push_back(&_concentrator); + _itemList.push_back(&_nullifier); + _itemList.push_back(&_peg); + _itemList.push_back(&_vial); + _itemList.push_back(&_jacket); + _itemList.push_back(&_tunic2); + _itemList.push_back(&_bone); + _itemList.push_back(&_jar); + _itemList.push_back(&_emptyJar); + + _selectedItem = NULL; +} + +/*--------------------------------------------------------------------------*/ + +void RingworldGame::restartGame() { + if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1) + _globals->_game->restart(); +} + +void RingworldGame::saveGame() { + if (!_vm->canSaveGameStateCurrently()) + MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING); + else { + // Show the save dialog + handleSaveLoad(true, _globals->_sceneHandler._saveGameSlot, _globals->_sceneHandler._saveName); + } +} + +void RingworldGame::restoreGame() { + if (!_vm->canLoadGameStateCurrently()) + MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING); + else { + // Show the load dialog + handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName); + } +} + +void RingworldGame::quitGame() { + if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) + _vm->quitGame(); +} + +void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) { + const EnginePlugin *plugin = 0; + EngineMan.findGame(_vm->getGameId(), &plugin); + GUI::SaveLoadChooser *dialog; + if (saveFlag) + dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save")); + else + dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load")); + + dialog->setSaveMode(saveFlag); + + saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName()); + saveName = dialog->getResultString(); + + delete dialog; +} + +void RingworldGame::start() { + // Set some default flags + _globals->setFlag(12); + _globals->setFlag(34); + + // Set the screen to scroll in response to the player moving off-screen + _globals->_scrollFollower = &_globals->_player; + + // Set the object's that will be in the player's inventory by default + RING_INVENTORY._stunner._sceneNumber = 1; + RING_INVENTORY._scanner._sceneNumber = 1; + RING_INVENTORY._ring._sceneNumber = 1; + + int slot = -1; + + if (ConfMan.hasKey("save_slot")) { + slot = ConfMan.getInt("save_slot"); + Common::String file = _vm->generateSaveName(slot); + Common::InSaveFile *in = _vm->_system->getSavefileManager()->openForLoading(file); + if (in) + delete in; + else + slot = -1; + } + + if (slot >= 0) + _globals->_sceneHandler._loadGameSlot = slot; + else + // Switch to the title screen + _globals->_sceneManager.setNewScene(1000); + + _globals->_events.showCursor(); +} + +void RingworldGame::restart() { + _globals->_scenePalette.clearListeners(); + _globals->_soundHandler.stop(); + + // Reset the flags + _globals->reset(); + _globals->setFlag(34); + + // Clear save/load slots + _globals->_sceneHandler._saveGameSlot = -1; + _globals->_sceneHandler._loadGameSlot = -1; + + _globals->_stripNum = 0; + _globals->_events.setCursor(CURSOR_WALK); + + // Reset item properties + RING_INVENTORY._stunner._sceneNumber = 1; + RING_INVENTORY._scanner._sceneNumber = 1; + RING_INVENTORY._stasisBox._sceneNumber = 5200; + RING_INVENTORY._infoDisk._sceneNumber = 40; + RING_INVENTORY._stasisNegator._sceneNumber = 0; + RING_INVENTORY._keyDevice._sceneNumber = 0; + RING_INVENTORY._medkit._sceneNumber = 2280; + RING_INVENTORY._ladder._sceneNumber = 4100; + RING_INVENTORY._rope._sceneNumber = 4150; + RING_INVENTORY._key._sceneNumber = 7700; + RING_INVENTORY._translator._sceneNumber = 2150; + RING_INVENTORY._paper._sceneNumber = 7700; + RING_INVENTORY._waldos._sceneNumber = 0; + RING_INVENTORY._ring._sceneNumber = 1; + RING_INVENTORY._stasisBox2._sceneNumber = 8100; + RING_INVENTORY._cloak._sceneNumber = 9850; + RING_INVENTORY._tunic._sceneNumber = 9450; + RING_INVENTORY._candle._sceneNumber = 9500; + RING_INVENTORY._straw._sceneNumber = 9400; + RING_INVENTORY._scimitar._sceneNumber = 9850; + RING_INVENTORY._sword._sceneNumber = 9850; + RING_INVENTORY._helmet._sceneNumber = 9500; + RING_INVENTORY._items._sceneNumber = 4300; + RING_INVENTORY._concentrator._sceneNumber = 4300; + RING_INVENTORY._nullifier._sceneNumber = 4300; + RING_INVENTORY._peg._sceneNumber = 4045; + RING_INVENTORY._vial._sceneNumber = 5100; + RING_INVENTORY._jacket._sceneNumber = 9850; + RING_INVENTORY._tunic2._sceneNumber = 9850; + RING_INVENTORY._bone._sceneNumber = 5300; + RING_INVENTORY._jar._sceneNumber = 7700; + RING_INVENTORY._emptyJar._sceneNumber = 7700; + RING_INVENTORY._selectedItem = NULL; + + // Change to the first game scene + _globals->_sceneManager.changeScene(30); +} + +void RingworldGame::endGame(int resNum, int lineNum) { + _globals->_events.setCursor(CURSOR_WALK); + Common::String msg = _resourceManager->getMessage(resNum, lineNum); + bool savesExist = _saver->savegamesExist(); + + if (!savesExist) { + // No savegames exist, so prompt the user to restart or quit + if (MessageDialog::show(msg, QUIT_BTN_STRING, RESTART_BTN_STRING) == 0) + _vm->quitGame(); + else + restart(); + } else { + // Savegames exist, so prompt for Restore/Restart + bool breakFlag; + do { + if (_vm->shouldQuit()) { + breakFlag = true; + } else if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) { + restart(); + breakFlag = true; + } else { + handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName); + breakFlag = _globals->_sceneHandler._loadGameSlot >= 0; + } + } while (!breakFlag); + } + + _globals->_events.setCursorFromFlag(); +} + +void RingworldGame::processEvent(Event &event) { + if (event.eventType == EVENT_KEYPRESS) { + switch (event.kbd.keycode) { + case Common::KEYCODE_F1: + // F1 - Help + MessageDialog::show(HELP_MSG, OK_BTN_STRING); + break; + + case Common::KEYCODE_F2: { + // F2 - Sound Options + ConfigDialog *dlg = new ConfigDialog(); + dlg->runModal(); + delete dlg; + _globals->_soundManager.syncSounds(); + _globals->_events.setCursorFromFlag(); + break; + } + + case Common::KEYCODE_F3: + // F3 - Quit + quitGame(); + event.handled = false; + break; + + case Common::KEYCODE_F4: + // F4 - Restart + restartGame(); + _globals->_events.setCursorFromFlag(); + break; + + case Common::KEYCODE_F7: + // F7 - Restore + restoreGame(); + _globals->_events.setCursorFromFlag(); + break; + + case Common::KEYCODE_F10: + // F10 - Pause + GfxDialog::setPalette(); + MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING); + _globals->_events.setCursorFromFlag(); + break; + + default: + break; + } + } +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h new file mode 100644 index 0000000000..19b0f10b42 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_logic.h @@ -0,0 +1,461 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_LOGIC_H +#define TSAGE_RINGWORLD_LOGIC_H + +#include "common/scummsys.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace tSage { + +#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ + _globals->_player.addMover(mover, &pt, this); } +#define ADD_PLAYER_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ + OBJ.addMover(mover, &pt, NULL); } +#define ADD_PLAYER_MOVER_THIS(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ + OBJ.addMover(mover, &pt, this); } + +#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \ + OBJ.addMover(mover, &pt, this); } +#define ADD_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \ + OBJ.addMover(mover, &pt, NULL); } + + +class SceneFactory { +public: + static Scene *createScene(int sceneNumber); +}; + +class DisplayHotspot : public SceneObject { +private: + Common::Array _actions; + bool performAction(int action); +public: + DisplayHotspot(int regionId, ...); + + virtual void doAction(int action) { + if (!performAction(action)) + SceneHotspot::doAction(action); + } +}; + +class DisplayObject : public SceneObject { +private: + Common::Array _actions; + bool performAction(int action); +public: + DisplayObject(int firstAction, ...); + + virtual void doAction(int action) { + if (!performAction(action)) + SceneHotspot::doAction(action); + } +}; + +class SceneArea : public SavedObject { +public: + GfxSurface _surface; + GfxSurface *_savedArea; + Common::Point _pt; + int _resNum; + int _rlbNum; + int _subNum; + int _actionId; + Rect _bounds; +public: + SceneArea(); + ~SceneArea(); + + void setup(int resNum, int rlbNum, int subNum, int actionId); + void draw2(); + void display(); + void restore(); + + virtual void synchronize(Serializer &s); + virtual void draw(bool flag); + virtual void wait(); +}; + +/*--------------------------------------------------------------------------*/ +// Ringworld specific game speakers + +class SpeakerGText : public Speaker { +public: + SceneObject _sceneObject; +public: + SpeakerGText(); + + virtual Common::String getClassName() { return "SpeakerGText"; } + virtual void setText(const Common::String &msg); + virtual void removeText(); +}; + +class SpeakerPOR : public AnimatedSpeaker { + class SpeakerAction1 : public SpeakerAction { + public: + virtual void signal(); + }; + +public: + SceneObject _object3; + SpeakerAction1 _action2; +public: + SpeakerPOR(); + virtual Common::String getClassName() { return "SpeakerPOR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerOR : public AnimatedSpeaker { +public: + SpeakerOR(); + virtual Common::String getClassName() { return "SpeakerOR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerOText : public SpeakerGText { +public: + SpeakerOText(); + + virtual Common::String getClassName() { return "SpeakerOText"; } +}; + +class SpeakerPOText : public ScreenSpeaker { +public: + SpeakerPOText(); + + virtual Common::String getClassName() { return "SpeakerPOText"; } +}; + +class SpeakerSText : public ScreenSpeaker { +public: + SpeakerSText(); + + virtual Common::String getClassName() { return "SpeakerSText"; } +}; + +class SpeakerQText : public ScreenSpeaker { +public: + SpeakerQText(); + + virtual Common::String getClassName() { return "SpeakerQText"; } +}; + +class SpeakerMText : public ScreenSpeaker { +public: + SpeakerMText(); + + virtual Common::String getClassName() { return "SpeakerMText"; } +}; + +class SpeakerCText : public ScreenSpeaker { +public: + SpeakerCText(); + + virtual Common::String getClassName() { return "SpeakerCText"; } +}; + +class SpeakerEText : public ScreenSpeaker { +public: + SpeakerEText(); + + virtual Common::String getClassName() { return "SpeakerEText"; } +}; + +class SpeakerGR : public AnimatedSpeaker { +public: + SpeakerGR(); + + virtual Common::String getClassName() { return "SpeakerGR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerHText : public ScreenSpeaker { +public: + SpeakerHText(); + + virtual Common::String getClassName() { return "SpeakerHText"; } +}; + +class SpeakerPText : public ScreenSpeaker { +public: + SpeakerPText(); + + virtual Common::String getClassName() { return "SpeakerPText"; } +}; + +class SpeakerCHFText : public ScreenSpeaker { +public: + SpeakerCHFText(); + + virtual Common::String getClassName() { return "SpeakerCHFText"; } +}; + +class SpeakerSKText : public ScreenSpeaker { +public: + SpeakerSKText(); + + virtual Common::String getClassName() { return "SpeakerSKText"; } +}; + +class SpeakerCDRText : public ScreenSpeaker { +public: + SpeakerCDRText(); + + virtual Common::String getClassName() { return "SpeakerCDRText"; } +}; + +class SpeakerFLText : public ScreenSpeaker { +public: + SpeakerFLText(); + + virtual Common::String getClassName() { return "SpeakerFLText"; } +}; + +class SpeakerBatText : public ScreenSpeaker { +public: + SpeakerBatText(); + + virtual Common::String getClassName() { return "SpeakerFLText"; } +}; + +class SpeakerQR : public AnimatedSpeaker { +public: + SpeakerQR(); + + virtual Common::String getClassName() { return "SpeakerQR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerQU : public AnimatedSpeaker { +public: + SpeakerQU(); + + virtual Common::String getClassName() { return "SpeakerQU"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerSKL : public AnimatedSpeaker { +public: + SpeakerSKL(); + + virtual Common::String getClassName() { return "SpeakerQL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerQL : public AnimatedSpeaker { +public: + SpeakerQL(); + + virtual Common::String getClassName() { return "SpeakerQL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerSR : public AnimatedSpeaker { +public: + SceneObject _object3; +public: + SpeakerSR(); + + virtual Common::String getClassName() { return "SpeakerSR"; } + void setText(const Common::String &msg); +}; + +class SpeakerSL : public AnimatedSpeaker { +public: + SpeakerSL(); + + virtual Common::String getClassName() { return "SpeakerSL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCR : public AnimatedSpeaker { +public: + SpeakerCR(); + + virtual Common::String getClassName() { return "SpeakerCR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerMR : public AnimatedSpeaker { +public: + SpeakerMR(); + + virtual Common::String getClassName() { return "SpeakerMR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerSAL : public AnimatedSpeaker { +public: + SpeakerSAL(); + + virtual Common::String getClassName() { return "SpeakerSAL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerML : public AnimatedSpeaker { +public: + SpeakerML(); + + virtual Common::String getClassName() { return "SpeakerML"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCHFL : public AnimatedSpeaker { +public: + SpeakerCHFL(); + + virtual Common::String getClassName() { return "SpeakerCHFL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCHFR : public AnimatedSpeaker { +public: + SpeakerCHFR(); + + virtual Common::String getClassName() { return "SpeakerCHFR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerPL : public AnimatedSpeaker { +public: + SceneObject _object3; + SpeakerAction _speakerAction2; + + SpeakerPL(); + + virtual Common::String getClassName() { return "SpeakerPL"; } + virtual void setText(const Common::String &msg); + virtual void removeText(); +}; + +class SpeakerPR : public AnimatedSpeaker { +public: + SceneObject _object3; + SpeakerAction _speakerAction2; + + SpeakerPR(); + + virtual Common::String getClassName() { return "SpeakerPR"; } + virtual void setText(const Common::String &msg); + virtual void removeText(); +}; + +class SpeakerCDR : public AnimatedSpeaker { +public: + SpeakerCDR(); + + virtual Common::String getClassName() { return "SpeakerCDR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCDL : public AnimatedSpeaker { +public: + SpeakerCDL(); + + virtual Common::String getClassName() { return "SpeakerCDL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerFLL : public AnimatedSpeaker { +public: + SpeakerFLL(); + + virtual Common::String getClassName() { return "SpeakerFLL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerBatR : public AnimatedSpeaker { +public: + SpeakerBatR(); + + virtual Common::String getClassName() { return "SpeakerBatR"; } + virtual void setText(const Common::String &msg); +}; + +/*--------------------------------------------------------------------------*/ + +class RingworldInvObjectList : public InvObjectList { +public: + InvObject _stunner; + InvObject _scanner; + InvObject _stasisBox; + InvObject _infoDisk; + InvObject _stasisNegator; + InvObject _keyDevice; + InvObject _medkit; + InvObject _ladder; + InvObject _rope; + InvObject _key; + InvObject _translator; + InvObject _ale; + InvObject _paper; + InvObject _waldos; + InvObject _stasisBox2; + InvObject _ring; + InvObject _cloak; + InvObject _tunic; + InvObject _candle; + InvObject _straw; + InvObject _scimitar; + InvObject _sword; + InvObject _helmet; + InvObject _items; + InvObject _concentrator; + InvObject _nullifier; + InvObject _peg; + InvObject _vial; + InvObject _jacket; + InvObject _tunic2; + InvObject _bone; + InvObject _jar; + InvObject _emptyJar; +public: + RingworldInvObjectList(); + + virtual Common::String getClassName() { return "RingworldInvObjectList"; } +}; + +#define RING_INVENTORY (*((RingworldInvObjectList *)_globals->_inventory)) + +class RingworldGame: public Game { +protected: + virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName); +public: + virtual void start(); + virtual void restart(); + virtual void restartGame(); + virtual void saveGame(); + virtual void restoreGame(); + virtual void quitGame(); + virtual void endGame(int resNum, int lineNum); + + virtual Scene *createScene(int sceneNumber); + virtual void processEvent(Event &event); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp new file mode 100644 index 0000000000..880fa51e6e --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes1.cpp @@ -0,0 +1,3345 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/ringworld/ringworld_scenes1.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 10 - Kziniti Palace (Introduction) + * + *--------------------------------------------------------------------------*/ + +void Scene10::Action1::signal() { + Scene10 *scene = (Scene10 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(6); + break; + case 1: + _globals->_scenePalette.addRotation(240, 254, -1); + scene->_stripManager.start(10, this); + break; + case 2: + scene->_speakerSText.setTextPos(Common::Point(20, 20)); + scene->_speakerSText._color1 = 10; + scene->_speakerSText._textWidth = 160; + scene->_stripManager.start(11, this, scene); + break; + case 3: + scene->_object2.hide(); + scene->_object3.hide(); + scene->_object3.setAction(NULL); + scene->_object4.animate(ANIM_MODE_5, this); + break; + case 4: + case 9: + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 5: + scene->_object2.setStrip(3); + scene->_object2.setFrame(1); + scene->_object2.setPosition(Common::Point(240, 51)); + scene->_object2.show(); + + scene->_object3.setStrip(6); + scene->_object3.setFrame(1); + scene->_object3.setPosition(Common::Point(200, 76)); + scene->_object3._numFrames = 20; + scene->_object3.show(); + + scene->_stripManager.start(12, this, scene); + break; + case 6: + scene->_object2.hide(); + scene->_object3.hide(); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 7: + scene->_object3.show(); + scene->_object3.setStrip2(5); + scene->_object3._numFrames = 10; + scene->_object3.setPosition(Common::Point(180, 87)); + scene->_object3.setAction(&scene->_action2); + + scene->_object2.setStrip(4); + scene->_object2.setFrame(1); + scene->_object2.setPosition(Common::Point(204, 59)); + scene->_object2.show(); + + scene->_stripManager.start(13, this, scene); + break; + case 8: + scene->_object2.hide(); + scene->_object3.hide(); + scene->_object4.animate(ANIM_MODE_6, this); + break; + case 10: + _globals->_soundHandler.fadeOut(this); + break; + case 11: + _globals->_scenePalette.clearListeners(); + _globals->_sceneManager.changeScene(15); + break; + } +} + +void Scene10::Action2::signal() { + Scene10 *scene = (Scene10 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(179)); + break; + case 1: + scene->_object3.setFrame(1); + scene->_object3.animate(ANIM_MODE_5, this); + _actionIndex = 0; + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene10::postInit(SceneObjectList *OwnerList) { + loadScene(10); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerQText); + _speakerSText._speakerName = "STEXT"; + _speakerQText._speakerName = "QTEXT"; + _speakerSText._hideObjects = false; + _speakerQText._hideObjects = false; + _speakerQText.setTextPos(Common::Point(140, 120)); + _speakerQText._color1 = 4; + _speakerQText._textWidth = 160; + _speakerSText.setTextPos(Common::Point(20, 20)); + _speakerSText._color1 = 7; + _speakerSText._textWidth = 320; + + _stripManager.setCallback(this); + + _object1.postInit(); + _object1.setVisage(10); + _object1.setPosition(Common::Point(232, 90)); + _object1.fixPriority(1); + + _object2.postInit(); + _object2.setVisage(10); + _object2.setStrip(4); + _object2.setFrame(1); + _object2.setPosition(Common::Point(204, 59)); + _object2.fixPriority(198); + + _object3.postInit(); + _object3.setVisage(10); + _object3.setStrip2(5); + _object3.setPosition(Common::Point(180, 87)); + _object3.fixPriority(196); + _object3.setAction(&_action2); + + _object4.postInit(); + _object4.setVisage(10); + _object4.setStrip(2); + _object4.setPosition(Common::Point(0, 209)); + _object4.animate(ANIM_MODE_1, NULL); + + _object5.postInit(); + _object5.setVisage(11); + _object5.setPosition(Common::Point(107, 146)); + _object5.animate(ANIM_MODE_2, NULL); + _object5._numFrames = 5; + + _object6.postInit(); + _object6.setVisage(11); + _object6.setStrip(2); + _object6.setPosition(Common::Point(287, 149)); + _object6.animate(ANIM_MODE_2, NULL); + _object6._numFrames = 5; + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; + + setAction(&_action1); + _globals->_soundHandler.play(5); +} + +void Scene10::stripCallback(int v) { + switch (v) { + case 1: + _object2.animate(ANIM_MODE_7, -1, NULL); + break; + case 2: + _object2.animate(ANIM_MODE_NONE); + break; + case 3: + _object2.animate(ANIM_MODE_7, -1, NULL); + _object3.animate(ANIM_MODE_5, NULL); + break; + default: + break; + } +} + +/*-------------------------------------------------------------------------- + * Scene 15 - Outer Space (Introduction) + * + *--------------------------------------------------------------------------*/ + +void Scene15::Action1::signal() { + Scene15 *scene = (Scene15 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + SceneItem::display(15, 0, SET_Y, 20, SET_FONT, 2, SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 7, + SET_WIDTH, 320, SET_KEEP_ONSCREEN, 1, LIST_END); + setDelay(300); + break; + case 2: { + SceneItem::display(15, 1, SET_Y, 20, SET_FONT, 2, SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 7, + SET_WIDTH, 320, SET_KEEP_ONSCREEN, 1, LIST_END); + scene->_object1.postInit(); + scene->_object1.setVisage(15); + scene->_object1.setPosition(Common::Point(160, -10)); + scene->_object1.animate(ANIM_MODE_2, NULL); + Common::Point pt(160, 100); + NpcMover *mover = new NpcMover(); + scene->_object1.addMover(mover, &pt, this); + scene->_soundHandler.play(7); + break; + } + case 3: + SceneItem::display(0, 0); + _globals->_sceneManager.changeScene(20); + break; + } +} + +void Scene15::Action1::dispatch() { + Scene15 *scene = (Scene15 *)_globals->_sceneManager._scene; + + if (scene->_object1._position.y < 100) + scene->_object1.changeZoom(100 - scene->_object1._position.y); + Action::dispatch(); +} + +/*--------------------------------------------------------------------------*/ + +void Scene15::postInit(SceneObjectList *OwnerList) { + loadScene(15); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + _globals->_soundHandler.play(6); + setAction(&_action1); +} + +/*-------------------------------------------------------------------------- + * Scene 20 - Cut-scenes where House Chmeee is in the distance + * + *--------------------------------------------------------------------------*/ + +void Scene20::Action1::signal() { + Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(120); + break; + case 1: + scene->_stripManager.start(20, this); + break; + case 2: + _globals->_soundHandler.fadeOut(this); + break; + case 3: + _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; + _globals->_sceneManager.changeScene(30); // First game scene + break; + default: + break; + } +} + +void Scene20::Action2::signal() { + Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene; + NpcMover *npcMover; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + SceneItem::display(20, 1, SET_WIDTH, 200, SET_Y, 20, SET_X, 160, SET_KEEP_ONSCREEN, true, + SET_EXT_BGCOLOR, 4, LIST_END); + setDelay(120); + break; + case 2: { + NpcMover *mover = new NpcMover(); + Common::Point pt(455, 77); + _globals->_player.addMover(mover, &pt, this); + ObjectMover2 *mover2 = new ObjectMover2(); + scene->_SceneObjectExt.addMover(mover2, 5, 10, &_globals->_player); + ObjectMover2 *mover3 = new ObjectMover2(); + scene->_sceneObject3.addMover(mover3, 10, 15, &_globals->_player); + break; + } + case 3: { + npcMover = new NpcMover(); + Common::Point pt(557, 100); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 4: { + npcMover = new NpcMover(); + Common::Point pt(602, 90); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 5: { + npcMover = new NpcMover(); + Common::Point pt(618, 90); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 6: { + npcMover = new NpcMover(); + Common::Point pt(615, 81); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 7: { + npcMover = new NpcMover(); + Common::Point pt(588, 79); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 8: + scene->_sound.release(); + _globals->_soundHandler.fadeOut(this); + break; + case 9: + SceneItem::display(0, 0, LIST_END); + _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; + _globals->_sceneManager.changeScene(40); + break; + default: + break; + } +} + +void Scene20::Action3::signal() { + Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene; + NpcMover *npcMover; + + switch (_actionIndex++) { + case 0: + setDelay(120); + break; + case 1: { + npcMover = new NpcMover(); + Common::Point pt(615, 81); + _globals->_player.addMover(npcMover, &pt, this); + ObjectMover2 *mover1 = new ObjectMover2(); + scene->_SceneObjectExt.addMover(mover1, 5, 10, &_globals->_player); + ObjectMover2 *mover2 = new ObjectMover2(); + scene->_sceneObject3.addMover(mover2, 20, 25, &_globals->_player); + break; + } + case 2: { + npcMover = new NpcMover(); + Common::Point pt(618, 90); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 3: { + _globals->_player._moveDiff = Common::Point(10, 10); + scene->_SceneObjectExt._moveDiff = Common::Point(10, 10); + scene->_sceneObject3._moveDiff = Common::Point(10, 10); + npcMover = new NpcMover(); + Common::Point pt(445, 132); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 4: { + npcMover = new NpcMover(); + Common::Point pt(151, 137); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 5: { + npcMover = new NpcMover(); + Common::Point pt(-15, 137); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 6: + scene->_sound.play(60, this, 127); + _globals->_soundHandler.release(); + break; + case 7: + _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; + _globals->_sceneManager.changeScene(90); + break; + default: + break; + } +} + +void Scene20::Action4::signal() { + Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene; + NpcMover *npcMover; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: { + npcMover = new NpcMover(); + Common::Point pt(486, 134); + _globals->_player.addMover(npcMover, &pt, this); + ObjectMover2 *mover1 = new ObjectMover2(); + scene->_SceneObjectExt.addMover(mover1, 20, 35, &_globals->_player); + break; + } + case 2: { + _globals->_player._moveDiff = Common::Point(12, 12); + scene->_SceneObjectExt._moveDiff = Common::Point(12, 12); + NpcMover *mover1 = new NpcMover(); + Common::Point pt(486, 134); + scene->_sceneObject3.addMover(mover1, &pt, this); + NpcMover *mover2 = new NpcMover(); + pt = Common::Point(-15, 134); + _globals->_player.addMover(mover2, &pt, NULL); + NpcMover *mover3 = new NpcMover(); + pt = Common::Point(-15, 134); + scene->_SceneObjectExt.addMover(mover3, &pt, NULL); + break; + } + case 3: { + scene->_sceneObject3._moveDiff = Common::Point(20, 20); + npcMover = new NpcMover(); + Common::Point pt(320, 134); + scene->_sceneObject3.addMover(npcMover, &pt, this); + break; + } + case 4: { + scene->_sound.play(28); + scene->_sceneObject4.postInit(); + scene->_sceneObject4.setVisage(21); + scene->_sceneObject4.setStrip(3); + scene->_sceneObject4.setPosition(Common::Point(scene->_sceneObject3._position.x - 36, + scene->_sceneObject3._position.y - 1)); + scene->_sceneObject4._moveDiff.x = 48; + + ObjectMover3 *mover = new ObjectMover3(); + scene->_sceneObject4.addMover(mover, &scene->_SceneObjectExt, 4, this); + break; + } + case 5: { + scene->_sound.play(42); + scene->_sceneObject4.remove(); + scene->_SceneObjectExt.setVisage(21); + scene->_SceneObjectExt.setStrip(1); + scene->_SceneObjectExt.setFrame(1); + scene->_SceneObjectExt.animate(ANIM_MODE_5, NULL); + + scene->_SceneObjectExt._moveDiff.x = 4; + NpcMover *mover1 = new NpcMover(); + Common::Point pt(scene->_SceneObjectExt._position.x - 12, scene->_SceneObjectExt._position.y + 5); + scene->_SceneObjectExt.addMover(mover1, &pt, NULL); + + scene->_sceneObject5.postInit(); + scene->_sceneObject5.setVisage(21); + scene->_sceneObject5.setStrip(3); + scene->_sceneObject5.setPosition(Common::Point(scene->_sceneObject3._position.x - 36, + scene->_sceneObject3._position.y - 1)); + scene->_sceneObject5._moveDiff.x = 48; + + ObjectMover3 *mover = new ObjectMover3(); + scene->_sceneObject5.addMover(mover, &_globals->_player, 4, this); + break; + } + case 6: { + scene->_sound.play(42); + scene->_SceneObjectExt.setStrip(2); + scene->_SceneObjectExt.animate(ANIM_MODE_2, NULL); + + scene->_sceneObject5.remove(); + _globals->_player.setVisage(21); + _globals->_player.setStrip(1); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + _globals->_player._moveDiff.x = 4; + + npcMover = new NpcMover(); + Common::Point pt(_globals->_player._position.x - 25, _globals->_player._position.y + 5); + _globals->_player.addMover(npcMover, &pt, this); + break; + } + case 7: + _globals->_player.setStrip(2); + _globals->_player.animate(ANIM_MODE_2, NULL); + scene->_sound.play(77, this, 127); + break; + case 8: + _globals->_game->endGame(20, 0); + break; + default: + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene20::Scene20() { +} + +void Scene20::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerGameText); + _speakerQText._npc = &_globals->_player; + + if (_globals->_sceneManager._previousScene == 30) { + // Cut scene: Assassins are coming + _globals->_player.postInit(); + _globals->_player.setVisage(20); + _globals->_player.setPosition(Common::Point(405, 69)); + _globals->_player._moveDiff = Common::Point(10, 10); + _globals->_player.animate(ANIM_MODE_1, NULL); + + _SceneObjectExt.postInit(); + _SceneObjectExt.setVisage(20); + _SceneObjectExt.setPosition(Common::Point(400, 69)); + _SceneObjectExt.animate(ANIM_MODE_1, NULL); + + _sceneObject3.postInit(); + _sceneObject3.setVisage(20); + _sceneObject3.setPosition(Common::Point(395, 69)); + _sceneObject3.animate(ANIM_MODE_1, NULL); + + _SceneObjectExt._moveDiff = Common::Point(10, 10); + _sceneObject3._moveDiff = Common::Point(10, 10); + _globals->_soundHandler.play(20); + _sound.play(21); + _sound.holdAt(true); + setAction(&_action2); + + _sceneBounds = Rect(320, 0, 640, 200); + } else if (_globals->_sceneManager._previousScene == 60) { + // Evasion + _sound.play(30); + _globals->_player.postInit(); + _globals->_player.setVisage(20); + _globals->_player.setPosition(Common::Point(588, 79)); + _globals->_player._moveDiff = Common::Point(5, 5); + _globals->_player.fixPriority(50); + _globals->_player.animate(ANIM_MODE_1, NULL); + + _SceneObjectExt.postInit(); + _SceneObjectExt.setVisage(20); + _SceneObjectExt.setPosition(Common::Point(583, 79)); + _SceneObjectExt.animate(ANIM_MODE_1, NULL); + + _sceneObject3.postInit(); + _sceneObject3.setVisage(20); + _sceneObject3.setStrip2(2); + _sceneObject3.setPosition(Common::Point(595, 79)); + _sceneObject3.animate(ANIM_MODE_1, NULL); + + if ((_globals->getFlag(120) && _globals->getFlag(116)) || + (_globals->getFlag(117) && _globals->getFlag(119))) { + // Successful evasion + setAction(&_action3); + } else if (_globals->getFlag(104)) { + _sceneMode = 21; + setAction(&_sequenceManager, this, 21, &_globals->_player, &_SceneObjectExt, NULL); + } else { + // Failed evasion + _sceneObject3._moveDiff = Common::Point(8, 8); + setAction(&_action4); + } + _sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y); + } else { + // Intro: Quinn looking at the monaster + _globals->_player.postInit(); + _globals->_player.setVisage(2640); + _globals->_player.animate(ANIM_MODE_NONE, NULL); + _globals->_player.setStrip2(1); + _globals->_player.setFrame2(4); + _globals->_player.fixPriority(200); + _globals->_player.setPosition(Common::Point(425, 233)); + + setAction(&_action1); + _speakerQText.setTextPos(Common::Point(350, 20)); + _speakerQText._textWidth = 260; + _speakerGameText.setTextPos(Common::Point(350, 20)); + _speakerGameText._textWidth = 260; + + _globals->_soundHandler.play(8); + _sceneBounds = Rect(320, 0, 640, 200); + } + + _globals->_player.disableControl(); + loadScene(20); +} + +void Scene20::signal() { + if (_sceneMode == 21) + _globals->_sceneManager.changeScene(90); +} + +/*-------------------------------------------------------------------------- + * Scene 30 - First game scene (Outside Ch'mee house) + * + *--------------------------------------------------------------------------*/ + +void Scene30::BeamObject::doAction(int action) { + if (action == OBJECT_SCANNER) + display2(30, 14); + else if (action == CURSOR_LOOK) + display2(30, 2); + else if (action == CURSOR_USE) { + Scene30 *parent = (Scene30 *)_globals->_sceneManager._scene; + parent->setAction(&parent->_beamAction); + } else + SceneObject::doAction(action); +} + +void Scene30::DoorObject::doAction(int action) { + if (action == OBJECT_SCANNER) + display2(30, 13); + else if (action == CURSOR_LOOK) + display2(30, 1); + else if (action == CURSOR_USE) + display2(30, 7); + else + SceneObject::doAction(action); +} + +void Scene30::BeamAction::signal() { + Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + // Disable control and move player to the doorway beam + _globals->_player.disableControl(); + NpcMover *mover = new NpcMover(); + Common::Point pt(114, 198); + _globals->_player.addMover(mover, &pt, this); + break; + } + + case 1: + // Perform the animation of player raising hand + _globals->_player.setVisage(31); + _globals->_player.setStrip(1); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + + case 2: + // Hide the beam and lower the player's hand + scene->_sound.play(10, NULL, 127); + _globals->_player.animate(ANIM_MODE_6, this); + scene->_beam.remove(); + break; + + case 3: { + // Bring the Kzin to the doorway + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip(7); + scene->_kzin.postInit(); + scene->_kzin.setVisage(2801); + scene->_kzin.animate(ANIM_MODE_1, NULL); + scene->_kzin.setObjectWrapper(new SceneObjectWrapper()); + scene->_kzin.setPosition(Common::Point(334, 1)); + NpcMover *mover = new NpcMover(); + Common::Point pt(158, 170); + scene->_kzin.addMover(mover, &pt, this); + _globals->_sceneItems.push_front(&scene->_kzin); + break; + } + + case 4: + // Open the door + scene->_sound.play(11, NULL, 127); + scene->_door.animate(ANIM_MODE_5, this); + break; + + case 5: + // Run the Kzin's talk sequence + scene->_sound.play(13, NULL, 127); + _globals->_soundHandler.play(12, NULL, 127); + scene->_stripManager.start((scene->_sceneMode == 0) ? 30 : 37, this); + break; + + case 6: + // Slight delay + setDelay(3); + break; + + case 7: + // Re-activate player control + scene->_sceneMode = 31; + scene->_kzin.setAction(&scene->_kzinAction); + _globals->_player.enableControl(); + + // End this action + remove(); + break; + + default: + break; + } +} + +void Scene30::KzinAction::signal() { + Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1200); + break; + case 1: + _globals->_soundHandler.fadeOut(NULL); + _globals->_player.disableControl(); + setAction(&scene->_sequenceManager, _globals->_sceneManager._scene, 31, &scene->_kzin, &scene->_door, NULL); + break; + case 2: + _globals->_player.enableControl(); + remove(); + break; + default: + break; + } +} + +void Scene30::RingAction::signal() { + Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + scene->_kzin.setAction(NULL); + NpcMover *mover = new NpcMover(); + Common::Point pt(114, 198); + _globals->_player.addMover(mover, &pt, this); + break; + } + + case 1: + _globals->_player.checkAngle(&scene->_kzin); + scene->_stripManager.start(32, this); + break; + + case 2: { + _globals->_player.animate(ANIM_MODE_1, NULL); + NpcMover *mover = new NpcMover(); + Common::Point pt(143, 177); + _globals->_player.addMover(mover, &pt, this); + break; + } + + case 3: + scene->_sound.play(11, NULL, 127); + scene->_door.animate(ANIM_MODE_6, this); + break; + + case 4: { + scene->_sound.play(13, NULL, 127); + NpcMover *kzinMover = new NpcMover(); + Common::Point pt(354, 5); + scene->_kzin.addMover(kzinMover, &pt, this); + NpcMover *playerMover = new NpcMover(); + pt = Common::Point(335, 36); + _globals->_player.addMover(playerMover, &pt, this); + break; + } + + case 5: + break; + + case 6: + _globals->_sceneManager.changeScene(20); + break; + + default: + break; + } +} + +void Scene30::TalkAction::signal() { + Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + scene->_kzin.setAction(NULL); + NpcMover *mover = new NpcMover(); + Common::Point pt(114, 198); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + _globals->_player.checkAngle(&scene->_kzin); + scene->_stripManager.start(34, this); + break; + case 2: + setDelay(5); + break; + case 3: + scene->_kzin.setAction(&scene->_kzinAction); + _globals->_player.enableControl(); + remove(); + break; + default: + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene30::KzinObject::doAction(int action) { + Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + display2(30, 12); + break; + case OBJECT_SCANNER: + display2(30, 11); + break; + case OBJECT_RING: + RING_INVENTORY._ring._sceneNumber = 30; + scene->setAction(&scene->_ringAction); + break; + case CURSOR_LOOK: + display2(30, 6); + break; + case CURSOR_USE: + display2(30, 10); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + scene->setAction(&scene->_talkAction); + break; + default: + SceneObject::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene30::Scene30() : + _groundHotspot(9, OBJECT_SCANNER, 50, 17, CURSOR_LOOK, 30, 3, CURSOR_USE, 30, 8, LIST_END), + _wallsHotspot(8, OBJECT_SCANNER, 50, 13, CURSOR_LOOK, 30, 0, CURSOR_USE, 30, 7, LIST_END), + _courtyardHotspot(0, CURSOR_LOOK, 30, 4, LIST_END), + _treeHotspot(10, OBJECT_SCANNER, 40, 39, CURSOR_LOOK, 30, 5, CURSOR_USE, 30, 9, LIST_END) { +} + +void Scene30::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + // Add the speaker classes to the strip manager + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerSR); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerQText); + _speakerSText._npc = &_kzin; + _speakerQText._npc = &_globals->_player; + + + // Setup player + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setStrip(7); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(114, 198)); + _globals->_player.changeZoom(75); + _globals->_player.enableControl(); + + // Set up beam object + _beam.postInit(); + _beam.setVisage(31); + _beam.setStrip(2); + _beam.setPosition(Common::Point(124, 178)); + _beam.fixPriority(188); + + // Set up door object + _door.postInit(); + _door.setVisage(30); + _door.setPosition(Common::Point(150, 183)); + + // Final processing and add of scene items + _courtyardHotspot.setBounds(Rect(0, 0, 320, 200)); + + // Add the objects and hotspots to the scene + _globals->_sceneItems.addItems(&_beam, &_wallsHotspot, &_door, &_treeHotspot, &_groundHotspot, + &_courtyardHotspot, NULL); + + // Load the scene data + loadScene(30); + _sceneMode = 0; +} + +void Scene30::signal() { + if (_sceneMode == 31) { + // Re-activate beam if the Kzin goes back inside + _beam.postInit(); + _beam.setVisage(31); + _beam.setStrip(2); + _beam.setPosition(Common::Point(124, 178)); + _beam.fixPriority(188); + _globals->_sceneItems.push_front(&_beam); + _globals->_player.enableControl(); + } else if (_sceneMode == 32) { + _globals->_player.disableControl(); + _sceneMode = 31; + setAction(&_sequenceManager, _globals->_sceneManager._scene, 31, &_kzin, &_door, NULL); + } +} + +/*-------------------------------------------------------------------------- + * Scene 40 - Chmeee Home + * + *--------------------------------------------------------------------------*/ + +void Scene40::Action1::signal() { + Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(120); + break; + case 1: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(40, this); + break; + case 2: + scene->_doorway.postInit(); + scene->_doorway.setVisage(46); + scene->_doorway.setPosition(Common::Point(305, 61)); + scene->_doorway.animate(ANIM_MODE_5, this); + scene->_soundHandler.play(25); + break; + case 3: + scene->_doorway.hide(); + scene->_dyingKzin.setPosition(Common::Point(296, 62)); + _globals->_player.animate(ANIM_MODE_5, NULL); + scene->_object1.setVisage(43); + scene->_object1.setStrip(3); + scene->_object1.animate(ANIM_MODE_5, NULL); + scene->_object2.hide(); + scene->_object3.hide(); + scene->_stripManager.start(45, this); + break; + case 4: + scene->_object2.remove(); + scene->_object3.remove(); + scene->_assassin.setVisage(42); + scene->_assassin.setStrip(2); + scene->_assassin.setFrame(1); + scene->_assassin.setPosition(Common::Point(13, 171)); + scene->_assassin.animate(ANIM_MODE_5, this); + scene->_soundHandler.play(25); + break; + case 5: + scene->_doorway.show(); + scene->_doorway.setVisage(42); + scene->_doorway.setStrip(3); + scene->_doorway.setFrame(1); + scene->_doorway.setPosition(Common::Point(41, 144)); + scene->_assassin.animate(ANIM_MODE_6, NULL); + setDelay(6); + break; + case 6: + scene->_doorway.setPosition(Common::Point(178, 101)); + setDelay(6); + break; + case 7: + scene->_doorway.setPosition(Common::Point(271, 69)); + setDelay(6); + break; + case 8: + scene->_doorway.remove(); + scene->_dyingKzin.animate(ANIM_MODE_5, this); + break; + case 9: { + scene->_dyingKzin.setStrip(1); + //Workaround: The original uses setFrame(1) but it's completely wrong. + scene->_dyingKzin.setFrame(2); + scene->_dyingKzin._moveDiff.y = 15; + scene->_dyingKzin.animate(ANIM_MODE_5, NULL); + Common::Point pt(223, 186); + NpcMover *mover = new NpcMover(); + scene->_dyingKzin.addMover(mover, &pt, this); + break; + } + case 10: { + scene->_soundHandler.play(27); + Common::Point pt(223, 184); + NpcMover *mover = new NpcMover(); + scene->_dyingKzin.addMover(mover, &pt, this); + break; + } + case 11: { + Common::Point pt(223, 186); + NpcMover *mover = new NpcMover(); + scene->_dyingKzin.addMover(mover, &pt, this); + break; + } + case 12: { + _globals->_soundHandler.play(26); + _globals->_player._uiEnabled = true; + scene->_assassin.setVisage(42); + scene->_assassin.setPosition(Common::Point(4, 191)); + scene->_assassin.setStrip(1); + scene->_assassin.animate(ANIM_MODE_1, NULL); + Common::Point pt(230, 187); + NpcMover *mover = new NpcMover(); + scene->_assassin.addMover(mover, &pt, this); + break; + } + case 13: + setDelay(180); + break; + case 14: + scene->_assassin.setVisage(45); + scene->_assassin.setStrip(1); + scene->_assassin.setFrame(1); + scene->_assassin.animate(ANIM_MODE_5, this); + scene->_soundHandler.play(28); + break; + case 15: + _globals->_player.disableControl(); + scene->_object1.setVisage(40); + scene->_object1.setStrip(4); + scene->_object1.setFrame(1); + scene->_object1.animate(ANIM_MODE_5, NULL); + _globals->_player.setVisage(40); + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 16: + _globals->_soundHandler.play(77, this); + break; + case 17: + _globals->_game->endGame(40, 20); + remove(); + break; + } +} + +void Scene40::Action2::signal() { + Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + if (scene->_assassin._position.x < 229) + _actionIndex = 0; + setDelay(1); + break; + case 1: + scene->_assassin.animate(ANIM_MODE_NONE, NULL); + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: { + scene->_soundHandler.play(28); + scene->_doorway.postInit(); + scene->_doorway.setVisage(16); + scene->_doorway.setStrip2(6); + scene->_doorway.fixPriority(200); + scene->_doorway.setPosition(Common::Point(159, 191)); + scene->_doorway._moveDiff = Common::Point(40, 40); + scene->_doorway._moveRate = 60; + scene->_doorway.animate(ANIM_MODE_5, NULL); + + Common::Point pt(271, 165); + NpcMover *mover = new NpcMover(); + scene->_doorway.addMover(mover, &pt, this); + break; + } + case 3: + scene->_doorway.remove(); + scene->_assassin.setVisage(44); + scene->_assassin._frame = 1; + scene->_assassin.animate(ANIM_MODE_5, this); + scene->_soundHandler.play(29); + RING_INVENTORY._infoDisk._sceneNumber = 40; + break; + case 4: + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 5: { + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip(1); + Common::Point pt(230, 195); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: { + _globals->_player.setStrip(7); + scene->_object1.setVisage(2806); + scene->_object1.animate(ANIM_MODE_1, NULL); + SceneObjectWrapper *wrapper = new SceneObjectWrapper(); + scene->_object1.setObjectWrapper(wrapper); + Common::Point pt(200, 190); + NpcMover *mover = new NpcMover(); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 7: + scene->_stripManager.start(44, this); + break; + case 8: { + Common::Point pt(170, 260); + NpcMover *mover = new NpcMover(); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 9: + scene->_dyingKzin.setAction(&scene->_action7); + scene->_object1.remove(); + _globals->_stripNum = 88; + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.enableControl(); + scene->_assassin.setAction(&scene->_action8); + break; + } +} + +void Scene40::Action3::signal() { + Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.setAction(NULL); + _globals->_stripNum = 99; + _globals->_player.disableControl(); + Common::Point pt(240, 195); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + _globals->_player.setVisage(5010); + _globals->_player._strip = 2; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_4, 5, 1, this); + break; + case 2: + scene->_assassin.setStrip(2); + scene->_assassin.setFrame(1); + RING_INVENTORY._infoDisk._sceneNumber = 1; + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 3: + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip(7); + _globals->_stripNum = 88; + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene40::Action4::signal() { + switch (_actionIndex++) { + case 0: { + Common::Point pt(178, 190); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + _globals->_stripNum = 88; + _globals->_player.enableControl(); + break; + } +} + +void Scene40::Action5::signal() { + Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(119) + 120); + break; + case 1: + scene->_object2.animate(ANIM_MODE_8, 1, this); + _actionIndex = 0; + } +} + +void Scene40::Action6::signal() { + Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_object1.postInit(); + scene->_object1.setVisage(16); + scene->_object1.setStrip2(6); + scene->_object1._moveDiff = Common::Point(40, 40); + scene->_object1.setPosition(Common::Point(313, 53)); + scene->_object1._moveRate = 60; + + Common::Point pt(141, 194); + NpcMover *mover = new NpcMover(); + scene->_object1.addMover(mover, &pt, NULL); + scene->_object1.animate(ANIM_MODE_5, NULL); + + scene->_doorway.postInit(); + scene->_doorway.setVisage(46); + scene->_doorway.setPosition(Common::Point(305, 61)); + scene->_doorway.animate(ANIM_MODE_5, this); + scene->_soundHandler.play(25); + break; + } + case 1: + scene->_soundHandler.play(28); + scene->_doorway.setPosition(Common::Point(148, 74)); + scene->_doorway.setFrame(1); + scene->_doorway.setStrip(2); + scene->_doorway.animate(ANIM_MODE_5, this); + break; + case 2: + remove(); + break; + } +} + +void Scene40::Action7::signal() { + Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(499) + 500); + break; + case 1: + scene->_object7.postInit(); + scene->_object7.setVisage(46); + + if (_globals->_randomSource.getRandomNumber(32767) >= 16384) { + scene->_object7.setStrip(3); + scene->_object7.setPosition(Common::Point(15, 185)); + } else { + scene->_object7.setPosition(Common::Point(305, 61)); + scene->_object7.setFrame(15); + } + scene->_object7.animate(ANIM_MODE_5, this); + scene->_soundHandler.play(25); + break; + case 2: + scene->_object7.remove(); + _actionIndex = 0; + setDelay(60); + break; + } +} + +void Scene40::Action8::signal() { + Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(300); + break; + case 1: + _globals->_player.disableControl(); + + if ((_globals->_player._position.y >= 197) || (_globals->_player._visage)) { + _actionIndex = 1; + setDelay(30); + } else { + scene->_doorway.postInit(); + scene->_doorway.setVisage(16); + scene->_doorway.setStrip2(6); + scene->_doorway.fixPriority(200); + scene->_doorway._moveRate = 60; + + if (_globals->_player._position.x >= 145) { + scene->_doorway.fixPriority(-1); + scene->_doorway.setPosition(Common::Point(6, 157)); + } else { + scene->_doorway.setPosition(Common::Point(313, 53)); + } + + scene->_doorway._moveDiff = Common::Point(40, 40); + Common::Point pt(_globals->_player._position.x, _globals->_player._position.y - 18); + NpcMover *mover = new NpcMover(); + scene->_doorway.addMover(mover, &pt, this); + scene->_doorway.animate(ANIM_MODE_5, NULL); + } + break; + case 2: + scene->_doorway.remove(); + _globals->_player.setVisage(40); + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 3: + _globals->_soundHandler.play(77, this); + break; + case 4: + _globals->_game->endGame(40, 45); + remove(); + break; + } +} + +void Scene40::Action8::dispatch() { + if (_action) + _action->dispatch(); + + if (_delayFrames) { + uint32 frameNumber = _globals->_events.getFrameNumber(); + if ((_startFrame + 60) < frameNumber) { + --_delayFrames; + _startFrame = frameNumber; + + if (_delayFrames <= 0) { + _delayFrames = 0; + signal(); + } + } + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene40::DyingKzin::doAction(int action) { + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(40, 44); + break; + case OBJECT_SCANNER: + SceneItem::display2(40, 43); + break; + case CURSOR_LOOK: + SceneItem::display2(40, 12); + break; + case CURSOR_USE: + SceneItem::display2(40, 18); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene40::Assassin::doAction(int action) { + Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + if (scene->_assassin._visage == 44) + SceneItem::display2(40, 21); + else { + _globals->_player.disableControl(); + Common::Point pt(230, 187); + NpcMover *mover = new NpcMover(); + addMover(mover, &pt, NULL); + scene->setAction(&scene->_action2); + } + break; + case OBJECT_SCANNER: + SceneItem::display2(40, (scene->_assassin._visage == 44) ? 22 : 23); + break; + case CURSOR_LOOK: + if (scene->_assassin._visage != 44) + SceneItem::display2(40, 13); + else + SceneItem::display2(40, (RING_INVENTORY._infoDisk._sceneNumber == 1) ? 19 : 14); + break; + case CURSOR_USE: + if (scene->_assassin._visage != 44) + SceneItem::display2(40, 15); + else if (RING_INVENTORY._infoDisk._sceneNumber == 1) + SceneItem::display2(40, 19); + else { + _globals->_player.disableControl(); + setAction(&scene->_action3); + } + break; + case CURSOR_TALK: + SceneItem::display2(40, 38); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene40::Item2::doAction(int action) { + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(40, 35); + _globals->_events.setCursor(CURSOR_WALK); + break; + case OBJECT_SCANNER: + SceneItem::display2(40, 34); + break; + case CURSOR_LOOK: + SceneItem::display2(40, 8); + break; + case CURSOR_USE: + SceneItem::display2(40, 36); + break; + case CURSOR_TALK: + SceneItem::display2(40, 37); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene40::Item6::doAction(int action) { + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(40, 25); + _globals->_events.setCursor(CURSOR_WALK); + break; + case OBJECT_SCANNER: + SceneItem::display2(40, 42); + break; + case CURSOR_LOOK: + SceneItem::display2(40, 6); + break; + case CURSOR_USE: + SceneItem::display2(40, 36); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene40::Scene40() : + _item1(2, OBJECT_SCANNER, 40, 24, OBJECT_STUNNER, 40, 25, CURSOR_LOOK, 40, 7, CURSOR_USE, 40, 16, LIST_END), + _item3(5, OBJECT_SCANNER, 40, 28, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 2, CURSOR_USE, 40, 30, LIST_END), + _item4(6, OBJECT_SCANNER, 40, 31, OBJECT_STUNNER, 40, 32, CURSOR_LOOK, 40, 5, CURSOR_USE, 40, 33, LIST_END), + _item5(0, CURSOR_LOOK, 40, 11, LIST_END), + _item7(4, OBJECT_SCANNER, 40, 26, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 9, CURSOR_USE, 40, 17, LIST_END), + _item8(8, OBJECT_SCANNER, 40, 39, OBJECT_STUNNER, 40, 40, CURSOR_LOOK, 40, 3, CURSOR_USE, 40, 41, LIST_END) { +} + +void Scene40::postInit(SceneObjectList *OwnerList) { + loadScene(40); + Scene::postInit(); + + setZoomPercents(0, 100, 200, 100); + _globals->_stripNum = 99; + + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerSL); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerGameText); + + _speakerGameText._color1 = 9; + _speakerGameText.setTextPos(Common::Point(160, 30)); + _speakerQText._npc = &_globals->_player; + _speakerSText._npc = &_object1; + + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(130, 220)); + _globals->_player.disableControl(); + + if (_globals->_sceneManager._previousScene == 20) { + _globals->_soundHandler.play(24); + _globals->_player.setVisage(43); + + _object1.postInit(); + _object1.setVisage(41); + _object1.setPosition(Common::Point(105, 220)); + _object2.postInit(); + _object2.setVisage(41); + _object2.setStrip(6); + _object2.fixPriority(200); + _object2.setPosition(Common::Point(94, 189)); + _object2.setAction(&_action5); + + _object3.postInit(); + _object3.setVisage(41); + _object3.setStrip(5); + _object3.fixPriority(205); + _object3.setPosition(Common::Point(110, 186)); + _object3._numFrames = 2; + _object3.animate(ANIM_MODE_8, NULL, NULL); + + _assassin.postInit(); + _assassin.setPosition(Common::Point(-40, 191)); + _globals->_sceneItems.push_back(&_assassin); + + _dyingKzin.postInit(); + _dyingKzin.setVisage(40); + _dyingKzin.setStrip(6); + _dyingKzin.setPosition(Common::Point(-90, 65)); + _dyingKzin.fixPriority(170); + + setAction(&_action1); + } else { + _doorway.postInit(); + _doorway.setVisage(46); + _doorway.setPosition(Common::Point(148, 74)); + _doorway.setStrip(2); + _doorway.setFrame(_doorway.getFrameCount()); + + _dyingKzin.postInit(); + _dyingKzin.setVisage(40); + _dyingKzin.setPosition(Common::Point(205, 183)); + _dyingKzin.fixPriority(170); + _dyingKzin._frame = 9; + _dyingKzin.setAction(&_action7); + + _assassin.postInit(); + _assassin.setVisage(44); + _assassin.setPosition(Common::Point(230, 187)); + _assassin.setAction(&_action8); + + if (RING_INVENTORY._infoDisk._sceneNumber == 40) { + _assassin.setStrip(1); + _assassin.setFrame(_assassin.getFrameCount()); + } else { + _assassin.setStrip(2); + } + + _globals->_sceneItems.push_back(&_assassin); + _globals->_player.setPosition(Common::Point(170, 220)); + + setAction(&_action4); + } + + _item5.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _item6._sceneRegionId = 3; + _item2._sceneRegionId = 7; + + _globals->_sceneItems.addItems(&_dyingKzin, &_item8, &_item1, &_item2, &_item3, &_item4, + &_item6, &_item7, &_item5, NULL); +} + +void Scene40::signal() { + if (_sceneMode == 41) + _globals->_sceneManager.changeScene(50); +} + +void Scene40::dispatch() { + if ((_globals->_stripNum == 88) && (_globals->_player._position.y >= 197)) { + _globals->_player.disableControl(); + _globals->_stripNum = 0; + _globals->_player.setAction(NULL); + _sceneMode = 41; + setAction(&_sequenceManager, this, 41, &_globals->_player, NULL); + + if (_globals->_sceneManager._previousScene == 20) { + _dyingKzin.setAction(&_action6); + } + } + + Scene::dispatch(); +} + +/*-------------------------------------------------------------------------- + * Scene 50 - By Flycycles + * + *--------------------------------------------------------------------------*/ + +void Scene50::Action1::signal() { + Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setAction(&scene->_sequenceManager, this, 54, &_globals->_player, NULL); + break; + case 1: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(63, this); + break; + case 2: + if (scene->_stripManager._field2E8 != 107) { + _globals->_player.enableControl(); + remove(); + } else { + Common::Point pt(282, 139); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + } + break; + case 3: + _globals->_stripNum = -1; + _globals->_sceneManager.changeScene(60); + break; + } +} + +void Scene50::Action2::signal() { + Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + scene->_stripManager.start(66, this); + break; + case 1: { + Common::Point pt(141, 142); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_sceneManager.changeScene(40); + remove(); + break; + } +} + +void Scene50::Action3::signal() { + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + Common::Point pt(136, 185); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + _globals->_sceneManager.changeScene(60); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene50::Object1::doAction(int action) { + Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(50, 20); + break; + case OBJECT_SCANNER: + SceneItem::display2(50, 19); + break; + case CURSOR_LOOK: + SceneItem::display2(50, 4); + break; + case CURSOR_USE: + SceneItem::display2(50, 21); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + scene->_sceneMode = 52; + scene->setAction(&scene->_sequenceManager, scene, 52, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene50::Object2::doAction(int action) { + Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(50, 11); + break; + case OBJECT_SCANNER: + SceneItem::display2(50, 10); + break; + case CURSOR_LOOK: + SceneItem::display2(50, 1); + break; + case OBJECT_INFODISK: + case CURSOR_USE: + _globals->_stripNum = 50; + scene->setAction(&scene->_action3); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene50::Object3::doAction(int action) { + Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(50, 11); + break; + case OBJECT_SCANNER: + SceneItem::display2(50, 10); + break; + case CURSOR_LOOK: + SceneItem::display2(50, 1); + break; + case OBJECT_INFODISK: + case CURSOR_USE: + SceneItem::display2(50, 8); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + scene->_sceneMode = 52; + scene->setAction(&scene->_sequenceManager, scene, 52, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene50::Object4::doAction(int action) { + Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(50, 11); + break; + case OBJECT_SCANNER: + SceneItem::display2(50, 10); + break; + case CURSOR_LOOK: + SceneItem::display2(50, 1); + break; + case OBJECT_INFODISK: + case CURSOR_USE: + _globals->_player.disableControl(); + _globals->_stripNum = 0; + scene->_sceneMode = 51; + scene->setAction(&scene->_sequenceManager, scene, 51, &_globals->_player, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene50::Scene50() : + _item0(0, CURSOR_LOOK, 50, 3, LIST_END), + _item1(0, OBJECT_SCANNER, 50, 15, CURSOR_USE, 50, 16, CURSOR_LOOK, 50, 3, LIST_END), + _item2(0, CURSOR_LOOK, 50, 7, LIST_END), + _item3(8, OBJECT_STUNNER, 50, 14, OBJECT_SCANNER, 50, 13, CURSOR_LOOK, 50, 3, LIST_END), + _item4(9, OBJECT_SCANNER, 40, 39, OBJECT_STUNNER, 40, 40, CURSOR_USE, 40, 41, CURSOR_LOOK, 50, 5, LIST_END), + _item5(10, OBJECT_SCANNER, 50, 17, OBJECT_STUNNER, 50, 18, CURSOR_LOOK, 50, 6, CURSOR_USE, 30, 8, LIST_END) { + + _doorwayRect = Rect(80, 108, 160, 112); +} + +void Scene50::postInit(SceneObjectList *OwnerList) { + loadScene(50); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSText); + + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player._canWalk = false; + _globals->_player.changeZoom(75); + _globals->_player._moveDiff.y = 3; + + if (_globals->_sceneManager._previousScene == 40) { + _globals->_player.setPosition(Common::Point(128, 123)); + } else if (_globals->_stripNum == 50) { + _globals->_player.setPosition(Common::Point(136, 185)); + } else { + _globals->_player.setPosition(Common::Point(270, 143)); + } + + _object2.postInit(); + _object2.setVisage(2331); + _object2.setStrip(6); + _object2.setPosition(Common::Point(136, 192)); + _object2.fixPriority(200); + + _object3.postInit(); + _object3.setVisage(2337); + _object3.setStrip(6); + _object3.setPosition(Common::Point(260, 180)); + _object3.fixPriority(200); + + _object4.postInit(); + _object4.setVisage(2331); + _object4.setStrip(6); + _object4.setPosition(Common::Point(295, 144)); + _object4.fixPriority(178); + + _globals->_sceneItems.addItems(&_object2, &_object3, &_object4, NULL); + + if (!_globals->getFlag(101)) { + _globals->_player.disableControl(); + _globals->setFlag(101); + setAction(&_action1); + } else { + _globals->_player.enableControl(); + + if (_globals->_sceneManager._previousScene == 40) { + _globals->_player.disableControl(); + _sceneMode = 54; + setAction(&_sequenceManager, this, 54, &_globals->_player, NULL); + } + } + + _item0.setBounds(Rect(200, 0, 320, 200)); + _globals->_sceneItems.addItems(&_item3, &_item4, &_item5, &_item0, NULL); +} + +void Scene50::signal() { + switch (_sceneMode) { + case 51: + _globals->_sceneManager.changeScene(60); + break; + case 55: + _globals->_sceneManager.changeScene(40); + break; + case 52: + case 54: + _globals->_player.enableControl(); + break; + } +} + +void Scene50::dispatch() { + Scene::dispatch(); + + if ((_sceneMode != 55) && _doorwayRect.contains(_globals->_player._position)) { + // Player in house doorway, start player moving to within + _globals->_player.disableControl(); + _sceneMode = 55; + Common::Point pt(89, 111); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + } +} + +/*-------------------------------------------------------------------------- + * Scene 60 - Flycycle controls + * + *--------------------------------------------------------------------------*/ + +void Scene60::Action1::signal() { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(3); + break; + case 1: + scene->_floppyDrive.postInit(); + scene->_floppyDrive.setVisage(60); + scene->_floppyDrive.setStrip(7); + scene->_floppyDrive.setPosition(Common::Point(136, 65)); + scene->_floppyDrive.animate(ANIM_MODE_5, this); + + scene->_soundHandler1.play(35); + break; + case 2: + scene->_redLights.postInit(); + scene->_redLights.setVisage(60); + scene->_redLights.setPosition(Common::Point(199, 186)); + scene->_redLights.animate(ANIM_MODE_8, 0, NULL); + scene->_redLights._numFrames = 5; + + scene->_controlButton.animate(ANIM_MODE_2, NULL); + + if (!_globals->getFlag(83)) { + scene->_message.postInit(); + scene->_message.setVisage(60); + scene->_message.setStrip2(3); + scene->_message.setFrame(2); + scene->_message.setPosition(Common::Point(148, 85)); + scene->_message.animate(ANIM_MODE_2, NULL); + scene->_message._numFrames = 5; + + _globals->_sceneItems.push_front(&scene->_message); + scene->_soundHandler2.play(38); + } + + _globals->_events.setCursor(CURSOR_USE); + break; + case 3: + scene->_soundHandler2.play(37); + scene->loadScene(65); + scene->_message.remove(); + + if (_globals->_sceneObjects->contains(&scene->_redLights)) + scene->_redLights.remove(); + + scene->_controlButton.remove(); + scene->_slaveButton.remove(); + scene->_masterButton.remove(); + scene->_item1.remove(); + scene->_item2.remove(); + + scene->_nextButton.postInit(); + scene->_nextButton.setVisage(65); + scene->_nextButton.setPosition(Common::Point(118, 197)); + + scene->_prevButton.postInit(); + scene->_prevButton.setVisage(65); + scene->_prevButton.setStrip(2); + scene->_prevButton.setPosition(Common::Point(160, 197)); + + scene->_exitButton.postInit(); + scene->_exitButton.setVisage(65); + scene->_exitButton.setStrip(3); + scene->_exitButton.setPosition(Common::Point(202, 197)); + + scene->_rose.postInit(); + scene->_rose.setVisage(65); + scene->_rose.setStrip(4); + scene->_rose.setFrame(1); + scene->_rose.setPosition(Common::Point(145, 165)); + + _globals->_sceneItems.push_front(&scene->_nextButton); + _globals->_sceneItems.push_front(&scene->_prevButton); + _globals->_sceneItems.push_front(&scene->_exitButton); + setDelay(10); + + _globals->_events.setCursor(CURSOR_USE); + break; + case 4: + _globals->setFlag(90); + // Deliberate fall-through + case 5: + case 6: + case 7: + SceneItem::display(60, _actionIndex - 4, SET_Y, 40, SET_X, 25, SET_FONT, 75, + SET_EXT_BGCOLOR, -1, SET_FG_COLOR, 34, SET_POS_MODE, 0, + SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END); + _globals->_events.setCursor(CURSOR_USE); + break; + case 9: + _globals->_player._uiEnabled = false; + RING_INVENTORY._infoDisk._sceneNumber = 1; + + if (_globals->_sceneObjects->contains(&scene->_message)) + scene->_message.remove(); + + scene->_controlButton.animate(ANIM_MODE_NONE); + scene->_controlButton.setFrame(1); + scene->_redLights.remove(); + + scene->_floppyDrive.postInit(); + scene->_floppyDrive.setVisage(60); + scene->_floppyDrive.setStrip(7); + scene->_floppyDrive.setPosition(Common::Point(136, 65)); + scene->_floppyDrive.setFrame(scene->_floppyDrive.getFrameCount()); + scene->_floppyDrive.animate(ANIM_MODE_6, this); + + scene->_soundHandler1.play(35); + scene->_soundHandler3.stop(); + + scene->_masterButton.setFrame(1); + scene->_masterButton._state = 0; + + _globals->clearFlag(103); + _globals->clearFlag(!_globals->_stripNum ? 116 : 119); + break; + case 10: + setDelay(60); + break; + case 11: + _globals->_player._uiEnabled = true; + scene->_floppyDrive.remove(); + remove(); + break; + case 8: + default: + break; + } +} + +void Scene60::Action2::signal() { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + case 2: + setDelay(3); + break; + case 1: + scene->_stripManager.start(66, this); + break; + case 3: + _globals->_sceneManager.changeScene(50); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene60::PrevObject::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(60, 16); + } else if (action == CURSOR_USE) { + animate(ANIM_MODE_8, 1, NULL); + + if (scene->_action1.getActionIndex() > 5) { + scene->_soundHandler3.play(36); + scene->_action1.setActionIndex(scene->_action1.getActionIndex() - 2); + scene->_action1.setDelay(1); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene60::NextObject::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(60, 17); + } else if (action == CURSOR_USE) { + animate(ANIM_MODE_8, 1, NULL); + + if (scene->_action1.getActionIndex() < 8) { + scene->_soundHandler3.play(36); + scene->_action1.setDelay(1); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene60::ExitObject::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(60, 18); + } else if (action == CURSOR_USE) { + scene->_soundHandler3.play(36); + animate(ANIM_MODE_8, 1, NULL); + scene->_nextButton.remove(); + scene->_prevButton.remove(); + scene->_exitButton.remove(); + scene->_rose.remove(); + + SceneItem::display(0, 0); + scene->loadScene(60); + + scene->_controlButton.postInit(); + scene->_controlButton.setVisage(60); + scene->_controlButton.setStrip(5); + scene->_controlButton.setPosition(Common::Point(233, 143)); + scene->_controlButton.animate(ANIM_MODE_2, NULL); + + scene->_slaveButton.postInit(); + scene->_slaveButton.setVisage(60); + scene->_slaveButton.setStrip(8); + scene->_slaveButton.setPosition(Common::Point(143, 125)); + + scene->_masterButton.postInit(); + scene->_masterButton.setVisage(60); + scene->_masterButton.setStrip(8); + scene->_masterButton.setPosition(Common::Point(143, 105)); + + _globals->_sceneItems.push_front(&scene->_masterButton); + _globals->_sceneItems.push_front(&scene->_slaveButton); + + scene->_redLights.postInit(); + scene->_redLights.setVisage(60); + scene->_redLights.setPosition(Common::Point(199, 186)); + scene->_redLights.animate(ANIM_MODE_8, 0, NULL); + scene->_redLights._numFrames = 5; + scene->_redLights.setAction(&scene->_sequenceManager, scene, 61, NULL); + + if (scene->_slaveButton._state) + scene->_slaveButton.setFrame(2); + if (scene->_masterButton._state) + scene->_masterButton.setFrame(2); + + _globals->_sceneItems.push_front(&scene->_item1); + _globals->_sceneItems.push_front(&scene->_controlButton); + _globals->_sceneItems.push_front(&scene->_slaveButton); + _globals->_sceneItems.push_front(&scene->_masterButton); + _globals->_sceneItems.push_back(&scene->_item2); + + _globals->gfxManager()._font.setFontNumber(2); + _globals->_sceneText._fontNumber = 2; + + scene->_action1.setActionIndex(2); + scene->_action1.setDelay(1); + scene->_sceneMode = 9999; + scene->signal(); + } else { + SceneHotspot::doAction(action); + } +} + +void Scene60::MessageObject::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(60, 9); + } else if (action == CURSOR_USE) { + scene->_action1.setDelay(1); + _globals->setFlag(83); + } else { + SceneHotspot::doAction(action); + } +} + +void Scene60::ControlObject::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(60, 11); + } else if (action == CURSOR_USE) { + if (_animateMode == ANIM_MODE_NONE) + SceneItem::display2(60, 14); + else if (!scene->_slaveButton._state) { + _globals->_soundHandler.play(40); + _globals->_soundHandler.holdAt(true); + _globals->_sceneManager.changeScene(20); + } else { + scene->_sceneMode = 15; + setAction(&scene->_sequenceManager, scene, 62, NULL); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene60::SlaveObject::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(60, 8); + } else if (action == CURSOR_USE) { + if (scene->_masterButton._state) + scene->_sceneMode = 19; + else if (_state) { + scene->_soundHandler3.stop(); + animate(ANIM_MODE_6, NULL); + _globals->clearFlag(102); + _globals->clearFlag(!_globals->_stripNum ? 117 : 120); + _state = 0; + scene->_sceneMode = 9998; + } else { + scene->_soundHandler3.play(39); + _globals->setFlag(102); + _globals->setFlag(!_globals->_stripNum ? 117 : 120); + animate(ANIM_MODE_5, NULL); + _state = 1; + scene->_sceneMode = 9998; + } + + setAction(&scene->_sequenceManager, scene, 62, NULL); + } else { + SceneHotspot::doAction(action); + } +} + +void Scene60::MasterObject::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(60, 7); + } else if (action == CURSOR_USE) { + if (!scene->_controlButton._animateMode) + scene->_sceneMode = 14; + else if (scene->_slaveButton._state) + scene->_sceneMode = 20; + else if (_state) { + scene->_soundHandler3.stop(); + animate(ANIM_MODE_6, NULL); + _state = 0; + _globals->clearFlag(103); + _globals->clearFlag(!_globals->_stripNum ? 116 : 119); + scene->_sceneMode = 9998; + } else { + scene->_soundHandler3.play(39); + animate(ANIM_MODE_5, NULL); + _state = 1; + _globals->setFlag(103); + _globals->setFlag(!_globals->_stripNum ? 116 : 119); + scene->_sceneMode = 9998; + } + + setAction(&scene->_sequenceManager, scene, 62, NULL); + } else { + SceneHotspot::doAction(action); + } +} + +void Scene60::FloppyDrive::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(60, 13); + } else if (action == CURSOR_USE) { + _globals->setFlag(!_globals->_stripNum ? 118 : 121); + scene->setAction(&scene->_action1); + } else { + SceneHotspot::doAction(action); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene60::Item1::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_INFODISK: + RING_INVENTORY._infoDisk._sceneNumber = 60; + _globals->setFlag(!_globals->_stripNum ? 118 : 121); + scene->_sceneMode = 0; + scene->setAction(&scene->_action1); + break; + case CURSOR_LOOK: + SceneItem::display2(60, 10); + break; + case CURSOR_USE: + if (RING_INVENTORY._infoDisk._sceneNumber == 60) { + if (_globals->getFlag(118) && !_globals->_stripNum) { + _globals->clearFlag(118); + scene->setAction(&scene->_action1); + scene->_action1.setActionIndex(9); + scene->_action1.setDelay(1); + } + if (_globals->getFlag(121) && !_globals->_stripNum) { + _globals->clearFlag(121); + scene->setAction(&scene->_action1); + scene->_action1.setActionIndex(9); + scene->_action1.setDelay(1); + } + } else if (RING_INVENTORY._infoDisk._sceneNumber == 1) { + scene->_sceneMode = 0; + setAction(&scene->_sequenceManager, scene, 62, NULL); + } else { + scene->setAction(&scene->_action2); + } + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene60::Item::doAction(int action) { + Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(60, _messageNum); + break; + case CURSOR_USE: + scene->_sceneMode = _sceneMode; + setAction(&scene->_sequenceManager, this, 62, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene60::Scene60() : + _item2(0, 12, 12), + _item3(8, 22, 23), + _item4(9, 24, 25), + _item5(10, 26, 27), + _item6(11, 28, 29) { +} + +void Scene60::postInit(SceneObjectList *OwnerList) { + loadScene(60); + Scene::postInit(); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSText); + + _globals->_player._uiEnabled = true; + _globals->_events.setCursor(CURSOR_USE); + + _slaveButton.postInit(); + _slaveButton.setVisage(60); + _slaveButton.setStrip(8); + _slaveButton.setPosition(Common::Point(143, 125)); + _slaveButton._state = 0; + + _masterButton.postInit(); + _masterButton.setVisage(60); + _masterButton.setStrip(8); + _masterButton.setPosition(Common::Point(143, 105)); + _masterButton._state = 0; + + _globals->_sceneItems.push_back(&_masterButton); + _globals->_sceneItems.push_back(&_slaveButton); + + _controlButton.postInit(); + _controlButton.setVisage(60); + _controlButton.setStrip(5); + _controlButton.setPosition(Common::Point(233, 143)); + _globals->_sceneItems.push_back(&_controlButton); + + if (_globals->_stripNum == -1) { + _globals->_stripNum = 0; + } else { + _globals->_player.disableControl(); + _sceneMode = 9999; + setAction(&_sequenceManager, this, 61, NULL); + } + + _item1.setBounds(Rect(130, 55, 174, 70)); + _item2.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + + if (_globals->_stripNum == 0) { + if (_globals->getFlag(117)) { + _slaveButton._state = 1; + _slaveButton.setFrame(2); + } + + if (_globals->getFlag(116)) { + _masterButton._state = 1; + _masterButton.setFrame(2); + } + + if (_globals->getFlag(118)) { + _controlButton.animate(ANIM_MODE_2, NULL); + + _redLights.postInit(); + _redLights.setVisage(60); + _redLights.setPosition(Common::Point(199, 186)); + _redLights.animate(ANIM_MODE_8, 0, NULL); + + _soundHandler1.play(35); + + if (!_globals->getFlag(83)) { + _message.postInit(); + _message.setVisage(60); + _message.setStrip2(3); + _message.setFrame(2); + _message.setPosition(Common::Point(148, 85)); + _message.animate(ANIM_MODE_2, NULL); + _message._numFrames = 5; + _globals->_sceneItems.push_front(&_message); + + _soundHandler2.play(38); + } + } + } else { + if (_globals->getFlag(120)) { + _slaveButton._state = 1; + _slaveButton.setFrame(2); + } + + if (_globals->getFlag(119)) { + _masterButton._state = 1; + _masterButton.setFrame(2); + } + + if (_globals->getFlag(121)) { + _controlButton.animate(ANIM_MODE_2, NULL); + + _redLights.postInit(); + _redLights.setVisage(60); + _redLights.setPosition(Common::Point(199, 186)); + _redLights.animate(ANIM_MODE_8, 0, NULL); + _redLights._numFrames = 5; + + _soundHandler1.play(35); + + if (!_globals->getFlag(83)) { + _message.postInit(); + _message.setVisage(60); + _message.setStrip2(3); + _message.setFrame(2); + _message.setPosition(Common::Point(148, 85)); + _message.animate(ANIM_MODE_2, NULL); + _message._numFrames = 5; + _globals->_sceneItems.push_front(&_message); + + _soundHandler2.play(38); + } + } + } + + _globals->_sceneItems.addItems(&_item3, &_item4, &_item5, &_item6, + &_item1, &_item2, NULL); +} + +void Scene60::signal() { + if (_sceneMode != 0) { + if (_sceneMode == 9998) { + _globals->_events.setCursor(CURSOR_USE); + } else if (_sceneMode == 9999) { + _globals->_player._uiEnabled = true; + _globals->_events.setCursor(CURSOR_USE); + + _gfxButton.setText(EXIT_MSG); + _gfxButton._bounds.center(160, 193); + _gfxButton.draw(); + _gfxButton._bounds.expandPanes(); + } else { + SceneItem::display2(60, _sceneMode); + _globals->_events.setCursor(CURSOR_USE); + } + } +} + +void Scene60::process(Event &event) { + Scene::process(event); + + if (_screenNumber == 60) { + if (_gfxButton.process(event)) + _globals->_sceneManager.changeScene(50); + } +} + +/*-------------------------------------------------------------------------- + * Scene 90 - Shipyard Entrance + * + *--------------------------------------------------------------------------*/ + +void Scene90::Action1::signal() { + Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + _globals->_scenePalette.addRotation(64, 72, -1); + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(90, this); + break; + case 2: + setDelay(2); + break; + case 3: { + Common::Point pt(278, 191); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 4: + scene->_object2.setStrip(3); + setDelay(2); + break; + case 5: + scene->_soundHandler2.play(58); + + if (scene->_stripManager._field2E8 == 220) + scene->_stripManager.start(91, this, scene); + else { + scene->_stripManager.start(_globals->getFlag(104) ? 93 : 92, this, scene); + _actionIndex = 7; + } + break; + case 6: + scene->_object2.animate(ANIM_MODE_NONE); + _globals->_player._uiEnabled = true; + break; + case 7: + scene->_object2.animate(ANIM_MODE_NONE); + _globals->_soundHandler.play(56); + scene->_object3.animate(ANIM_MODE_5, this); + break; + case 8: { + Common::Point pt(215, 127); + PlayerMover *mover = new PlayerMover(); + scene->_object5.addMover(mover, &pt, this); + break; + } + case 9: { + Common::Point pt1(215, 127); + PlayerMover *mover1 = new PlayerMover(); + scene->_object1.addMover(mover1, &pt1, this); + Common::Point pt2(86, 62); + PlayerMover *mover2 = new PlayerMover(); + scene->_object5.addMover(mover2, &pt2, this); + break; + } + case 10: { + PlayerMover2 *mover = new PlayerMover2(); + scene->_object1.addMover(mover, 10, 15, &scene->_object5); + + if (!_globals->getFlag(104)) { + mover = new PlayerMover2(); + scene->_object4.addMover(mover, 10, 15, &scene->_object1); + } + setDelay(60); + break; + } + case 11: + _globals->_soundHandler.play(57); + _globals->_soundHandler.play(68); + scene->_object3.animate(ANIM_MODE_6, NULL); + + SceneItem::display(90, _globals->getFlag(104) ? 15 : 14, + SET_EXT_BGCOLOR, 13, SET_KEEP_ONSCREEN, -1, SET_X, 120, SET_Y, 20, LIST_END); + break; + case 12: + SceneItem::display(0, 0); + _globals->_scenePalette.clearListeners(); + _globals->_sceneManager.changeScene(95); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene90::Object1::doAction(int action) { + Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(90, 7); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->_sceneMode = 97; + setAction(&scene->_sequenceManager, scene, 97, this, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene90::Object2::doAction(int action) { + Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + case CURSOR_USE: + _globals->_player.disableControl(); + scene->_object6.postInit(); + scene->_object6.setVisage(90); + scene->_object6.setStrip(6); + scene->_object6.setPosition(Common::Point(184, 210)); + scene->_object6.hide(); + + scene->_sceneMode = 91; + scene->_soundHandler1.play(59); + scene->_soundHandler1.holdAt(true); + scene->setAction(&scene->_sequenceManager, scene, 91, this, &scene->_object6, NULL); + break; + case CURSOR_LOOK: + SceneItem::display2(90, 8); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + setAction(&scene->_sequenceManager, scene, 96, this, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene90::Scene90() : + _item1(0, CURSOR_LOOK, 90, 9, LIST_END), + _item2(0, CURSOR_LOOK, 90, 10, LIST_END), + _item3(0, CURSOR_LOOK, 90, 11, LIST_END), + _object3(OBJECT_STUNNER, 90, 13, CURSOR_LOOK, 90, 12, CURSOR_USE, 90, 16, LIST_END), + _object4(CURSOR_LOOK, 90, 17, LIST_END), + _object5(CURSOR_LOOK, 90, 18, CURSOR_USE, 90, 19, LIST_END) { +} + +void Scene90::stripCallback(int v) { + Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene; + + if (v == 1) + scene->_object2.animate(ANIM_MODE_7, NULL); + else if (v == 2) + scene->_object2.animate(ANIM_MODE_NONE); +} + +void Scene90::postInit(SceneObjectList *OwnerList) { + loadScene(90); + Scene::postInit(); + + setZoomPercents(70, 10, 180, 100); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerSR); + + _speakerMText._npc = &_object2; + _speakerQText._textWidth = 160; + _speakerQText._npc = &_object5; + _speakerSText._npc = &_object1; + + _object5.postInit(); + _object5.setVisage(2333); + _object5.setObjectWrapper(new SceneObjectWrapper()); + _object5._strip = 7; + _object5._moveDiff = Common::Point(22, 22); + _object5.setPosition(Common::Point(151, 177)); + _object5.changeZoom(-1); + _globals->_sceneItems.push_back(&_object5); + + _object1.postInit(); + _object1.setVisage(2337); + _object1.setObjectWrapper(new SceneObjectWrapper()); + _object1._strip = 4; + _object1._moveDiff = Common::Point(20, 20); + _object1.setPosition(Common::Point(212, 183)); + _object1.changeZoom(-1); + _globals->_sceneItems.push_back(&_object1); + + if (!_globals->getFlag(104)) { + _object4.postInit(); + _object4.setVisage(2331); + _object4.setObjectWrapper(new SceneObjectWrapper()); + _object4._strip = 4; + _object4._moveDiff = Common::Point(20, 20); + _object4.setPosition(Common::Point(251, 207)); + _object4.changeZoom(-1); + _globals->_sceneItems.push_back(&_object4); + } + + _object2.postInit(); + _object2.setVisage(90); + _object2.animate(ANIM_MODE_1, NULL); + _object2.setPosition(Common::Point(315, 185)); + _object2._strip = 2; + _globals->_sceneItems.push_back(&_object2); + + _object3.postInit(); + _object3.setVisage(90); + _object3.animate(ANIM_MODE_1, NULL); + _object3.setPosition(Common::Point(196, 181)); + _object3.fixPriority(175); + _globals->_sceneItems.push_back(&_object3); + + _globals->_player.disableControl(); + _globals->_soundHandler.play(55); + _soundHandler1.play(52); + _soundHandler1.holdAt(true); + + setAction(&_action1); + + _item3.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _item1.setBounds(Rect(271, 65, 271, 186)); + _item2.setBounds(Rect(0, 17, 124, 77)); + + _globals->_sceneItems.addItems(&_item1, &_item2, &_item3, NULL); +} + +void Scene90::signal() { + switch (_sceneMode) { + case 91: + _sceneMode = 92; + _globals->_soundHandler.play(77, this); + break; + case 92: + _globals->_scenePalette.clearListeners(); + _globals->_game->endGame(90, 6); + break; + case 96: + _globals->_player.enableControl(); + break; + case 97: + _stripManager._field2E8 = 0; + _action1.setActionIndex(5); + _action1.setDelay(1); + break; + default: + break; + } +} + +/*-------------------------------------------------------------------------- + * Scene 95 - Ship Close-up + * + *--------------------------------------------------------------------------*/ + +void Scene95::Action1::signal() { + Scene95 *scene = (Scene95 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _state = 6; + setDelay(60); + break; + case 1: + if (_state) { + SceneItem::display(95, _state % 2, SET_FONT, 2, + SET_EXT_BGCOLOR, -1, SET_EXT_BGCOLOR, 20, + SET_WIDTH, 200, SET_KEEP_ONSCREEN, 1, SET_TEXT_MODE, 1, LIST_END); + --_state; + _actionIndex = 1; + } + setDelay(60); + break; + case 2: { + scene->_soundHandler.play(66); + scene->_object3._numFrames = 5; + scene->_object3.animate(ANIM_MODE_5, NULL); + SceneItem::display(0, 0); + + Common::Point pt1(5, 198); + NpcMover *mover1 = new NpcMover(); + _globals->_player.addMover(mover1, &pt1, this); + + Common::Point pt2(9, 190); + NpcMover *mover2 = new NpcMover(); + scene->_object1.addMover(mover2, &pt2, NULL); + break; + } + case 3: { + scene->_soundHandler.play(21); + + Common::Point pt1(235, 72); + PlayerMover *mover1 = new PlayerMover(); + _globals->_player.addMover(mover1, &pt1, NULL); + + Common::Point pt2(235, 72); + PlayerMover *mover2 = new PlayerMover(); + scene->_object1.addMover(mover2, &pt2, NULL); + + SceneItem::display(95, 2, SET_Y, 45, SET_FONT, 2, + SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 13, SET_WIDTH, 200, + SET_KEEP_ONSCREEN, 1, LIST_END); + setDelay(240); + break; + } + case 4: + scene->_object3.remove(); + + SceneItem::display(95, 3, SET_Y, 45, SET_FONT, 2, + SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 35, SET_WIDTH, 200, + SET_KEEP_ONSCREEN, 1, LIST_END); + setDelay(240); + break; + case 5: + SceneItem::display(95, 4, SET_Y, 45, SET_FONT, 2, + SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 35, SET_WIDTH, 200, + SET_KEEP_ONSCREEN, 1, LIST_END); + setDelay(240); + break; + case 6: + setDelay(20); + break; + case 7: { + SceneItem::display(0, 0); + _globals->_player.setVisage(92); + _globals->_player.setPosition(Common::Point(-25, 200)); + scene->_object1.setVisage(91); + scene->_object1.setPosition(Common::Point(-22, 220)); + + scene->_soundHandler.play(21); + + Common::Point pt1(5, 198); + NpcMover *mover1 = new NpcMover(); + _globals->_player.addMover(mover1, &pt1, this); + + Common::Point pt2(9, 190); + NpcMover *mover2 = new NpcMover(); + scene->_object1.addMover(mover2, &pt2, NULL); + break; + } + case 8: { + Common::Point pt1(108, 112); + PlayerMover *mover1 = new PlayerMover(); + _globals->_player.addMover(mover1, &pt1, this); + + Common::Point pt2(108, 112); + PlayerMover *mover2 = new PlayerMover(); + scene->_object1.addMover(mover2, &pt2, NULL); + break; + } + case 9: + _globals->_sceneManager.changeScene(2300); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene95::Scene95() { +} + +void Scene95::postInit(SceneObjectList *OwnerList) { + loadScene(95); + Scene::postInit(); + setZoomPercents(100, 10, 200, 100); + + _globals->_player.postInit(); + _globals->_player.setVisage(2337); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player._strip = 4; + _globals->_player._moveDiff = Common::Point(30, 30); + _globals->_player.setPosition(Common::Point(-35, 200)); + _globals->_player.changeZoom(-1); + _globals->_player.disableControl(); + + _object1.postInit(); + _object1.setVisage(2333); + _object1.setPosition(Common::Point(-22, 220)); + _object1.animate(ANIM_MODE_1, NULL); + _object1.setObjectWrapper(new SceneObjectWrapper()); + _object1._moveDiff = Common::Point(30, 30); + _object1.changeZoom(-1); + + _object3.postInit(); + _object3.setVisage(96); + _object3.setPosition(Common::Point(29, 198)); + + _soundHandler.play(67); + setAction(&_action1); +} + +/*-------------------------------------------------------------------------- + * Scene 6100 - Sunflower navigation sequence + * + *--------------------------------------------------------------------------*/ + +void Scene6100::Action1::signal() { + Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->showMessage(SCENE6100_CAREFUL, 13, this); + break; + case 1: + scene->showMessage(SCENE6100_TOUGHER, 35, this); + break; + case 2: + scene->showMessage(NULL, 0, NULL); + remove(); + break; + } +} + +void Scene6100::Action2::signal() { + Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->showMessage(SCENE6100_ONE_MORE_HIT, 13, this); + break; + case 1: + scene->showMessage(SCENE6100_DOING_BEST, 35, this); + break; + case 2: + scene->showMessage(NULL, 0, NULL); + remove(); + break; + } +} + +void Scene6100::Action3::signal() { + Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_speed = 0; + setDelay(60); + break; + case 1: + _globals->_scenePalette.clearListeners(); + scene->_fadePercent = 100; + _globals->_scenePalette.refresh(); + scene->loadScene(9997); + scene->_object1.hide(); + scene->_object2.hide(); + scene->_object3.hide(); + scene->_sunflower1.hide(); + scene->_sunflower2.hide(); + scene->_sunflower3.hide(); + scene->_rocks.hide(); + scene->_sceneText.hide(); + + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(8120, this); + break; + case 2: + scene->showMessage(SCENE6100_REPAIR, 7, this); + break; + case 3: + scene->showMessage(NULL, 0, NULL); + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(8130, this); + break; + case 4: + _globals->setFlag(76); + _globals->_sceneManager.changeScene( + (scene->_stripManager._field2E8 == 135) ? 6100 : 2320); + remove(); + break; + } +} + +void Scene6100::Action4::signal() { + Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->showMessage(SCENE6100_ROCKY_AREA, 13, this); + break; + case 1: + scene->showMessage(SCENE6100_REPLY, 35, this); + break; + case 2: + scene->showMessage(NULL, 0, NULL); + remove(); + break; + } +} + +void Scene6100::Action5::dispatch() { + Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; + FloatSet zeroSet; + const double MULTIPLY_FACTOR = 0.01744; // 2 * pi / 360 + + if (scene->_turnAmount) { + scene->_angle = (scene->_turnAmount + scene->_angle) % 360; + + for (int objIndex = 1; objIndex <= 3; ++objIndex) { + SceneObject *obj = &scene->_object1; + if (objIndex == 2) obj = &scene->_object2; + if (objIndex == 3) obj = &scene->_object3; + + obj->_position.x += scene->_turnAmount * 2; + if (obj->_position.x >= 320) + obj->_position.x -= 480; + if (obj->_position.x < -160) + obj->_position.x += 480; + } + } + + scene->_object1._flags |= OBJFLAG_PANES; + scene->_object2._flags |= OBJFLAG_PANES; + scene->_object3._flags |= OBJFLAG_PANES; + + double distance = scene->_speed; + double angle = (double)scene->_angle * MULTIPLY_FACTOR; + scene->_probe._floats._float1 += sin(angle) * distance; + scene->_probe._floats._float2 += cos(angle) * distance; + + for (int idx = 0; idx < 4; ++idx) { + FloatSet tempSet = scene->_objList[idx]->_floats; + tempSet.add(-scene->_probe._floats._float1, -scene->_probe._floats._float2, + -scene->_probe._floats._float3); + + tempSet.proc1(scene->_angle * MULTIPLY_FACTOR); + + double sqrtVal = tempSet.sqrt(zeroSet); + if (sqrtVal != 0.0) { + scene->_objList[idx]->_position.y = static_cast(13800.0 / sqrtVal + 62.0); + } + + scene->_objList[idx]->_position.x = static_cast( + 160.0 - (330.0 / (tempSet._float2 + 330.0) * tempSet._float1)); + scene->_objList[idx]->dispatch(); + + if (tempSet._float2 < 0) { + scene->_objList[idx]->_position.y = 300; + + if (idx != 3) { + scene->_objList[idx]->_floats._float1 = + _globals->_randomSource.getRandomNumber(199); + scene->_objList[idx]->_floats._float2 = + _globals->_randomSource.getRandomNumber(999) + 750.0; + + scene->_objList[idx]->_floats.proc1( + -(scene->_turnAmount * 10 + scene->_angle) * MULTIPLY_FACTOR); + scene->_objList[idx]->_floats.add(scene->_probe._floats._float1, + scene->_probe._floats._float2, scene->_probe._floats._float3); + } + } + + if (idx == 3) { + scene->_rocksCheck = (ABS((int)tempSet._float1) < 100) && (tempSet._float2 > 0); + } + + scene->_objList[idx]->_flags |= OBJFLAG_PANES; + + if ((idx != 3) && (scene->_fadePercent == 100) && + (tempSet.sqrt(zeroSet) < 150.0)) { + switch (scene->_hitCount++) { + case 0: + scene->_soundHandler.play(233); + scene->showMessage(NULL, 0, NULL); + + if (!_globals->getFlag(76)) + scene->_probe.setAction(&scene->_action1); + break; + case 1: + scene->_soundHandler.play(233); + scene->showMessage(NULL, 0, NULL); + + if (!_globals->getFlag(76)) + scene->_probe.setAction(&scene->_action2); + break; + case 2: + scene->_soundHandler.play(234); + scene->showMessage(NULL, 0, NULL); + + if (!_globals->getFlag(76)) + scene->_probe.setAction(NULL); + scene->setAction(&scene->_action3); + break; + } + + _globals->_scenePalette.clearListeners(); + scene->_fadePercent = 0; + } + } +} + +void Scene6100::GetBoxAction::signal() { + Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_turnAmount = 0; + Common::Point pt(scene->_rocks._position.x, scene->_rocks._position.y + 10); + ProbeMover *mover = new ProbeMover(); + scene->_probe.addMover(mover, &pt, NULL); + scene->_probe.show(); + break; + } + case 1: { + scene->showMessage(SCENE6100_TAKE_CONTROLS, 35, this); + _globals->_scenePalette.clearListeners(); + + Common::Point pt(scene->_rocks._position.x, scene->_rocks._position.y - 10); + NpcMover *mover = new NpcMover(); + scene->_probe.addMover(mover, &pt, NULL); + break; + } + case 2: + scene->_probe._percent = 4; + scene->showMessage(SCENE6100_SURPRISE, 13, this); + break; + case 3: + scene->showMessage(SCENE6100_SWEAT, 35, this); + break; + case 4: + scene->showMessage(SCENE6100_VERY_WELL, 13, this); + break; + case 5: + scene->showMessage(NULL, 0, NULL); + _globals->_sceneManager.changeScene(2320); + remove(); + } +} + +void Scene6100::GetBoxAction::dispatch() { + Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; + + if (!scene->_probe._mover && (scene->_getBoxAction._actionIndex >= 1)) { + if (scene->_getBoxAction._actionIndex == 1) { + scene->_speed = 0; + scene->_getBoxAction.signal(); + } + + if (scene->_probe._percent > 4) + // Handle the probe disappearing into the rocks + scene->_probe._percent = scene->_probe._percent * 7 / 8; + scene->_probe._flags |= OBJFLAG_PANES; + } + + Action::dispatch(); +} + +void Scene6100::Action7::signal() { + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + setDelay(90); + break; + case 2: + _globals->_sceneManager.changeScene(2100); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene6100::Object::synchronize(Serializer &s) { + SceneObject::synchronize(s); + + // Save the double fields of the FloatSet + s.syncAsDouble(_floats._float1); + s.syncAsDouble(_floats._float2); + s.syncAsDouble(_floats._float3); + s.syncAsDouble(_floats._float4); +} + +/*--------------------------------------------------------------------------*/ + +void Scene6100::ProbeMover::dispatch() { + Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; + + if (!dontMove()) { + if (scene->_speed > 0) { + scene->_action5.dispatch(); + scene->_speed = (scene->_speed * 4) / 5; + } + } + + NpcMover::dispatch(); +} + +/*--------------------------------------------------------------------------*/ + +void Scene6100::Item1::doAction(int action) { + SceneItem::display2(4000, 0); +} + +/*--------------------------------------------------------------------------*/ + +Scene6100::Scene6100(): Scene() { + _objList[0] = &_sunflower1; + _objList[1] = &_sunflower2; + _objList[2] = &_sunflower3; + _objList[3] = &_rocks; + + _speed = 30; + _fadePercent = 100; + _rocksCheck = false; + _hitCount = 0; + _turnAmount = 0; + _angle = 0; + _msgActive = false; + + _globals->_sceneHandler._delayTicks = 8; + + _globals->_player.disableControl(); + _globals->_events.setCursor(CURSOR_WALK); +} + +void Scene6100::synchronize(Serializer &s) { + Scene::synchronize(s); + + s.syncAsSint16LE(_speed); + s.syncAsSint16LE(_fadePercent); + s.syncAsByte(_rocksCheck); + s.syncAsByte(_msgActive); + s.syncAsSint16LE(_hitCount); + s.syncAsSint16LE(_turnAmount); + s.syncAsSint16LE(_angle); +} + +void Scene6100::postInit(SceneObjectList *OwnerList) { + loadScene(6100); + Scene::postInit(); + setZoomPercents(62, 2, 200, 425); + + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerSL); + + _object1.postInit(); + _object1.setVisage(6100); + _object1._frame = 1; + _object1._strip = 4; + _object1.setPosition(Common::Point(0, 60)); + _object1.fixPriority(1); + + _object2.postInit(); + _object2.setVisage(6100); + _object2._frame = 1; + _object2._strip = 4; + _object2.setPosition(Common::Point(160, 60)); + _object2.fixPriority(1); + + _object3.postInit(); + _object3.setVisage(6100); + _object3._frame = 1; + _object3._strip = 4; + _object3.setPosition(Common::Point(320, 60)); + _object3.fixPriority(1); + + _rocks.postInit(); + _rocks.setVisage(6100); + _rocks._frame = 1; + _rocks._strip = 3; + _rocks.setPosition(Common::Point(320, 0)); + _rocks.fixPriority(2); + _rocks.changeZoom(-1); + _rocks._floats._float1 = 320.0; + _rocks._floats._float2 = 25000.0; + _rocks._floats._float3 = 0.0; + + _probe.postInit(); + _probe._moveDiff = Common::Point(15, 15); + _probe.setVisage(6100); + _probe._frame = 1; + _probe._strip = 5; + _probe.setPosition(Common::Point(160, 260)); + _probe.fixPriority(3); + _probe._floats._float1 = 320.0; + _probe._floats._float2 = 0.0; + _probe._floats._float3 = 0.0; + _probe.hide(); + + int baseVal = 2000; + for (int idx = 0; idx < 3; ++idx) { + _objList[idx]->_floats._float1 = _globals->_randomSource.getRandomNumber(999); + _objList[idx]->_floats._float2 = baseVal; + _objList[idx]->_floats._float3 = 0.0; + baseVal += _globals->_randomSource.getRandomNumber(499); + + _objList[idx]->postInit(); + _objList[idx]->setVisage(6100); + _objList[idx]->_frame = 1; + _objList[idx]->_strip = 2; + + _objList[idx]->setPosition(Common::Point( + _globals->_randomSource.getRandomNumber(319), 60)); + _objList[idx]->fixPriority(1); + _objList[idx]->changeZoom(-1); + } + + setAction(&_action5); + _globals->_scenePalette.addRotation(96, 143, -1); + + if (!_globals->getFlag(76)) + _probe.setAction(&_action4); + + _globals->_soundHandler.play(231); +} + +void Scene6100::remove() { + _globals->_player.disableControl(); + _globals->_scenePalette.clearListeners(); + Scene::remove(); +} + +void Scene6100::process(Event &event) { + Scene::process(event); + + if (event.eventType == EVENT_KEYPRESS) { + // Handle incremental turning speeds with arrow keys + if ((event.kbd.keycode == Common::KEYCODE_LEFT) || (event.kbd.keycode == Common::KEYCODE_KP4)) { + _turnAmount = MIN(_turnAmount + 1, 8); + } else if ((event.kbd.keycode == Common::KEYCODE_RIGHT) || (event.kbd.keycode == Common::KEYCODE_KP6)) { + _turnAmount = MAX(_turnAmount - 1, -8); + } + } + + if (_probe._action) + _probe._action->process(event); +} + +void Scene6100::dispatch() { + Scene::dispatch(); + + if (_probe._action) + _probe._action->dispatch(); + + // Handle mouse controlling the turning + int changeAmount = (_globals->_events._mousePos.x - 160) / -20; + _turnAmount += (changeAmount - _turnAmount) / 2; + + if (_fadePercent < 100) { + _fadePercent += 10; + if (_fadePercent >= 100) { + _globals->_scenePalette.addRotation(96, 143, -1); + _fadePercent = 100; + } + + byte adjustData[] = {0xff, 0xff, 0xff, 0}; + _globals->_scenePalette.fade(adjustData, false, _fadePercent); + } + + if (_action != &_action3) { + // Display the distance remaining to the target + int distance = (int)_probe._floats.sqrt(_rocks._floats); + Common::String s = Common::String::format("%06d", distance); + + _sceneText.setPosition(Common::Point(24, 160)); + _sceneText._fontNumber = 0; + _sceneText._color1 = 35; + _sceneText.setup(s); + } + + if (_rocksCheck && (_action == &_action5)) { + // Check whether the probe is close enough to the rocks + double distance = _probe._floats.sqrt(_rocks._floats); + + if ((distance >= 300.0) && (distance <= 500.0)) + setAction(&_getBoxAction); + } +} + +void Scene6100::showMessage(const Common::String &msg, int color, Action *action) { + if (_msgActive) { + _msgActive = false; + _speaker1.removeText(); + } + + if (!msg.empty()) { + _msgActive = true; + _speaker1._textPos.x = 20; + _speaker1._textWidth = 280; + _speaker1._color1 = color; + _speaker1._action = action; + _speaker1.setText(msg); + } +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes1.h b/engines/tsage/ringworld/ringworld_scenes1.h new file mode 100644 index 0000000000..dd64e563cd --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes1.h @@ -0,0 +1,538 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES1_H +#define TSAGE_RINGWORLD_SCENES1_H + +#include "common/scummsys.h" +#include "tsage/ringworld/ringworld_logic.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" + +namespace tSage { + +class Scene10 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; +public: + Speaker _speakerSText; + Speaker _speakerQText; + Action1 _action1; + Action2 _action2; + SceneObject _object1, _object2, _object3; + SceneObject _object4, _object5, _object6; + + virtual void stripCallback(int v); + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene15 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + virtual void dispatch(); + }; +public: + Action1 _action1; + SceneObject _object1; + ASound _soundHandler; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene20 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; +public: + SequenceManager _sequenceManager; + SpeakerQText _speakerQText; + SpeakerGameText _speakerGameText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + SceneObject _sceneObject1, _SceneObjectExt, _sceneObject3, _sceneObject4, _sceneObject5; + ASound _sound; +public: + Scene20(); + virtual ~Scene20() {} + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + +class Scene30 : public Scene { + /* Scene objects */ + // Doorway beam sensor + class BeamObject : public SceneObject { + public: + virtual void doAction(int action); + }; + // Doorway object + class DoorObject : public SceneObject { + public: + virtual void doAction(int action); + }; + // Kzin object + class KzinObject : public SceneObject { + public: + virtual void doAction(int action); + }; + + /* Actions */ + class BeamAction : public Action { + public: + virtual void signal(); + }; + class KzinAction : public Action { + public: + virtual void signal(); + }; + class RingAction : public Action { + public: + virtual void signal(); + }; + class TalkAction : public Action { + public: + virtual void signal(); + }; + +public: + ASound _sound; + DisplayHotspot _groundHotspot, _wallsHotspot, _courtyardHotspot, _treeHotspot; + BeamObject _beam; + DoorObject _door; + KzinObject _kzin; + + BeamAction _beamAction; + KzinAction _kzinAction; + RingAction _ringAction; + TalkAction _talkAction; + SequenceManager _sequenceManager; + + SpeakerSR _speakerSR; + SpeakerQL _speakerQL; + SpeakerSText _speakerSText; + SpeakerQText _speakerQText; +public: + Scene30(); + virtual ~Scene30() {} + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + +class Scene40 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + class Action8 : public Action { + public: + virtual void signal(); + virtual void dispatch(); + }; + + /* Objects */ + class DyingKzin : public SceneObject { + public: + virtual void doAction(int action); + }; + class Assassin : public SceneObject { + public: + virtual void doAction(int action); + }; + + /* Items */ + class Item2 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class Item6 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class Item8 : public SceneHotspot { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + SpeakerSL _speakerSL; + SpeakerQR _speakerQR; + SpeakerQText _speakerQText; + SpeakerSText _speakerSText; + SpeakerGameText _speakerGameText; + ASound _soundHandler; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + SceneObject _object1, _object2, _object3; + DyingKzin _dyingKzin; + Assassin _assassin; + SceneObject _doorway, _object7, _object8; + DisplayHotspot _item1; + Item2 _item2; + DisplayHotspot _item3, _item4, _item5; + Item6 _item6; + DisplayHotspot _item7, _item8; + + Scene40(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene50 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + + /* Objects */ + class Object1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object3 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object4 : public SceneObject { + public: + virtual void doAction(int action); + }; + +public: + SequenceManager _sequenceManager; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Object1 _object1; + Object2 _object2; + Object3 _object3; + Object4 _object4; + Rect _doorwayRect; + SpeakerSText _speakerSText; + SpeakerQText _speakerQText; + DisplayHotspot _item0, _item1, _item2; + DisplayHotspot _item3, _item4, _item5; + + Scene50(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene60 : public Scene { + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class PrevObject : public SceneObject { + public: + virtual void doAction(int action); + }; + class NextObject : public SceneObject { + public: + virtual void doAction(int action); + }; + class ExitObject : public SceneObject { + public: + virtual void doAction(int action); + }; + class MessageObject : public SceneObject { + public: + virtual void doAction(int action); + }; + class ControlObject : public SceneObject { + public: + virtual void doAction(int action); + }; + class SlaveObject : public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class MasterObject : public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class FloppyDrive : public SceneObject { + public: + virtual void doAction(int action); + }; + class Item1 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class Item : public SceneHotspot { + public: + int _messageNum, _sceneMode; + + Item(int sceneRegionId, int messageNum, int sceneMode) { + _sceneRegionId = sceneRegionId; + _messageNum = messageNum; + _sceneMode = sceneMode; + } + virtual void doAction(int action); + }; + +public: + GfxButton _gfxButton; + SequenceManager _sequenceManager; + SpeakerQText _speakerQText; + SpeakerSText _speakerSText; + Action1 _action1; + Action2 _action2; + SceneObject _rose; + PrevObject _prevButton; + NextObject _nextButton; + ExitObject _exitButton; + MessageObject _message; + ControlObject _controlButton; + SlaveObject _slaveButton; + MasterObject _masterButton; + FloppyDrive _floppyDrive; + SceneObject _redLights; + Item1 _item1; + Item _item2, _item3, _item4, _item5, _item6; + ASound _soundHandler1; + ASound _soundHandler2; + ASound _soundHandler3; + + Scene60(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); +}; + +class Scene90 : public Scene { + class Action1 : public Action { + public: + virtual void signal(); + }; + class Object1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object2 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + SpeakerSText _speakerSText; + SpeakerQText _speakerQText; + SpeakerQL _speakerQL; + SpeakerSR _speakerSR; + SpeakerMText _speakerMText; + Action1 _action1; + Object1 _object1; + Object2 _object2; + DisplayObject _object3, _object4, _object5; + SceneObject _object6; + DisplayHotspot _item1, _item2, _item3; + ASound _soundHandler1, _soundHandler2; + + Scene90(); + + virtual void stripCallback(int v); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + +class Scene95 : public Scene { + class Action1 : public ActionExt { + public: + virtual void signal(); + }; + +public: + Action1 _action1; + SceneObject _object1, _object2, _object3; + ASound _soundHandler; + + Scene95(); + virtual void postInit(SceneObjectList *OwnerList); +}; + +class Scene6100 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void dispatch(); + }; + class GetBoxAction : public Action { + public: + virtual void signal(); + virtual void dispatch(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + + /* Objects */ + class Object : public SceneObject { + public: + FloatSet _floats; + + virtual void synchronize(Serializer &s); + }; + class ProbeMover : public NpcMover { + public: + virtual void dispatch(); + }; + + /* Items */ + class Item1 : public SceneItem { + public: + virtual void doAction(int action); + }; + +public: + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + GetBoxAction _getBoxAction; + Action7 _action7; + ASound _soundHandler; + Speaker _speaker1; + SpeakerQR _speakerQR; + SpeakerSL _speakerSL; + SceneObject _object1, _object2, _object3; + Object _rocks, _probe; + Object _sunflower1, _sunflower2, _sunflower3; + SceneText _sceneText; + SceneItem _item1; + + int _turnAmount, _angle, _speed, _fadePercent; + int _hitCount; + bool _rocksCheck; + Object *_objList[4]; + bool _msgActive; + + Scene6100(); + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void process(Event &event); + virtual void dispatch(); + void showMessage(const Common::String &msg, int color, Action *action); + +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp new file mode 100644 index 0000000000..1cff5d0aaf --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes10.cpp @@ -0,0 +1,2089 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "graphics/cursorman.h" +#include "tsage/ringworld/ringworld_scenes10.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +Scene2::Scene2() : Scene() { + _sceneState = 0; +} + +/*--------------------------------------------------------------------------*/ + +void Object9350::postInit(SceneObjectList *OwnerList) { + //SceneObject::postInit(&_globals->_sceneManager._altSceneObjects); + SceneObject::postInit(OwnerList); +} + +void Object9350::draw() { + reposition(); + Rect destRect = _bounds; + destRect.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y); + Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(_globals->_sceneManager._scene->_stripManager._stripNum); + GfxSurface frame = getFrame(); + _globals->gfxManager().copyFrom(frame, destRect, priorityRegion); +} + +/*-------------------------------------------------------------------------- + * Scene 9100 - Near beach: Slave washing clothes + * + *--------------------------------------------------------------------------*/ +void Scene9100::SceneHotspot1::doAction(int action) { + Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; + + if (action == CURSOR_TALK) { + if (_globals->getFlag(23)) { + _globals->_player.disableControl(); + scene->_sceneMode = 9104; + } else { + _globals->setFlag(23); + _globals->_player.disableControl(); + scene->_sceneMode = 9105; + } + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &_globals->_player, &scene->_object5, &scene->_object6, NULL); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9100::dispatch() { + Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; + + if (!_action) { + if (_globals->_player._position.x < 25) { + _globals->_player.disableControl(); + if (!_globals->getFlag(23) || _globals->getFlag(11)) + _sceneMode = 9106; + else { + _sceneMode = 9108; + _globals->setFlag(11); + } + + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &_globals->_player, NULL); + } + } else { + Scene::dispatch(); + } +} + +void Scene9100::signal() { + Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; + + switch (scene->_sceneMode) { + case 9102: + case 9106: + case 9108: + _globals->_sceneManager.changeScene(9150); + break; + case 9105: + _sceneHotspot3.remove(); + // No break on purpose + case 9103: + case 9104: + case 9107: + case 9109: + default: + _globals->_player.enableControl(); + break; + } +} + +void Scene9100::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + _object1.postInit(); + _object1.setVisage(9100); + _object1._strip = 1; + _object1._numFrames = 6; + _object1.setPosition(Common::Point(279, 132)); + _object1.animate(ANIM_MODE_2, NULL); + _object1.fixPriority(10); + + _globals->_player.postInit(); + + _object2.postInit(); + _object2.hide(); + + _object3.postInit(); + _object3.hide(); + + _object4.postInit(); + _object4.hide(); + + _object5.postInit(); + _object5.hide(); + + if (!_globals->getFlag(23)) { + _object6.postInit(); + _object6.setVisage(9111); + _object6.setStrip(6); + _object6.setFrame(1); + _object6.setPosition(Common::Point(138, 166)); + _sceneHotspot3.setup(145, 125, 166, 156, 9100, 40, 43); + } + _sceneHotspot1.setup(140, 176, 185, 215, 9100, 36, 37); + _sceneHotspot2.setup(161, 138, 182, 175, 9100, 38, 39); + _sceneHotspot4.setup(37, 196, 47, 320, 9100, 44, -1); + _sceneHotspot5.setup(69, 36, 121, 272, 9100, 45, 46); + _sceneHotspot6.setup(127, 0, 200, 52, 9100, 47, 48); + + _globals->_soundHandler.play(251); + if (_globals->_sceneManager._previousScene == 9150) { + if (_globals->getFlag(20)) { + _globals->_player.disableControl(); + if (_globals->getFlag(11)) + _sceneMode = 9107; + else + _sceneMode = 9109; + setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object5, NULL); + } else { + _sceneMode = 9103; + _globals->_player.disableControl(); + setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object2, &_object3, &_object4, &_object5, NULL); + _globals->setFlag(20); + } + } else { + _sceneMode = 9102; + _globals->_player.disableControl(); + setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object2, &_object3, &_object4, &_object5, NULL); + } +} + +/*-------------------------------------------------------------------------- + * Scene 9150 - Castle: Outside the bulwarks + * + *--------------------------------------------------------------------------*/ +void Scene9150::Object3::signal() { + switch (_signalFlag++) { + case 0: + _timer = 10 + _globals->_randomSource.getRandomNumber(90); + break; + default: + animate(ANIM_MODE_5, this); + _signalFlag = 0; + break; + } +} + +void Scene9150::Object3::dispatch() { + SceneObject::dispatch(); + if ((_timer != 0) && (--_timer == 0)) + signal(); +} + +void Scene9150::signal() { + switch (_sceneMode) { + case 9151: + case 9157: + _globals->_sceneManager.changeScene(9100); + break; + case 9153: + _globals->_sceneManager.changeScene(9300); + break; + case 9152: + case 9155: + case 9156: + _globals->_player.enableControl(); + break; + case 9154: + default: + break; + } +} + +void Scene9150::dispatch() { + + if ((_sceneState != 0) && (_sceneBounds.left == 0)) { + _object3._timer = 0; + _sceneState = 0; + _object3.setAction(&_sequenceManager2, NULL, 9154, &_object3, NULL); + _sceneHotspot10.remove(); + } + + if (_action) { + _action->dispatch(); + } else { + if (_globals->_player._position.x >= 160) { + if (_globals->_player._position.x > 630) { + _globals->_player.disableControl(); + _sceneMode = 9157; + setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL); + } + } else { + _globals->_player.disableControl(); + if (_globals->getFlag(11)) { + _globals->_soundHandler.play(286); + _sceneMode = 9153; + } else { + _sceneMode = 9156; + } + setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL); + } + } +} + +void Scene9150::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + _globals->_player.postInit(); + + _object3.postInit(); + _sceneState = 1; + _object3.setVisage(9151); + _object3._strip = 1; + _object3._frame = 1; + _object3.setPosition(Common::Point(312, 95)); + _object3.signal(); + + _sceneHotspot1.setup(0, 0, 200, 94, 9150, 46, -1); + _sceneHotspot2.setup(51, 90, 118, 230, 9150, 47, -1); + _sceneHotspot3.setup(182, 104, 200, 320, 9150, 48, 49); + _sceneHotspot4.setup(103, 292, 152, 314, 9150, 50, 51); + _sceneHotspot5.setup(115, 350, 160, 374, 9150, 52, 53); + _sceneHotspot6.setup(0, 471, 200, 531, 9150, 54, 55); + _sceneHotspot7.setup(170, 320, 185, 640, 9150, 56, -1); + _sceneHotspot9.setup(157, 107, 186, 320, 9150, 56, -1); + _sceneHotspot8.setup(133, 584, 142, 640, 9150, 57, -1); + _sceneHotspot10.setup(83, 304, 103, 323, 9150, 58, 59); + + _globals->_soundHandler.play(285); + _globals->_player.disableControl(); + + if (_globals->getFlag(20)) { + // Walking alone + _globals->_scrollFollower = &_globals->_player; + if (_globals->getFlag(11)) + // Hero wearing peasan suit + _sceneMode = 9155; + else + // Hero wearing Purple suit + _sceneMode = 9152; + setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL); + } else { + // Walking with the tiger + _sceneMode = 9151; + _object2.postInit(); + _object2.hide(); + _object1.postInit(); + setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, &_object1, &_object2, NULL); + } +} + +/*-------------------------------------------------------------------------- + * Scene 9200 - Castle: Near the fountain + * + *--------------------------------------------------------------------------*/ +void Scene9200::SceneHotspot1::doAction(int action) { + Scene9200 *scene = (Scene9200 *)_globals->_sceneManager._scene; + + if (action == OBJECT_TUNIC) { + _globals->_player.disableControl(); + if (_globals->getFlag(93)) { + scene->_sceneState = 9214; + scene->setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, NULL); + } else { + _globals->setFlag(93); + scene->_sceneState = 9213; + scene->setAction(&scene->_sequenceManager, scene, 9213, &_globals->_player, &scene->_object2, NULL); + } + } else if (action <= 100) { + _globals->_player.disableControl(); + scene->_sceneState = 9214; + scene->setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, NULL); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9200::signal() { + switch (_sceneState++) { + case 9207: + _globals->_sceneManager.changeScene(9700); + break; + case 9208: + case 9211: + case 9212: + _globals->_sceneManager.changeScene(9500); + break; + case 9209: + _globals->_sceneManager.changeScene(9360); + break; + case 9210: + _hotspot1.remove(); + // No break on purpose + case 9201: + case 9202: + case 9203: + case 9204: + case 9205: + case 9206: + default: + _globals->_player.enableControl(); + break; + } +} + +void Scene9200::process(Event &event) { + Scene::process(event); +} + +void Scene9200::dispatch() { +// Rect rect9200 = Rect(320, 175, 250, 154); + Rect rect9200 = Rect(250, 154, 320, 175); + + if (_action) { + _action->dispatch(); + } else { + if ( (_globals->_player._position.x <= 0) || ((_globals->_player._position.x < 100) && (_globals->_player._position.y > 199))) { + _globals->_player.disableControl(); + _sceneState = 9209; + setAction(&_sequenceManager, this, 9209, &_globals->_player, &_object2, &_object3, NULL); + } else { + if (rect9200.contains(_globals->_player._position)) { + if (_globals->getFlag(93)) { + if (_globals->getFlag(86)) { + _sceneState = 9215; + setAction(&_sequenceManager, this, 9215, &_globals->_player, &_object2, &_object3, NULL); + } else { + _sceneState = 9208; + setAction(&_sequenceManager, this, 9208, &_globals->_player, &_object2, &_object3, NULL); + } + } else { + _globals->_player.disableControl(); + _sceneState = 9204; + setAction(&_sequenceManager, this, 9204, &_globals->_player, &_object2, &_object3, NULL); + } + } else { + if (_globals->_player._position.y < 140) { + _globals->_player.disableControl(); + _sceneState = 9207; + setAction(&_sequenceManager, this, 9207, &_globals->_player, &_object2, &_object3, NULL); + } + } + } + } +} + +void Scene9200::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(130, 50, 200, 150); + + _globals->_player.postInit(); + _object3.postInit(); + _object3.hide(); + _object1.postInit(); + // Water animation + _object1.setVisage(9200); + _object1._strip = 3; + _object1.animate(ANIM_MODE_2, NULL); + _object1.setPosition(Common::Point(132, 114)); + _object1.fixPriority(140); + _soundHandler.play(297); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerGR); + _stripManager.addSpeaker(&_speakerGText); + + if (!_globals->getFlag(86)) { + _object2.postInit(); + _hotspot1.setup(96, 194, 160, 234, 9200, 29, 31); + } + _hotspot2.setup(164, 0, 200, 282, 9200, 0, 1); + _hotspot3.setup(140, 39, 165, 153, 9200, 2, 3); + _hotspot4.setup(92, 122, 139, 152, 9200, 4, 5); + _hotspot5.setup(33, 20, 142, 115, 9200, 6, 7); + _hotspot6.setup(104, 235, 153, 265, 9200, 8, 9); + _hotspot7.setup(107, 262, 153, 286, 9200, 10, 11); + _hotspot8.setup(69, 276, 164, 320, 9200, 12, 13); + + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.disableControl(); + + switch (_globals->_sceneManager._previousScene) { + case 9500: + if (_globals->getFlag(85)) { + if (RING_INVENTORY._helmet._sceneNumber == 1) { + _globals->setFlag(86); + _globals->_player.disableControl(); + _sceneState = 9210; + setAction(&_sequenceManager, this, 9210, &_globals->_player, &_object2, &_object3, NULL); + } else { + _globals->_player.disableControl(); + _sceneState = 9212; + setAction(&_sequenceManager, this, 9212, &_globals->_player, &_object2, &_object3, NULL); + } + } else { + if (RING_INVENTORY._helmet._sceneNumber == 1) { + _globals->_player.disableControl(); + _sceneState = 9211; + setAction(&_sequenceManager, this, 9211, &_globals->_player, &_object2, &_object3, NULL); + } else { + _globals->_player.disableControl(); + _sceneState = 9202; + setAction(&_sequenceManager, this, 9202, &_globals->_player, &_object2, &_object3, NULL); + } + } + break; + case 9700: + if (_globals->getFlag(86)) { + _sceneState = 9206; + setAction(&_sequenceManager, this, 9206, &_globals->_player, &_object2, &_object3, NULL); + } else { + _sceneState = 9203; + setAction(&_sequenceManager, this, 9203, &_globals->_player, &_object2, &_object3, NULL); + } + break; + case 9360: + default: + if (_globals->getFlag(86)) { + _sceneState = 9205; + setAction(&_sequenceManager, this, 9205, &_globals->_player, &_object2, &_object3, NULL); + } else { + _sceneState = 9201; + setAction(&_sequenceManager, this, 9201, &_globals->_player, &_object2, &_object3, NULL); + } + break; + } +} + +/*-------------------------------------------------------------------------- + * Scene 9300 - Castle: In front of a large guarded door + * + *--------------------------------------------------------------------------*/ +void Scene9300::signal() { + switch (_sceneMode++) { + case 9301: + _globals->setFlag(84); + // No break on purpose + case 9303: + _globals->_soundHandler.play(295); + _globals->_sceneManager.changeScene(9350); + break; + case 9302: + _globals->_player.enableControl(); + break; + default: + break; + } +} + +void Scene9300::dispatch() { + if (_action) { + _action->dispatch(); + } else if (_globals->_player._position.y < 145) { + _globals->_player.disableControl(); + _sceneMode = 9303; + setAction(&_sequenceManager, this, 9303, &_globals->_player, &_object1, &_object2, NULL); + } +} + +void Scene9300::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(130, 75, 230, 150); + + _sceneMode = 0; + _globals->_player.postInit(); + _globals->_player.changeZoom(-1); + _object1.postInit(); + _object2.postInit(); + _globals->_soundHandler.play(289); + + _hotspot1.setup(35, 142, 76, 212, 9300, 0, 1); + _hotspot2.setup(28, 90, 81, 143, 9300, 2, 3); + _hotspot3.setup(78, 142, 146, 216, 9300, 4, 5); + _hotspot4.setup(3, 43, 91, 74, 9300, 6, 7); + _hotspot5.setup(82, 19, 157, 65, 9300, 8, 9); + _hotspot6.setup(5, 218, 84, 274, 9300, 10, 11); + _hotspot7.setup(86, 233, 168, 293, 9300, 12, 13); + _hotspot8.setup(157, 0, 200, 230, 9300, 14, 15); + _hotspot9.setup(169, 227, 200, 320, 9300, 16, 17); + _hotspot10.setup(145, 97, 166, 225, 9300, 18, 19); + _hotspot11.setup(81, 75, 145, 145, 9300, 20, 21); + _hotspot12.setup(0, 0, 94, 35, 9300, 22, 23); + _hotspot13.setup(12, 268, 149, 320, 9300, 24, 25); + + if (_globals->_sceneManager._previousScene == 9350) { + _globals->_player.disableControl(); + _sceneMode = 9302; + setAction(&_sequenceManager, this, 9302, &_globals->_player, &_object1, &_object2, NULL); + } else { + _globals->_player.disableControl(); + _sceneMode = 9301; + setAction(&_sequenceManager, this, 9301, &_globals->_player, &_object1, &_object2, NULL); + } +} + +/*-------------------------------------------------------------------------- + * Scene 9350 - Castle: In a hallway + * + *--------------------------------------------------------------------------*/ + +void Scene9350::signal() { + switch (_sceneState ++) { + case 0: + case 9352: + case 9353: + case 9354: + _globals->_player.enableControl(); + break; + case 9355: + _globals->_sceneManager.changeScene(9300); + break; + case 9356: + _globals->_sceneManager.changeScene(9360); + break; + case 9357: + case 9359: + _globals->_sceneManager.changeScene(9400); + break; + default: + break; + } +} + +void Scene9350::dispatch() { + if (_action == 0) { + if ((_globals->_player._position.x > 300) && (_globals->_player._position.y < 160)) { + _globals->_player.disableControl(); + _sceneState = 9356; + setAction(&_sequenceManager, this, 9356, &_globals->_player, &_object2, NULL); + } else if ((_globals->_player._position.x > 110) && (_globals->_player._position.y >= 195)) { + _globals->_player.disableControl(); + _sceneState = 9357; + setAction(&_sequenceManager, this, 9357, &_globals->_player, &_object2, NULL); + } else if ((_globals->_player._position.x < 10) || ((_globals->_player._position.x <= 110) && (_globals->_player._position.y >= 195))) { + _globals->_player.disableControl(); + _sceneState = 9355; + setAction(&_sequenceManager, this, 9355, &_globals->_player, &_object2, NULL); + } + } else { + Scene::dispatch(); + } +} + +void Scene9350::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(95, 80, 200, 100); + _globals->_player.postInit(); + + _object1.setup(9351, 1, 3, 139, 97, 0); + _sceneHotspot1.setup(42, 0, 97, 60, 9350, 0, -1); + _sceneHotspot2.setup(37, 205, 82, 256, 9350, 0, -1); + _sceneHotspot3.setup(29, 93, 92, 174, 9350, 1, -1); + _sceneHotspot4.setup(0, 308, 109, 320, 9350, 2, -1); + _sceneHotspot5.setup(0, 0, 200, 320, 9350, 3, -1); + + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.disableControl(); + + if (_globals->_sceneManager._previousScene == 9360) { + _globals->_player.disableControl(); + _sceneState = 9352; + setAction(&_sequenceManager, this, 9352, &_globals->_player, &_object2, NULL); + } else if (_globals->_sceneManager._previousScene == 9400) { + _globals->_player.disableControl(); + _sceneState = 9353; + setAction(&_sequenceManager, this, 9353, &_globals->_player, &_object2, NULL); + } else { + if (_globals->getFlag(84)) { + _globals->clearFlag(84); + _object2.postInit(); + _globals->_player.disableControl(); + _sceneState = 9359; + setAction(&_sequenceManager, this, 9359, &_globals->_player, &_object2, NULL); + } else { + _globals->_player.disableControl(); + _sceneState = 9354; + setAction(&_sequenceManager, this, 9354, &_globals->_player, &_object2, NULL); + } + } +} + +/*-------------------------------------------------------------------------- + * Scene 9360 - Castle: In a hallway + * + *--------------------------------------------------------------------------*/ + +void Scene9360::signal() { + switch (_sceneState ++) { + case 0: + case 9362: + case 9363: + case 9364: + _globals->_player.enableControl(); + break; + case 9365: + _globals->_sceneManager.changeScene(9350); + break; + case 9366: + _globals->_sceneManager.changeScene(9200); + break; + case 9367: + _globals->_sceneManager.changeScene(9450); + break; + default: + break; + } +} + +void Scene9360::dispatch() { + if (_action == 0) { + if ((_globals->_player._position.x > 300) && (_globals->_player._position.y < 160)) { + _globals->_player.disableControl(); + _sceneState = 9366; + setAction(&_sequenceManager, this, 9366, &_globals->_player, NULL); + } else if ((_globals->_player._position.x > 110) && (_globals->_player._position.y >= 195)) { + _globals->_player.disableControl(); + _sceneState = 9367; + setAction(&_sequenceManager, this, 9367, &_globals->_player, NULL); + } else if ((_globals->_player._position.x < 10) || ((_globals->_player._position.x <= 110) && (_globals->_player._position.y >= 195))) { + _globals->_player.disableControl(); + _sceneState = 9365; + setAction(&_sequenceManager, this, 9365, &_globals->_player, NULL); + } + } else { + Scene::dispatch(); + } +} + +void Scene9360::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(95, 80, 200, 100); + _globals->_player.postInit(); + + _hotspot1.setup(37, 92, 93, 173, 9360, 0, 1); + _hotspot2.setup(42, 0, 100, 63, 9360, 2, -1); + _hotspot3.setup(36, 205, 82, 260, 9360, 3, -1); + _hotspot4.setup(103, 2, 200, 320, 9360, 4, -1); + _hotspot5.setup(0, 0, 37, 320, 9360, 4, -1); + _hotspot6.setup(35, 61, 103, 92, 9360, 4, -1); + _hotspot7.setup(33, 174, 93, 207, 9360, 4, -1); + _hotspot8.setup(28, 257, 149, 320, 9360, 4, -1); + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.disableControl(); + if (_globals->_sceneManager._previousScene == 9350) { + _globals->_player.disableControl(); + _sceneState = 9364; + setAction(&_sequenceManager, this, 9364, &_globals->_player, NULL); + } else if (_globals->_sceneManager._previousScene == 9450) { + _globals->_player.disableControl(); + _sceneState = 9363; + setAction(&_sequenceManager, this, 9363, &_globals->_player, NULL); + } else { + _globals->_player.disableControl(); + _sceneState = 9362; + setAction(&_sequenceManager, this, 9362, &_globals->_player, NULL); + } + _object1.setup(9351, 1, 1, 131, 90, 0); +} + +/*-------------------------------------------------------------------------- + * Scene 9400 - Castle: Black-Smith room + * + *--------------------------------------------------------------------------*/ +Scene9400::Scene9400() { + _field1032 = 0; +} + +void Scene9400::SceneHotspot7::doAction(int action) { + Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene; + + if ((action == CURSOR_USE) && (RING_INVENTORY._straw._sceneNumber != 1)) { + scene->_sceneState = 1; + RING_INVENTORY._straw._sceneNumber = 1; + scene->setAction(&scene->_sequenceManager, scene, 9408, &_globals->_player, NULL); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9400::SceneHotspot8::doAction(int action) { + Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene; + + if (action == CURSOR_TALK) { + _globals->_player.disableControl(); + scene->_sceneState = 2; + scene->signal(); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9400::signal() { + switch (_sceneState ++) { + case 0: + _object1._numFrames = 6; + _stripManager.start(9400, this); + break; + case 1: + _object1._numFrames = 6; + _object1.animate(ANIM_MODE_2, NULL); + _globals->_player.enableControl(); + break; + case 2: + _object1.animate(ANIM_MODE_5, this); + break; + case 3: + _stripManager.start(9405, this); + break; + case 4: + _object1.animate(ANIM_MODE_2, this); + _globals->_player.enableControl(); + break; + case 9350: + _globals->_sceneManager.changeScene(9350); + break; + default: + break; + } +} + +void Scene9400::dispatch() { + if ((_object1._animateMode == 2) && (_object1._strip == 1) && (_object1._frame == 4)){ + if (_field1032 == 0) { + _soundHandler.play(296); + _field1032 = 1; + } + } else { + _field1032 = 0; + } + if (_action == 0) { + if (_globals->_player._position.y < 120) { + _sceneState = 9350; + _globals->_player.disableControl(); + setAction(&_action1); + Common::Point pt(-45, 88); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + } + } else { + Scene::dispatch(); + } +} + +void Scene9400::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + _screenNumber = 9400; + setZoomPercents(0, 100, 200, 100); + _globals->_player.postInit(); + _object1.postInit(); + _object3.postInit(); + _speakerQText._textPos.x = 20; + + _hotspot7.setup(157, 66, 180, 110, 9400, 21, 23); + _hotspot5.setup(130, 133, 152, 198, 9400, 22, -1); + _hotspot1.setup(33, 280, 69, 297, 9400, 1, 2); + _hotspot2.setup(73, 96, 87, 159, 9400, 3, 4); + _hotspot3.setup(89, 253, 111, 305, 9400, 5, 6); + _hotspot4.setup(46, 0, 116, 35, 9400, 7, 8); + _hotspot8.setup(58, 169, 122, 200, 9400, 9, 10); + _hotspot6.setup(0, 0, 199, 319, 9400, 16, 0); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerOR); + _stripManager.addSpeaker(&_speakerOText); + + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.disableControl(); + + // Useless check (skipped) : if (_globals->_sceneManager._previousScene == 9350) + _sceneState = 2; + if (!_globals->getFlag(89)) { + _globals->setFlag(89); + _sceneState = 0; + } + + setAction(&_sequenceManager, this, 9400, &_globals->_player, &_object1, &_object3, NULL); +} + +void Scene9400::synchronize(Serializer &s) { + Scene::synchronize(s); + if (s.getVersion() >= 3) + s.syncAsSint16LE(_field1032); +} + +/*-------------------------------------------------------------------------- + * Scene 9450 - Castle: Dining room + * + *--------------------------------------------------------------------------*/ +void Scene9450::Object2::signal() { + Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene; + + this->setAction(&scene->_sequenceManager3, this, 9458, this, &scene->_object1, NULL); +} + +void Scene9450::Object3::dispatch() { + SceneObject::dispatch(); + _percent = (_percent * 20) / 30; +} + +void Scene9450::Hotspot1::doAction(int action) { + Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene; + + if (action == CURSOR_USE) { + if (scene->_object2._action) + scene->_object2._action->remove(); + scene->_sceneMode = 9459; + _globals->_player.disableControl(); + scene->setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &_globals->_player, NULL); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9450::Hotspot3::doAction(int action) { + Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_CLOAK: + case OBJECT_JACKET: + case OBJECT_TUNIC2: + scene->_sceneMode = 9460; + _globals->_player.disableControl(); + scene->setAction(&scene->_sequenceManager1, scene, 9460, &_globals->_player, &scene->_object2, &scene->_object1, NULL); + break; + case OBJECT_TUNIC: + SceneItem::display(9450, 49, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + break; + case CURSOR_WALK: + // nothing + break; + case CURSOR_LOOK: + SceneItem::display(9450, 41, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + break; + case CURSOR_USE: + case CURSOR_TALK: + if (RING_INVENTORY._tunic._sceneNumber == 9450) { + if (scene->_object2._action) + scene->_object2._action->remove(); + scene->_sceneMode = 9459; + _globals->_player.disableControl(); + scene->setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &_globals->_player, NULL); + } else if ((RING_INVENTORY._cloak._sceneNumber != 1) && (RING_INVENTORY._jacket._sceneNumber != 1) && (RING_INVENTORY._tunic2._sceneNumber != 1)) { + SceneItem::display(9450, 38, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } else { + scene->_sceneMode = 9460; + _globals->_player.disableControl(); + scene->setAction(&scene->_sequenceManager1, scene, 9460, &_globals->_player, &scene->_object2, &scene->_object1, NULL); + } + break; + default: + SceneItem::display(9450, 45, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + break; + } +} + +void Scene9450::signal() { + switch (_sceneMode++) { + case 1002: + case 1004: + // Drink + setAction(&_sequenceManager1, this, 9456, &_object2, &_object1, &_object3, NULL); + break; + case 1005: + // Bring me more wine + setAction(&_sequenceManager1, this, 9457, &_object2, &_object1, &_object3, NULL); + break; + case 9451: + if (_globals->getFlag(87)) { + _globals->_player.enableControl(); + } else { + _sceneMode = 1001; + if (_object2._action) + _object2._action->remove(); + // Eat + setAction(&_sequenceManager1, this, 9455, &_object2, &_object1, &_object3, NULL); + } + break; + case 1001: + case 1003: + // Eat + setAction(&_sequenceManager1, this, 9455, &_object2, &_object1, &_object3, NULL); + break; + case 9453: + _globals->_sceneManager.changeScene(9360); + break; + case 9459: + RING_INVENTORY._tunic._sceneNumber = 1; + _object2.signal(); + _globals->_player.enableControl(); + _globals->_events.setCursor(CURSOR_WALK); + _hotspot1.remove(); + break; + case 1006: + _globals->setFlag(87); + // No break on purpose + default: + _globals->_player.enableControl(); + break; + } +} + +void Scene9450::dispatch() { + if (_action) { + _action->dispatch(); + } else { + if ((_globals->_player._position.y < 98) && (_globals->_player._position.x > 241) && (_globals->_player._position.x < 282)) { + _globals->_player.disableControl(); + _sceneMode = 9452; + setAction(&_sequenceManager1, this, 9452, &_globals->_player, NULL); + } else if ((_globals->_player._position.y < 99) && (_globals->_player._position.x > 68) && (_globals->_player._position.x < 103)) { + _globals->_player.disableControl(); + _sceneMode = 9453; + setAction(&_sequenceManager1, this, 9453, &_globals->_player, NULL); + } + } +} + +void Scene9450::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(84, 75, 167, 150); + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.postInit(); + + _object2.postInit(); + _object1.postInit(); + _object1.hide(); + + _globals->_player.disableControl(); + _sceneMode = 9451; + setAction(&_sequenceManager1, this, 9451, &_globals->_player, NULL); + + if (_globals->getFlag(87)) { + if (RING_INVENTORY._tunic._sceneNumber == 1) { + _object2.signal(); + } else { + _object2.setPosition(Common::Point(184, 144)); + _object2.setVisage(9451); + _object2.fixPriority(250); + _object2._strip = 5; + _object2._frame = 10; + } + } else { + _object3.postInit(); + _object3.hide(); + _object3.setAction(&_sequenceManager2, NULL, 9455, &_object2, &_object1, NULL); + } + + if (RING_INVENTORY._tunic._sceneNumber != 1) + _hotspot1.setup(123, 139, 138, 170, 9450, 37, -1); + + _hotspot2.setup(153, 102, 176, 141, 9450, 39, 40); + _hotspot3.setup(97, 198, 130, 229, 9450, 41, 42); + _hotspot15.setup(131, 190, 145, 212, 9450, 43, 44); + _hotspot4.setup(33, 144, 105, 192, 9450, 0, 1); + _hotspot5.setup(20, 236, 106, 287, 9450, 2, 3); + _hotspot6.setup(137, 119, 195, 320, 9450, 4, 5); + _hotspot7.setup(20, 59, 99, 111, 9450, 6, -1); + _hotspot8.setup(110, 0, 199, 117, 9450, 7, 8); + _hotspot9.setup(101, 104, 130, 174, 9450, 9, 10); + _hotspot10.setup(110, 246, 149, 319, 9450, 11, 12); + _hotspot11.setup(16, 34, 74, 62, 6450, 13, 14); + _hotspot12.setup(19, 108, 72, 134, 9450, 15, 16); + _hotspot13.setup(18, 215, 71, 237, 9450, 17, 18); + _hotspot14.setup(15, 288, 76, 314, 9450, 19, 20); + _hotspot16.setup(0, 0, 200, 320, 9450, 46, -1); +} + +/*-------------------------------------------------------------------------- + * Scene 9500 - Castle: Bedroom + * + *--------------------------------------------------------------------------*/ +void Scene9500::Hotspot1::doAction(int action) { + Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene; + + if (action == OBJECT_SWORD) { + scene->_sceneMode = 9510; + _globals->setFlag(92); + RING_INVENTORY._sword._sceneNumber = 9500; + _globals->_player.disableControl(); + _globals->_sceneItems.remove(this); + scene->_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); + scene->setAction(&scene->_sequenceManager, scene, 9510, &_globals->_player, &scene->_object2, NULL); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9500::Hotspot2::doAction(int action) { + Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene; + + if (action == CURSOR_USE) { + scene->_sceneMode = 9511; + _globals->_player.disableControl(); + _globals->_sceneItems.remove(this); + scene->setAction(&scene->_sequenceManager, scene, 9511, &_globals->_player, &scene->_object2, NULL); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9500::Hotspot3::doAction(int action) { + Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene; + + if ((action == CURSOR_USE) && (RING_INVENTORY._candle._sceneNumber != 1)){ + scene->_sceneMode = 9505; + _globals->_player.disableControl(); + _globals->_sceneItems.remove(this); + scene->setAction(&scene->_sequenceManager, scene, 9505, &_globals->_player, &scene->_candle, NULL); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9500::Hotspot4::doAction(int action) { + Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene; + + if (action == OBJECT_CANDLE) { + _globals->_player.disableControl(); + if (RING_INVENTORY._straw._sceneNumber == 9500) { + scene->_sceneMode = 9506; + _globals->_sceneItems.remove(&scene->_hotspot5); + _globals->_sceneItems.remove(this); + scene->setAction(&scene->_sequenceManager, scene, 9506, &_globals->_player, &scene->_object3, NULL); + RING_INVENTORY._candle._sceneNumber = 9850; + } else { + scene->_sceneMode = 9507; + scene->setAction(&scene->_sequenceManager, scene, 9507, &_globals->_player, &scene->_object3, NULL); + } + } else if (action == OBJECT_STRAW) { + scene->_sceneMode = 9512; + _globals->_player.disableControl(); + RING_INVENTORY._straw._sceneNumber = 9500; + scene->setAction(&scene->_sequenceManager, scene, 9512, &_globals->_player, &scene->_object3, NULL); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9500::signal() { + switch (_sceneMode) { + case 9503: + _globals->_sceneManager.changeScene(9200); + _globals->_soundHandler.play(295); + break; + case 9504: + _globals->_sceneManager.changeScene(9850); + break; + case 9505: + _candle.setStrip(2); + RING_INVENTORY._candle._sceneNumber = 1; + _globals->_player.enableControl(); + break; + case 9506: + _globals->setFlag(85); + _globals->_player.enableControl(); + break; + case 9511: + RING_INVENTORY._helmet._sceneNumber = 1; + _globals->_player.enableControl(); + if (!_globals->getFlag(51)) { + _globals->setFlag(51); + _globals->_player.disableControl(); + _sceneMode = 9514; + setAction(&_sequenceManager, this, 9514, &_globals->_player, NULL, NULL, NULL, NULL); + } + break; + case 0: + case 9514: + default: + _globals->_player.enableControl(); + break; + } +} + +void Scene9500::dispatch() { + if (_action) { + _action->dispatch(); + } else { + if (_globals->_player._position.y >= 199) { + _globals->_player.disableControl(); + _sceneMode = 9503; + setAction(&_sequenceManager, this, 9503, &_globals->_player, NULL, NULL, NULL, NULL); + } else if (_globals->_player._position.y < 127) { + _globals->_player.disableControl(); + _sceneMode = 9504; + setAction(&_sequenceManager, this, 9504, &_globals->_player, NULL, NULL, NULL, NULL); + } + } + +} + +void Scene9500::process(Event &event) { + Scene::process(event); +} + +void Scene9500::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(110, 75, 200, 150); + + _globals->_player.postInit(); + _globals->_soundHandler.play(305); + + _candle.postInit(); + _candle.setVisage(9500); + _candle.setStrip(1); + _candle.animate(ANIM_MODE_2); + _candle.setPosition(Common::Point(30, 105)); + if (RING_INVENTORY._candle._sceneNumber != 9500) + _candle.setStrip(2); + + _object3.postInit(); + _object3.hide(); + _object3.fixPriority(150); + _object3.setPosition(Common::Point(166, 133)); + if (RING_INVENTORY._straw._sceneNumber == 9500) { + _object3.show(); + _object3.setVisage(5); + _object3._strip = 2; + _object3._frame = 9; + _object3.setPosition(Common::Point(168, 128)); + if (_globals->getFlag(85)) { + _object3.setVisage(9500); + _object3.setStrip(4); + _object3.animate(ANIM_MODE_8, 0, NULL); + _object3.setPosition(Common::Point(166, 133)); + } + } + + _object2.postInit(); + _object2.hide(); + if (_globals->getFlag(92)) { + _object2.show(); + _object2.setVisage(9501); + _object2.setStrip(1); + _object2.setFrame(_object2.getFrameCount()); + _object2.setPosition(Common::Point(303, 130)); + _object2.fixPriority(132); + if (RING_INVENTORY._helmet._sceneNumber == 1) { + _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); + } else { + _object2.setStrip(2); + _object2.setFrame(1); + } + } else { + _hotspot1.setup(105, 295, 134, 313, 9500, 9, 10); + } + + _hotspot17.setup(101, 293, 135, 315, 9500, 9, 10); + _hotspot3.setup(84, 12, 107, 47, 9500, 15, 15); + _hotspot6.setup(93, 11, 167, 46, 9500, 0, 1); + _hotspot7.setup(100, 70, 125, 139, 9500, 2, 3); + + if (!_globals->getFlag(85)) { + _hotspot5.setup(111, 68, 155, 244, 9500, 17, -1); + _hotspot4.setup(57, 71, 120, 126, 9500, 16, -1); + } + + _hotspot8.setup(60, 24, 90, 53, 9500, 4, 5); + _hotspot9.setup(72, 143, 93, 163, 9500, 4, 5); + _hotspot10.setup(70, 205, 92, 228, 9500, 4, 5); + _hotspot11.setup(66, 291, 90, 317, 9500, 4, 5); + _hotspot12.setup(22, 58, 101, 145, 9500, 6, 7); + _hotspot13.setup(121, 57, 163, 249, 9500, 6, 7); + _hotspot14.setup(115, 133, 135, 252, 9500, 6, 7); + _hotspot15.setup(55, 240, 125, 254, 9500, 6, 7); + _hotspot16.setup(53, 251, 132, 288, 9500, 8, -1); + _hotspot19.setup(101, 207, 120, 225, 9500, 9, 10); + _hotspot18.setup(98, 144, 117, 162, 9500, 9, 10); + _hotspot20.setup(102, 27, 132, 50, 9500, 9, 10); + + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.disableControl(); + + if ((_globals->_sceneManager._previousScene == 9200) || (_globals->_sceneManager._previousScene != 9850)) { + _sceneMode = 0; + if (RING_INVENTORY._helmet._sceneNumber != 1) { + setAction(&_sequenceManager, this, 9501, &_globals->_player, &_candle, NULL); + } else { + RING_INVENTORY._helmet._sceneNumber = 9500; + _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); + setAction(&_sequenceManager, this, 9513, &_globals->_player, &_object2, NULL); + } + } else { + _sceneMode = 0; + setAction(&_sequenceManager, this, 9502, &_globals->_player, &_candle, NULL); + } +} + +/*-------------------------------------------------------------------------- + * Scene 9700 - Castle: Balcony + * + *--------------------------------------------------------------------------*/ +void Scene9700::signal() { + switch (_sceneMode ++) { + case 9703: + _globals->setFlag(88); + // No break on purpose + case 9701: + case 9702: + _gfxButton1.setText(EXIT_MSG); + _gfxButton1._bounds.center(50, 190); + _gfxButton1.draw(); + _gfxButton1._bounds.expandPanes(); + _globals->_player.enableControl(); + _globals->_player._canWalk = false; + _globals->_events.setCursor(CURSOR_USE); + break; + case 9704: + _globals->_soundHandler.play(323); + _globals->_sceneManager.changeScene(9750); + break; + } +} + +void Scene9700::process(Event &event) { + Scene::process(event); + if ((event.eventType == EVENT_BUTTON_DOWN) && !_action) { + if (_gfxButton1.process(event)) { + _globals->_sceneManager.changeScene(9200); + } else if (_globals->_events._currentCursor == OBJECT_SCANNER) { + event.handled = true; + if (RING_INVENTORY._helmet._sceneNumber == 1) { + _globals->_player.disableControl(); + _sceneMode = 9704; + setAction(&_sequenceManager, this, 9704, &_globals->_player, &_object1, NULL); + } else { + _globals->_player.disableControl(); + _sceneMode = 9703; + setAction(&_sequenceManager, this, 9703, &_globals->_player, &_object1, NULL); + } + } + } +} + +void Scene9700::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _sceneHotspot1.setup(84, 218, 151, 278, 9700, 14, -1); + _sceneHotspot2.setup(89, 11, 151, 121, 9700, 14, -1); + _sceneHotspot3.setup(69, 119, 138, 216, 9700, 15, 16); + _sceneHotspot4.setup(34, 13, 88, 116, 9700, 17, -1); + _sceneHotspot5.setup(52, 119, 68, 204, 9700, 17, -1); + _sceneHotspot6.setup(0, 22, 56, 275, 9700, 18, -1); + + _object1.postInit(); + _object1.hide(); + _globals->_player.postInit(); + if (!_globals->getFlag(97)) { + _globals->_player.disableControl(); + _sceneMode = 9701; + setAction(&_sequenceManager, this, 9701, &_globals->_player, &_object1, NULL); + _globals->setFlag(97); + } else { + _globals->_player.disableControl(); + _sceneMode = 9702; + setAction(&_sequenceManager, this, 9702, &_globals->_player, &_object1, NULL); + } +} + +/*-------------------------------------------------------------------------- + * Scene 9750 - Castle: In the garden + * + *--------------------------------------------------------------------------*/ +void Scene9750::signal() { + switch (_sceneMode ++) { + case 9751: + _globals->_soundHandler.fadeOut(this); + break; + case 9752: + _globals->_sceneManager.changeScene(2100); + default: + break; + } +} + +void Scene9750::dispatch() { + Scene::dispatch(); +} + +void Scene9750::postInit(SceneObjectList *OwnerList) { + loadScene(9750); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _globals->_player.postInit(); + _object1.postInit(); + _object1.hide(); + _object2.postInit(); + _object2.hide(); + _globals->_player.disableControl(); + _sceneMode = 9751; + setAction(&_sequenceManager, this, 9751, &_globals->_player, &_object1, &_object2, NULL); +} + + +/*-------------------------------------------------------------------------- + * Scene 9850 - Castle: Dressing room + * + *--------------------------------------------------------------------------*/ +void Scene9850::Object6::doAction(int action) { + if ((_flags & OBJFLAG_HIDE) == 0) { + if (action == CURSOR_LOOK) { + SceneItem::display(9850, 27, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } else if (action == CURSOR_USE) { + RING_INVENTORY._scimitar._sceneNumber = 1; + hide(); + } else { + SceneHotspot::doAction(action); + } + } +} +void Scene9850::Object7::doAction(int action) { + if ((_flags & OBJFLAG_HIDE) == 0) { + if (action == CURSOR_LOOK) { + SceneItem::display(9850, 28, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } else if (action == CURSOR_USE) { + RING_INVENTORY._sword._sceneNumber = 1; + hide(); + } else { + SceneHotspot::doAction(action); + } + } +} + +// Hair covered tunic +void Scene9850::Hotspot12::doAction(int action) { + Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; + + if (action == CURSOR_USE) { + if (RING_INVENTORY._tunic2._sceneNumber != 1) { + RING_INVENTORY._tunic2._sceneNumber = 1; + _globals->_player.disableControl(); + scene->_sceneMode = 9858; + scene->setAction(&scene->_sequenceManager, scene, 9858, &_globals->_player, &scene->_objTunic2, NULL); + } else { + RING_INVENTORY._tunic2._sceneNumber = 9850; + _globals->_player.disableControl(); + scene->_sceneMode = 9861; + scene->setAction(&scene->_sequenceManager, scene, 9861, &_globals->_player, &scene->_objTunic2, NULL); + } + } else if ((action != CURSOR_LOOK) || (RING_INVENTORY._tunic2._sceneNumber != 1)) { + NamedHotspot::doAction(action); + } else { + SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } +} + +void Scene9850::Hotspot14::doAction(int action) { + Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; + + if (action == CURSOR_USE) { + if (RING_INVENTORY._jacket._sceneNumber != 1) { + RING_INVENTORY._jacket._sceneNumber = 1; + _globals->_player.disableControl(); + scene->_sceneMode = 9857; + scene->setAction(&scene->_sequenceManager, scene, 9857, &_globals->_player, &scene->_objJacket, NULL); + } else { + RING_INVENTORY._jacket._sceneNumber = 9850; + _globals->_player.disableControl(); + scene->_sceneMode = 9860; + scene->setAction(&scene->_sequenceManager, scene, 9860, &_globals->_player, &scene->_objJacket, NULL); + } + } else if ((action != CURSOR_LOOK) || (RING_INVENTORY._jacket._sceneNumber != 1)) { + NamedHotspot::doAction(action); + } else { + SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } +} + +void Scene9850::Hotspot16::doAction(int action) { + Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; + + if (action == CURSOR_USE) { + if (RING_INVENTORY._cloak._sceneNumber != 1) { + RING_INVENTORY._cloak._sceneNumber = 1; + _globals->_player.disableControl(); + scene->_sceneMode = 9862; + scene->setAction(&scene->_sequenceManager, scene, 9862, &_globals->_player, &scene->_objCloak, NULL); + } else { + RING_INVENTORY._cloak._sceneNumber = 9850; + _globals->_player.disableControl(); + scene->_sceneMode = 9859; + scene->setAction(&scene->_sequenceManager, scene, 9859, &_globals->_player, &scene->_objCloak, NULL); + } + } else if ((action != CURSOR_LOOK) || (RING_INVENTORY._cloak._sceneNumber != 1)) { + NamedHotspot::doAction(action); + } else { + SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } +} + +void Scene9850::Hotspot17::doAction(int action) { + Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; + + if (action == OBJECT_SCANNER) { + SceneItem::display(9850, 32, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } else { + if (action == CURSOR_USE) + scene->_soundHandler.play(306); + NamedHotspot::doAction(action); + } +} + +void Scene9850::Hotspot18::doAction(int action) { + Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; + + if (action == OBJECT_SCANNER) { + SceneItem::display(9850, 32, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } else { + if (action == CURSOR_USE) + scene->_soundHandler.play(306); + NamedHotspot::doAction(action); + } +} + +void Scene9850::Hotspot19::doAction(int action) { + Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; + + if (action == OBJECT_SCANNER) { + SceneItem::display(9850, 31, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); + } else { + if (action == CURSOR_USE) + scene->_soundHandler.play(313); + NamedHotspot::doAction(action); + } +} + +// Arrow on Statue +void Scene9850::Hotspot20::doAction(int action) { + Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; + + if (action == CURSOR_USE) { + _globals->_player.disableControl(); + if (scene->_objSword._state == 0) { + if (RING_INVENTORY._scimitar._sceneNumber == 9850) + scene->_objScimitar.show(); + if (RING_INVENTORY._sword._sceneNumber == 9850) + scene->_objSword.show(); + scene->_sceneMode = 11; + setAction(&scene->_sequenceManager, scene, 9853, &_globals->_player, &scene->_objDoor, &scene->_objLever, NULL); + } else { + scene->_sceneMode = 10; + setAction(&scene->_sequenceManager, scene, 9854, &_globals->_player, &scene->_objDoor, &scene->_objLever, NULL); + } + scene->_objSword._state ^= 1; + } else { + NamedHotspot::doAction(action); + } +} + +void Scene9850::signal() { + switch (_sceneMode ++) { + case 10: + // Hidden closet closed + if (RING_INVENTORY._scimitar._sceneNumber == 9850) + _objScimitar.hide(); + if (RING_INVENTORY._sword._sceneNumber == 9850) + _objSword.hide(); + _globals->_sceneItems.remove(&_objScimitar); + _globals->_sceneItems.remove(&_objSword); + _globals->_sceneItems.addItems(&_hotspot19, NULL); + _globals->_player.enableControl(); + break; + case 11: + // Hidden closet opened + if (RING_INVENTORY._scimitar._sceneNumber == 9850) + _globals->_sceneItems.addItems(&_objScimitar, NULL); + if (RING_INVENTORY._sword._sceneNumber == 9850) + _globals->_sceneItems.addItems(&_objSword, NULL); + _globals->_sceneItems.remove(&_hotspot19); + _globals->_player.enableControl(); + break; + case 9500: + _globals->_sceneManager.changeScene(_sceneMode - 1); + break; + case 0: + default: + _globals->_player.enableControl(); + break; + } +} + +void Scene9850::process(Event &event) { + Scene::process(event); + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_4)) { + event.handled = true; + _globals->_player.disableControl(); + if (_objSword._state == 0) { + _sceneMode = 0; + setAction(&_sequenceManager, this, 9853, &_objLever, &_objDoor, &_objScimitar, &_objSword, NULL); + } else { + _sceneMode = 10; + setAction(&_sequenceManager, this, 9854, &_objLever, &_objDoor, &_objScimitar, &_objSword, NULL); + } + _objSword._state ^= 1; + } +} + +void Scene9850::dispatch() { + if (_action) { + _action->dispatch(); + } else if (_globals->_player._position.y >= 198) { + _globals->_player.disableControl(); + _sceneMode = 9500; + setAction(&_sequenceManager, this, 9852, &_globals->_player, NULL); + } +} + +void Scene9850::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + _objSword._state = 0; + + _objDoor.postInit(); + _objDoor.setVisage(9850); + _objDoor.setStrip(1); + _objDoor.setFrame(1); + _objDoor.setPosition(Common::Point(28, 118)); + _objDoor.fixPriority(90); + + _objLever.postInit(); + _objLever.setVisage(9850); + _objLever.setStrip(4); + _objLever.setFrame(1); + _objLever.setPosition(Common::Point(256, 35)); + + _objCloak.postInit(); + _objCloak.setVisage(9850); + _objCloak.setStrip(5); + _objCloak.setFrame(1); + _objCloak.fixPriority(90); + _objCloak.setPosition(Common::Point(157, 81)); + if (RING_INVENTORY._cloak._sceneNumber != 9850) + _objCloak.hide(); + + _objJacket.postInit(); + _objJacket.setVisage(9850); + _objJacket.setStrip(5); + _objJacket.setFrame(2); + _objJacket.fixPriority(90); + _objJacket.setPosition(Common::Point(201, 84)); + if (RING_INVENTORY._jacket._sceneNumber != 9850) + _objJacket.hide(); + + _objTunic2.postInit(); + _objTunic2.setVisage(9850); + _objTunic2.setStrip(5); + _objTunic2.setFrame(3); + _objTunic2.fixPriority(90); + _objTunic2.setPosition(Common::Point(295, 90)); + if (RING_INVENTORY._tunic2._sceneNumber != 9850) + _objTunic2.hide(); + + if (RING_INVENTORY._scimitar._sceneNumber == 9850) { + _objScimitar.postInit(); + _objScimitar.setVisage(9850); + _objScimitar.setStrip(2); + _objScimitar.setFrame(1); + _objScimitar.setPosition(Common::Point(55, 83)); + _objScimitar.fixPriority(80); + _objScimitar.hide(); + } + + if (RING_INVENTORY._sword._sceneNumber == 9850) { + _objSword.postInit(); + _objSword.setVisage(9850); + _objSword.setStrip(3); + _objSword.setFrame(1); + _objSword.setPosition(Common::Point(56, 101)); + _objSword.fixPriority(80); + _objSword.hide(); + } + + _spotLever.setup(30, 251, 45, 270, 9850, 26, -1); + _hotspot1.setup(123, 0, 200, 320, 9850, 0, 1); + _hotspot2.setup(107, 87, 133, 308, 9850, 0, 1); + _hotspot3.setup(2, 28, 53, 80, 9850, 2, 3); + _hotspot4.setup(13, 0, 55, 27, 9850, 2, 3); + _hotspot5.setup(8, 74, 27, 91, 9850, 4, 5); + _hotspot17.setup(61, 0, 125, 28, 9850, 6, 7); + _hotspot18.setup(51, 95, 105, 145, 9850, 6, 7); + _hotspot19.setup(56, 28, 115, 97, 9850, 6, 8); + _hotspot6.setup(0, 223, 115, 257, 9850, 9, 10); + _hotspot7.setup(15, 254, 33, 268, 9850, 9, -1); + _hotspot8.setup(17, 218, 37, 233, 9850, 9, 10); + _hotspot9.setup(8, 113, 26, 221, 9850, 11, 12); + _hotspot10.setup(14, 94, 53, 112, 9850, 13, 14); + _hotspot11.setup(5, 269, 29, 303, 9850, 15, 16); + _hotspot12.setup(43, 278, 91, 317, 9850, 17, 18); + _hotspot13.setup(47, 263, 112, 282, 9850, 19, 20); + _hotspot14.setup(43, 188, 86, 224, 9850, 21, 22); + _hotspot15.setup(43, 162, 92, 191, 9850, 23, 24); + _hotspot16.setup(40, 146, 90, 169, 9850, 25, -1); + + _globals->_player.postInit(); + _globals->_player.disableControl(); + _sceneMode = 0; + setAction(&_sequenceManager, this, 9851, &_globals->_player, NULL); +} + +/*-------------------------------------------------------------------------- + * Scene 9900 - Ending + * + *--------------------------------------------------------------------------*/ +void Scene9900::strAction1::signal() { + const byte mask1[3] = {0xff, 0xff, 0xff}; + const byte mask2[3] = {0, 0, 0}; + + Scene9900 *scene = (Scene9900 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_soundHandler.play(351); + _object9.postInit(); + _object9.setVisage(18); + _object9._frame = 1; + _object9._strip = 6; + _object9.fixPriority(250); + _object9.setPosition(Common::Point(171, 59)); + _object9.animate(ANIM_MODE_5, NULL); + _globals->_scenePalette.addRotation(67, 111, 1, 1, this); + scene->_object2.hide(); + break; + case 1: + _palette1.getPalette(); + _globals->_scenePalette.addFader(&mask1[0], 1, 10, this); + break; + case 2: + _object9.remove(); + _globals->_scenePalette.addFader(&mask2[0], 1, 5, this); + break; + case 3: + _globals->_soundHandler.play(377); + setDelay(120); + break; + case 4: + _globals->_scenePalette.addFader(_palette1._palette, 256, 1, this); + break; + case 5: + remove(); + break; + default: + break; + } +} + +void Scene9900::strAction2::signal() { + switch (_actionIndex++) { + case 0: + _lineNum = 0; + _txtArray1Index = 0; + _txtArray1[0]._position.y = 200; + _txtArray1[1]._position.y = 300; + _txtArray2[0]._position.y = 400; + _txtArray2[1]._position.y = 500; + _var3 = 0; + // No break on purpose + case 1: { + Common::String msg = _resourceManager->getMessage(8030, _lineNum++); + if (msg.compareTo("LASTCREDIT")) { + if (_var3) { + // Not used? + // int x = _txtArray1[_txtArray1Index].getFrame().getBounds().height(); + _txtArray1[_txtArray1Index]._moveDiff.y = 10; + + NpcMover *mover = new NpcMover(); + Common::Point pt(_txtArray1[_txtArray1Index]._position.x, -100); + _txtArray1[_txtArray1Index].addMover(mover, &pt, NULL); + + // Not used? + // int x = _txtArray2[_txtArray1Index].getFrame().getBounds().height(); + _txtArray2[_txtArray1Index]._moveDiff.y = 10; + _txtArray1Index = (_txtArray1Index + 1) % 2; + } + _var3 = 1; + _txtArray1[_txtArray1Index]._textMode = ALIGN_CENTER; + _txtArray1[_txtArray1Index]._width = 240; + _txtArray1[_txtArray1Index]._fontNumber = 2; + _txtArray1[_txtArray1Index]._color1 = 7; + _txtArray1[_txtArray1Index].setup(msg); + _txtArray1[_txtArray1Index]._moveRate = 20; + _txtArray1[_txtArray1Index]._moveDiff.y = 2; + _txtArray1[_txtArray1Index].fixPriority(255); + int frameWidth = _txtArray1[_txtArray1Index].getFrame().getBounds().width(); + int frameHeight = _txtArray1[_txtArray1Index].getFrame().getBounds().height(); + _txtArray1[_txtArray1Index].setPosition(Common::Point((320 - frameWidth) / 2, 200)); + + NpcMover *mover2 = new NpcMover(); + Common::Point pt2(_txtArray1[_txtArray1Index]._position.x, 100); + _txtArray1[_txtArray1Index].addMover(mover2, &pt2, this); + + _txtArray2[_txtArray1Index]._textMode = ALIGN_CENTER; + _txtArray2[_txtArray1Index]._width = 240; + _txtArray2[_txtArray1Index]._fontNumber = 2; + _txtArray2[_txtArray1Index]._color1 = 23; + + msg = _resourceManager->getMessage(8030, _lineNum++); + _txtArray2[_txtArray1Index].setup(msg); + _txtArray2[_txtArray1Index]._moveRate = 20; + _txtArray2[_txtArray1Index]._moveDiff.y = 2; + _txtArray2[_txtArray1Index].fixPriority(255); + frameWidth = _txtArray2[_txtArray1Index].getFrame().getBounds().width(); + _txtArray2[_txtArray1Index].setPosition(Common::Point((320 - frameWidth) / 2, 200 + frameHeight)); + } else { + // WORKAROUND: Fix inventory becoming available at end of credits + _globals->_events.setCursor(CURSOR_WALK); + _actionIndex = 3; + signal(); + } + break; + } + case 2: + setDelay(60); + _actionIndex = 1; + break; + case 3: + setDelay(7200); + break; + case 4: + _txtArray1[0].remove(); + _txtArray1[1].remove(); + _txtArray2[0].remove(); + _txtArray2[1].remove(); + remove(); + break; + default: + break; + } +} +void Scene9900::strAction2::dispatch() { +// if (this->_txtArray1[0]._textSurface != 0) { + int frameHeight = _txtArray1[0].getFrame().getBounds().height(); + _txtArray2[0]._position.y = frameHeight + _txtArray1[0]._position.y; + _txtArray2[0]._flags |= OBJFLAG_PANES; +// } +// if (this->_txtArray1[1]._textSurface != 0) { + frameHeight = _txtArray1[1].getFrame().getBounds().height(); + _txtArray2[1]._position.y = frameHeight + _txtArray1[1]._position.y; + _txtArray2[1]._flags |= OBJFLAG_PANES; +// } + Action::dispatch(); +} + +void Scene9900::strAction2::synchronize(Serializer &s) { + Action::synchronize(s); + if (s.getVersion() >= 3) { + s.syncAsSint16LE(_lineNum); + s.syncAsSint16LE(_txtArray1Index); + s.syncAsSint16LE(_var3); + } +} + +void Scene9900::strAction3::signal() { + const byte mask3[3] = {0xff, 0, 0}; + const byte mask4[3] = {0, 0, 0}; + + switch (_actionIndex++) { + case 0: + _palette2.getPalette(); + _palette3.loadPalette(2003); + _globals->_scenePalette.addFader(_palette3._palette, 256, 5, this); + break; + case 1: + _globals->_scenePalette.addFader(&mask3[0], 1, 10, this); + break; + case 2: + _globals->_scenePalette.addFader(&mask4[0], 1, 1, this); + break; + case 3: + _palette2.loadPalette(17); + _globals->_sceneManager._scene->loadScene(17); + _globals->_scenePalette.addFader(_palette2._palette, 256, 5, this); + break; + case 4: + _globals->_game->endGame(9900, 61); + remove(); + default: + break; + } +} + +void Scene9900::signal() { + if ((_sceneMode != 9913) && (_sceneMode != 9905) && (_sceneMode != 9904) && (_sceneMode != 9912)) { + _object1.hide(); + _object2.hide(); + _object3.hide(); + _object4.hide(); + _object5.hide(); + _object6.hide(); + } + + _object1.animate(ANIM_MODE_NONE, NULL); + _object2.animate(ANIM_MODE_NONE, NULL); + _object3.animate(ANIM_MODE_NONE, NULL); + _object4.animate(ANIM_MODE_NONE, NULL); + _object5.animate(ANIM_MODE_NONE, NULL); + _object6.animate(ANIM_MODE_NONE, NULL); + + _object1.setObjectWrapper(NULL); + _object2.setObjectWrapper(NULL); + _object3.setObjectWrapper(NULL); + _object4.setObjectWrapper(NULL); + _object5.setObjectWrapper(NULL); + _object6.setObjectWrapper(NULL); + + _object1.addMover(NULL); + _object2.addMover(NULL); + _object3.addMover(NULL); + _object4.addMover(NULL); + _object5.addMover(NULL); + _object6.addMover(NULL); + + switch (_sceneMode){ + case 150: + _globals->_soundHandler.play(380); + _object8.postInit(); + _object8.setVisage(2002); + _object8.setStrip(1); + _object8.setFrame(1); + _object8.fixPriority(200); + _object8.setPosition(Common::Point(64, 199)); + _globals->_player.disableControl(); + _sceneMode = 9908; + setAction(&_sequenceManager, this, 9908, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + break; + case 162: + warning("TBC: shutdown();"); + _globals->_game->quitGame(); + break; + case 9901: + _globals->_player.disableControl(); + _sceneMode = 9906; + setAction(&_sequenceManager, this, 9906, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + _globals->_player._uiEnabled = true; + _globals->_events.setCursor(CURSOR_USE); + break; + case 9902: + _globals->_player.disableControl(); + _sceneMode = 9901; + setAction(&_sequenceManager, this, 9901, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + break; + case 9903: + _globals->_player.disableControl(); + _sceneMode = 9902; + setAction(&_sequenceManager, this, 9902, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + break; + case 9904: + _globals->_soundHandler.play(390); + _sceneMode = 9912; + setAction(&_strAction2, this); + break; + case 9905: + _sceneMode = 150; + setAction(&_strAction1, this); + break; + case 9906: + if (_object8._state == 0) { + _globals->_player.disableControl(); + _sceneMode = 9913; + setAction(&_sequenceManager, this, 9913, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + } else { + _globals->_player.disableControl(); + _sceneMode = 9905; + setAction(&_sequenceManager, this, 9905, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + } + break; + case 9907: + _globals->_player.disableControl(); + _sceneMode = 9903; + setAction(&_sequenceManager, this, 9903, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + break; + case 9908: + _object8.remove(); + _globals->_player.disableControl(); + _sceneMode = 9904; + setAction(&_sequenceManager, this, 9904, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + break; + case 9909: + _globals->_soundHandler.play(375); + _globals->_player.disableControl(); + _sceneMode = 9907; + setAction(&_sequenceManager, this, 9907, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + break; + case 9910: + _globals->_player.disableControl(); + _sceneMode = 9911; + setAction(&_sequenceManager, this, 9911, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + break; + case 9911: + _globals->_soundHandler.play(367); + _globals->_player.disableControl(); + _sceneMode = 9909; + setAction(&_sequenceManager, this, 9909, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + break; + case 9912: + _globals->_player.disableControl(); + _sceneMode = 9912; + setAction(&_sequenceManager, this, 9912, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); + _sceneMode = 162; + _globals->_player.enableControl(); + _globals->_player._canWalk = false; + break; + case 9913: + _sceneMode = 200; + setAction(&_strAction3, this); + break; + default: + break; + } +} + +void Scene9900::process(Event &event) { + if (event.handled) + return; + Scene::process(event); + if (_sceneMode == 9906) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (_globals->_events.getCursor() == OBJECT_ITEMS)) { + _object8._state = 1; + RING_INVENTORY._items._sceneNumber = 9900; + _globals->_events.setCursor(CURSOR_USE); + } + } +} + +void Scene9900::dispatch() { + if (_action) + _action->dispatch(); +} + +void Scene9900::postInit(SceneObjectList *OwnerList) { + _object1.postInit(); + _object1.hide(); + _object2.postInit(); + _object2.hide(); + _object3.postInit(); + _object3.hide(); + _object4.postInit(); + _object4.hide(); + _object5.postInit(); + _object5.hide(); + _object6.postInit(); + _object6.hide(); + + _object8._state = 0; + + RING_INVENTORY._concentrator._sceneNumber = 9900; + RING_INVENTORY._items._rlbNum = 3; + RING_INVENTORY._items._cursorNum = 6; + RING_INVENTORY._items._description = Common::String("One of the items from the stasis ship. The other is on the Lance's bridge."); + + _stripManager.addSpeaker(&_speakerMR); + _globals->_player.disableControl(); + _sceneMode = 9910; + setAction(&_sequenceManager, this, 9910, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); +} + +/*-------------------------------------------------------------------------- + * Scene 9999 - Space travel + * + *--------------------------------------------------------------------------*/ + +void Scene9999::Action1::signal() { + switch (_actionIndex++) { + case 0: + setDelay(600); + break; + case 1: + _globals->_sceneManager.changeScene(3500); + break; + default: + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene9999::Action2::signal() { + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + SceneItem::display(9999, 0, SET_Y, 10, SET_X, 30, SET_FONT, 2, SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 23, SET_WIDTH, 260, SET_KEEP_ONSCREEN, 1, LIST_END); + setDelay(300); + break; + case 2: + _globals->_stripNum = 3600; + _globals->_sceneManager.changeScene(3600); + default: + break; + } +} + +void Scene9999::postInit(SceneObjectList *OwnerList) { + loadScene(9998); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _object1.postInit(); + _object1.setVisage(1303); + _object1.setStrip2(3); + _object1.setPosition(Common::Point(160, 152)); + + _globals->_player.postInit(); + _globals->_player.setVisage(1303); + _globals->_player.setStrip2(1); + _globals->_player.fixPriority(250); + _globals->_player.animate(ANIM_MODE_2, NULL); + _globals->_player.setPosition(Common::Point(194, 98)); + _globals->_player._numFrames = 20; + _globals->_player.disableControl(); + + _object2.postInit(); + _object2.setVisage(1303); + _object2.setStrip2(2); + _object2.fixPriority(2); + _object2.setPosition(Common::Point(164, 149)); + + _object3.postInit(); + _object3.setVisage(1303); + _object3.setStrip2(2); + _object3.fixPriority(2); + _object3.setFrame(2); + _object3.setPosition(Common::Point(292, 149)); + _object3.setAction(&_action3); + + if (_globals->_sceneManager._previousScene == 3500) + setAction(&_action2); + else + setAction(&_action1); + + _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; + + if (_globals->_sceneManager._previousScene == 3500) + _globals->_stripNum = 2222; + else + _globals->_stripNum = 2121; + + _globals->_soundHandler.play(118); + +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes10.h b/engines/tsage/ringworld/ringworld_scenes10.h new file mode 100644 index 0000000000..792234cc91 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes10.h @@ -0,0 +1,532 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES10_H +#define TSAGE_RINGWORLD_SCENES10_H + +#include "common/scummsys.h" +#include "tsage/ringworld/ringworld_logic.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace tSage { + +class SceneObject9150 : public SceneObject { +public: + int _timer, _signalFlag; + + virtual void synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsSint16LE(_timer); + s.syncAsSint16LE(_signalFlag); + } + virtual Common::String getClassName() { return "SceneObject9150"; } +}; + +class Scene2 : public Scene { +public : + int _sceneState; + + Scene2(); + virtual void synchronize(Serializer &s) { + Scene::synchronize(s); + s.syncAsSint16LE(_sceneState); + } +}; + +class Object9350 : public SceneObject { +public: + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void draw(); +}; + +class Scene9100 : public Scene { + /* Items */ + class SceneHotspot1 : public NamedHotspot { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneHotspot1 _sceneHotspot1; + NamedHotspot _sceneHotspot2; + NamedHotspot _sceneHotspot3; + NamedHotspot _sceneHotspot4; + NamedHotspot _sceneHotspot5; + NamedHotspot _sceneHotspot6; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene9150 : public Scene2 { + class Object3 : public SceneObject9150 { + public: + virtual void signal(); + virtual void dispatch(); + }; +public: + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + SceneObject _object1; + SceneObject _object2; + Object3 _object3; + NamedHotspot _sceneHotspot1; + NamedHotspot _sceneHotspot2; + NamedHotspot _sceneHotspot3; + NamedHotspot _sceneHotspot4; + NamedHotspot _sceneHotspot5; + NamedHotspot _sceneHotspot6; + NamedHotspot _sceneHotspot7; + NamedHotspot _sceneHotspot8; + NamedHotspot _sceneHotspot9; + NamedHotspot _sceneHotspot10; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene9200 : public Scene2 { + class SceneHotspot1 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + Action _action1; + SpeakerGText _speakerGText; + SpeakerGR _speakerGR; + SpeakerQText _speakerQText; + ASound _soundHandler; + SceneHotspot1 _hotspot1; + NamedHotspot _hotspot2; + NamedHotspot _hotspot3; + NamedHotspot _hotspot4; + NamedHotspot _hotspot5; + NamedHotspot _hotspot6; + NamedHotspot _hotspot7; + NamedHotspot _hotspot8; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); + virtual void process(Event &event); +}; + +class Scene9300 : public Scene { +public: + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + NamedHotspot _hotspot1; + NamedHotspot _hotspot2; + NamedHotspot _hotspot3; + NamedHotspot _hotspot4; + NamedHotspot _hotspot5; + NamedHotspot _hotspot6; + NamedHotspot _hotspot7; + NamedHotspot _hotspot8; + NamedHotspot _hotspot9; + NamedHotspot _hotspot10; + NamedHotspot _hotspot11; + NamedHotspot _hotspot12; + NamedHotspot _hotspot13; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene9350 : public Scene2 { +public: + SequenceManager _sequenceManager; + Object9350 _object1; + SceneObject _object2; + NamedHotspot _sceneHotspot1; + NamedHotspot _sceneHotspot2; + NamedHotspot _sceneHotspot3; + NamedHotspot _sceneHotspot4; + NamedHotspot _sceneHotspot5; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene9360 : public Scene2 { +public: + SequenceManager _sequenceManager; + Action _action1; + Object9350 _object1; + NamedHotspot _hotspot1; + NamedHotspot _hotspot2; + NamedHotspot _hotspot3; + NamedHotspot _hotspot4; + NamedHotspot _hotspot5; + NamedHotspot _hotspot6; + NamedHotspot _hotspot7; + NamedHotspot _hotspot8; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene9400 : public Scene2 { + class SceneHotspot7 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class SceneHotspot8 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; +public: + Scene9400(); + SequenceManager _sequenceManager; + Action _action1; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SpeakerOText _speakerOText; + SpeakerOR _speakerOR; + SpeakerQText _speakerQText; + NamedHotspot _hotspot1; + NamedHotspot _hotspot2; + NamedHotspot _hotspot3; + NamedHotspot _hotspot4; + NamedHotspot _hotspot5; + NamedHotspot _hotspot6; + ASound _soundHandler; + int _field1032; + SceneHotspot7 _hotspot7; + SceneHotspot8 _hotspot8; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); + virtual void synchronize(Serializer &s); +}; + +class Scene9450 : public Scene2 { + class Object2 : public SceneObject { + public: + virtual void signal(); + }; + + class Object3 : public SceneObject9150 { + public: + virtual void dispatch(); + }; + + class Hotspot1 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot3 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; +public: + SceneObject _object1; + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + Object2 _object2; + SequenceManager _sequenceManager3; + Object3 _object3; + Hotspot1 _hotspot1; + NamedHotspot _hotspot2; + Hotspot3 _hotspot3; + NamedHotspot _hotspot4; + NamedHotspot _hotspot5; + NamedHotspot _hotspot6; + NamedHotspot _hotspot7; + NamedHotspot _hotspot8; + NamedHotspot _hotspot9; + NamedHotspot _hotspot10; + NamedHotspot _hotspot11; + NamedHotspot _hotspot12; + NamedHotspot _hotspot13; + NamedHotspot _hotspot14; + NamedHotspot _hotspot15; + NamedHotspot _hotspot16; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene9500 : public Scene2 { + class Hotspot1 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot2 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot3 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot4 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + +public: + SequenceManager _sequenceManager; + SceneObject _candle; + SceneObject _object2; + SceneObject _object3; + Hotspot1 _hotspot1; + Hotspot2 _hotspot2; + Hotspot3 _hotspot3; + Hotspot4 _hotspot4; + Hotspot4 _hotspot5; + NamedHotspot _hotspot6; + NamedHotspot _hotspot7; + NamedHotspot _hotspot8; + NamedHotspot _hotspot9; + NamedHotspot _hotspot10; + NamedHotspot _hotspot11; + NamedHotspot _hotspot12; + NamedHotspot _hotspot13; + NamedHotspot _hotspot14; + NamedHotspot _hotspot15; + NamedHotspot _hotspot16; + NamedHotspot _hotspot17; + NamedHotspot _hotspot18; + NamedHotspot _hotspot19; + NamedHotspot _hotspot20; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); + virtual void process(Event &event); +}; + +class Scene9700 : public Scene2 { + SequenceManager _sequenceManager; + SceneObject _object1; + NamedHotspot _sceneHotspot1; + NamedHotspot _sceneHotspot2; + NamedHotspot _sceneHotspot3; + NamedHotspot _sceneHotspot4; + NamedHotspot _sceneHotspot5; + NamedHotspot _sceneHotspot6; + GfxButton _gfxButton1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); +}; + +class Scene9750 : public Scene { +public: + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene9850 : public Scene { + class Object6 : public SceneObject{ + public: + virtual void doAction(int action); + }; + + class Object7 : public SceneObjectExt{ + public: + virtual void doAction(int action); + }; + + class Hotspot12 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot14 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot16 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot17 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot18 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot19 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; + + class Hotspot20 : public NamedHotspot{ + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + SceneObject _objDoor; + SceneObject _objCloak; + SceneObject _objJacket; + SceneObject _objTunic2; + SceneObject _objLever; + Object6 _objScimitar; + Object7 _objSword; + ASound _soundHandler; + NamedHotspot _hotspot1; + NamedHotspot _hotspot2; + NamedHotspot _hotspot3; + NamedHotspot _hotspot4; + NamedHotspot _hotspot5; + NamedHotspot _hotspot6; + NamedHotspot _hotspot7; + NamedHotspot _hotspot8; + NamedHotspot _hotspot9; + NamedHotspot _hotspot10; + NamedHotspot _hotspot11; + Hotspot12 _hotspot12; + NamedHotspot _hotspot13; + Hotspot14 _hotspot14; + NamedHotspot _hotspot15; + Hotspot16 _hotspot16; + Hotspot17 _hotspot17; + Hotspot18 _hotspot18; + Hotspot19 _hotspot19; + Hotspot20 _spotLever; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + +class Scene9900 : public Scene { + class strAction1 : public Action { + public: + SceneObject _object9; + ScenePalette _palette1; + + virtual void signal(); + }; + + class strAction2 : public Action { + public: + SceneText _txtArray1[2]; + SceneText _txtArray2[2]; + int _lineNum, _txtArray1Index, _var3; + + virtual void signal(); + virtual void dispatch(); + virtual void synchronize(Serializer &s); + }; + + class strAction3 : public Action { + public: + SceneObject _object10; + ScenePalette _palette2; + ScenePalette _palette3; + + virtual void signal(); + }; + +public: + ASound _soundHandler; + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObjectExt _object8; + strAction1 _strAction1; + strAction2 _strAction2; + strAction3 _strAction3; + SpeakerMR _speakerMR; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); + virtual void process(Event &event); +}; + +class Scene9999 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + +public: + + Action1 _action1; + Action2 _action2; + Action _action3; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_scenes2.cpp b/engines/tsage/ringworld/ringworld_scenes2.cpp new file mode 100644 index 0000000000..2dadaf4c30 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes2.cpp @@ -0,0 +1,928 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/config-manager.h" +#include "tsage/ringworld/ringworld_scenes2.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 1000 - Title Screen + * + *--------------------------------------------------------------------------*/ + +void Scene1000::Action1::signal() { + Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(10); + break; + case 1: + scene->_object4.postInit(); + scene->_object4.setVisage(1001); + scene->_object4._frame = 1; + scene->_object4.setStrip2(5); + scene->_object4.changeZoom(100); + scene->_object4.animate(ANIM_MODE_2, NULL); + scene->_object4.setPosition(Common::Point(403, 163)); + setDelay(90); + break; + case 2: { + SceneItem::display(0, 0); + scene->_object4.remove(); + scene->_object1.changeZoom(-1); + NpcMover *mover = new NpcMover(); + Common::Point pt(180, 100); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 3: + _globals->_sceneManager.changeScene(1400); + break; + } + +} + +void Scene1000::Action2::signal() { + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(10); + break; + case 1: + SceneItem::display(1000, 0, SET_Y, 20, SET_FONT, 2, SET_BG_COLOR, -1, + SET_EXT_BGCOLOR, 35, SET_WIDTH, 200, SET_KEEP_ONSCREEN, 1, LIST_END); + setDelay(180); + break; + case 2: + SceneItem::display(0, 0); + _globals->_sceneManager.changeScene(2000); + break; + default: + break; + } +} + +void Scene1000::Action3::signal() { + Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_sceneManager._scene->loadBackground(0, 0); + setDelay(60); + break; + case 1: { + NpcMover *mover = new NpcMover(); + Common::Point pt(158, 31); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 2: + case 3: + setDelay(60); + break; + case 4: + _globals->_player.show(); + setDelay(240); + break; + case 5: { + _globals->_player.enableControl(); + + const char *SEEN_INTRO = "seen_intro"; + if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) { + // First time being played, so show the introduction + ConfMan.setBool(SEEN_INTRO, true); + ConfMan.flushToDisk(); + + setDelay(1); + } else { + // Prompt user for whether to start play or watch introduction + _globals->_player.enableControl(); + + if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) { + _actionIndex = 20; + _globals->_soundHandler.fadeOut(this); + } else { + setDelay(1); + } + } + + _globals->_player.disableControl(); + break; + } + case 6: { + scene->_object3.remove(); + _globals->_player.setStrip2(2); + NpcMover *mover = new NpcMover(); + Common::Point pt(480, 100); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 7: + _globals->_scenePalette.loadPalette(1002); + _globals->_scenePalette.refresh(); + _globals->_scenePalette.addRotation(80, 95, -1); + scene->_object3.postInit(); + scene->_object3.setVisage(1002); + scene->_object3.setStrip(1); + scene->_object3.setPosition(Common::Point(284, 122)); + scene->_object3.changeZoom(1); + + zoom(true); + setDelay(200); + break; + case 8: + zoom(false); + setDelay(10); + break; + case 9: + scene->_object3.setStrip(2); + scene->_object3.setPosition(Common::Point(285, 155)); + + zoom(true); + setDelay(400); + break; + case 10: + zoom(false); + setDelay(10); + break; + case 11: + scene->_object3.setStrip(3); + scene->_object3.setPosition(Common::Point(279, 172)); + + zoom(true); + setDelay(240); + break; + case 12: + zoom(false); + setDelay(10); + break; + case 13: + scene->_object3.setStrip(4); + scene->_object3.setPosition(Common::Point(270, 128)); + + zoom(true); + setDelay(300); + break; + case 14: + zoom(false); + setDelay(10); + break; + case 15: + scene->_object3.setStrip(1); + scene->_object3.setFrame(2); + scene->_object3.setPosition(Common::Point(283, 137)); + + zoom(true); + setDelay(300); + break; + case 16: + zoom(false); + setDelay(10); + break; + case 17: + scene->_object3.setStrip(5); + scene->_object3.setFrame(1); + scene->_object3.setPosition(Common::Point(292, 192)); + + zoom(true); + setDelay(300); + break; + case 18: + zoom(false); + _globals->_scenePalette.clearListeners(); + _globals->_soundHandler.fadeOut(this); + break; + case 19: + _globals->_sceneManager.changeScene(10); + break; + case 20: + _globals->_sceneManager.changeScene(30); + break; + default: + break; + } +} + +void Scene1000::Action3::zoom(bool up) { + Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene; + + if (up) { + while ((scene->_object3._percent < 100) && !_vm->shouldQuit()) { + scene->_object3.changeZoom(MIN(scene->_object3._percent + 5, 100)); + _globals->_sceneObjects->draw(); + _globals->_events.delay(1); + } + } else { + while ((scene->_object3._percent > 0) && !_vm->shouldQuit()) { + scene->_object3.changeZoom(MAX(scene->_object3._percent - 5, 0)); + _globals->_sceneObjects->draw(); + _globals->_events.delay(1); + } + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene1000::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + loadScene(1000); + + if (_globals->_sceneManager._previousScene == 2000) { + setZoomPercents(150, 10, 180, 100); + _object1.postInit(); + _object1.setVisage(1001); + _object1._strip = 7; + _object1.animate(ANIM_MODE_2, 0); + _object1._moveDiff = Common::Point(1, 1); + _object1.setPosition(Common::Point(120, 180)); + + setAction(&_action2); + + _globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; + _globals->_soundHandler.play(114); + } else if (_globals->_sceneManager._previousScene == 2222) { + setZoomPercents(150, 10, 180, 100); + _object1.postInit(); + _object1.setVisage(1001); + _object1._strip = 7; + _object1.animate(ANIM_MODE_2, 0); + _object1._moveDiff = Common::Point(2, 2); + _object1.setPosition(Common::Point(120, 180)); + + _globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; + + setAction(&_action1); + } else { + _globals->_soundHandler.play(4); + setZoomPercents(0, 10, 30, 100); + _object3.postInit(); + _object3.setVisage(1050); + _object3.changeZoom(-1); + _object3.setPosition(Common::Point(158, 0)); + + _globals->_player.postInit(); + _globals->_player.setVisage(1050); + _globals->_player.setStrip(3); + _globals->_player.setPosition(Common::Point(160, 191)); + _globals->_player._moveDiff.x = 12; + _globals->_player.hide(); + _globals->_player.disableControl(); + + _globals->_sceneManager._scene->_sceneBounds.center(_object3._position.x, _object3._position.y); + + setAction(&_action3); + } +} + +/*-------------------------------------------------------------------------- + * Scene 1001 - Fleeing planet cutscene + * + *--------------------------------------------------------------------------*/ + +void Scene1001::Action1::signal() { + Scene1001 *scene = (Scene1001 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_object3.animate(ANIM_MODE_5, this); + break; + case 2: { + Common::Point pt(108, 171); + NpcMover *mover = new NpcMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 3: { + Common::Point pt(170, 159); + NpcMover *mover = new NpcMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 4: { + scene->_object2.postInit(); + scene->_object2.setVisage(16); + scene->_object2.setStrip2(4); + scene->_object2.setPosition(Common::Point(61, 177)); + scene->_object2.animate(ANIM_MODE_5, this); + + Common::Point pt(320, 100); + NpcMover *mover = new NpcMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 5: { + Common::Point pt(82, 166); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 6: { + Common::Point pt(64, 149); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 7: { + Common::Point pt(15, 136); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 8: { + Common::Point pt(-5, 120); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 9: { + scene->_object1.postInit(); + scene->_object1.setVisage(16); + scene->_object1.setStrip2(1); + scene->_object1.setFrame(1); + scene->_object1.setPosition(Common::Point(-75, 87)); + scene->_object1.animate(ANIM_MODE_2, NULL); + + Common::Point pt(0, 100); + NpcMover *mover = new NpcMover(); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 10: { + Common::Point pt1(107, 115); + NpcMover *mover1 = new NpcMover(); + scene->_object1.addMover(mover1, &pt1, NULL); + + scene->_object3.setVisage(16); + scene->_object3.setStrip2(5); + scene->_object3.setFrame2(2); + scene->_object3.setPosition(Common::Point(220, 200)); + + Common::Point pt2(187, 181); + NpcMover *mover2 = new NpcMover(); + scene->_object3.addMover(mover2, &pt2, this); + break; + } + case 11: { + scene->_object2.setVisage(16); + scene->_object2.setStrip2(5); + scene->_object2.setFrame2(1); + scene->_object2.setPosition(Common::Point(211, 0)); + + Common::Point pt(189, 30); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 12: + scene->_stripManager.start(100, this); + break; + case 13: { + scene->_object4.postInit(); + scene->_object4.setVisage(16); + scene->_object4.setStrip2(2); + scene->_object4.setFrame(4); + scene->_object4.setPosition(Common::Point(360, 80)); + scene->_object4.animate(ANIM_MODE_2, NULL); + + Common::Point pt(303, 97); + NpcMover *mover = new NpcMover(); + scene->_object4.addMover(mover, &pt, this); + break; + } + case 14: + scene->_stripManager.start(110, this); + break; + case 15: + setDelay(10); + break; + case 16: { + scene->_soundHandler1.play(90); + + scene->_object6.postInit(); + scene->_object6.setVisage(16); + scene->_object6.setStrip2(6); + scene->_object6.setFrame2(2); + scene->_object6._moveDiff = Common::Point(20, 20); + scene->_object6.fixPriority(20); + scene->_object6.setPosition(Common::Point(scene->_object2._position.x - 6, scene->_object2._position.y + 7)); + scene->_object6.animate(ANIM_MODE_5, NULL); + + Common::Point pt(scene->_object6._position.x - 70, scene->_object6._position.y + 70); + NpcMover *mover = new NpcMover(); + scene->_object6.addMover(mover, &pt, this); + break; + } + case 17: { + scene->_soundHandler1.play(90); + scene->_object6.remove(); + + scene->_object7.postInit(); + scene->_object7.setVisage(16); + scene->_object7.setStrip2(6); + scene->_object7.setFrame2(1); + scene->_object7._moveDiff = Common::Point(20, 20); + scene->_object7.setPosition(Common::Point(scene->_object3._position.x - 28, scene->_object3._position.y - 11)); + scene->_object7.fixPriority(200); + scene->_object7.animate(ANIM_MODE_5, NULL); + + Common::Point pt(scene->_object7._position.x - 70, scene->_object7._position.y - 70); + NpcMover *mover = new NpcMover(); + scene->_object7.addMover(mover, &pt, this); + break; + } + case 18: + scene->_object7.remove(); + + scene->_object5.postInit(); + scene->_object5.setVisage(16); + scene->_object5.setPosition(Common::Point(306, 93)); + scene->_object5._strip = 3; + scene->_object5.fixPriority(200); + scene->_object5.animate(ANIM_MODE_2, NULL); + setDelay(30); + break; + case 19: { + _globals->_soundHandler.play(91); + byte adjustData[4] = {0xff, 0xff, 0xff, 0}; + _globals->_scenePalette.fade(adjustData, false, 0); + + scene->_object1._strip = 7; + scene->_object1._frame = 1; + scene->_object1.setPosition(Common::Point(314, 112)); + scene->_object1.addMover(NULL); + setDelay(2); + break; + } + case 20: + _globals->_scenePalette.loadPalette(16); + _globals->_scenePalette.refresh(); + setDelay(6); + break; + case 21: + scene->_object1._numFrames = 15; + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 22: + _globals->_soundHandler.play(92); + scene->_stripManager.start(111, this); + break; + case 23: + setDelay(60); + break; + case 24: + _globals->_sceneManager.changeScene(2000); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene1001::postInit(SceneObjectList *OwnerList) { + loadScene(16); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerCText); + _stripManager.addSpeaker(&_speakerCR); + _stripManager.addSpeaker(&_speakerSL); + _speakerQText._color1 = 11; + + _object3.postInit(); + _object3.setVisage(16); + _object3.setStrip2(4); + _object3.setPosition(Common::Point(61, 177)); + + _globals->_soundHandler.play(85); + setAction(&_action1); +} + + +/*-------------------------------------------------------------------------- + * Scene 1250 - + * + *--------------------------------------------------------------------------*/ + +void Scene1250::Action1::signal() { + Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(120) + 60); + break; + case 1: + scene->_object1.animate(ANIM_MODE_5, this); + _actionIndex = 0; + break; + } +} + +void Scene1250::Action2::signal() { + Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + switch (_globals->_randomSource.getRandomNumber(2)) { + case 0: + scene->_object2.setPosition(Common::Point(163, 75)); + break; + case 1: + scene->_object2.setPosition(Common::Point(109, 65)); + break; + case 2: + scene->_object2.setPosition(Common::Point(267, 20)); + break; + } + + setDelay(30); + break; + case 1: + scene->_object2.animate(ANIM_MODE_5, this); + _actionIndex = 0; + break; + } +} + +void Scene1250::Action3::signal() { + Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + scene->_stripManager.start(1251, this); + break; + case 2: + setDelay(6); + break; + case 3: + _globals->_sceneManager.changeScene(1000); + break; + } +} + +void Scene1250::Action4::signal() { + Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(3); + break; + case 1: + scene->_stripManager.start(1250, this); + break; + case 2: + setDelay(6); + break; + case 3: + _globals->_sceneManager.changeScene(2000); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene1250::postInit(SceneObjectList *OwnerList) { + loadScene(1250); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerQText); + _speakerQText._textPos = Common::Point(120, 120); + _speakerQText._textWidth = 180; + + _object1.postInit(); + _object1.setVisage(1250); + _object1.setPosition(Common::Point(126, 69)); + _object1.setStrip2(1); + _object1._frame = 1; + _object1.setAction(&_action1); + + _object2.postInit(); + _object2.setVisage(1250); + _object2.setPosition(Common::Point(126, 69)); + _object2.setStrip2(2); + _object2.fixPriority(255); + _object2._frame = 1; + _object2.setAction(&_action2); + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; + + if ((_globals->_sceneManager._previousScene != 2000) || (_globals->_stripNum != 1250)) { + setAction(&_action4); + } else { + setAction(&_action3); + _globals->_soundHandler.play(114); + } +} + +/*-------------------------------------------------------------------------- + * Scene 1400 - Ringworld Wall + * + *--------------------------------------------------------------------------*/ + +void Scene1400::Action1::signal() { + Scene1400 *scene = (Scene1400 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: { + SceneItem::display(1400, 0, SET_X, 120, SET_Y, 610, SET_FONT, 2, SET_EXT_BGCOLOR, 23, SET_KEEP_ONSCREEN, -1, LIST_END); + + Common::Point pt(160, 700); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: { + _globals->_player.setStrip2(3); + _globals->_player.changeZoom(100); + + Common::Point pt(160, 100); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + + SceneItem::display(0, 0); + setDelay(360); + break; + } + case 3: + SceneItem::display(1400, 2, SET_X, 60, SET_Y, _globals->_sceneManager._scene->_sceneBounds.bottom - 80, + SET_FONT, 2, SET_FG_COLOR, 13, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END); + setDelay(420); + break; + case 4: + SceneItem::display(0, 0); + setDelay(360); + break; + case 5: + SceneItem::display(1400, 3, SET_X, 60, SET_Y, _globals->_sceneManager._scene->_sceneBounds.bottom - 80, + SET_FONT, 2, SET_FG_COLOR, 23, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END); + setDelay(360); + break; + case 6: + SceneItem::display(0, 0); + break; + case 7: { + _globals->_player._frame = 1; + _globals->_player.setStrip2(1); + _globals->_player._numFrames = 5; + _globals->_player.animate(ANIM_MODE_5, this); + + Common::Point pt(205, 70); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, NULL); + _globals->_sceneManager._fadeMode = FADEMODE_NONE; + + scene->loadScene(1402); + break; + } + case 8: + _globals->_player.setStrip2(2); + _globals->_player._numFrames = 10; + _globals->_player.animate(ANIM_MODE_2, NULL); + + SceneItem::display(1400, 4, SET_X, 30, SET_Y, _globals->_player._position.y + 10, SET_FONT, 2, + SET_FG_COLOR, 13, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END); + setDelay(300); + break; + case 9: { + SceneItem::display(0, 0); + Common::Point pt(450, 45); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 10: + _globals->_sceneManager._scrollerRect = Rect(40, 20, 280, 180); + _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; + _globals->_stripNum = 1500; + _globals->_soundHandler.stop(); + + _globals->_sceneManager.changeScene(1500); + break; + } +} + +void Scene1400::Action1::dispatch() { + Action::dispatch(); + + if ((_actionIndex > 3) && (_actionIndex < 9)) + _globals->_sceneText.setPosition(Common::Point(60, _globals->_sceneManager._scene->_sceneBounds.bottom - 80)); + + if ((_actionIndex <= 2) && (_globals->_player._percent > 22)) + _globals->_player.changeZoom(100 - (800 - _globals->_player._position.y)); + + if ((_actionIndex >= 9) && (_globals->_player._percent > 22)) + _globals->_player.changeZoom(100 - (_globals->_player._position.x - 205)); +} + +/*--------------------------------------------------------------------------*/ + +void Scene1400::postInit(SceneObjectList *OwnerList) { + if (_globals->_stripNum != 1400) { + loadScene(1401); + } else { + loadScene(1402); + } + Scene::postInit(); + + _globals->_sceneManager._scrollerRect = Rect(40, 90, 280, 180); + _globals->_player.postInit(); + _globals->_player.setVisage(1401); + _globals->_player.animate(ANIM_MODE_2, 0); + _globals->_player.setStrip2(4); + _globals->_player.fixPriority(4); + _globals->_player.disableControl(); + + _globals->_player._moveDiff = Common::Point(4, 2); + _globals->_player.setPosition(Common::Point(160, 800)); + _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.y = (_globals->_sceneManager._scene->_sceneBounds.top / 100) * 100; + + setAction(&_action1); + _globals->_soundHandler.play(118); +} + +/*-------------------------------------------------------------------------- + * Scene 1500 - Ringworld Space-port + * + *--------------------------------------------------------------------------*/ + +void Scene1500::Action1::signal() { + Scene1500 *scene = (Scene1500 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_object1.postInit(); + scene->_object1.setVisage(1501); + scene->_object1._moveDiff = Common::Point(2, 1); + scene->_object1.setPosition(Common::Point(204, 85)); + scene->_object1.animate(ANIM_MODE_2, NULL); + scene->_object1._numFrames = 3; + scene->_object1.changeZoom(-1); + + Common::Point pt(238, 121); + PlayerMover *mover = new PlayerMover(); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 1: { + Common::Point pt(312, 145); + PlayerMover *mover = new PlayerMover(); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object1.setStrip(2); + scene->_object1.setFrame(1); + scene->_object1._moveDiff.y = 2; + scene->_object1._numFrames = 5; + + Common::Point pt(310, 150); + PlayerMover *mover = new PlayerMover(); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 3: { + Common::Point pt(304, 165); + PlayerMover *mover = new PlayerMover(); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 4: { + scene->_object1._numFrames = 3; + scene->_object1.setStrip2(3); + scene->_object1.animate(ANIM_MODE_2, this); + + Common::Point pt(94, 175); + PlayerMover *mover = new PlayerMover(); + scene->_object1.addMover(mover, &pt, this); + break; + } + case 5: + setDelay(30); + break; + case 6: + scene->_soundHandler.play(123); + scene->_object1.setStrip2(4); + scene->_object1.setFrame(1); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 7: + scene->_object1.setStrip2(5); + scene->_object1.animate(ANIM_MODE_2, NULL); + scene->_soundHandler.play(124, this); + break; + case 8: + _globals->_soundHandler.play(126, this); + break; + case 9: + _globals->_soundHandler.play(127); + _globals->_sceneManager.changeScene(2000); + break; + } +} + +void Scene1500::Action2::signal() { + Scene1500 *scene = (Scene1500 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(6); + break; + case 1: { + scene->_object2.postInit(); + scene->_object2.setVisage(1502); + scene->_object2.fixPriority(255); + scene->_object2.changeZoom(5); + scene->_object2._frame = 1; + scene->_object2._moveDiff = Common::Point(1, 1); + scene->_object2.setPosition(Common::Point(104, 184)); + scene->_object2.animate(ANIM_MODE_2, NULL); + + Common::Point pt(118, 147); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object2._moveDiff.x = 5; + scene->_object2.changeZoom(-1); + Common::Point pt(-55, 200); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 3: + scene->_soundHandler.release(); + _globals->_stripNum = 1505; + _globals->_sceneManager.changeScene(2400); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene1500::postInit(SceneObjectList *OwnerList) { + loadScene(1500); + Scene::postInit(); + + if ((_globals->_stripNum == 1500) || ((_globals->_stripNum != 1504) && (_globals->_stripNum != 2751))) { + _globals->_soundHandler.play(120); + setZoomPercents(105, 20, 145, 100); + + setAction(&_action1); + } else { + setZoomPercents(150, 5, 200, 100); + + _object1.postInit(); + _object1.setVisage(1501); + _object1.setStrip2(5); + _object1.setPosition(Common::Point(94, 175)); + _object1.animate(ANIM_MODE_2, NULL); + + setAction(&_action2); + } +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes2.h b/engines/tsage/ringworld/ringworld_scenes2.h new file mode 100644 index 0000000000..ef3158bbb9 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes2.h @@ -0,0 +1,149 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES2_H +#define TSAGE_RINGWORLD_SCENES2_H + +#include "common/scummsys.h" +#include "tsage/ringworld/ringworld_logic.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace tSage { + +class Scene1000 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + private: + void zoom(bool up); + public: + virtual void signal(); + }; + +public: + SceneObject _object1, _object2, _object3, _object4; + Action1 _action1; + Action2 _action2; + Action3 _action3; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene1001 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; +public: + SpeakerQText _speakerQText; + SpeakerSL _speakerSL; + SpeakerCText _speakerCText; + SpeakerCR _speakerCR; + Action1 _action1; + SceneObject _object1, _object2, _object3, _object4; + SceneObject _object5, _object6, _object7; + ASound _soundHandler1, _soundHandler2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene1250 : public Scene { +public: + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; +public: + SpeakerQText _speakerQText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + SceneObject _object1, _object2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene1400 : public Scene { +public: + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + virtual void dispatch(); + }; +public: + Action1 _action1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + +}; + +class Scene1500 : public Scene { +public: + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; +public: + ASound _soundHandler; + Action1 _action1; + Action2 _action2; + SceneObject _object1, _object2, _object3; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + + + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_scenes3.cpp b/engines/tsage/ringworld/ringworld_scenes3.cpp new file mode 100644 index 0000000000..3d8f151c35 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes3.cpp @@ -0,0 +1,6133 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/config-manager.h" +#include "tsage/ringworld/ringworld_scenes3.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 2000 - Cockpit cutscenes + * + *--------------------------------------------------------------------------*/ + +void Scene2000::Action1::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + error("Old stuff"); + break; + case 1: + scene->_stripManager.start(2075, this); + break; + case 2: + setDelay(4); + break; + case 3: + _globals->_stripNum = 0; + _globals->_sceneManager.changeScene(1250); + break; + } +} + +void Scene2000::Action2::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_object2.animate(ANIM_MODE_6, NULL); + setDelay(_globals->_randomSource.getRandomNumber(179) + 60); + break; + case 1: + setDelay(_globals->_randomSource.getRandomNumber(179) + 60); + if (_globals->_randomSource.getRandomNumber(4) >= 2) + _actionIndex = 0; + break; + case 2: + setDelay(_globals->_randomSource.getRandomNumber(179) + 60); + _actionIndex = _globals->_randomSource.getRandomNumber(1); + break; + } +} + +void Scene2000::Action3::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_object6.animate(ANIM_MODE_5, NULL); + setDelay(_globals->_randomSource.getRandomNumber(179) + 60); + break; + case 1: + scene->_object6.animate(ANIM_MODE_6, NULL); + setDelay(_globals->_randomSource.getRandomNumber(179) + 60); + _actionIndex = 0; + break; + } +} + +void Scene2000::Action4::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_object4.animate(ANIM_MODE_5, NULL); + setDelay(_globals->_randomSource.getRandomNumber(179) + 60); + break; + case 1: + scene->_object4.animate(ANIM_MODE_6, NULL); + setDelay(_globals->_randomSource.getRandomNumber(179) + 60); + _actionIndex = 0; + break; + } +} + +void Scene2000::Action5::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_object3.animate(ANIM_MODE_5, NULL); + setDelay(_globals->_randomSource.getRandomNumber(125) + 300); + break; + case 1: + scene->_object3.animate(ANIM_MODE_6, NULL); + setDelay(_globals->_randomSource.getRandomNumber(125) + 300); + _actionIndex = 0; + break; + } +} + +void Scene2000::Action6::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(130); + break; + case 1: + scene->_soundHandler2.play(79); + scene->_stripManager.start(2000, this); + break; + case 2: + _globals->_soundHandler.play(81); + scene->_object6.postInit(); + scene->_object6.setVisage(2003); + scene->_object6.setAction(NULL); + scene->_object6.setStrip2(2); + scene->_object6.setPosition(Common::Point(184, 137)); + scene->_object6.animate(ANIM_MODE_5, this); + break; + case 3: + scene->_stripManager.start(95, this); + break; + case 4: + scene->_object6.animate(ANIM_MODE_6, this); + break; + case 5: + _globals->_soundHandler.play(80); + scene->_object6.remove(); + _globals->_sceneManager.changeScene(1001); + break; + } +} + +void Scene2000::Action7::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + scene->_stripManager.start(2072, this); + break; + case 2: + setDelay(3); + break; + case 3: + _globals->_sceneManager.changeScene(2222); + break; + } +} + +void Scene2000::Action8::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + error("Old stuff"); + break; + case 1: + scene->_stripManager.start(2073, this); + break; + case 2: + setDelay(10); + break; + case 3: + _globals->_stripNum = 2005; + _globals->_sceneManager.changeScene(1000); + break; + } +} + +void Scene2000::Action9::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + error("Old stuff"); + break; + case 1: + scene->_stripManager.start(2074, this); + break; + case 2: + setDelay(3); + break; + case 3: + _globals->_stripNum = 2008; + _globals->_sceneManager.changeScene(9999); + break; + } +} + +void Scene2000::Action10::signal() { + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + error("Old stuff"); + break; + case 2: + SceneItem::display(2000, 17, SET_Y, 20, SET_X, 110, SET_FONT, 2, SET_BG_COLOR, -1, + SET_FG_COLOR, 17, SET_WIDTH, 200, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, 1, LIST_END); + break; + case 3: + SceneItem::display(0, 0); + _globals->_stripNum = 0; + _globals->_sceneManager.changeScene(9999); + break; + } +} + +void Scene2000::Action11::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + error("Old stuff"); + break; + case 1: + scene->_stripManager.start(2076, this); + break; + case 2: + scene->_stripManager.start(2077, this); + break; + case 3: + _globals->_stripNum = 0; + _globals->_sceneManager.changeScene(1400); + break; + } +} + +void Scene2000::Action12::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(2020, this); + break; + case 2: + _globals->_player.disableControl(); + setDelay(10); + break; + case 3: + _globals->_sceneManager.changeScene(2300); + break; + } +} + +void Scene2000::Action13::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + scene->_stripManager.start(2078, this); + break; + case 2: + SceneItem::display(0, 0); + _globals->_stripNum = 2751; + _globals->_sceneManager.changeScene(1500); + break; + } +} + +void Scene2000::Action14::signal() { + Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(30); + break; + case 1: + scene->_stripManager.start(2070, this); + break; + case 2: + setDelay(60); + break; + case 3: + _globals->_soundHandler.play(99); + scene->_object8.show(); + scene->_object8.animate(ANIM_MODE_5, this); + break; + case 4: + _globals->_soundHandler.play(12); + scene->_object8.setStrip(2); + scene->_object8.setFrame(1); + scene->_object9.show(); + scene->_object10.show(); + setDelay(60); + break; + case 5: + scene->_stripManager.start(2001, this, scene); + break; + case 6: + _globals->_soundHandler.fadeOut(NULL); + scene->_object8.setStrip(1); + scene->_object8.setFrame(scene->_object8.getFrameCount()); + scene->_object8.animate(ANIM_MODE_6, this); + + scene->_object9.remove(); + scene->_object10.remove(); + break; + case 7: + _globals->_soundHandler.play(111); + scene->_object8.remove(); + setDelay(5); + break; + case 8: + scene->_stripManager.start(2071, this); + break; + case 9: + _globals->_stripNum = 1250; + _globals->_sceneManager.changeScene(1000); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene2000::postInit(SceneObjectList *OwnerList) { + loadScene(2000); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerSL); + _stripManager.addSpeaker(&_speakerMR); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerGameText); + _stripManager.addSpeaker(&_speakerHText); + + _speakerQText._npc = &_object2; + _speakerSText._npc = &_object3; + _speakerMText._npc = &_object6; + _speakerHText._npc = &_object6; + _stripManager.setCallback(this); + + _object3.postInit(); + _object3.setVisage(2002); + _object3.setPosition(Common::Point(65, 199)); + + _object4.postInit(); + _object4.setVisage(2002); + _object4.setStrip(2); + _object4.setPosition(Common::Point(125, 199)); + _object4.setAction(&_action4); + + _object2.postInit(); + _object2.setVisage(2001); + _object2.setPosition(Common::Point(43, 115)); + _object2.setAction(&_action2); + + _globals->_player.disableControl(); + + _object6.postInit(); + _object6.setVisage(2003); + _object6.setPosition(Common::Point(267, 170)); + _object6.setAction(&_action3); + + _object8.postInit(); + _object8.setVisage(2005); + _object8.setPosition(Common::Point(169, 133)); + _object8.setPriority(133); + _object8.hide(); + + _object9.postInit(); + _object9.setVisage(2005); + _object9.setStrip2(3); + _object9.setFrame(4); + _object9.setPosition(Common::Point(136, 86)); + _object9.fixPriority(190); + _object9.hide(); + + _object10.postInit(); + _object10.setVisage(2005); + _object10.setStrip2(5); + _object10.setFrame(4); + _object10.setPosition(Common::Point(202, 86)); + _object10.fixPriority(195); + _object10.hide(); + + switch (_globals->_sceneManager._previousScene) { + case 1000: + setAction(&_action7); + break; + case 1001: + _object6.remove(); + setAction(&_action12); + break; + case 1500: + setAction(&_action13); + break; + case 2200: + _globals->_soundHandler.play(111); + setAction(&_action14); + break; + case 2222: + _globals->_soundHandler.play(115); + setAction(&_action8); + break; + case 3500: + setAction(&_action11); + break; + default: + _object6.remove(); + _globals->_soundHandler.play(80); + setAction(&_action6); + break; + } + + _soundHandler1.play(78); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; +} + +void Scene2000::stripCallback(int v) { + switch (v) { + case 0: + _object9.setStrip(3); + _object9.animate(ANIM_MODE_7, NULL); + _object10.setStrip(6); + _object10.setFrame(1); + _object10.animate(ANIM_MODE_5, NULL); + break; + case 1: + _object10.setStrip(5); + _object10.animate(ANIM_MODE_7, NULL); + _object9.setStrip(4); + _object9.setFrame(1); + _object9.animate(ANIM_MODE_5, NULL); + break; + case 2: + _object9.animate(ANIM_MODE_NONE, NULL); + break; + case 3: + _object10.setStrip(6); + _object10.setFrame(1); + _object10.animate(ANIM_MODE_5, NULL); + _object9.setStrip(4); + _object9.setFrame(1); + _object9.animate(ANIM_MODE_5, NULL); + break; + } +} + +/*-------------------------------------------------------------------------- + * Scene 2100 - Starcraft Cockpit + * + *--------------------------------------------------------------------------*/ + +void Scene2100::Action1::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + if (!scene->_sitFl) + setDelay(1); + else { + setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); + scene->_sitFl = 0; + } + break; + case 1: { + Common::Point pt(157, 62); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 3: { + Common::Point pt(157, 56); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 4: + _globals->_player._strip = 3; + setDelay(3); + break; + case 5: + _globals->_player.fixPriority(1); + scene->_area1.display(); + scene->_area2.display(); + scene->_area3.display(); + scene->_area4.display(); + + scene->_area1.draw(true); + _state = 0; + _globals->_events.setCursor(CURSOR_USE); + + while (!_state && !_vm->shouldQuit()) { + // Wait for an event + Event event; + if (!_globals->_events.getEvent(event)) { + g_system->updateScreen(); + g_system->delayMillis(10); + continue; + } + + if (scene->_area1._bounds.contains(event.mousePos)) { + scene->_area1.draw(true); + _state = scene->_area1._actionId; + } + if (scene->_area2._bounds.contains(event.mousePos)) { + scene->_area1.draw(false); + scene->_area2.draw(true); + _state = scene->_area2._actionId; + } + if (scene->_area3._bounds.contains(event.mousePos)) { + scene->_area1.draw(false); + scene->_area3.draw(true); + _state = scene->_area3._actionId; + } + } + + scene->_soundHandler.play(161); + scene->_area1.restore(); + scene->_area2.restore(); + scene->_area3.restore(); + scene->_area4.restore(); + + if (_state == 2100) { + setDelay(1); + } else { + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_6, this); + } + break; + case 6: + if (_state == 2100) { + Common::Point pt(157, 65); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } else { + _globals->_sceneManager.changeScene(_state); + } + break; + case 7: + _globals->_player.fixPriority(-1); + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 8: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene2100::Action2::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_object3._numFrames = 5; + setDelay(_globals->_randomSource.getRandomNumber(59)); + break; + case 1: + scene->_object3.animate(ANIM_MODE_5, this); + break; + case 2: + setDelay(_globals->_randomSource.getRandomNumber(59)); + break; + case 3: + scene->_object3.animate(ANIM_MODE_6, this); + _actionIndex = 0; + break; + } +} + +void Scene2100::Action3::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + case 2: + setDelay(_globals->_randomSource.getRandomNumber(119)); + break; + case 1: + scene->_object2.animate(ANIM_MODE_5, this); + break; + case 3: + scene->_object2.animate(ANIM_MODE_6, this); + _actionIndex = 0; + break; + } +} + +void Scene2100::Action4::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + if (!scene->_sitFl) + setDelay(1); + else + setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); + break; + case 1: { + Common::Point pt(80, 66); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_player.setVisage(2109); + _globals->_player._frame = 1; + _globals->_player._strip = 2; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 3: + _globals->_sceneManager.changeScene(2120); + break; + } +} + +void Scene2100::Action5::signal() { + // Quinn enters the cokpit after Seeker decided to enter the cave alone + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); + break; + case 2: { + Common::Point pt(272, 127); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: + _globals->_player.checkAngle(&scene->_object3); + setDelay(30); + break; + case 4: + _globals->_sceneManager.changeScene(3700); + break; + } +} + +void Scene2100::Action6::signal() { + // Seeker stands up and walks to the elevator + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_object2.setVisage(2806); + scene->_object2.setStrip(1); + scene->_object2.setStrip2(-1); + scene->_object2.changeZoom(-1); + scene->_object2.setPosition(Common::Point(155, 116)); + scene->_object2.setObjectWrapper(new SceneObjectWrapper()); + scene->_object2.setAction(NULL); + scene->_object2.animate(ANIM_MODE_1, NULL); + + Common::Point pt(130, 116); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 1: { + scene->_object2.fixPriority(-1); + Common::Point pt(153, 67); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 2: + remove(); + break; + } +} + +void Scene2100::Action7::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); + break; + case 2: + setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, NULL); + break; + case 3: + _globals->_sceneManager.changeScene(8100); + break; + } +} + +void Scene2100::Action8::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); + break; + case 2: { + Common::Point pt(200, 174); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: + _globals->_player.checkAngle(&scene->_object3); + scene->_stripManager.start((RING_INVENTORY._translator._sceneNumber == 1) ? 7720 : 7710, this); + break; + case 4: + if (RING_INVENTORY._translator._sceneNumber != 1) + _globals->_sceneManager.changeScene(7600); + else { + _globals->setFlag(24); + _globals->_player.enableControl(); + remove(); + } + break; + } +} + +void Scene2100::Action9::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + scene->_stripManager.start(6050, this); + break; + case 2: + scene->_soundHandler.play(99); + scene->_object4.show(); + scene->_object4.animate(ANIM_MODE_5, this); + break; + case 3: + scene->_soundHandler.play(12); + scene->_object4.setStrip(2); + scene->_stripManager.start(6051, this, scene); + break; + case 4: + scene->_soundHandler.fadeOut(NULL); + scene->_object4.setStrip(1); + scene->_object4.setFrame(scene->_object4.getFrameCount()); + scene->_object4.animate(ANIM_MODE_6, this); + break; + case 5: + scene->_object4.hide(); + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(6010, this); + break; + case 6: + if (scene->_stripManager._field2E8 != 165) + setAction(&scene->_action10); + else + setAction(&scene->_action11); + break; + } +} + +void Scene2100::Action10::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); + break; + case 2: { + _globals->_player.disableControl(); + Common::Point pt(155, 64); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: + scene->_object3.setVisage(2105); + scene->_object3.setStrip(2); + scene->_object3.setFrame(1); + scene->_object3._numFrames = 10; + scene->_object3.setAction(NULL); + scene->_object3.animate(ANIM_MODE_5, this); + break; + case 4: { + scene->_object3.setVisage(2705); + scene->_object3.setStrip2(-1); + scene->_object3.changeZoom(-1); + scene->_object3.fixPriority(-1); + scene->_object3.setPosition(Common::Point(260, 156)); + scene->_object3.setObjectWrapper(new SceneObjectWrapper()); + scene->_object3.animate(ANIM_MODE_1, NULL); + + Common::Point pt(166, 64); + PlayerMover *mover = new PlayerMover(); + scene->_object3.addMover(mover, &pt, this); + + setAction(&scene->_action6, NULL); + break; + } + case 5: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 6: { + _globals->_player.fixPriority(1); + Common::Point pt(144, 54); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 7: { + scene->_object3.fixPriority(2); + Common::Point pt1(163, 55); + NpcMover *mover1 = new NpcMover(); + scene->_object3.addMover(mover1, &pt1, NULL); + + scene->_object2.fixPriority(2); + Common::Point pt2(158, 55); + NpcMover *mover2 = new NpcMover(); + scene->_object2.addMover(mover2, &pt2, this); + break; + } + case 8: + _globals->_player.fixPriority(1); + _globals->_player.setStrip(1); + scene->_object3.fixPriority(1); + scene->_object3.setStrip(2); + scene->_object2.fixPriority(2); + scene->_object2.setStrip(3); + + setDelay(45); + break; + case 9: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 10: + _globals->setFlag(70); + _globals->_stripNum = 2101; + _globals->_sceneManager.changeScene(2320); + break; + } +} + +void Scene2100::Action11::signal() { + // Miranda stands up and walks to the elevator + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + scene->_object3._numFrames = 10; + scene->_object3.setAction(NULL); + scene->_object3.setVisage(2105); + scene->_object3.setStrip(2); + scene->_object3.setFrame(1); + scene->_object3.animate(ANIM_MODE_5, this); + break; + case 2: { + scene->_object3.setVisage(2705); + scene->_object3.setStrip2(-1); + scene->_object3.changeZoom(-1); + scene->_object3.fixPriority(-1); + scene->_object3.setPosition(Common::Point(260, 156)); + scene->_object3.setObjectWrapper(new SceneObjectWrapper()); + scene->_object3.animate(ANIM_MODE_1, NULL); + + Common::Point pt(158, 62); + PlayerMover *mover = new PlayerMover(); + scene->_object3.addMover(mover, &pt, this); + + setAction(&scene->_action6, NULL); + break; + } + case 3: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 4: { + scene->_object3.fixPriority(1); + Common::Point pt1(163, 55); + NpcMover *mover1 = new NpcMover(); + scene->_object3.addMover(mover1, &pt1, NULL); + + scene->_object2.fixPriority(1); + Common::Point pt2(158, 55); + NpcMover *mover2 = new NpcMover(); + scene->_object2.addMover(mover2, &pt2, this); + break; + } + case 5: + scene->_object3.setStrip(2); + scene->_object2.setStrip(3); + setDelay(45); + break; + case 6: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 7: + scene->_object3.remove(); + scene->_object2.remove(); + _globals->setFlag(70); + _globals->_stripNum = 2102; + _globals->_player.enableControl(); + _globals->_player._canWalk = false; + break; + } +} + +void Scene2100::Action12::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_stripManager.start(6000, this); + break; + case 2: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 3: { + Common::Point pt1(158, 74); + NpcMover *mover1 = new NpcMover(); + _globals->_player.addMover(mover1, &pt1, this); + + Common::Point pt2(158, 68); + NpcMover *mover2 = new NpcMover(); + scene->_object2.addMover(mover2, &pt2, NULL); + break; + } + case 4: { + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_6, NULL); + + _globals->_player.fixPriority(-1); + Common::Point pt1(277, 84); + PlayerMover *mover1 = new PlayerMover(); + _globals->_player.addMover(mover1, &pt1, this); + + scene->_object2.fixPriority(-1); + Common::Point pt2(255, 76); + PlayerMover *mover2 = new PlayerMover(); + scene->_object2.addMover(mover2, &pt2, this); + break; + } + case 6: + _globals->_player.setStrip(4); + scene->_object2.setStrip(4); + setDelay(60); + break; + case 7: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(6052, this); + break; + case 8: + if (scene->_stripManager._field2E8 == 320) + _globals->setFlag(74); + setDelay(30); + break; + case 9: + _globals->_events.setCursor(OBJECT_STUNNER); + scene->_object2.setAction(&scene->_action13); + setDelay(60); + break; + case 10: + if (_globals->getFlag(74)) + setDelay(1); + else + setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL); + break; + case 11: + scene->_stripManager.start(2170, this); + break; + case 12: + setDelay(5); + break; + case 13: + scene->_stripManager.start(_globals->getFlag(74) ? 2172 : 2174, this); + break; + case 14: + if (_globals->getFlag(74)) { + _globals->_stripNum = 6100; + _globals->_sceneManager.changeScene(2320); + } else { + _globals->_sceneManager.changeScene(6100); + } + remove(); + break; + } +} + +void Scene2100::Action13::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(6); + break; + case 1: { + scene->_object2.fixPriority(113); + Common::Point pt(178, 116); + PlayerMover *mover = new PlayerMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 2: { + Common::Point pt(150, 116); + NpcMover *mover = new NpcMover(); + scene->_object2.addMover(mover, &pt, this); + break; + } + case 3: + scene->_object2.setVisage(2108); + scene->_object2._strip = 3; + scene->_object2.setPosition(Common::Point(150, 100)); + scene->_object2.animate(ANIM_MODE_NONE, NULL); + scene->_object2.changeZoom(100); + scene->_object2.setAction(&scene->_action3); + setDelay(15); + break; + case 4: + remove(); + break; + } +} + +void Scene2100::Action14::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(6); + break; + case 1: + setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); + break; + case 2: + setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL); + break; + case 3: + scene->_stripManager.start(6008, this); + break; + case 4: + scene->_soundHandler.play(99); + scene->_object4.show(); + scene->_object4.animate(ANIM_MODE_5, this); + break; + case 5: + scene->_object4.setStrip(2); + scene->_stripManager.start(6009, this, scene); + break; + case 6: + scene->_soundHandler.fadeOut(NULL); + scene->_object4.setStrip(1); + scene->_object4.setFrame(scene->_object4.getFrameCount()); + scene->_object4.animate(ANIM_MODE_6, this); + break; + case 7: + scene->_stripManager.start(6060, this); + break; + case 8: + scene->_object3._numFrames = 10; + scene->_object3.setAction(NULL); + scene->_object3.setVisage(2105); + scene->_object3.setStrip(2); + scene->_object3.setFrame(1); + scene->_object3.animate(ANIM_MODE_5, this); + break; + case 9: { + scene->_object3.setVisage(2705); + scene->_object3.setStrip2(-1); + scene->_object3.changeZoom(-1); + scene->_object3.fixPriority(-1); + scene->_object3.setPosition(Common::Point(260, 156)); + scene->_object3.setObjectWrapper(new SceneObjectWrapper()); + scene->_object3.animate(ANIM_MODE_1, NULL); + + Common::Point pt(157, 65); + PlayerMover *mover = new PlayerMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 10: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 11: { + Common::Point pt(159, 51); + NpcMover *mover = new NpcMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 12: + scene->_object3.setStrip(2); + setDelay(30); + break; + case 13: + scene->_object3.fixPriority(1); + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 14: + setDelay(90); + break; + case 15: + _globals->_sceneManager.changeScene(7000); + remove(); + break; + } +} + +void Scene2100::Action15::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(6); + break; + case 1: + scene->_object3.postInit(); + scene->_object3.setVisage(2705); + scene->_object3.animate(ANIM_MODE_1, NULL); + scene->_object3.setObjectWrapper(new SceneObjectWrapper()); + scene->_object3.setPosition(Common::Point(157, 56)); + scene->_object3.fixPriority(1); + scene->_object3.changeZoom(-1); + + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 2: { + scene->_object3.fixPriority(-1); + Common::Point pt(177, 68); + NpcMover *mover = new NpcMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 3: { + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_6, this); + + Common::Point pt(272, 140); + NpcMover *mover = new NpcMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 4: { + Common::Point pt(266, 150); + NpcMover *mover = new NpcMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 5: { + scene->_object3.fixPriority(156); + + Common::Point pt(260, 156); + NpcMover *mover = new NpcMover(); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 6: + scene->_object3.setVisage(2105); + scene->_object3._strip = 1; + scene->_object3._frame = 1; + scene->_object3.setPosition(Common::Point(256, 156)); + scene->_object3.animate(ANIM_MODE_5, this); + scene->_object3.changeZoom(100); + + scene->_object3.animate(ANIM_MODE_NONE, NULL); + break; + case 7: + remove(); + break; + } +} + +void Scene2100::Action16::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + case 4: + setDelay(3); + break; + case 1: + scene->_stripManager.start(7001, this); + break; + case 2: + setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); + break; + case 3: { + _globals->_player.disableControl(); + Common::Point pt(155, 63); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 6: { + Common::Point pt(160, 54); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 7: + _globals->_player.fixPriority(1); + _globals->_player.setStrip(3); + setDelay(45); + break; + case 8: + scene->_soundHandler.play(162); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 9: + _globals->setFlag(15); + _globals->setFlag(36); + _globals->_sceneManager.changeScene(7000); + remove(); + break; + } +} + +void Scene2100::Action17::signal() { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); + break; + case 2: + setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL); + break; + case 3: + scene->_stripManager.start(7070, this); + break; + case 4: + scene->_soundHandler.play(99); + scene->_object4.show(); + scene->_object4.animate(ANIM_MODE_5, this); + break; + case 5: + scene->_soundHandler.play(12); + scene->_object4.setStrip(2); + scene->_stripManager.start(7071, this, scene); + break; + case 6: + scene->_soundHandler.fadeOut(NULL); + scene->_object4.setStrip(1); + scene->_object4.setFrame(scene->_object4.getFrameCount()); + scene->_object4.animate(ANIM_MODE_6, this); + break; + case 7: + scene->_stripManager.start(7072, this); + break; + case 8: + RING_INVENTORY._stasisNegator._sceneNumber = 1; + _globals->_sceneManager.changeScene(9100); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene2100::Hotspot2::doAction(int action) { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2100, 3); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2100, 29); + else { + _globals->_player.disableControl(); + scene->setAction(&scene->_action4); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2100::Hotspot3::doAction(int action) { + // Computer, on the left + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2100, 4); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2100, 29); + else { + _globals->_player.disableControl(); + scene->setAction(&scene->_action4); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2100::Hotspot4::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2100, 5); + break; + case CURSOR_USE: + SceneItem::display2(2100, 6); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2100::Hotspot8::doAction(int action) { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2100, 12); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2100, 29); + else { + _globals->_player.disableControl(); + scene->setAction(&scene->_action4); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2100::Hotspot10::doAction(int action) { + // Quinn's Console + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2100, 13); + break; + case CURSOR_USE: + if (scene->_sitFl) { + _globals->_player.disableControl(); + scene->_sceneMode = 2102; + scene->setAction(&scene->_sequenceManager, scene, 2102, &_globals->_player, NULL); + } else if (_globals->getFlag(13)) { + SceneItem::display2(2100, 28); + } else { + _globals->_player.disableControl(); + scene->_sceneMode = 2101; + scene->setAction(&scene->_sequenceManager, scene, 2101, &_globals->_player, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2100::Hotspot14::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(0)) + SceneItem::display2(2100, 19); + else + SceneItem::display2(2100, 18); + break; + case CURSOR_USE: + if (_globals->getFlag(1)) + SceneItem::display2(2100, 21); + else + SceneItem::display2(2100, 20); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2100::Object1::doAction(int action) { + // Elevator + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2100, 1); + break; + case CURSOR_USE: + scene->setAction(&scene->_action1); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2100::Object2::doAction(int action) { + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2100, 30); + break; + case CURSOR_TALK: + if (_globals->getFlag(72)) { + _globals->_player.disableControl(); + if (!_globals->getFlag(52)) { + scene->_sceneMode = 2111; + scene->setAction(&scene->_sequenceManager, scene, 2111, NULL); + } else { + scene->_sceneMode = _globals->getFlag(53) ? 2112 : 2110; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, NULL); + } + } else if (_globals->getFlag(13)) { + SceneItem::display2(2100, 31); + } else if (_globals->getFlag(14)) { + SceneItem::display2(2100, 32); + } else { + _globals->setFlag(14); + _globals->_player.disableControl(); + scene->_sceneMode = 2108; + scene->setAction(&scene->_sequenceManager, scene, 2109, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2100::Object3::doAction(int action) { + // Miranda + Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(59)) + SceneItem::display2(2100, 34); + else + error("***I have no response."); + break; + + case CURSOR_TALK: + if (_globals->getFlag(59)) { + _globals->_player.disableControl(); + scene->_sceneMode = 2108; + scene->setAction(&scene->_sequenceManager, scene, 2108, NULL); + } else { + error("***I have no response."); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene2100::Scene2100() : + _hotspot1(0, CURSOR_LOOK, 2100, 2, LIST_END), + _hotspot5(0, CURSOR_LOOK, 2100, 9, LIST_END), + _hotspot6(0, CURSOR_LOOK, 2100, 7, CURSOR_USE, 2100, 8, LIST_END), + _hotspot7(0, CURSOR_LOOK, 2100, 7, CURSOR_USE, 2100, 11, LIST_END), + _hotspot9(0, CURSOR_LOOK, 2100, 14, LIST_END), + _hotspot11(0, CURSOR_LOOK, 2100, 15, CURSOR_USE, 2100, 16, LIST_END), + _hotspot12(0, CURSOR_LOOK, 2100, 24, CURSOR_USE, 2100, 25, LIST_END), + _hotspot13(0, CURSOR_LOOK, 2100, 17, LIST_END), + _hotspot15(0, CURSOR_LOOK, 2100, 22, CURSOR_USE, 2100, 23, LIST_END) { + _area1.setup(2153, 2, 1, 2100); + _area1._pt = Common::Point(200, 31); + _area2.setup(2153, 3, 1, 2150); + _area2._pt = Common::Point(200, 50); + _area3.setup(2153, 4, 1, 2320); + _area3._pt = Common::Point(200, 75); + _area4.setup(2153, 1, 1, OBJECT_TRANSLATOR); + _area4._pt = Common::Point(237, 77); +} + +void Scene2100::postInit(SceneObjectList *OwnerList) { + loadScene(2100); + Scene::postInit(); + setZoomPercents(60, 80, 200, 100); + + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerMR); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerSL); + _stripManager.addSpeaker(&_speakerSAL); + _stripManager.addSpeaker(&_speakerHText); + _stripManager.addSpeaker(&_speakerGameText); + _speakerMText._npc = &_object3; + _speakerQText._npc = &_globals->_player; + _speakerSText._npc = &_object2; + + _object1.postInit(); + _object1.setVisage(2100); + _object1.animate(ANIM_MODE_NONE, NULL); + _object1.setPosition(Common::Point(157, 57)); + _object1.fixPriority(5); + + _hotspot3.postInit(); + _hotspot3.setVisage(2101); + _hotspot3._frame = 1; + _hotspot3.animate(ANIM_MODE_2, NULL); + _hotspot3.setPosition(Common::Point(53, 44)); + _hotspot3.changeZoom(100); + _hotspot3.fixPriority(1); + + _hotspot4.postInit(); + _hotspot4.setVisage(2101); + _hotspot4._frame = 1; + _hotspot4._strip = 3; + _hotspot4.animate(ANIM_MODE_8, 0, NULL); + _hotspot4.setPosition(Common::Point(274, 52)); + _hotspot4.changeZoom(100); + _hotspot4.fixPriority(1); + + _hotspot5.postInit(); + _hotspot5.setVisage(2101); + _hotspot5._frame = 1; + _hotspot5._strip = 4; + _hotspot5.animate(ANIM_MODE_8, 0, NULL); + _hotspot5.setPosition(Common::Point(219, 141)); + _hotspot5.changeZoom(100); + _hotspot5.fixPriority(160); + + _hotspot6.postInit(); + _hotspot6.setVisage(2101); + _hotspot6._frame = 1; + _hotspot6._strip = 5; + _hotspot6.fixPriority(175); + _hotspot6.animate(ANIM_MODE_8, 0, NULL); + _hotspot6.setPosition(Common::Point(97, 142)); + _hotspot6.changeZoom(100); + + _hotspot7.postInit(); + _hotspot7.setVisage(2101); + _hotspot7._frame = 1; + _hotspot7._strip = 6; + _hotspot7.animate(ANIM_MODE_NONE, NULL); + _hotspot7.setPosition(Common::Point(133, 46)); + _hotspot7.changeZoom(100); + _hotspot7.fixPriority(1); + + _hotspot8.postInit(); + _hotspot8.setVisage(2101); + _hotspot8._frame = 1; + _hotspot8._strip = 7; + _hotspot8.animate(ANIM_MODE_8, 0, NULL); + _hotspot8.setPosition(Common::Point(20, 45)); + _hotspot8.changeZoom(100); + _hotspot8.fixPriority(1); + + _hotspot2.postInit(); + _hotspot2.setVisage(2101); + _hotspot2._frame = 1; + _hotspot2._strip = 8; + _hotspot2.animate(ANIM_MODE_8, 0, NULL); + _hotspot2.setPosition(Common::Point(88, 41)); + _hotspot2.changeZoom(100); + _hotspot2.fixPriority(1); + + _hotspot11.setBounds(Rect(139, 74, 173, 96)); + _hotspot10.setBounds(Rect(71, 100, 91, 135)); + _hotspot9.setBounds(Rect(225, 110, 251, 136)); + _hotspot14.setBounds(Rect(100, 97, 216, 130)); + _hotspot13.setBounds(Rect(13, 124, 94, 168)); + _hotspot12.setBounds(Rect(217, 141, 307, 155)); + _hotspot15.setBounds(Rect(14, 90, 46, 107)); + _hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + + if (!_globals->getFlag(36) && !_globals->getFlag(70) && !_globals->getFlag(43)) { + _object3.postInit(); + _object3.setPosition(Common::Point(246, 156)); + _object3.animate(ANIM_MODE_NONE, NULL); + _object3.changeZoom(100); + _object3.fixPriority(156); + _object3.setVisage(2107); + _object3.setStrip(1); + _object3.setAction(&_action2); + _globals->_sceneItems.push_back(&_object3); + } + + if (!_globals->getFlag(59) && !_globals->getFlag(70) && !_globals->getFlag(37) && !_globals->getFlag(114)) { + _object2.postInit(); + _object2.setVisage(2108); + _object2._strip = 3; + _object2.setPosition(Common::Point(150, 100)); + _object2.animate(ANIM_MODE_NONE, NULL); + _object2.changeZoom(100); + _object2.fixPriority(113); + _object2.setAction(&_action3); + _globals->_sceneItems.push_back(&_object2); + } + + _globals->_sceneItems.addItems(&_hotspot15, &_hotspot11, &_hotspot10, &_hotspot9, &_hotspot14, + &_hotspot13, &_hotspot12, &_hotspot8, &_object1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, + &_hotspot6, &_hotspot7, &_hotspot1, NULL); + + _globals->_player.postInit(); + if (_globals->getFlag(13)) { + _globals->_player.setVisage(2170); + _globals->_player._moveDiff.y = 1; + } else { + _globals->_player.setVisage(0); + _globals->_player._moveDiff.y = 3; + } + + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player._moveDiff.x = 4; + _globals->_player.changeZoom(-1); + _globals->_player.disableControl(); + _sitFl = 0; + + switch (_globals->_sceneManager._previousScene) { + case 2120: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + _object1.fixPriority(-1); + _globals->_player.fixPriority(-1); + _globals->_player.setPosition(Common::Point(80, 66)); + _globals->_player.enableControl(); + break; + case 2150: + _globals->_player.fixPriority(1); + _globals->_player.setPosition(Common::Point(157, 56)); + _sceneMode = 2104; + setAction(&_sequenceManager, this, 2104, &_globals->_player, &_object1, NULL); + break; + case 2222: + if (_globals->_sceneObjects->contains(&_object3)) + _object3.remove(); + + _globals->_player.fixPriority(1); + _globals->_player.setPosition(Common::Point(144, 55)); + + _object2.setVisage(2806); + _object2.changeZoom(-1); + _object2.setPosition(Common::Point(158, 55)); + _object2.fixPriority(1); + _object2.setAction(NULL); + _object2.setObjectWrapper(new SceneObjectWrapper()); + _object2.animate(ANIM_MODE_1, NULL); + _object2.setStrip(3); + setAction(&_action12); + break; + case 2320: + if (_globals->_stripNum == 2321) { + if (_globals->_sceneObjects->contains(&_object3)) + _object3.remove(); + + _globals->_player.fixPriority(1); + _globals->_player.setPosition(Common::Point(144, 55)); + + _object2.postInit(); + _object2.setVisage(2806); + _object2.setStrip(1); + _object2.changeZoom(-1); + _object2.setPosition(Common::Point(158, 55)); + _object2.fixPriority(1); + _object2.setAction(NULL); + _object2.setObjectWrapper(new SceneObjectWrapper()); + _object2.animate(ANIM_MODE_1, NULL); + + setAction(&_action12); + } else if (_globals->_stripNum == 6100) { + _globals->_player.setPosition(Common::Point(157, 56)); + _globals->_player.fixPriority(1); + + _object4.postInit(); + _object4.setVisage(2102); + _object4.setPosition(Common::Point(160, 199)); + _object4.hide(); + + setAction(&_action14); + } else { + _globals->_player.disableControl(); + _globals->_player.fixPriority(1); + _globals->_player.setPosition(Common::Point(157, 56)); + _sceneMode = 2104; + + setAction(&_sequenceManager, this, 2104, &_globals->_player, &_object1, NULL); + } + break; + case 3700: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + Scene::setZoomPercents(80, 75, 100, 90); + + if (_globals->_sceneObjects->contains(&_object2)) + _object2.remove(); + + _globals->_player._angle = 225; + _globals->_player.setStrip(6); + _globals->_player.setFrame(1); + _globals->_player.fixPriority(-1); + _globals->_player.setPosition(Common::Point(272, 127)); + + _object3.setPosition(Common::Point(246, 156)); + _object3.fixPriority(156); + _sceneMode = 2105; + setAction(&_sequenceManager, this, 2105, &_object3, NULL); + break; + case 4250: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + _globals->clearFlag(43); + + _globals->_player.setVisage(2104); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(65, 149)); + _globals->_player.fixPriority(152); + _globals->_player.setStrip(2); + + _object4.postInit(); + _object4.setVisage(2102); + _object4.setPosition(Common::Point(160, 199)); + _object4.hide(); + + _sceneMode = 2107; + setAction(&_sequenceManager, this, 2107, &_object4, NULL); + break; + case 5000: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + + if (_globals->_sceneObjects->contains(&_object2)) + _object2.remove(); + + _globals->_player.setStrip(3); + _globals->_player.setFrame(1); + _globals->_player.fixPriority(1); + _globals->_player.setPosition(Common::Point(157, 56)); + + _object3.setPosition(Common::Point(246, 156)); + _object3.fixPriority(156); + + setAction(&_action5); + break; + case 5100: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + _globals->_player.setVisage(2104); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(65, 149)); + _globals->_player.fixPriority(152); + _globals->_player.setStrip(2); + + _sitFl = 1; + + _object4.postInit(); + _object4.setVisage(2102); + _object4.setPosition(Common::Point(160, 199)); + _object4.hide(); + + RING_INVENTORY._stasisBox._sceneNumber = 0; + setAction(&_action9); + break; + case 7000: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + + if (RING_INVENTORY._stasisBox2._sceneNumber == 1) { + _globals->_player.fixPriority(1); + _globals->_player.setPosition(Common::Point(157, 56)); + + _object4.postInit(); + _object4.setVisage(2102); + _object4.setPosition(Common::Point(160, 199)); + _object4.hide(); + _globals->clearFlag(15); + _globals->clearFlag(109); + _globals->clearFlag(72); + + setAction(&_action17); + } else { + _globals->_player.setVisage(2104); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(65, 149)); + _globals->_player.fixPriority(152); + _globals->_player.setStrip(2); + + _sitFl = 1; + setAction(&_action16); + } + break; + case 7600: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + + if (_globals->_sceneObjects->contains(&_object2)) + _object2.remove(); + + _globals->_player.fixPriority(1); + _globals->_player.setPosition(Common::Point(157, 56)); + + setAction(&_action8); + break; + case 8100: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + + _globals->_player.setVisage(2104); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(65, 149)); + _globals->_player.fixPriority(152); + _globals->_player.setStrip(2); + + _sceneMode = 2106; + setAction(&_sequenceManager, this, 2106, NULL); + break; + case 9750: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + + _globals->_player.setVisage(2104); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(65, 149)); + _globals->_player.fixPriority(152); + _globals->_player.setStrip(2); + + _object4.postInit(); + _object4.setVisage(2102); + _object4.setPosition(Common::Point(160, 199)); + _object4.hide(); + + _sceneMode = 2103; + setAction(&_sequenceManager, this, 2103, &_object4, NULL); + break; + default: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + + _globals->_player._uiEnabled = true; + break; + } + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; +} + +void Scene2100::stripCallback(int v) { + switch (v) { + case 1: + _object4._numFrames = 4; + _object4.animate(ANIM_MODE_7, NULL); + break; + case 2: + _object4.animate(ANIM_MODE_NONE, NULL); + break; + } +} + +void Scene2100::signal() { + switch (_sceneMode) { + case 2101: + _sitFl = 1; + _globals->_player._uiEnabled = true; + _globals->_events.setCursor(CURSOR_USE); + break; + case 2102: + _sitFl = 0; + _globals->_player.enableControl(); + break; + case 2103: + _globals->_stripNum = 9000; + _globals->_sceneManager.changeScene(4000); + break; + case 2106: + _globals->_sceneManager.changeScene(7000); + break; + case 2107: + _globals->_sceneManager.changeScene(5000); + break; + case 2104: + case 2105: + case 2108: + case 2110: + case 2111: + case 2112: + _globals->_player.enableControl(); + break; + } +} + +void Scene2100::synchronize(Serializer &s) { + Scene::synchronize(s); + if (s.getVersion() >= 3) + s.syncAsSint16LE(_sitFl); +} + +/*-------------------------------------------------------------------------- + * Scene 2120 - Encyclopedia + * + *--------------------------------------------------------------------------*/ + +Scene2120::Action1::Action1() { + _entries.push_back(Entry(0, 0, 0)); + _entries.push_back(Entry(0, 0, 0)); + _entries.push_back(Entry(4, 1, 2123)); + _entries.push_back(Entry(1, 6, 0)); + _entries.push_back(Entry(2, 8, 0)); + _entries.push_back(Entry(1, 11, 0)); + _entries.push_back(Entry(4, 13, 2131)); + _entries.push_back(Entry(2, 18, 0)); + _entries.push_back(Entry(4, 21, 0)); + _entries.push_back(Entry(7, 26, 2128)); + _entries.push_back(Entry(3, 34, 0)); + _entries.push_back(Entry(0, 38, 0)); + _entries.push_back(Entry(3, 39, 2126)); + _entries.push_back(Entry(3, 43, 0)); + _entries.push_back(Entry(4, 47, 2125)); + _entries.push_back(Entry(3, 52, 0)); + _entries.push_back(Entry(4, 56, 2129)); + _entries.push_back(Entry(7, 61, 0)); + _entries.push_back(Entry(2, 69, 2127)); + _entries.push_back(Entry(7, 72, 2122)); + _entries.push_back(Entry(0, 80, 2124)); + _entries.push_back(Entry(0, 81, 0)); + _entries.push_back(Entry(0, 82, 0)); + _entries.push_back(Entry(1, 83, 0)); + _entries.push_back(Entry(2, 85, 2132)); + _entries.push_back(Entry(1, 88, 2133)); + _entries.push_back(Entry(2, 90, 2136)); + _entries.push_back(Entry(1, 93, 0)); + _entries.push_back(Entry(10, 95, 2135)); + _entries.push_back(Entry(5, 106, 0)); + _entries.push_back(Entry(2, 112, 2134)); + _entries.push_back(Entry(1, 115, 2130)); + _entries.push_back(Entry(0, 117, 0)); +} + +void Scene2120::Action1::signal() { + Scene2120 *scene = (Scene2120 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + _globals->_events.setCursor(CURSOR_WALK); + break; + case 1: + // First page of index + SceneItem::display(2120, 0, SET_X, 120, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1, + SET_WIDTH, 200, SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END); + break; + case 2: + // Second page of index + SceneItem::display(2120, 1, SET_X, 120, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1, + SET_WIDTH, 200, SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END); + break; + case 3: + // Display an image associated with the encyclopedia entry + SceneItem::display(0, 0); + + scene->_visageHotspot.postInit(); + scene->_visageHotspot.setVisage(_entries[scene->_subjectIndex]._visage); + scene->_visageHotspot.setPosition(Common::Point(129, 180)); + scene->_visageHotspot.animate(ANIM_MODE_NONE, NULL); + scene->_visageVisable = true; + break; + case 4: + // Display page of text + SceneItem::display(2121, _entries[scene->_subjectIndex]._lineNum + scene->_lineOffset, + SET_X, 130, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1, SET_WIDTH, 200, + SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END); + _actionIndex = 4; + break; + } +} + +void Scene2120::Action1::dispatch() { + Scene2120 *scene = (Scene2120 *)_globals->_sceneManager._scene; + + Event event; + if (_globals->_events.getEvent(event) && (event.eventType == EVENT_BUTTON_DOWN)) { + if (scene->_listRect.contains(event.mousePos) && (scene->_dbMode != 2)) { + scene->_topicArrowHotspot.setPosition(Common::Point(scene->_topicArrowHotspot._position.x, event.mousePos.y)); + } + + // Subject button handling + if (scene->_subjectButton._bounds.contains(event.mousePos) && (scene->_dbMode != 2)) { + scene->_arrowHotspot.setPosition(Common::Point(291, 34)); + scene->_arrowHotspot._strip = 1; + scene->_arrowHotspot.animate(ANIM_MODE_5, NULL); + + if (scene->_dbMode == 0) + scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 48) / 8; + else + scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 44) / 8 + 16; + + if ((scene->_subjectIndex == 27) && _globals->getFlag(70)) + _globals->setFlag(75); + + scene->_topicArrowHotspot.hide(); + scene->_prevDbMode = scene->_dbMode; + scene->_dbMode = 2; + scene->_lineOffset = 0; + + _actionIndex = !_entries[scene->_subjectIndex]._visage ? 4 : 3; + setDelay(30); + scene->_soundHandler.play(159); + } + + // Next Page button handling + if (scene->_nextPageButton._bounds.contains(event.mousePos)) { + if (!scene->_dbMode) { + scene->_arrowHotspot._strip = 2; + scene->_arrowHotspot.setPosition(Common::Point(291, 76)); + scene->_arrowHotspot.animate(ANIM_MODE_5, NULL); + scene->_dbMode = 1; + + _actionIndex = 2; + setDelay(30); + } + + if ((scene->_dbMode == 2) && (scene->_lineOffset < _entries[scene->_subjectIndex]._size)) { + if (!scene->_visageVisable) { + ++scene->_lineOffset; + } else { + scene->_visageVisable = false; + scene->_visageHotspot.remove(); + } + setDelay(30); + } + + if ((scene->_subjectIndex == 20) && scene->_visageVisable) { + scene->_visageVisable = false; + scene->_visageHotspot.remove(); + setDelay(30); + } + + scene->_soundHandler.play(159); + } + + // Previous Page button handling + if (scene->_previousPageButton._bounds.contains(event.mousePos)) { + switch (scene->_dbMode) { + case 1: + scene->_arrowHotspot._strip = 3; + scene->_arrowHotspot.setPosition(Common::Point(291, 117)); + scene->_arrowHotspot.animate(ANIM_MODE_5, NULL); + + scene->_dbMode = 0; + _actionIndex = 1; + setDelay(30); + break; + case 2: + if (scene->_lineOffset > 0) { + --scene->_lineOffset; + setDelay(20); + } + if ((_entries[scene->_subjectIndex]._visage != 0) && (scene->_lineOffset == 0)) { + _actionIndex = 3; + setDelay(30); + } + break; + } + + scene->_soundHandler.play(159); + } + + // Exit button handling + if (scene->_exitButton._bounds.contains(event.mousePos)) { + if (scene->_dbMode != 2) { + // In the index, so return to the previous scene + setAction(NULL); + SceneItem::display(0, 0); + + _globals->_gfxManagerInstance._font.setFontNumber(2); + _globals->_sceneText._fontNumber = 2; + _globals->_sceneManager.changeScene(_globals->_sceneManager._previousScene); + } else { + // Exit out of topic display to index + SceneItem::display(0, 0); + + if (_entries[scene->_subjectIndex]._visage) + scene->_visageHotspot.remove(); + + scene->_arrowHotspot._strip = 4; + scene->_arrowHotspot.setPosition(Common::Point(291, 159)); + scene->_arrowHotspot.animate(ANIM_MODE_5, NULL); + scene->_dbMode = scene->_prevDbMode; + _actionIndex = scene->_prevDbMode + 1; + + scene->_topicArrowHotspot.show(); + setDelay(1); + } + + scene->_soundHandler.play(159); + } + } + + Action::dispatch(); +} + +/*--------------------------------------------------------------------------*/ + +Scene2120::Scene2120(): Scene() { + _listRect = Rect(18, 48, 260, 177); + _dbMode = 0; + _prevDbMode = 0; + _visageVisable = false; + _subjectIndex = 0; +} + +void Scene2120::postInit(SceneObjectList *OwnerList) { + loadScene(2120); + setZoomPercents(0, 100, 200, 100); + _globals->_player.disableControl(); + + _subjectButton.setBounds(Rect(266, 13, 320, 56)); + _nextPageButton.setBounds(Rect(266, 56, 320, 98)); + _previousPageButton.setBounds(Rect(266, 98, 320, 140)); + _exitButton.setBounds(Rect(266, 140, 320, 182)); + + _topicArrowHotspot.postInit(); + _topicArrowHotspot.setVisage(2120); + _topicArrowHotspot.animate(ANIM_MODE_NONE, NULL); + _topicArrowHotspot.setPosition(Common::Point(240, 55)); + + _arrowHotspot.postInit(); + _arrowHotspot.setVisage(2121); + _arrowHotspot.animate(ANIM_MODE_NONE, NULL); + _arrowHotspot._frame = 1; + _arrowHotspot.setPosition(Common::Point(400, 200)); + + setAction(&_action1); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; +} + +void Scene2120::synchronize(Serializer &s) { + Scene::synchronize(s); + + s.syncAsSint16LE(_dbMode); + s.syncAsSint16LE(_prevDbMode); + s.syncAsSint16LE(_visageVisable); + s.syncAsSint16LE(_subjectIndex); + s.syncAsSint16LE(_lineOffset); +} + +/*-------------------------------------------------------------------------- + * Scene 2150 - Starcraft Level 2 + * + *--------------------------------------------------------------------------*/ + +void Scene2150::Action1::signal() { + Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + Common::Point pt(158, 103); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + scene->_soundHandler.play(162); + scene->_hotspot1.animate(ANIM_MODE_5, this); + break; + case 2: { + _globals->_player.setStrip2(4); + Common::Point pt(158, 95); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: + _globals->_player.setStrip2(-1); + _globals->_player._strip = 3; + setDelay(10); + break; + case 4: + scene->_area1.display(); + scene->_area2.display(); + scene->_area3.display(); + scene->_area4.display(); + + scene->_area2.draw(true); + _state = 0; + _globals->_events.setCursor(CURSOR_USE); + + while (!_state && !_vm->shouldQuit()) { + // Wait for an event + Event event; + if (!_globals->_events.getEvent(event)) { + g_system->updateScreen(); + g_system->delayMillis(10); + continue; + } + + if (scene->_area1._bounds.contains(event.mousePos)) { + scene->_area2.draw(false); + scene->_area1.draw(true); + _state = scene->_area1._actionId; + } + if (scene->_area2._bounds.contains(event.mousePos)) { + scene->_area2.draw(true); + _state = scene->_area2._actionId; + } + if (scene->_area3._bounds.contains(event.mousePos)) { + scene->_area2.draw(false); + scene->_area3.draw(true); + _state = scene->_area3._actionId; + } + } + + scene->_soundHandler.play(161); + scene->_area1.restore(); + scene->_area2.restore(); + scene->_area3.restore(); + scene->_area4.restore(); + + if (_state == 2150) { + setDelay(1); + } else { + scene->_soundHandler.play(162); + scene->_hotspot1.animate(ANIM_MODE_6, this); + } + break; + case 5: + if (_state == 2150) { + Common::Point pt(158, 103); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } else { + _globals->_sceneManager.changeScene(_state); + } + break; + case 6: + scene->_soundHandler.play(162); + scene->_hotspot1.animate(ANIM_MODE_6, this); + break; + case 7: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene2150::Action2::signal() { + Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + Common::Point pt(47, 85); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + _globals->_player.setVisage(2152); + _globals->_player.setFrame(1); + _globals->_player.setStrip(8); + _globals->_player.animate(ANIM_MODE_8, 1, this); + + scene->_soundHandler.play(163); + break; + case 2: + scene->_soundHandler.play(164); + scene->_hotspot10.animate(ANIM_MODE_5, this); + break; + case 3: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start((RING_INVENTORY._ale._sceneNumber == 2150) ? 2151 : 2152, this); + break; + case 4: + scene->_hotspot14.postInit(); + scene->_hotspot14.setVisage(2152); + scene->_hotspot14.setStrip(6); + scene->_hotspot14.setPosition(Common::Point(59, 54)); + + if (scene->_stripManager._field2E8 == 15) { + scene->_hotspot14.setFrame(5); + RING_INVENTORY._ale._sceneNumber = 1; + } else { + scene->_hotspot14.setFrame(scene->_stripManager._field2E8 - 5); + } + + _globals->_player.setFrame(1); + _globals->_player.setStrip(7); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 5: + scene->_soundHandler.play(164); + scene->_hotspot10.animate(ANIM_MODE_6, NULL); + scene->_hotspot14.remove(); + + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 6: + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.enableControl(); + + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene2150::Hotspot1::doAction(int action) { + Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2150, 0); + break; + case CURSOR_USE: + scene->setAction(&scene->_action1); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2150::Hotspot2::doAction(int action) { + Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2150, 1); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->_sceneMode = 2156; + scene->setAction(&scene->_sequenceManager, scene, 2156, &_globals->_player, this, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2150::Hotspot4::doAction(int action) { + Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2150, 3); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->_sceneMode = 2155; + scene->setAction(&scene->_sequenceManager, scene, 2155, &_globals->_player, &scene->_hotspot4, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2150::Hotspot7::doAction(int action) { + Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2150, 7); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2150, 19); + else { + _globals->_player.disableControl(); + scene->_sceneMode = 2154; + scene->setAction(&scene->_sequenceManager, scene, 2154, &_globals->_player, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2150::Hotspot10::doAction(int action) { + Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2150, 10); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2150, 19); + else + scene->setAction(&scene->_action2); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene2150::Scene2150() : + _hotspot3(18, CURSOR_LOOK, 2150, 2, CURSOR_USE, 2150, 18, LIST_END), + _hotspot5(17, CURSOR_LOOK, 2150, 4, CURSOR_USE, 2150, 18, LIST_END), + _hotspot6(0, CURSOR_LOOK, 2150, 5, CURSOR_USE, 2150, 18, LIST_END), + _hotspot8(16, CURSOR_LOOK, 2150, 8, LIST_END), + _hotspot9(0, CURSOR_LOOK, 2150, 9, CURSOR_USE, 2150, 13, LIST_END), + _hotspot11(0, CURSOR_LOOK, 2150, 12, LIST_END) { + _rect1 = Rect(260, 70, 270, 77); + _rect2 = Rect(222, 142, 252, 150); + _area1.setup(2153, 2, 1, 2100); + _area1._pt = Common::Point(200, 31); + _area2.setup(2153, 3, 1, 2150); + _area2._pt = Common::Point(200, 50); + _area3.setup(2153, 4, 1, 2320); + _area3._pt = Common::Point(200, 75); + _area4.setup(2153, 1, 1, 10); + _area4._pt = Common::Point(237, 77); + +} + +void Scene2150::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(55, 85, 200, 100); + loadScene(2150); + + _stripManager.addSpeaker(&_speakerGameText); + + _hotspot7.postInit(); + _hotspot7.setVisage(2152); + _hotspot7._frame = 1; + _hotspot7._strip = 2; + _hotspot7.animate(ANIM_MODE_8, 0, NULL); + _hotspot7.setPosition(Common::Point(122, 62)); + _hotspot7.changeZoom(100); + _hotspot7.fixPriority(76); + + _hotspot2.postInit(); + _hotspot2.setVisage(2151); + _hotspot2._frame = 1; + _hotspot2._strip = 3; + _hotspot2.animate(ANIM_MODE_NONE, NULL); + _hotspot2.setPosition(Common::Point(257, 67)); + _hotspot2.changeZoom(100); + _hotspot2.fixPriority(60); + + _hotspot1.postInit(); + _hotspot1.setVisage(2151); + _hotspot1._frame = 1; + _hotspot1._strip = 2; + _hotspot1.animate(ANIM_MODE_NONE, NULL); + _hotspot1.setPosition(Common::Point(158, 99)); + _hotspot1.changeZoom(100); + _hotspot1.fixPriority(99); + + _hotspot4.postInit(); + _hotspot4.setVisage(2150); + _hotspot4._frame = 1; + _hotspot4._strip = 2; + _hotspot4.animate(ANIM_MODE_NONE, NULL); + _hotspot4.setPosition(Common::Point(218, 200)); + _hotspot4.changeZoom(100); + _hotspot4.fixPriority(200); + + _hotspot10.postInit(); + _hotspot10.setVisage(2152); + _hotspot10.setStrip(5); + _hotspot10.setPosition(Common::Point(59, 56)); + + _globals->_player.postInit(); + _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.fixPriority(-1); + _globals->_player.changeZoom(-1); + _globals->_player._moveDiff.y = 3; + + _hotspot8.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot9.setBounds(Rect(133, 0, 198, 91)); + _hotspot11.setBounds(Rect(142, 119, 176, 158)); + + _globals->_sceneItems.addItems(&_hotspot1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, + &_hotspot6, &_hotspot7, &_hotspot10, &_hotspot9, &_hotspot11, &_hotspot8, NULL); + + switch (_globals->_sceneManager._previousScene) { + case 2120: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + _globals->_player.setPosition(Common::Point(108, 99)); + break; + case 2200: + _globals->_player.disableControl(); + _globals->_player.setPosition(Common::Point(159, 240)); + _sceneMode = 2152; + setAction(&_sequenceManager, this, 2152, &_globals->_player, NULL); + break; + case 2280: + _globals->_player.disableControl(); + _globals->_player._angle = 180; + _globals->_player.setPosition(Common::Point(265, 80)); + + _hotspot2._frame = _hotspot2.getFrameCount(); + _sceneMode = 2157; + setAction(&_sequenceManager, this, 2157, &_hotspot2, NULL); + break; + case 2230: + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player._strip = 4; + _globals->_player.setPosition(Common::Point(229, 139)); + break; + case 2100: + default: + _globals->_player.disableControl(); + _globals->_player.setPosition(Common::Point(158, 95)); + _globals->_player.setStrip(3); + _sceneMode = 2151; + + setAction(&_sequenceManager, this, 2151, &_globals->_player, &_hotspot1, NULL); + break; + } + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; +} + +void Scene2150::synchronize(Serializer &s) { + Scene::synchronize(s); + _rect1.synchronize(s); + _rect2.synchronize(s); +} + +void Scene2150::signal() { + switch (_sceneMode) { + case 2151: + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.enableControl(); + break; + case 2152: + case 2153: + case 2157: + _globals->_player.enableControl(); + break; + case 2154: + _globals->_sceneManager.changeScene(2120); + break; + case 2155: + _globals->_sceneManager.changeScene(2230); + break; + case 2156: + _globals->_sceneManager.changeScene(2280); + break; + } +} + +void Scene2150::dispatch() { + Scene::dispatch(); + + if (!_action) { + if (_rect1.contains(_globals->_player._position)) { + _globals->_player.disableControl(); + _sceneMode = 2156; + setAction(&_sequenceManager, this, 2156, &_globals->_player, &_hotspot2, NULL); + } + if (_rect2.contains(_globals->_player._position)) { + _globals->_player.disableControl(); + _sceneMode = 2155; + setAction(&_sequenceManager, this, 2155, &_globals->_player, &_hotspot4, NULL); + } + if (_globals->_player._position.y >= 196) { + _globals->_player.disableControl(); + SceneItem::display2(2150, 20); + + _sceneMode = 2153; + setAction(&_sequenceManager, this, 2153, &_globals->_player, NULL); + } + } +} + +/*-------------------------------------------------------------------------- + * Scene 2200 - Starcraft - AutoDoc + * + *--------------------------------------------------------------------------*/ + +void Scene2200::Action1::signal() { + Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(6); + break; + case 1: + scene->_hotspot4.animate(ANIM_MODE_5, this); + break; + case 2: + SceneItem::display2(2200, 7); + _globals->_sceneManager.changeScene(2150); + remove(); + break; + } +} + +void Scene2200::Action2::signal() { + Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(3); + break; + case 1: + setDelay(30); + break; + case 2: + scene->_hotspot4.animate(ANIM_MODE_5, this); + break; + case 3: + scene->_hotspot4.setStrip(4); + setDelay(30); + break; + case 4: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(2040, this, scene); + break; + case 5: + scene->_hotspot4.setStrip(4); + scene->_hotspot4.animate(ANIM_MODE_NONE, NULL); + _globals->_player._uiEnabled = true; + remove(); + break; + } +} + +void Scene2200::Action3::signal() { + Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_soundHandler2.play(103); + + scene->_hotspot4.setStrip(4); + scene->_hotspot4.animate(ANIM_MODE_NONE, NULL); + _globals->_player.disableControl(); + + scene->_hotspot2.postInit(); + scene->_hotspot2.setVisage(2201); + scene->_hotspot2._strip = 2; + scene->_hotspot2.setPosition(Common::Point(218, 0)); + + Common::Point pt(218, 63); + NpcMover *mover = new NpcMover(); + scene->_hotspot2.addMover(mover, &pt, this); + break; + } + case 1: + scene->_soundHandler2.play(104); + scene->_hotspot4.setStrip(2); + scene->_hotspot4.setFrame(2); + setDelay(120); + break; + case 2: + if (_globals->getFlag(83)) { + _actionIndex = 8; + setDelay(5); + } else { + for (SynchronizedList::iterator i = _globals->_sceneObjects->begin(); + i != _globals->_sceneObjects->end(); ++i) { + (*i)->hide(); + } + + _globals->_sceneManager._scene->loadScene(66); + + scene->_hotspot6.postInit(); + scene->_hotspot6.setVisage(66); + scene->_hotspot6.setPosition(Common::Point(160, 197)); + + scene->_hotspot7.postInit(); + scene->_hotspot7.setVisage(65); + scene->_hotspot7.setStrip(4); + scene->_hotspot7.setFrame(1); + scene->_hotspot7.setPosition(Common::Point(145, 165)); + + SceneItem::display(60, 1, SET_Y, 40, SET_X, 25, SET_FONT, 75, SET_BG_COLOR, -1, SET_FG_COLOR, 34, + SET_POS_MODE, 0, SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END); + _state = 1; + setDelay(1800); + } + break; + case 3: + case 4: + case 5: + SceneItem::display(60, _actionIndex - 2, SET_Y, 40, SET_X, 25, SET_FONT, 75, SET_BG_COLOR, -1, SET_FG_COLOR, 34, + SET_POS_MODE, 0, SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END); + setDelay(1800); + break; + case 6: + scene->_hotspot7.remove(); + SceneItem::display(0, 0); + _state = 0; + setDelay(5); + break; + case 7: + for (SynchronizedList::iterator i = _globals->_sceneObjects->begin(); + i != _globals->_sceneObjects->end(); ++i) + (*i)->show(); + + scene->_hotspot6.remove(); + _globals->_sceneManager._scene->loadScene(2200); + setDelay(5); + break; + case 8: + scene->_stripManager.start(2060, this, scene); + break; + case 9: + scene->_hotspot4.setStrip(4); + scene->_hotspot4.animate(ANIM_MODE_NONE, NULL); + break; + case 10: + _globals->_sceneManager.changeScene(2000); + remove(); + break; + } +} + +void Scene2200::Action3::process(Event &event) { + if (!event.handled && ((event.eventType == EVENT_KEYPRESS) || (event.eventType == EVENT_BUTTON_DOWN))) { + _state = 0; + event.handled = true; + setDelay(1); + } + + Action::process(event); +} + +void Scene2200::Action4::signal() { + Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + scene->_stripManager.start(2202, this, scene); + break; + case 2: + scene->_hotspot4.setStrip(4); + scene->_hotspot4.animate(ANIM_MODE_NONE, NULL); + setDelay(10); + break; + case 3: + _globals->_player._uiEnabled = true; + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene2200::Hotspot3::doAction(int action) { + Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2200, 10); + break; + case CURSOR_USE: + SceneItem::display2(2200, 11); + break; + case CURSOR_TALK: + _globals->_player._uiEnabled = false; + scene->setAction(&scene->_action4); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2200::Hotspot5::doAction(int action) { + Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2200, 8); + break; + case CURSOR_USE: + SceneItem::display2(2200, 9); + break; + case CURSOR_TALK: + scene->_sceneMode = 2201; + _globals->_player._uiEnabled = false; + scene->setAction(&scene->_sequenceManager, scene, 2201, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2200::Hotspot9::doAction(int action) { + Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2200, _globals->getFlag(8) ? 1 : 0); + break; + case CURSOR_USE: + SceneItem::display2(2200, 3); + break; + case OBJECT_INFODISK: + if (_globals->_sceneManager._previousScene == 2310) { + scene->_soundHandler2.play(35); + _globals->_player.disableControl(); + scene->setAction(&scene->_action3); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + + +Scene2200::Scene2200() : + _hotspot1(0, CURSOR_LOOK, 2200, 5, CURSOR_USE, 2200, 6, LIST_END), + _hotspot10(0, CURSOR_LOOK, 2200, 4, LIST_END) { +} + +void Scene2200::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 200, 200, 200); + loadScene(2200); + + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSL); + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerMR); + _stripManager.addSpeaker(&_speakerGameText); + + _speakerQText._npc = &_globals->_player; + _speakerSText._npc = &_hotspot5; + _speakerMText._npc = &_hotspot3; + + _stripManager.setCallback(this); + + _hotspot5.postInit(); + _hotspot5.setVisage(2840); + _hotspot5.setPosition(Common::Point(50, 235)); + + _hotspot8.postInit(); + _hotspot8.setVisage(2840); + _hotspot8.setStrip(2); + _hotspot8.setPosition(Common::Point(96, 184)); + _hotspot8.fixPriority(236); + + _globals->_player.postInit(); + _globals->_player.setVisage(2640); + _globals->_player.setFrame2(3); + _globals->_player.setPosition(Common::Point(110, 233)); + _globals->_player.disableControl(); + + switch (_globals->_sceneManager._previousScene) { + case 2150: + _hotspot5.remove(); + _hotspot8.remove(); + break; + case 4000: + _globals->_soundHandler.play(100); + _globals->_soundHandler.holdAt(true); + _globals->_player.remove(); + _hotspot5.remove(); + _hotspot8.remove(); + + _hotspot1.postInit(); + _hotspot1.setVisage(2202); + _hotspot1.setPosition(Common::Point(175, 173)); + _hotspot1.fixPriority(99); + + _hotspot3.postInit(); + _hotspot3.setVisage(2202); + _hotspot3._strip = 2; + _hotspot3.setPosition(Common::Point(152, 76)); + _hotspot3.fixPriority(100); + + _hotspot4.postInit(); + _hotspot4.setVisage(2202); + _hotspot4._strip = 3; + _hotspot4.setPosition(Common::Point(115, 76)); + _hotspot4.fixPriority(200); + + setAction(&_action1); + break; + case 2310: + default: + RING_INVENTORY._infoDisk._sceneNumber = 1; + + _hotspot3.postInit(); + _hotspot3.setVisage(2215); + _hotspot3.setPosition(Common::Point(144, 132)); + _globals->_sceneItems.push_back(&_hotspot3); + + _hotspot4.postInit(); + _hotspot4.setVisage(2215); + _hotspot4._strip = 2; + _hotspot4.setPosition(Common::Point(120, 78)); + _hotspot4.fixPriority(255); + _globals->_sceneItems.push_back(&_hotspot4); + + _soundHandler1.play(101); + _soundHandler2.play(100); + _globals->_soundHandler.holdAt(true); + + _globals->_sceneItems.push_back(&_hotspot5); + setAction(&_action2); + break; + } + + _exitRect = Rect(0, 0, 35, SCREEN_HEIGHT); + _hotspot9.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot10.setBounds(Rect(87, 43, 149, 109)); + + _globals->_sceneItems.addItems(&_hotspot10, &_hotspot9, NULL); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; +} + +void Scene2200::stripCallback(int v) { + switch (v) { + case 1: + _hotspot4.setStrip(3); + _hotspot4.animate(ANIM_MODE_7, 0, NULL); + break; + case 2: + _hotspot4.setStrip(4); + _hotspot4.animate(ANIM_MODE_NONE, NULL); + break; + } +} + +void Scene2200::synchronize(Serializer &s) { + Scene::synchronize(s); + _exitRect.synchronize(s); +} + +void Scene2200::signal() { + if ((_sceneMode == 2201) || (_sceneMode == 2202)) + _globals->_player._uiEnabled = true; +} + +void Scene2200::dispatch() { + Scene::dispatch(); + + if (!_action) { + if (_exitRect.contains(_globals->_player._position)) + _globals->_sceneManager.changeScene(2150); + } +} + +/*-------------------------------------------------------------------------- + * Scene 2222 - Stasis Field Map + * + *--------------------------------------------------------------------------*/ + +void Scene2222::Action1::signal() { + Scene2222 *scene = (Scene2222 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + scene->_stripManager.start(2222, this); + break; + case 2: + setDelay(30); + break; + case 3: + _globals->_sceneManager.changeScene(1000); + break; + } +} + +void Scene2222::Action2::signal() { + Scene2222 *scene = (Scene2222 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + scene->_stripManager.start(5700, this); + break; + case 2: + setDelay(120); + break; + case 3: + _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; + _globals->_sceneManager.changeScene(2100); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene2222::postInit(SceneObjectList *OwnerList) { + loadScene((_globals->_sceneManager._previousScene == 2000) ? 3400 : 3450); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSR); + _stripManager.addSpeaker(&_speakerML); + + _hotspot1.postInit(); + _hotspot1.setVisage(3401); + _hotspot1.setStrip2(1); + _hotspot1._frame = 1; + _hotspot1.animate(ANIM_MODE_2, 0); + + _hotspot2.postInit(); + _hotspot2.setVisage(3401); + _hotspot2.setStrip2(2); + _hotspot2._frame = 2; + _hotspot2.animate(ANIM_MODE_2, 0); + + _hotspot3.postInit(); + _hotspot3.setVisage(3401); + _hotspot3.setStrip2(2); + _hotspot3._frame = 3; + _hotspot3.animate(ANIM_MODE_2, 0); + + _hotspot4.postInit(); + _hotspot4.setVisage(3401); + _hotspot4.setStrip2(2); + _hotspot4._frame = 4; + _hotspot4.animate(ANIM_MODE_2, 0); + + _hotspot5.postInit(); + _hotspot5.setVisage(3401); + _hotspot5.setStrip2(2); + _hotspot5.setFrame(5); + _hotspot5.animate(ANIM_MODE_2, 0); + + if (_globals->_sceneManager._previousScene == 2100) { + _hotspot1.setPosition(Common::Point(61, 101)); + _hotspot2.setPosition(Common::Point(239, 149)); + _hotspot3.setPosition(Common::Point(184, 85)); + _hotspot4.setPosition(Common::Point(105, 165)); + _hotspot5.remove(); + + setAction(&_action2); + } else { + _hotspot1.setPosition(Common::Point(110, 108)); + _hotspot2.setPosition(Common::Point(175, 136)); + _hotspot3.setPosition(Common::Point(162, 96)); + _hotspot4.setPosition(Common::Point(118, 141)); + _hotspot5.setPosition(Common::Point(124, 107)); + + setAction(&_action1); + } + + _soundHandler.play(116); + _globals->_sceneManager._scene->_sceneBounds.center(_hotspot1._position); + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; +} + + +/*-------------------------------------------------------------------------- + * Scene 2230 - Starcraft - Quinn's Room + * + *--------------------------------------------------------------------------*/ + +void Scene2230::Action1::signal() { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + switch (scene->_field30A) { + case 1: + scene->setAction(&scene->_action3); + break; + case 2: + scene->setAction(&scene->_action6); + break; + default: + setDelay(10); + break; + } + break; + case 1: { + Common::Point pt(84, 74); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + scene->_hotspot1.animate(ANIM_MODE_5, this); + break; + case 3: { + Common::Point pt(63, 60); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 4: + scene->_hotspot1.animate(ANIM_MODE_6, this); + break; + case 5: + _globals->_sceneManager.changeScene(2150); + break; + } +} + +void Scene2230::Action2::signal() { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + switch (scene->_field30A) { + case 2: + scene->setAction(&scene->_action6, this); + break; + default: + setDelay(10); + break; + } + break; + case 1: { + _globals->_player.disableControl(); + scene->_field30A = 1; + _globals->_player._regionBitList |= ~0x80; + Common::Point pt(160, 96); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_player.setVisage(2235); + _globals->_player.setStrip2(1); + _globals->_player.fixPriority(100); + _globals->_player._frame = 1; + _globals->_player.setPosition(Common::Point(200, 68)); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 3: + scene->_soundHandler.play(157); + _globals->_player._moveDiff = Common::Point(1, 1); + _globals->_player.setAction(&scene->_action4); + _globals->_player._uiEnabled = true; + + _globals->_events.setCursor(CURSOR_USE); + remove(); + break; + } +} + +void Scene2230::Action3::signal() { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.setAction(NULL); + _globals->_player._moveDiff = Common::Point(5, 3); + _globals->_player.setStrip2(_globals->_player._strip); + + Common::Point pt(190, 74); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + + scene->_soundHandler.stop(); + break; + } + case 1: + _globals->_player._strip = 3; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + _globals->_player._regionBitList |= 0x80; + scene->_field30A = 0; + + _globals->_player.setVisage(0); + _globals->_player.setStrip2(-1); + _globals->_player.fixPriority(-1); + _globals->_player.setPosition(Common::Point(164, 96)); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player._canWalk = true; + + _globals->_events.setCursor(CURSOR_USE); + remove(); + } +} + +void Scene2230::Action4::signal() { + switch (_actionIndex++) { + case 0: + Common::Point pt(190 + _globals->_randomSource.getRandomNumber(9), 68); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + _actionIndex = 0; + break; + } +} + +void Scene2230::Action5::signal() { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + switch (scene->_field30A) { + case 2: + scene->setAction(&scene->_action3, this); + break; + default: + setDelay(10); + break; + } + break; + case 1: { + _globals->_player.disableControl(); + Common::Point pt(209, 124); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_player.fixPriority(1430); + _globals->_player.setVisage(2232); + _globals->_player._strip = 1; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 3: + _globals->_events.setCursor(CURSOR_USE); + _globals->_player._uiEnabled = true; + scene->_field30A = 2; + remove(); + break; + } +} + +void Scene2230::Action6::signal() { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player._strip = 2; + _globals->_player._frame = 1; + _globals->_player.fixPriority(-1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 1: + scene->_field30A = 0; + _globals->_player.setVisage(0); + _globals->_player._strip = 1; + _globals->_player._canWalk = true; + _globals->_player.animate(ANIM_MODE_1, NULL); + remove(); + break; + } +} + +void Scene2230::Action7::signal() { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + + switch (scene->_field30A) { + case 1: + scene->setAction(&scene->_action3, this); + break; + case 2: + scene->setAction(&scene->_action6, this); + break; + default: + setDelay(10); + break; + } + break; + case 1: { + Common::Point pt(140, 119); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_soundHandler.play(158); + scene->_hotspot8.setStrip2(2); + + Common::Point pt(scene->_hotspot8._position.x, 97); + NpcMover *mover = new NpcMover(); + scene->_hotspot8.addMover(mover, &pt, this); + break; + } + case 3: + scene->_hotspot2.postInit(); + scene->_hotspot2.setVisage(2231); + scene->_hotspot2._strip = 3; + scene->_hotspot2.setPosition(Common::Point(166, 116)); + scene->_hotspot2.fixPriority(131); + scene->_hotspot2.animate(ANIM_MODE_5, this); + + scene->_hotspot8._frame = 2; + break; + case 4: + _globals->_sceneItems.push_front(&scene->_hotspot10); + _globals->_sceneItems.push_front(&scene->_hotspot11); + _globals->_sceneItems.push_front(&scene->_hotspot12); + + scene->_hotspot2.remove(); + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene2230::Action8::signal() { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + + switch (scene->_field30A) { + case 1: + scene->setAction(&scene->_action3, this); + break; + case 2: + scene->setAction(&scene->_action6, this); + break; + default: + setDelay(10); + break; + } + break; + case 1: { + Common::Point pt(140, 119); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: { + _globals->_sceneItems.remove(&scene->_hotspot10); + _globals->_sceneItems.remove(&scene->_hotspot11); + _globals->_sceneItems.remove(&scene->_hotspot12); + + switch (scene->_field30A) { + case 1: + scene->setAction(&scene->_action3, this); + break; + case 2: + scene->setAction(&scene->_action6, this); + break; + default: + setDelay(10); + break; + } + break; + } + case 3: + scene->_hotspot2.postInit(); + scene->_hotspot2.setVisage(2231); + scene->_hotspot2._strip = 3; + scene->_hotspot2._frame = scene->_hotspot2.getFrameCount(); + scene->_hotspot2.setPosition(Common::Point(166, 116)); + scene->_hotspot2.fixPriority(131); + scene->_hotspot2.animate(ANIM_MODE_6, this); + break; + case 4: { + scene->_soundHandler.play(158); + scene->_hotspot2.remove(); + scene->_hotspot8._frame = 1; + + Common::Point pt(scene->_hotspot8._position.x, 133); + NpcMover *mover = new NpcMover(); + scene->_hotspot8.addMover(mover, &pt, this); + break; + } + case 5: + scene->_hotspot8.setStrip2(1); + _globals->_player.enableControl(); + + remove(); + break; + } +} + + +/*--------------------------------------------------------------------------*/ + +void Scene2230::Hotspot1::doAction(int action) { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2230, 0); + break; + case CURSOR_USE: + scene->setAction(&scene->_action1); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot3::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(4)) + SceneItem::display2(2230, 1); + else { + SceneItem::display2(2230, 1); + SceneItem::display2(2230, 2); + SceneItem::display2(2230, 3); + _globals->setFlag(4); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot4::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(30)) + SceneItem::display2(2230, 6); + else if (_globals->getFlag(29)) { + SceneItem::display2(2230, 5); + _globals->setFlag(30); + } else { + SceneItem::display2(2230, 4); + _globals->setFlag(29); + } + break; + case CURSOR_USE: + SceneItem::display2(2230, 7); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot5::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(5)) + SceneItem::display2(2230, 9); + else { + _globals->setFlag(5); + SceneItem::display2(2230, 8); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot6::doAction(int action) { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(6)) + SceneItem::display2(2230, 11); + else { + _globals->setFlag(6); + SceneItem::display2(2230, 10); + } + break; + case CURSOR_USE: + if (scene->_field30A == 1) + scene->setAction(&scene->_action3); + else if (_globals->getFlag(13)) + SceneItem::display2(2230, 28); + else + scene->setAction(&scene->_action2); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot7::doAction(int action) { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(7)) + SceneItem::display2(2230, 13); + else { + _globals->setFlag(6); + SceneItem::display2(2230, 12); + } + break; + case CURSOR_USE: + if (scene->_field30A == 2) + scene->setAction(&scene->_action6); + else if (_globals->getFlag(13)) + SceneItem::display2(2230, 29); + else + scene->setAction(&scene->_action5); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot8::doAction(int action) { + Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (scene->_hotspot8._strip == 1) { + if (_globals->getFlag(22)) + SceneItem::display2(2230, 19); + else { + _globals->setFlag(22); + SceneItem::display2(2230, 14); + } + } else { + if (_globals->getFlag(25)) + SceneItem::display2(2230, 21); + else { + _globals->setFlag(25); + SceneItem::display2(2230, 20); + } + } + break; + case CURSOR_USE: + if (scene->_hotspot8._strip == 1) + scene->setAction(&scene->_action7); + else + scene->setAction(&scene->_action8); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot10::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(26)) + SceneItem::display2(2230, 25); + else { + _globals->setFlag(26); + SceneItem::display2(2230, 24); + } + break; + case CURSOR_USE: + SceneItem::display2(2230, 28); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot11::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(27)) + SceneItem::display2(2230, 23); + else { + _globals->setFlag(27); + SceneItem::display2(2230, 22); + } + break; + case CURSOR_USE: + SceneItem::display2(2230, 28); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2230::Hotspot12::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(28)) + SceneItem::display2(2230, 27); + else { + _globals->setFlag(28); + SceneItem::display2(2230, 26); + } + break; + case CURSOR_USE: + SceneItem::display2(2230, 28); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene2230::Scene2230() : + _hotspot9(0, CURSOR_LOOK, 2230, 16, CURSOR_USE, 2230, 18, LIST_END) { +} + +void Scene2230::postInit(SceneObjectList *OwnerList) { + loadScene(2230); + Scene::postInit(); + setZoomPercents(75, 80, 120, 100); + + _hotspot1.postInit(); + _hotspot1.setVisage(2230); + _hotspot1._frame = 1; + _hotspot1.animate(ANIM_MODE_NONE, 0); + _hotspot1.setPosition(Common::Point(72, 69)); + _hotspot1.changeZoom(100); + + _hotspot8.postInit(); + _hotspot8.setVisage(2231); + _hotspot8._frame = 1; + _hotspot8.animate(ANIM_MODE_NONE, 0); + _hotspot8.setPosition(Common::Point(164, 133)); + _hotspot8.changeZoom(100); + _hotspot8.fixPriority(129); + + _rect1 = Rect(59, 64, 89, 74); + + _globals->_player.postInit(); + _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0); + _globals->_player.animate(ANIM_MODE_1, 0); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(80, 80)); + _globals->_player._moveDiff.y = 3; + _globals->_player._regionBitList |= 0x80; + _globals->_player.changeZoom(-1); + + _field30A = 0; + _globals->_player.enableControl(); + + _hotspot5.setBounds(Rect(108, 34, 142, 76)); + _hotspot4.setBounds(Rect(92, 14, 106, 57)); + _hotspot6.setBounds(Rect(169, 58, 261, 95)); + _hotspot7.setBounds(Rect(111, 117, 222, 158)); + _hotspot3.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot10.setBounds(Rect(170, 96, 176, 106)); + _hotspot11.setBounds(Rect(158, 109, 164, 115)); + _hotspot12.setBounds(Rect(170, 109, 177, 115)); + + _globals->_sceneItems.addItems(&_hotspot8, &_hotspot5, &_hotspot4, &_hotspot6, &_hotspot7, + &_hotspot1, &_hotspot3, NULL); + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; +} + +void Scene2230::synchronize(Serializer &s) { + Scene::synchronize(s); + _rect1.synchronize(s); + s.syncAsSint16LE(_field30A); +} + +void Scene2230::dispatch() { + Scene::dispatch(); + + if (!_action) { + if (_rect1.contains(_globals->_player._position)) + setAction(&_action1); + } +} + +/*-------------------------------------------------------------------------- + * Scene 2280 - Starcraft - Storage Room + * + *--------------------------------------------------------------------------*/ + +void Scene2280::Action1::signal() { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + Common::Point pt(192, 97); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + scene->_soundHandler.play(162); + scene->_hotspot16.animate(ANIM_MODE_5, this); + break; + case 2: { + Common::Point pt(218, 87); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: + _globals->_player.setStrip(3); + setDelay(10); + break; + case 4: + _globals->_player.fixPriority(1); + scene->_soundHandler.play(162); + scene->_hotspot16.animate(ANIM_MODE_6, this); + break; + case 5: + _globals->_sceneManager.changeScene(7000); + break; + } +} + +void Scene2280::Action2::signal() { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + Common::Point pt(94, 117); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + scene->_soundHandler.play(265); + + _globals->_player.setVisage(2162); + _globals->_player._frame = 1; + _globals->_player._strip = 1; + _globals->_player.animate(ANIM_MODE_5, this); + + scene->_hotspot8.remove(); + scene->_hotspot10.remove(); + break; + case 2: + _globals->_player._frame = 1; + _globals->_player._strip = 2; + _globals->_player.animate(ANIM_MODE_4, 3, 1, this); + break; + case 3: + _globals->_player.animate(ANIM_MODE_5, this); + scene->_hotspot12.remove(); + break; + case 4: + scene->_soundHandler.play(266); + _globals->_player.setVisage(2170); + _globals->_player._frame = 1; + _globals->_player._strip = 4; + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player._moveDiff = Common::Point(4, 1); + + _globals->setFlag(13); + SceneItem::display2(2280, 37); + + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene2280::Action3::signal() { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + Common::Point pt(94, 117); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + scene->_soundHandler.play(265); + + _globals->_player.setVisage(2162); + _globals->_player._frame = 6; + _globals->_player._strip = 2; + _globals->_player.animate(ANIM_MODE_4, 3, -1, this); + break; + case 2: + scene->_hotspot12.postInit(); + scene->_hotspot12.setVisage(2280); + scene->_hotspot12._strip = 2; + scene->_hotspot12._frame = 3; + scene->_hotspot12.setPosition(Common::Point(88, 76)); + scene->_hotspot12.fixPriority(1); + + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 3: + _globals->_player._strip = 1; + _globals->_player._frame = 12; + + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 4: + scene->_hotspot8.postInit(); + scene->_hotspot8.setVisage(2280); + scene->_hotspot8._strip = 2; + scene->_hotspot8._frame = 1; + scene->_hotspot8.animate(ANIM_MODE_NONE, NULL); + scene->_hotspot8.setPosition(Common::Point(79, 108)); + scene->_hotspot8.changeZoom(100); + scene->_hotspot8.fixPriority(1); + + scene->_hotspot10.postInit(); + scene->_hotspot10.setVisage(2280); + scene->_hotspot10._strip = 2; + scene->_hotspot10._frame = 2; + scene->_hotspot10.animate(ANIM_MODE_NONE, NULL); + scene->_hotspot10.setPosition(Common::Point(79, 104)); + scene->_hotspot10.changeZoom(100); + scene->_hotspot10.fixPriority(1); + + _globals->clearFlag(13); + + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player._strip = 4; + _globals->_player._moveDiff = Common::Point(3, 5); + + SceneItem::display2(2280, 38); + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene2280::Action4::signal() { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + switch (_state) { + case 1: + case 51: { + Common::Point pt(163, 67); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: + case 50: { + Common::Point pt(173, 63); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + } + break; + } + case 1: + _globals->_player.setVisage(2161); + _globals->_player._strip = 1; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + switch (_state) { + case 1: + scene->_hotspot18.remove(); + RING_INVENTORY._scanner._sceneNumber = 1; + break; + case 6: + scene->_hotspot17.remove(); + RING_INVENTORY._medkit._sceneNumber = 1; + break; + case 50: + scene->_hotspot17.postInit(); + scene->_hotspot17.setVisage(2161); + scene->_hotspot17._strip = 2; + scene->_hotspot17._frame = 1; + scene->_hotspot17.animate(ANIM_MODE_NONE, NULL); + scene->_hotspot17.setPosition(Common::Point(162, 39)); + scene->_hotspot17.changeZoom(100); + scene->_hotspot17.fixPriority(1); + + RING_INVENTORY._medkit._sceneNumber = 2280; + _globals->_sceneItems.push_front(&scene->_hotspot17); + break; + case 51: + scene->_hotspot18.postInit(); + scene->_hotspot18.setVisage(2161); + scene->_hotspot18._strip = 2; + scene->_hotspot18._frame = 2; + scene->_hotspot18.animate(ANIM_MODE_NONE, NULL); + scene->_hotspot18.setPosition(Common::Point(152, 43)); + scene->_hotspot18.changeZoom(100); + scene->_hotspot18.fixPriority(1); + + RING_INVENTORY._scanner._sceneNumber = 2280; + _globals->_sceneItems.push_front(&scene->_hotspot18); + break; + } + + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 3: + _globals->_player.enableControl(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player._strip = 2; + + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene2280::Hotspot1::doAction(int action) { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(16)) + SceneItem::display2(2280, 22); + else { + _globals->setFlag(16); + SceneItem::display2(2230, 21); + } + break; + case CURSOR_USE: + if (!_globals->getFlag(15)) + SceneItem::display2(2280, 23); + else if (!_globals->getFlag(13)) + SceneItem::display2(2280, 46); + else { + _globals->_player.disableControl(); + scene->setAction(&scene->_action1); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot2::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(2)) + SceneItem::display2(2280, 1); + else { + _globals->setFlag(2); + SceneItem::display2(2280, 0); + } + break; + case CURSOR_USE: + SceneItem::display2(2280, 2); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot4::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(21)) + SceneItem::display2(2280, 33); + else { + _globals->setFlag(21); + SceneItem::display2(2280, 32); + } + break; + case CURSOR_USE: + SceneItem::display2(2280, 34); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot7::doAction(int action) { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2280, 24); + break; + case OBJECT_SCANNER: + if (_globals->getFlag(13)) + SceneItem::display2(2280, 43); + else { + _globals->_player.disableControl(); + scene->_action4._state = 51; + _globals->_events.setCursor(CURSOR_WALK); + _globals->_events._currentCursor = CURSOR_700; + scene->setAction(&scene->_action4); + } + break; + case OBJECT_MEDKIT: + if (_globals->getFlag(13)) + SceneItem::display2(2280, 43); + else { + _globals->_player.disableControl(); + scene->_action4._state = 50; + _globals->_events.setCursor(CURSOR_WALK); + _globals->_events._currentCursor = CURSOR_700; + scene->setAction(&scene->_action4); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot8::doAction(int action) { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2280, 3); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->setAction(&scene->_action2); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot10::doAction(int action) { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2280, 4); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->setAction(&scene->_action2); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot12::doAction(int action) { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2280, 11); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->setAction(&scene->_action2); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot14::doAction(int action) { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2280, 3); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + if (_globals->getFlag(13)) + scene->setAction(&scene->_action3); + else + scene->setAction(&scene->_action2); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot17::doAction(int action) { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(18)) + SceneItem::display2(2280, 26); + else { + _globals->setFlag(18); + SceneItem::display2(2280, 25); + } + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2280, 29); + else { + _globals->_player.disableControl(); + scene->_action4._state = 6; + scene->setAction(&scene->_action4); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2280::Hotspot18::doAction(int action) { + Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(19)) + SceneItem::display2(2280, 28); + else { + _globals->setFlag(19); + SceneItem::display2(2280, 27); + } + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2280, 29); + else { + _globals->_player.disableControl(); + scene->_action4._state = 1; + scene->setAction(&scene->_action4); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene2280::Scene2280() : + _hotspot3(0, CURSOR_LOOK, 2280, 30, CURSOR_USE, 2280, 31, LIST_END), + _hotspot5(0, CURSOR_LOOK, 2280, 35, CURSOR_USE, 2280, 36, LIST_END), + _hotspot6(0, CURSOR_LOOK, 2280, 19, CURSOR_USE, 2280, 20, LIST_END), + _hotspot9(0, CURSOR_LOOK, 2280, 5, CURSOR_USE, 2280, 6, LIST_END), + _hotspot11(0, CURSOR_LOOK, 2280, 7, CURSOR_USE, 2280, 8, LIST_END), + _hotspot13(0, CURSOR_LOOK, 2280, 9, CURSOR_USE, 2280, 10, LIST_END), + _hotspot15(0, CURSOR_LOOK, 2280, 45, LIST_END), + _hotspot16(0, CURSOR_LOOK, 2280, 16, CURSOR_USE, 2280, 42, LIST_END) { +} + +void Scene2280::postInit(SceneObjectList *OwnerList) { + loadScene(2280); + Scene::postInit(); + setZoomPercents(0, 70, 200, 100); + + _hotspot16.postInit(); + _hotspot16.setVisage(2281); + _hotspot16.setPosition(Common::Point(208, 90)); + _hotspot16.fixPriority(80); + + if (RING_INVENTORY._medkit._sceneNumber == 2280) { + _hotspot17.postInit(); + _hotspot17.setVisage(2161); + _hotspot17._strip = 2; + _hotspot17.setPosition(Common::Point(162, 39)); + _hotspot17.fixPriority(1); + + _globals->_sceneItems.push_back(&_hotspot17); + } + + if (RING_INVENTORY._scanner._sceneNumber == 2280) { + _hotspot18.postInit(); + _hotspot18.setVisage(2161); + _hotspot18._strip = 2; + _hotspot18._frame = 2; + _hotspot17.setPosition(Common::Point(152, 43)); + _hotspot17.fixPriority(1); + + _globals->_sceneItems.push_back(&_hotspot17); + } + + if (!_globals->getFlag(13)) { + _hotspot8.postInit(); + _hotspot8.setVisage(2280); + _hotspot8._strip = 2; + _hotspot8.setPosition(Common::Point(79, 108)); + _hotspot8.fixPriority(1); + + _hotspot10.postInit(); + _hotspot10.setVisage(2280); + _hotspot10._strip = 2; + _hotspot10._frame = 2; + _hotspot10.setPosition(Common::Point(79, 104)); + _hotspot10.fixPriority(2); + + _hotspot12.postInit(); + _hotspot12.setVisage(2280); + _hotspot12._strip = 2; + _hotspot12._frame = 3; + _hotspot12.setPosition(Common::Point(88, 76)); + _hotspot12.fixPriority(1); + + _globals->_sceneItems.addItems(&_hotspot8, &_hotspot10, &_hotspot12, NULL); + } + + _hotspot14.setBounds(Rect(70, 50, 90, 104)); + + _hotspot9.postInit(); + _hotspot9.setVisage(2280); + _hotspot9.setPosition(Common::Point(104, 96)); + _hotspot9.fixPriority(1); + + _hotspot11.postInit(); + _hotspot11.setVisage(2280); + _hotspot11._frame = 2; + _hotspot11.setPosition(Common::Point(130, 79)); + _hotspot11.fixPriority(1); + + _hotspot13.postInit(); + _hotspot13.setVisage(2280); + _hotspot13._frame = 3; + _hotspot13.setPosition(Common::Point(113, 63)); + _hotspot13.fixPriority(1); + + _hotspot1.setBounds(Rect(225, 70, 234, 80)); + _hotspot2.setBounds(Rect(44, 78, 56, 105)); + _hotspot3.setBounds(Rect(47, 108, 56, 117)); + _hotspot4.setBounds(Rect(56, 78, 69, 101)); + _hotspot5.setBounds(Rect(56, 108, 66, 113)); + _hotspot6.setBounds(Rect(261, 39, 276, 90)); + _hotspot7.setBounds(Rect(142, 19, 174, 38)); + _hotspot15.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + + _exitRect = Rect(145, 180, 195, 195); + + _globals->_player.postInit(); + _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(146, 161)); + _globals->_player.changeZoom(-1); + _globals->_player._moveDiff = Common::Point(4, 3); + + if ((_globals->_sceneManager._previousScene != 7300) && (_globals->_sceneManager._previousScene != 7000)) { + _globals->_player.enableControl(); + } else { + _globals->setFlag(109); + _globals->_player.fixPriority(76); + _globals->_player.disableControl(); + + _sceneMode = 2281; + setAction(&_sequenceManager, this, 2281, &_globals->_player, &_hotspot16, NULL); + + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + } + + _globals->_sceneItems.addItems(&_hotspot13, &_hotspot11, &_hotspot9, &_hotspot14, &_hotspot7, + &_hotspot6, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot1, &_hotspot16, &_hotspot15, NULL); + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; +} + +void Scene2280::signal() { + if (_sceneMode == 2281) { + _globals->_player.fixPriority(-1); + _globals->_player.enableControl(); + } +} + +void Scene2280::dispatch() { + Scene::dispatch(); + if (!_action) { + if (_exitRect.contains(_globals->_player._position)) + _globals->_sceneManager.changeScene(2150); + } +} + +void Scene2280::synchronize(Serializer &s) { + Scene::synchronize(s); + _exitRect.synchronize(s); +} + +/*-------------------------------------------------------------------------- + * Scene 2300 - Starcraft - Hanger Bay + * + *--------------------------------------------------------------------------*/ + +void Scene2300::Action1::signal() { + // Quinn and Seeker + Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: { + Common::Point pt(SCREEN_WIDTH, SCREEN_HEIGHT); + NpcMover *mover = new NpcMover(); + scene->_hotspot2.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_hotspot8.setAction(&scene->_action4); + scene->_soundHandler2.play(21); + + Common::Point pt1(95, scene->_hotspot5._position.y); + NpcMover *mover1 = new NpcMover(); + scene->_hotspot5.addMover(mover1, &pt1, this); + + Common::Point pt2(99, scene->_hotspot6._position.y); + NpcMover *mover2 = new NpcMover(); + scene->_hotspot6.addMover(mover2, &pt2, NULL); + break; + } + case 3: + setDelay(2); + _globals->_player._uiEnabled = true; + _globals->_events.setCursor(CURSOR_WALK); + break; + case 4: { + scene->_hotspot5.setVisage(93); + scene->_hotspot6.setVisage(94); + scene->_hotspot5.setStrip(1); + scene->_hotspot6.setStrip(1); + scene->_hotspot5.changeZoom(50); + scene->_hotspot6.changeZoom(50); + scene->_hotspot5._moveDiff.x = 5; + scene->_hotspot6._moveDiff.x = 5; + scene->_hotspot5.animate(ANIM_MODE_1, NULL); + scene->_hotspot6.animate(ANIM_MODE_1, NULL); + + Common::Point pt1(178, 147); + NpcMover *mover1 = new NpcMover(); + scene->_hotspot5.addMover(mover1, &pt1, this); + + Common::Point pt2(170, 145); + NpcMover *mover2 = new NpcMover(); + scene->_hotspot6.addMover(mover2, &pt2, this); + break; + } + case 6: + scene->_soundHandler1.play(28); + _globals->_player.disableControl(); + + scene->_hotspot2.setVisage(40); + scene->_hotspot2.setStrip(4); + scene->_hotspot2.setFrame(1); + scene->_hotspot2.animate(ANIM_MODE_5, NULL); + + _globals->_player.setVisage(40); + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 7: + _globals->_soundHandler.play(77, this); + break; + case 8: + _globals->_game->endGame(2300, 0); + remove(); + break; + case 9: + if (scene->_hotspot5._mover) + scene->_hotspot5.addMover(NULL); + if (scene->_hotspot6._mover) + scene->_hotspot6.addMover(NULL); + + scene->_hotspot5.animate(ANIM_MODE_NONE, NULL); + scene->_hotspot6.animate(ANIM_MODE_NONE, NULL); + + _globals->_player.disableControl(); + _globals->_player.setVisage(2672); + _globals->_player._strip = 5; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 10: + _globals->_player.setVisage(2674); + _globals->_player._strip = 5; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 11: + scene->_soundHandler1.play(28); + + scene->_hotspot5._strip = 2; + scene->_hotspot6._strip = 2; + scene->_hotspot5._frame = 1; + scene->_hotspot6._frame = 1; + scene->_hotspot5.animate(ANIM_MODE_5, NULL); + scene->_hotspot6.animate(ANIM_MODE_5, NULL); + scene->_hotspot5.fixPriority(20); + scene->_hotspot6.fixPriority(20); + + _globals->_player.setVisage(2672); + _globals->_player._strip = 5; + _globals->_player._frame = _globals->_player.getFrameCount(); + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 12: + scene->_soundHandler1.play(77); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip(4); + _globals->_player._uiEnabled = false; + setDelay(60); + break; + case 13: + scene->_stripManager.start(2300, this); + break; + case 14: + setDelay(5); + _actionIndex = 16; + break; + case 15: { + Common::Point pt1(101, 148); + PlayerMover *mover1 = new PlayerMover(); + _globals->_player.addMover(mover1, &pt1, this); + + Common::Point pt2(scene->_hotspot5._position.x + 5, scene->_hotspot5._position.y + 5); + NpcMover *mover2 = new NpcMover(); + scene->_hotspot2.addMover(mover2, &pt2, NULL); + break; + } + case 16: + _globals->_sceneManager.changeScene(2000); + remove(); + break; + } +} + +void Scene2300::Action2::signal() { + // Miranda tearing cables + Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(30); + break; + case 1: { + Common::Point pt(153, 135); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(2030, this); + break; + case 3: + _globals->_player.enableControl(); + setDelay(600); + break; + case 4: { + _globals->_player.disableControl(); + + scene->_hotspot2.postInit(); + scene->_hotspot2.setVisage(2801); + scene->_hotspot2.setPosition(Common::Point(109, 145)); + scene->_hotspot2.changeZoom(50); + scene->_hotspot2.animate(ANIM_MODE_1, NULL); + scene->_hotspot2.setObjectWrapper(new SceneObjectWrapper()); + + Common::Point pt(160, 145); + NpcMover *mover = new NpcMover(); + scene->_hotspot2.addMover(mover, &pt, this); + break; + } + case 5: + scene->_stripManager.start(2032, this); + break; + case 6: + scene->_hotspot2.setVisage(93); + scene->_hotspot2.setStrip(3); + scene->_hotspot2.setFrame(1); + scene->_hotspot2.animate(ANIM_MODE_5, this); + + scene->_soundHandler1.play(28); + scene->_soundHandler2.play(97); + break; + case 7: + scene->_hotspot7._strip = 2; + scene->_hotspot7._frame = 1; + scene->_hotspot7.animate(ANIM_MODE_5, this); + break; + case 8: + scene->_hotspot2.animate(ANIM_MODE_6, this); + break; + case 9: + scene->_stripManager.start(2035, this); + break; + case 10: + _globals->_sceneManager.changeScene(2310); + break; + } +} + +void Scene2300::Action3::signal() { + // Stunned Miranda + Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + Common::Point pt(153, 135); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + _globals->_player.disableControl(); + _globals->_player.setVisage(2672); + _globals->_player._strip = 2; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + _globals->_player.setVisage(2674); + _globals->_player._strip = 2; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 3: + scene->_soundHandler1.play(97); + scene->_soundHandler2.play(28); + + scene->_hotspot7._strip = 2; + scene->_hotspot7._frame = 1; + scene->_hotspot7.animate(ANIM_MODE_5, this); + + _globals->_player.setVisage(2672); + _globals->_player._strip = 2; + _globals->_player._frame = _globals->_player.getFrameCount(); + _globals->_player.animate(ANIM_MODE_6, NULL); + break; + case 4: + scene->_soundHandler2.play(97); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip(1); + scene->_stripManager.start(2034, this); + break; + case 5: + setDelay(10); + break; + case 6: + _globals->_sceneManager.changeScene(2310); + break; + } +} + +void Scene2300::Action4::signal() { + // Ennemies coming + Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_hotspot8.animate(ANIM_MODE_5, this); + scene->_soundHandler1.play(11); + break; + case 1: + scene->_hotspot9.postInit(); + scene->_hotspot9.setVisage(2301); + scene->_hotspot9.setStrip2(2); + scene->_hotspot9.setFrame(3); + scene->_hotspot9.setPosition(Common::Point(273, 199)); + scene->_hotspot9.fixPriority(19); + scene->_hotspot9.animate(ANIM_MODE_5, this); + scene->_soundHandler1.play(11); + break; + case 2: + scene->_hotspot8.remove(); + + scene->_hotspot10.postInit(); + scene->_hotspot10.setVisage(2301); + scene->_hotspot10.setStrip(3); + scene->_hotspot10.setFrame(4); + scene->_hotspot10.setPosition(Common::Point(292, 113)); + scene->_hotspot10.animate(ANIM_MODE_5, this); + scene->_soundHandler1.play(11); + break; + case 3: + scene->_soundHandler1.play(13); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene2300::Hotspot5::doAction(int action) { + // Ennemies + Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + _globals->_player.disableControl(); + _globals->_player.addMover(NULL); + scene->_action1.setActionIndex(9); + scene->_action1.setDelay(1); + break; + case CURSOR_LOOK: + SceneItem::display2(2300, 3); + break; + case CURSOR_USE: + SceneItem::display2(2300, 4); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2300::Hotspot7::doAction(int action) { + // Miranda + Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + scene->setAction(&scene->_action3); + break; + case CURSOR_LOOK: + SceneItem::display2(2300, 2); + break; + case CURSOR_USE: + SceneItem::display2(2300, 21); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene2300::Scene2300() : + _hotspot11(0, CURSOR_LOOK, 2300, 6, CURSOR_USE, 2300, 14, LIST_END), + _hotspot12(0, CURSOR_LOOK, 2300, 5, CURSOR_USE, 2300, 13, LIST_END), + _hotspot13(0, CURSOR_LOOK, 2300, 9, CURSOR_USE, 2300, 20, LIST_END), + _hotspot14(0, CURSOR_LOOK, 2300, 7, CURSOR_USE, 2300, 15, LIST_END), + _hotspot15(0, CURSOR_LOOK, 2300, 1, LIST_END) { +} + +void Scene2300::postInit(SceneObjectList *OwnerList) { + loadScene(2300); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerSL); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSText); + + RING_INVENTORY._stunner._sceneNumber = 1; + RING_INVENTORY._infoDisk._sceneNumber = 1; + + _hotspot8.postInit(); + _hotspot8.setVisage(2301); + _hotspot8.setPosition(Common::Point(288, 74)); + + _globals->_soundHandler.play(96); + if (_globals->_sceneManager._previousScene == 2000) { + _hotspot8.remove(); + + _hotspot9.postInit(); + _hotspot9.setVisage(2301); + _hotspot9.setStrip2(2); + _hotspot9._frame = _hotspot9.getFrameCount(); + _hotspot9.setPosition(Common::Point(273, 199)); + _hotspot9.fixPriority(1); + + _hotspot10.postInit(); + _hotspot10.setVisage(2301); + _hotspot10.setStrip(3); + _hotspot10._frame = _hotspot10.getFrameCount(); + _hotspot10.setPosition(Common::Point(292, 113)); + + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.setPosition(Common::Point(109, 139)); + _globals->_player.changeZoom(40); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.disableControl(); + + _hotspot7.postInit(); + _hotspot7.setVisage(2302); + _hotspot7.animate(ANIM_MODE_2, NULL); + _hotspot7.setPosition(Common::Point(229, 125)); + _hotspot7._numFrames = 5; + + _soundHandler1.play(95); + _soundHandler2.play(96); + _globals->_sceneItems.push_back(&_hotspot7); + + setAction(&_action2); + } else { + _hotspot8._numFrames = 3; + + _hotspot3.postInit(); + _hotspot3.setVisage(2331); + _hotspot3.setStrip(7); + _hotspot3.setPosition(Common::Point(231, 190)); + _hotspot3.changeZoom(40); + + _hotspot2.postInit(); + _hotspot2.setVisage(2801); + _hotspot2.setPosition(Common::Point(269, 195)); + _hotspot2.changeZoom(50); + _hotspot2.animate(ANIM_MODE_1, NULL); + _hotspot2.setObjectWrapper(new SceneObjectWrapper()); + + _hotspot1.postInit(); + _hotspot1.setVisage(2331); + _hotspot1.setStrip(7); + _hotspot1.setPosition(Common::Point(255, 190)); + _hotspot1.changeZoom(40); + + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.setPosition(Common::Point(203, 191)); + _globals->_player.changeZoom(40); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.disableControl(); + + _hotspot5.postInit(); + _hotspot5.setVisage(91); + _hotspot5.setPosition(Common::Point(343, 145)); + _hotspot5._moveDiff = Common::Point(35, 35); + _hotspot5.changeZoom(40); + _hotspot5.setObjectWrapper(new SceneObjectWrapper()); + + _hotspot6.postInit(); + _hotspot6.setVisage(92); + _hotspot6.setPosition(Common::Point(343, 130)); + _hotspot6._moveDiff = Common::Point(35, 35); + _hotspot6.changeZoom(40); + _hotspot6.setObjectWrapper(new SceneObjectWrapper()); + + _globals->_sceneItems.push_back(&_hotspot5); + setAction(&_action1); + } + + _hotspot12._sceneRegionId = 8; + _hotspot11._sceneRegionId = 9; + _hotspot13._sceneRegionId = 10; + _hotspot14._sceneRegionId = 11; + + _hotspot15.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _globals->_sceneItems.addItems(&_hotspot12, &_hotspot11, &_hotspot13, &_hotspot14, &_hotspot15, NULL); +} + +/*-------------------------------------------------------------------------- + * Scene 2310 - Starcraft - Copy Protection Screen + * + *--------------------------------------------------------------------------*/ + +Scene2310::Scene2310() { + _pageList[0].set(0, 0, 0, 0, 0, 0); + _pageList[1].set(1, 0, 3, 2, 1, 4); + _pageList[2].set(2, 1, 4, 3, 2, 0); + _pageList[3].set(3, 2, 0, 4, 3, 1); + _pageList[4].set(4, 3, 1, 0, 2, 4); + _pageList[5].set(5, 4, 2, 1, 3, 0); + _pageList[6].set(6, 0, 4, 2, 3, 1); + _pageList[7].set(7, 1, 0, 2, 4, 3); + _pageList[8].set(8, 2, 1, 3, 0, 4); + _pageList[9].set(9, 3, 2, 4, 1, 0); + _pageList[10].set(10, 4, 1, 2, 0, 3); + _pageList[11].set(11, 0, 2, 3, 4, 1); + _pageList[12].set(12, 1, 2, 0, 4, 3); + _pageList[13].set(13, 2, 4, 0, 3, 1); + _pageList[14].set(14, 3, 4, 1, 0, 2); + _pageList[15].set(15, 4, 3, 1, 2, 0); + _pageList[16].set(16, 0, 1, 4, 2, 3); + _pageList[17].set(17, 1, 3, 4, 0, 2); + _pageList[18].set(18, 2, 3, 0, 1, 4); + _pageList[19].set(19, 3, 0, 1, 4, 2); + _pageList[20].set(20, 4, 0, 3, 1, 2); + + _rectList[0].set(135, 70, 151, 140); + _rectList[1].set(151, 70, 167, 140); + _rectList[2].set(167, 70, 183, 140); + _rectList[3].set(183, 70, 199, 140); + _rectList[4].set(199, 70, 215, 140); + + _wireIndex = 5; +} + +void Scene2310::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + loadScene(2301); + Common::Point pointList[5] = { Common::Point(142, 82), Common::Point(158, 82), Common::Point(174, 82), + Common::Point(190, 82), Common::Point(205, 82) }; + + for (int idx = 0; idx < 5; ++idx) { + _wireList[idx].postInit(); + _wireList[idx].setVisage(2300); + _wireList[idx]._strip = idx + 1; + _wireList[idx]._frame = 1; + _wireList[idx].setPosition(pointList[idx]); + } + + _globals->_player.disableControl(); + _globals->_events.setCursor(CURSOR_WALK); + + if (_vm->getFeatures() & GF_CD) + _pageIndex = _globals->_randomSource.getRandomNumber(14) + 2; + else + _pageIndex = _globals->_randomSource.getRandomNumber(19) + 1; + signal(); +} + +void Scene2310::signal() { + switch (_sceneMode++) { + case 0: { + Common::String fmtString = _resourceManager->getMessage(2300, 22); + Common::String msg = Common::String::format(fmtString.c_str(), _pageList[_pageIndex]._pageNumber); + + _sceneText._width = 280; + _sceneText._textMode = ALIGN_CENTER; + _sceneText._color1 = 35; + _sceneText._fontNumber = 2; + _sceneText.setup(msg); + _sceneText.fixPriority(255); + _sceneText.setPosition(Common::Point(30, 20)); + break; + } + case 1: { + Common::String msg = _resourceManager->getMessage(2300, 23); + _sceneText.setup(msg); + _sceneText.fixPriority(255); + _sceneText.setPosition(Common::Point(30, 170)); + + _globals->_sceneObjects->draw(); + _globals->_events.waitForPress(); + + _sceneText.hide(); + _globals->_sceneObjects->draw(); + + _globals->_sceneManager.changeScene(2200); + break; + } + } +} + +void Scene2310::synchronize(Serializer &s) { + Scene::synchronize(s); + + s.syncAsSint16LE(_wireIndex); + s.syncAsSint16LE(_pageIndex); +} + +void Scene2310::process(Event &event) { + int frameNum = 0; + + if (!event.handled && (event.eventType == EVENT_BUTTON_DOWN)) { + int idx = 0; + while (idx < 5) { + if (_rectList[idx].contains(event.mousePos)) + break; + ++idx; + } + + if (idx < 5) { + // In handled rectangle area + if (_wireIndex == 5) { + // No wire is currently active, so start moving designated wire + _wireIndex = idx; + frameNum = idx + 2; + + if (event.mousePos.y > 105) + idx = findObject(idx); + + if (idx != 5) { + _wireList[idx].hide(); + _globals->_sceneObjects->draw(); + _wireList[idx].setFrame(frameNum); + + _wireList[idx].show(); + _globals->_sceneObjects->draw(); + } + } else { + // End the moving of the currently active wire + _wireList[_wireIndex].setFrame(idx + 2); + _wireIndex = 5; + + // Check if solution has been reached + int idx2 = 0; + do { + int objIndex = findObject(idx2); + if (_pageList[_pageIndex]._connectionList[idx2] != objIndex) + // Mismatch + break; + } while (++idx2 < 5); + + if (idx2 == 5) + // All the entries are correct + signal(); + } + + event.handled = true; + } else if (_wireIndex != 5) { + // Reset the active wire back to unplugged + _wireList[_wireIndex].setFrame(1); + _wireIndex = 5; + } + } +} + +void Scene2310::dispatch() { + if (_wireIndex != 5) { + for (int idx = 0; idx < 5; ++idx) { + if (_rectList[idx].contains(_globals->_events._mousePos)) { + _wireList[_wireIndex].setFrame(idx + 2); + return; + } + } + + _wireList[_wireIndex].setFrame(1); + } +} + +int Scene2310::findObject(int objIndex) { + for (int idx = 0; idx < 5; ++idx) { + if (_wireList[idx]._frame == (objIndex + 2)) + return idx; + } + + return 5; +} + +/*-------------------------------------------------------------------------- + * Scene 2320 - Starcraft - Lander Bay + * + *--------------------------------------------------------------------------*/ + +void Scene2320::Action1::signal() { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + if (_globals->_sceneManager._previousScene == 2120) + _actionIndex = 3; + break; + case 1: { + Common::Point pt(513, 144); + NpcMover *mover = new NpcMover(); + scene->_hotspot11.addMover(mover, &pt, this); + break; + } + case 2: { + Common::Point pt(510, 164); + NpcMover *mover = new NpcMover(); + scene->_hotspot11.addMover(mover, &pt, this); + break; + } + case 3: + setAction(&scene->_sequenceManager2, this, 2328, &scene->_hotspot11, NULL); + break; + case 4: + scene->_hotspot11.animate(ANIM_MODE_NONE); + setDelay(120); + _actionIndex = 3; + break; + } +} + +void Scene2320::Action2::signal() { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_soundHandler.play(253); + scene->_hotspot13.fixPriority(99); + + Common::Point pt(scene->_hotspot13._position.x, 200); + NpcMover *mover = new NpcMover(); + scene->_hotspot13.addMover(mover, &pt, this); + break; + } + case 1: + scene->_hotspot13.hide(); + remove(); + break; + } +} + +void Scene2320::Action3::signal() { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + Common::Point pt(320, 86); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 1: + scene->_soundHandler.play(162); + scene->_hotspot6.animate(ANIM_MODE_5, this); + break; + case 2: { + Common::Point pt(320, 79); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: + _globals->_player.fixPriority(scene->_hotspot6._priority - 1); + _globals->_player._strip = 3; + setDelay(10); + break; + case 4: + scene->_area1.display(); + scene->_area2.display(); + scene->_area3.display(); + scene->_area4.display(); + + scene->_area3.draw(true); + _state = 0; + _globals->_events.setCursor(CURSOR_USE); + + while (!_state && !_vm->shouldQuit()) { + // Wait for an event + Event event; + if (!_globals->_events.getEvent(event)) { + g_system->updateScreen(); + g_system->delayMillis(10); + continue; + } + + if (scene->_area1._bounds.contains(event.mousePos)) { + scene->_area1.draw(true); + scene->_area3.draw(false); + _state = scene->_area1._actionId; + } + if (scene->_area2._bounds.contains(event.mousePos)) { + scene->_area3.draw(false); + scene->_area2.draw(true); + _state = scene->_area2._actionId; + } + if (scene->_area3._bounds.contains(event.mousePos)) { + scene->_area3.draw(true); + _state = scene->_area3._actionId; + } + } + + scene->_soundHandler.play(161); + scene->_area1.restore(); + scene->_area2.restore(); + scene->_area3.restore(); + scene->_area4.restore(); + + if (_state == 2320) { + setDelay(10); + } else { + scene->_soundHandler.play(162); + scene->_hotspot6.animate(ANIM_MODE_6, this); + } + break; + case 5: { + if (_state == 2320) + _globals->_player.fixPriority(-1); + else + _globals->_sceneManager.changeScene(_state); + + Common::Point pt(320, 86); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: + scene->_soundHandler.play(162); + scene->_hotspot6.animate(ANIM_MODE_6, this); + break; + case 7: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene2320::Action4::signal() { + // Fly Cycle actions + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: { + Common::Point pt(213, 84); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + case 16: + _globals->_player.setVisage(2109); + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 3: + _globals->_player.animate(ANIM_MODE_6, NULL); + setAction(&scene->_action2, this); + break; + case 4: { + scene->_hotspot16.postInit(); + scene->_hotspot16.setVisage(2331); + scene->_hotspot16.setStrip(3); + scene->_hotspot16.fixPriority(149); + scene->_hotspot16.setPosition(Common::Point(320, 202)); + scene->_hotspot16.show(); + + Common::Point pt(320, 121); + NpcMover *mover = new NpcMover(); + scene->_hotspot16.addMover(mover, &pt, this); + break; + } + case 5: { + scene->_hotspot16.fixPriority(200); + Common::Point pt(320, 180); + NpcMover *mover = new NpcMover(); + scene->_hotspot16.addMover(mover, &pt, this); + break; + } + case 6: { + scene->_hotspot16.fixPriority(-1); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + + Common::Point pt(233, 176); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 7: { + Common::Point pt(291, 194); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 8: + _globals->_player.setStrip(5); + _globals->_player.setFrame(1); + setDelay(13); + break; + case 9: + // Quinn sits in the flycycle + scene->_hotspot16.hide(); + _globals->_player.setVisage(2323); + _globals->_player.setPosition(Common::Point(303, 176)); + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 10: + if (_globals->getFlag(109)) { + _globals->_soundHandler.play(40); + _globals->_soundHandler.holdAt(true); + + Common::Point pt(303, 240); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + } else { + setDelay(3); + } + break; + case 11: + if (_globals->getFlag(109)) { + _globals->_sceneManager.changeScene(7600); + } else { + SceneItem::display2(2320, 19); + setDelay(3); + } + break; + case 12: + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 13: + _globals->_player.setVisage(0); + _globals->_player.setPosition(Common::Point(291, 194)); + _globals->_player.setStrip(5); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_1, NULL); + + scene->_hotspot16.show(); + setDelay(3); + break; + case 14: { + Common::Point pt(233, 176); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 15: { + Common::Point pt(213, 85); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 17: { + _globals->_player.animate(ANIM_MODE_6, NULL); + scene->_hotspot16.fixPriority(160); + + Common::Point pt(320, 121); + NpcMover *mover = new NpcMover(); + scene->_hotspot16.addMover(mover, &pt, this); + break; + } + case 18: { + scene->_hotspot16.fixPriority(149); + Common::Point pt(320, 202); + PlayerMover *mover = new PlayerMover(); + scene->_hotspot16.addMover(mover, &pt, this); + break; + } + case 19: { + scene->_hotspot16.remove(); + scene->_soundHandler.play(253); + + scene->_hotspot13.show(); + Common::Point pt(319, 157); + NpcMover *mover = new NpcMover(); + scene->_hotspot13.addMover(mover, &pt, this); + break; + } + case 20: + _globals->_player.enableControl(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + + scene->_hotspot13.fixPriority(1); + remove(); + break; + } +} + +void Scene2320::Action5::signal() { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + ADD_PLAYER_MOVER(163, 126); + break; + case 1: + ADD_PLAYER_MOVER(165, 132); + break; + case 2: + setDelay(2); + break; + case 3: + if (!_globals->getFlag(59)) + setDelay(10); + else + scene->_stripManager.start(2323, this); + break; + case 4: + _globals->_player.setVisage(2347); + _globals->_player.setStrip(1); + _globals->_player.setFrame(1); + _globals->_player.fixPriority(137); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 5: + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 6: + if (_globals->getFlag(72)) + _globals->_sceneManager.changeScene(7000); + else if (_globals->getFlag(59)) + _globals->_sceneManager.changeScene(5000); + else if (!_globals->getFlag(43) || (RING_INVENTORY._ale._sceneNumber != 1)) + setDelay(10); + else { + scene->_hotspot11.setAction(NULL); + scene->_hotspot11.setVisage(2705); + scene->_hotspot11.animate(ANIM_MODE_1, NULL); + scene->_hotspot11.setObjectWrapper(new SceneObjectWrapper()); + + Common::Point pt(185, 135); + NpcMover *mover = new NpcMover(); + scene->_hotspot11.addMover(mover, &pt, NULL); + + _globals->clearFlag(43); + scene->_stripManager.start(2325, this); + } + break; + case 7: + setDelay(10); + break; + case 8: + _globals->_sceneManager.changeScene(4000); + break; + } +} + +void Scene2320::Action6::signal() { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 2: + _globals->_player.setStrip(1); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 3: + _globals->_player.setVisage(0); + _globals->_player.setStrip(3); + _globals->_player.fixPriority(-1); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.animate(ANIM_MODE_1, NULL); + + setDelay(60); + break; + case 4: + if ((_globals->_sceneManager._previousScene != 4000) || _globals->getFlag(43)) + setDelay(3); + else if (_globals->getFlag(35)) { + _globals->setFlag(43); + scene->_stripManager.start(4200, this); + _globals->setFlag(69); + } else if (_globals->getFlag(36)) { + setDelay(3); + } else { + _globals->setFlag(43); + scene->_stripManager.start(4210, this); + break; + } + break; + case 5: + if (_globals->_sceneObjects->contains(&scene->_hotspot11)) { + scene->_hotspot11.setAction(&scene->_action1); + + if (_globals->_sceneObjects->contains(&scene->_hotspot10)) { + ADD_MOVER(scene->_hotspot10, 491, 160); + } else { + setDelay(60); + } + + _globals->_sceneItems.push_front(&scene->_hotspot11); + } else { + setDelay(3); + } + break; + case 6: + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene2320::Action7::signal() { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + _globals->_soundHandler.play(162); + scene->_hotspot6.animate(ANIM_MODE_5, this); + break; + case 2: + scene->_hotspot10.fixPriority(-1); + ADD_MOVER_NULL(scene->_hotspot10, 321, 94); + scene->_hotspot11.fixPriority(-1); + ADD_MOVER_NULL(scene->_hotspot11, 346, 85); + + _globals->_player.fixPriority(-1); + ADD_MOVER(_globals->_player, 297, 89); + break; + case 3: + ADD_PLAYER_MOVER(462, 182); + break; + case 4: + ADD_MOVER(scene->_hotspot11, 391, 88); + break; + case 5: + ADD_MOVER(scene->_hotspot11, 500, 164); + ADD_MOVER(scene->_hotspot10, 382, 93); + _globals->_player.setStrip(3); + break; + case 6: + ADD_MOVER_NULL(scene->_hotspot10, 491, 160); + ADD_MOVER(_globals->_player, 391, 88); + break; + case 7: + ADD_PLAYER_MOVER(462, 182); + break; + case 8: + _globals->_player.setStrip(7); + setDelay(15); + break; + case 9: + scene->_stripManager.start(6020, this); + break; + case 10: + setDelay(6); + break; + case 11: + scene->_stripManager.start(6022, this); + break; + case 12: + _globals->_player.enableControl(); + RING_INVENTORY._stasisBox._sceneNumber = 2320; + break; + } +} + +void Scene2320::Action8::signal() { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + ADD_PLAYER_MOVER(462, 182); + break; + case 2: + _globals->_player.setStrip(7); + setDelay(5); + break; + case 3: + scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10)); + scene->_stripManager.start(_globals->getFlag(75) ? 6030 : 2320, this); + break; + case 4: + if (_globals->getFlag(75)) + setDelay(3); + else + _globals->_player.enableControl(); + break; + case 5: + RING_INVENTORY._stasisBox._sceneNumber = 2320; + scene->_sceneMode = 2326; + scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10)); + scene->setAction(&scene->_sequenceManager1, scene, 2326, &_globals->_player, &scene->_hotspot11, NULL); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene2320::Hotspot5::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 13); + break; + case CURSOR_USE: + if (_globals->getFlag(70)) + SceneItem::display2(2320, 33); + else if (_globals->getFlag(13)) + SceneItem::display2(2320, 18); + else + scene->setAction(&scene->_action5); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot6::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 2); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->setAction(&scene->_action3); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot8::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 23); + break; + case CURSOR_USE: + scene->_sceneMode = 2336; + scene->setAction(&scene->_sequenceManager1, scene, 2336, &_globals->_player, this, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot10::doAction(int action) { + // Seeker + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 26); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + scene->_sceneMode = 2329; + + if (_globals->getFlag(13)) { + scene->_stripManager.start(2337, scene); + } else if (_globals->getFlag(70)) { + scene->setAction(&scene->_action8); + } else if (_globals->getFlag(109)) { + scene->setAction(&scene->_sequenceManager1, scene, 2337, NULL); + } else if (!_state) { + ++_state; + scene->setAction(&scene->_sequenceManager1, scene, 2334, NULL); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 2335, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot11::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 25); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + scene->_sceneMode = 2329; + + if (_globals->getFlag(13)) { + _globals->_player.disableControl(); + scene->_sceneMode = 5000; + scene->_stripManager.start(2336, scene); + } else if (_globals->getFlag(70)) { + scene->setAction(&scene->_action8); + } else { + scene->_sceneMode = 2329; + + if (RING_INVENTORY._ale._sceneNumber == 1) { + scene->setAction(&scene->_sequenceManager1, scene, 2329, NULL); + } else if (!_globals->getFlag(110)) { + _globals->setFlag(110); + scene->setAction(&scene->_sequenceManager1, scene, 2330, NULL); + } else if (RING_INVENTORY._peg._sceneNumber != 1) { + scene->setAction(&scene->_sequenceManager1, scene, 2331, NULL); + } else if (!_state) { + ++_state; + scene->setAction(&scene->_sequenceManager1, scene, 2332, NULL); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 2333, NULL); + } + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot12::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 5); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2320, 24); + else { + _globals->_player.disableControl(); + scene->_sceneMode = 2322; + scene->setAction(&scene->_sequenceManager1, scene, 2322, &_globals->_player, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot14::doAction(int action) { + // Right Console + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 17); + break; + case CURSOR_USE: + if (_globals->getFlag(24)) { + _globals->clearFlag(24); + _globals->_player.disableControl(); + + scene->_hotspot8.postInit(); + scene->_hotspot8.setVisage(2345); + scene->_hotspot8.setPosition(Common::Point(634, 65)); + scene->_hotspot8.hide(); + + _globals->_sceneItems.push_front(&scene->_hotspot8); + RING_INVENTORY._waldos._sceneNumber = 2320; + + scene->_hotspot9.postInit(); + scene->_hotspot9.setVisage(2345); + scene->_hotspot9._strip = 6; + scene->_hotspot9.setPosition(Common::Point(536, 103)); + scene->_hotspot9.fixPriority(200); + scene->_hotspot9.hide(); + + scene->_hotspot16.postInit(); + scene->_hotspot16.setVisage(2345); + scene->_hotspot16.setStrip(8); + scene->_hotspot16.setPosition(Common::Point(536, 103)); + scene->_hotspot16.hide(); + + scene->_sceneMode = 2324; + scene->setAction(&scene->_sequenceManager1, scene, 2324, &_globals->_player, &scene->_hotspot7, + &scene->_hotspot8, &scene->_hotspot9, &scene->_hotspot16, NULL); + } else if (_globals->getFlag(13)) { + SceneItem::display2(2320, 24); + } else if (!_globals->getFlag(76)) { + SceneItem::display2(2320, 28); + } else if (!RING_INVENTORY._waldos._sceneNumber) { + SceneItem::display2(2320, 27); + } else { + SceneItem::display2(2320, 29); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot15::doAction(int action) { + // Left console (Flycycle console) + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 16); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2320, 24); + else + scene->setAction(&scene->_action4); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + + +/*--------------------------------------------------------------------------*/ + +Scene2320::Scene2320() : + _hotspot1(0, CURSOR_LOOK, 2320, 0, LIST_END), + _hotspot2(0, CURSOR_LOOK, 2320, 1, LIST_END), + _hotspot3(0, CURSOR_LOOK, 2320, 11, LIST_END), + _hotspot4(0, CURSOR_LOOK, 2320, 14, LIST_END), + _hotspot13(0, CURSOR_LOOK, 2320, 12, LIST_END) +{ + _area1.setup(2153, 2, 1, 2100); + _area1._pt = Common::Point(200, 31); + _area2.setup(2153, 3, 1, 2150); + _area2._pt = Common::Point(200, 50); + _area3.setup(2153, 4, 1, 2320); + _area3._pt = Common::Point(200, 75); + _area4.setup(2153, 1, 1, 10); + _area4._pt = Common::Point(237, 77); +} + +void Scene2320::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(60, 75, 100, 100); + + _stripManager.addSpeaker(&_speakerMR); + _stripManager.addSpeaker(&_speakerML); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerSR); + _stripManager.addSpeaker(&_speakerSL); + _stripManager.addSpeaker(&_speakerSAL); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerGameText); + + _speakerMText._npc = &_hotspot11; + _speakerQText._npc = &_globals->_player; + _hotspotPtr = &_hotspot10; + + _hotspot6.postInit(); + _hotspot6.setVisage(2321); + _hotspot6.setPosition(Common::Point(320, 67)); + + _hotspot7.postInit(); + _hotspot7.setVisage(2344); + _hotspot7.setPosition(Common::Point(604, 92)); + + _hotspot13.postInit(); + _hotspot13.setVisage(2323); + _hotspot13.setPosition(Common::Point(319, 157)); + _hotspot13.fixPriority(1); + + _hotspot12.postInit(); + _hotspot12.setVisage(2321); + _hotspot12._strip = 4; + _hotspot12.animate(ANIM_MODE_8, 0, NULL); + _hotspot12.setPosition(Common::Point(412, 46)); + + if (RING_INVENTORY._waldos._sceneNumber == 2320) { + _hotspot8.postInit(); + _hotspot8.setVisage(2345); + _hotspot8.setStrip(5); + _hotspot8.setFrame(8); + _hotspot8.setPosition(Common::Point(541, 103)); + _hotspot8.fixPriority(201); + + _globals->_sceneItems.push_back(&_hotspot8); + } + + if (_globals->getFlag(43)) { + _hotspot11.postInit(); + _hotspot11.setVisage(2705); + _hotspot11._strip = 3; + _hotspot11.setPosition(Common::Point(510, 156)); + _globals->_sceneItems.push_back(&_hotspot11); + _hotspot11._state = 0; + _hotspot11.setAction(&_action1); + } + + _globals->_player.postInit(); + if (_globals->getFlag(13)) + _globals->_player.setVisage(2170); + else + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(320, 79)); + _globals->_player.fixPriority(10); + _globals->_player.changeZoom(-1); + _globals->_player._moveDiff.y = 3; + _globals->_player.disableControl(); + + if (_globals->getFlag(114)) { + _hotspot10.postInit(); + _hotspot10.setVisage(2806); + _hotspot10.setPosition(Common::Point(481, 162)); + _hotspot10.changeZoom(-1); + _hotspot10.setStrip(5); + _hotspot10._state = 0; + + _globals->_sceneItems.push_back(&_hotspot10); + } + + if (_globals->getFlag(70)) { + _hotspot11.postInit(); + _hotspot11.setVisage(2705); + _hotspot11.setPosition(Common::Point(500, 164)); + + _hotspot10.postInit(); + _hotspot10.setVisage(2806); + _hotspot10.setPosition(Common::Point(481, 162)); + _hotspot10.changeZoom(-1); + _hotspot10.setStrip(5); + + _globals->_sceneItems.addItems(&_hotspot11, &_hotspot10, NULL); + } + + switch (_globals->_sceneManager._previousScene) { + case 2120: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + + _globals->_player.fixPriority(-1); + _globals->_player.setPosition(Common::Point(389, 72)); + _globals->_player.enableControl(); + break; + case 4000: + if (!_globals->getFlag(36) && !_globals->getFlag(43)) { + _hotspot11.postInit(); + _hotspot11.setVisage(2705); + _hotspot11.setPosition(Common::Point(178, 118)); + _hotspot11.animate(ANIM_MODE_1, NULL); + } + // Deliberate fall-through + case 4250: + case 5000: + case 7000: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + if ((_globals->_sceneManager._previousScene == 7000) && !_globals->getFlag(80)) + _globals->setFlag(36); + + _globals->_player.disableControl(); + _globals->_player.animate(ANIM_MODE_NONE, NULL); + _globals->_player.setObjectWrapper(NULL); + _globals->_player.setVisage(2347); + _globals->_player.setStrip(2); + _globals->_player.setFrame(5); + _globals->_player.fixPriority(137); + _globals->_player.setPosition(Common::Point(165, 132)); + + setAction(&_action6); + break; + case 6100: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + + _hotspot8.postInit(); + _hotspot8.setVisage(2345); + _hotspot8.setPosition(Common::Point(634, 65)); + _hotspot8.hide(); + + _sceneMode = 2325; + setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL); + break; + case 7600: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + _soundHandler.play(21); + + _globals->_player.setVisage(2323); + _globals->_player.setStrip(2); + _globals->_player.setFrame(_globals->_player.getFrameCount()); + _globals->_player.setPosition(Common::Point(303, 176)); + _globals->_player.fixPriority(-1); + _globals->_player.disableControl(); + + _hotspot13.setPosition(Common::Point(319, 199)); + + _hotspot16.postInit(); + _hotspot16.setVisage(2331); + _hotspot16._strip = 3; + _hotspot16.fixPriority(160); + _hotspot16.setPosition(Common::Point(320, 202)); + _hotspot16.hide(); + + _sceneMode = 2338; + setAction(&_sequenceManager1, this, 2338, &_globals->_player, &_hotspot16, &_hotspot13, NULL); + break; + default: + switch (_globals->_stripNum) { + case 2101: + _globals->_player.disableControl(); + _globals->_player.setStrip(3); + _globals->_player.setPosition(Common::Point(307, 84)); + + _hotspot11.postInit(); + _hotspot11.setVisage(2705); + _hotspot11._strip = 2; + _hotspot11.fixPriority(10); + _hotspot11.setPosition(Common::Point(322, 80)); + _hotspot11.setObjectWrapper(new SceneObjectWrapper()); + _hotspot11.animate(ANIM_MODE_1, NULL); + + _hotspot10.postInit(); + _hotspot10.setVisage(2806); + _hotspot10.setObjectWrapper(new SceneObjectWrapper()); + _hotspot10.changeZoom(-1); + _hotspot10.fixPriority(10); + _hotspot10.setPosition(Common::Point(318, 89)); + _hotspot10._strip = 3; + _hotspot10.animate(ANIM_MODE_1, NULL); + + setAction(&_action7); + break; + case 6100: + _hotspot8.postInit(); + _hotspot8.setVisage(2345); + _hotspot8.setPosition(Common::Point(634, 65)); + _hotspot8.hide(); + + _sceneMode = 2325; + setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL); + break; + default: + _globals->_soundHandler.play(160); + _globals->_soundHandler.holdAt(true); + _sceneMode = 2321; + + _globals->_player.setStrip(3); + setAction(&_sequenceManager1, this, 2321, &_globals->_player, &_hotspot6, NULL); + break; + } + } + + _globals->_stripNum = 0; + _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position); + loadScene(2320); + + _hotspot14._sceneRegionId = 8; + _hotspot1.setBounds(Rect(0, 0, 640, 200)); + _hotspot2.setBounds(Rect(278, 0, 362, 61)); + _hotspot3.setBounds(Rect(282, 62, 367, 98)); + _hotspot4.setBounds(Rect(67, 38, 112, 113)); + _hotspot5.setBounds(Rect(104, 122, 174, 157)); + _hotspot15.setBounds(Rect(191, 53, 205, 63)); + + _globals->_sceneItems.addItems(&_hotspot14, &_hotspot15, &_hotspot5, &_hotspot6, &_hotspot12, + &_hotspot13, &_hotspot4, &_hotspot3, &_hotspot2, &_hotspot1, NULL); +} + +void Scene2320::synchronize(Serializer &s) { + Scene::synchronize(s); + SYNC_POINTER(_hotspotPtr); +} + +void Scene2320::signal() { + switch (_sceneMode) { + case 2321: + case 2327: + case 2329: + if (_globals->getFlag(43) && !_hotspot11._action) + _hotspot11.setAction(&_action1); + _globals->_player.enableControl(); + break; + case 2322: + _globals->_sceneManager.changeScene(2120); + break; + case 2323: + _globals->_player.disableControl(); + break; + case 2338: + case 2324: + _hotspot16.remove(); + _globals->_player.enableControl(); + break; + case 2325: + _globals->setFlag(76); + _globals->clearFlag(70); + _globals->_stripNum = 6100; + _globals->_sceneManager.changeScene(2100); + break; + case 2326: + _globals->clearFlag(70); + RING_INVENTORY._nullifier._sceneNumber = 1; + _globals->_stripNum = 2321; + _globals->_sceneManager.changeScene(2100); + break; + case 2336: + _globals->setFlag(77); + RING_INVENTORY._waldos._sceneNumber = 1; + _hotspot8.remove(); + break; + case 5000: + _globals->_player.enableControl(); + break; + } +} + +/*-------------------------------------------------------------------------- + * Scene 2400 - Descending in Lander + * + *--------------------------------------------------------------------------*/ + +void Scene2400::Action1::signal() { + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + ADD_MOVER(_globals->_player, 160, 71); + break; + case 2: + ADD_MOVER(_globals->_player, 160, 360); + break; + case 3: + _globals->_player._moveDiff = Common::Point(1, 1); + ADD_MOVER(_globals->_player, 140, 375); + break; + case 4: + ADD_MOVER(_globals->_player, 87, 338); + break; + case 5: + _globals->_player.hide(); + setDelay(60); + break; + case 6: + _globals->_sceneManager.changeScene(4000); + break; + } +} + +void Scene2400::Action1::dispatch() { + Action::dispatch(); + if ((_actionIndex == 4) && (_globals->_player._percent > 5)) + _globals->_player.changeZoom(_globals->_player._percent - 2); +} + +/*--------------------------------------------------------------------------*/ + +void Scene2400::postInit(SceneObjectList *OwnerList) { + loadScene(2400); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _globals->_player.postInit(); + _globals->_player.setVisage(2410); + _globals->_player.setPosition(Common::Point(340, -10)); + _globals->_player.animate(ANIM_MODE_2, NULL); + _globals->_player.disableControl(); + + setAction(&_action1); + + _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; + + _globals->_soundHandler.play(153); +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes3.h b/engines/tsage/ringworld/ringworld_scenes3.h new file mode 100644 index 0000000000..4f8f559091 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes3.h @@ -0,0 +1,895 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES3_H +#define TSAGE_RINGWORLD_SCENES3_H + +#include "common/scummsys.h" +#include "tsage/core.h" +#include "tsage/converse.h" +#include "tsage/ringworld/ringworld_logic.h" + +namespace tSage { + +class Scene2000 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + class Action8 : public Action { + public: + virtual void signal(); + }; + class Action9 : public Action { + public: + virtual void signal(); + }; + class Action10 : public Action { + public: + virtual void signal(); + }; + class Action11 : public Action { + public: + virtual void signal(); + }; + class Action12 : public Action { + public: + virtual void signal(); + }; + class Action13 : public Action { + public: + virtual void signal(); + }; + class Action14 : public Action { + public: + virtual void signal(); + }; + +public: + SpeakerSL _speakerSL; + SpeakerQR _speakerQR; + SpeakerMR _speakerMR; + SpeakerQText _speakerQText; + SpeakerMText _speakerMText; + SpeakerSText _speakerSText; + SpeakerHText _speakerHText; + SpeakerGameText _speakerGameText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + Action9 _action9; + Action10 _action10; + Action11 _action11; + Action12 _action12; + Action13 _action13; + Action14 _action14; + SceneObject _object1, _object2, _object3, _object4, _object5; + SceneObject _object6, _object7, _object8, _object9, _object10; + ASound _soundHandler1, _soundHandler2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void stripCallback(int v); +}; + +class Scene2100 : public Scene { + /* Actions */ + class Action1 : public ActionExt { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + class Action8 : public Action { + public: + virtual void signal(); + }; + class Action9 : public Action { + public: + virtual void signal(); + }; + class Action10 : public Action { + public: + virtual void signal(); + }; + class Action11 : public Action { + public: + virtual void signal(); + }; + class Action12 : public Action { + public: + virtual void signal(); + }; + class Action13 : public Action { + public: + virtual void signal(); + }; + class Action14 : public Action { + public: + virtual void signal(); + }; + class Action15 : public Action { + public: + virtual void signal(); + }; + class Action16 : public Action { + public: + virtual void signal(); + }; + class Action17 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot3 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot4 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot10 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot14 : public SceneObject { + public: + virtual void doAction(int action); + }; + + /* Objects */ + class Object1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object3 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + ASound _soundHandler; + SpeakerMText _speakerMText; + SpeakerMR _speakerMR; + SpeakerQL _speakerQL; + SpeakerQR _speakerQR; + SpeakerQText _speakerQText; + SpeakerGameText _speakerGameText; + SpeakerSText _speakerSText; + SpeakerSL _speakerSL; + SpeakerSAL _speakerSAL; + SpeakerHText _speakerHText; + + DisplayHotspot _hotspot1; + Hotspot2 _hotspot2; + Hotspot3 _hotspot3; + Hotspot4 _hotspot4; + DisplayHotspot _hotspot5, _hotspot6, _hotspot7; + Hotspot8 _hotspot8; + DisplayHotspot _hotspot9; + Hotspot10 _hotspot10; + DisplayHotspot _hotspot11, _hotspot12, _hotspot13; + Hotspot14 _hotspot14; + DisplayHotspot _hotspot15; + + Object1 _object1; + Object2 _object2; + Object3 _object3; + SceneObject _object4; + + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + Action9 _action9; + Action10 _action10; + Action11 _action11; + Action12 _action12; + Action13 _action13; + Action14 _action14; + Action15 _action15; + Action16 _action16; + Action17 _action17; + int _sitFl; + SceneArea _area1, _area2, _area3, _area4; + + Scene2100(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void stripCallback(int v); + virtual void signal(); + virtual void synchronize(Serializer &s); +}; + +class Scene2120 : public Scene { + /* Actions */ + class Entry { + public: + int _size; + int _lineNum; + int _visage; + + Entry() { _size = 0; _lineNum = 0; _visage = 0; } + Entry(int size, int lineNum, int visage) { _size = size; _lineNum = lineNum; _visage = visage; } + }; + + class Action1 : public Action { + private: + Common::Array _entries; + public: + Action1(); + + virtual void signal(); + virtual void dispatch(); + }; + +public: + ASound _soundHandler; + SceneObject _topicArrowHotspot, _arrowHotspot, _visageHotspot; + SceneObject _subjectButton, _nextPageButton, _previousPageButton, _exitButton; + Action1 _action1; + Rect _listRect; + int _dbMode, _prevDbMode; + bool _visageVisable; + int _subjectIndex; + int _lineOffset; + + Scene2120(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); +}; + +class Scene2150 : public Scene { + /* Actions */ + class Action1 : public ActionExt { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot4 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot7 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot10 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + ASound _soundHandler; + SequenceManager _sequenceManager; + SpeakerGameText _speakerGameText; + + Rect _rect1, _rect2; + Hotspot1 _hotspot1; + Hotspot2 _hotspot2; + DisplayHotspot _hotspot3; + Hotspot4 _hotspot4; + DisplayHotspot _hotspot5, _hotspot6; + Hotspot7 _hotspot7; + DisplayHotspot _hotspot8, _hotspot9; + Hotspot10 _hotspot10; + DisplayHotspot _hotspot11; + SceneObject _hotspot12, _hotspot13, _hotspot14; + SceneArea _area1, _area2, _area3, _area4; + Action1 _action1; + Action2 _action2; + + Scene2150(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene2200 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public ActionExt { + public: + virtual void signal(); + virtual void process(Event &event); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot3 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot5 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot9 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + SpeakerMText _speakerMText; + SpeakerSText _speakerSText; + SpeakerQText _speakerQText; + SpeakerSL _speakerSL; + SpeakerQR _speakerQR; + SpeakerQL _speakerQL; + SpeakerMR _speakerMR; + SpeakerGameText _speakerGameText; + Rect _exitRect; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + DisplayHotspot _hotspot1; + Hotspot3 _hotspot3; + Hotspot5 _hotspot5; + Hotspot9 _hotspot9; + DisplayHotspot _hotspot10; + SceneObject _hotspot2, _hotspot4; + SceneObject _hotspot6, _hotspot7, _hotspot8; + ASound _soundHandler1, _soundHandler2; + + Scene2200(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void stripCallback(int v); + virtual void synchronize(Serializer &s); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene2222 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + +public: + ASound _soundHandler; + SpeakerSText _speakerSText; + SpeakerMText _speakerMText; + SpeakerQText _speakerQText; + SpeakerML _speakerML; + SpeakerSR _speakerSR; + Action1 _action1; + Action2 _action2; + SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene2230 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + class Action8 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot3 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot4 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot5 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot6 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot7 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot10 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot11 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot12 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + ASound _soundHandler; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + Hotspot1 _hotspot1; + Hotspot3 _hotspot3; + Hotspot4 _hotspot4; + SceneObject _hotspot2; + Hotspot5 _hotspot5; + Hotspot6 _hotspot6; + Hotspot7 _hotspot7; + Hotspot8 _hotspot8; + DisplayHotspot _hotspot9; + Hotspot10 _hotspot10; + Hotspot11 _hotspot11; + Hotspot12 _hotspot12; + Rect _rect1; + int _field30A; + + Scene2230(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void dispatch(); +}; + +class Scene2280 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public ActionExt { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot4 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot7 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot10 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot12 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot14 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot15 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot16 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot17 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot18 : public SceneObject { + public: + virtual void doAction(int action); + }; + +public: + ASound _soundHandler; + SequenceManager _sequenceManager; + Rect _exitRect; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Hotspot1 _hotspot1; + Hotspot2 _hotspot2; + DisplayHotspot _hotspot3; + Hotspot4 _hotspot4; + DisplayHotspot _hotspot5, _hotspot6; + Hotspot7 _hotspot7; + Hotspot8 _hotspot8; + DisplayHotspot _hotspot9; + Hotspot10 _hotspot10; + DisplayHotspot _hotspot11; + Hotspot12 _hotspot12; + DisplayHotspot _hotspot13; + Hotspot14 _hotspot14; + DisplayHotspot _hotspot15, _hotspot16; + Hotspot17 _hotspot17; + Hotspot18 _hotspot18; + + Scene2280(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene2300 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public ActionExt { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot5 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot7 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + ASound _soundHandler1, _soundHandler2; + SpeakerSL _speakerSL; + SpeakerMText _speakerMText; + SpeakerQText _speakerQText; + SpeakerSText _speakerSText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4; + Hotspot5 _hotspot5; + SceneObject _hotspot6; + Hotspot7 _hotspot7; + SceneObject _hotspot8, _hotspot9, _hotspot10; + DisplayHotspot _hotspot11, _hotspot12, _hotspot13, _hotspot14, _hotspot15; + + Scene2300(); + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene2310 : public Scene { +private: + int findObject(int objIndex); + + /* Custom classes */ + class ProtectionEntry { + public: + int _pageNumber; + int _connectionList[5]; + + void set(int pageNumber, int v1, int v2, int v3, int v4, int v5) { + _pageNumber = pageNumber; + _connectionList[0] = v1; _connectionList[1] = v2; _connectionList[2] = v3; + _connectionList[3] = v4; _connectionList[4] = v5; + } + }; + +public: + SequenceManager _sequenceManager; + int _wireIndex, _pageIndex; + SceneObject _wireList[5]; + Rect _rectList[5]; + SceneText _sceneText; + ProtectionEntry _pageList[21]; + + Scene2310(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + +class Scene2320 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public ActionExt { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + class Action8 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot5 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot6 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot10 : public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class Hotspot11 : public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class Hotspot12 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot14 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot15 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + ASound _soundHandler; + SequenceManager _sequenceManager1, _sequenceManager2; + SpeakerMText _speakerMText; + SpeakerMR _speakerMR; + SpeakerML _speakerML; + SpeakerQText _speakerQText; + SpeakerQL _speakerQL; + SpeakerQR _speakerQR; + SpeakerSAL _speakerSAL; + SpeakerSL _speakerSL; + SpeakerSR _speakerSR; + SpeakerSText _speakerSText; + SpeakerGameText _speakerGameText; + SceneArea _area1, _area2, _area3, _area4; + DisplayHotspot _hotspot1, _hotspot2, _hotspot3, _hotspot4; + Hotspot5 _hotspot5; + Hotspot6 _hotspot6; + SceneObject _hotspot7, _hotspot9; + Hotspot8 _hotspot8; + Hotspot10 _hotspot10; + Hotspot11 _hotspot11; + Hotspot12 _hotspot12; + DisplayHotspot _hotspot13; + Hotspot14 _hotspot14; + Hotspot15 _hotspot15; + SceneObject _hotspot16; + SceneItem *_hotspotPtr; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + + Scene2320(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void signal(); +}; + +class Scene2400 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + virtual void dispatch(); + }; +public: + Action1 _action1; + SceneObject _object; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_scenes4.cpp b/engines/tsage/ringworld/ringworld_scenes4.cpp new file mode 100644 index 0000000000..83dd559a6d --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes4.cpp @@ -0,0 +1,250 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/config-manager.h" +#include "tsage/ringworld/ringworld_scenes4.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 3500 - Ringworld Scan + * + *--------------------------------------------------------------------------*/ + +void Scene3500::Action1::signal() { + Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_stripManager.start(3500, this); + break; + case 2: + setDelay(3); + break; + case 3: + _globals->_sceneManager.changeScene(9999); + break; + } +} + +void Scene3500::Action2::signal() { + Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_stripManager.start(3501, this); + break; + case 2: + setDelay(3); + break; + case 3: + _globals->_sceneManager.changeScene(2012); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene3500::postInit(SceneObjectList *OwnerList) { + loadScene((_globals->_stripNum == 3600) ? 3600 : 3500); + Scene::postInit(); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerSText); + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.top / 160) * 160; + + setAction((_globals->_stripNum == 3600) ? (Action *)&_action2 : (Action *)&_action1); +} + +/*-------------------------------------------------------------------------- + * Scene 3700 - Remote Viewer + * + *--------------------------------------------------------------------------*/ + +#define VIEW_FRAME_DELAY 10 + +Scene3700::Viewer::Viewer() { + _images1.setVisage(3705, 1); + _images2.setVisage(3705, 2); + + _frameList[0] = 1; + for (int idx = 1; idx <= 3; ++idx) + _frameList[idx] = _globals->_randomSource.getRandomNumber(4) + 1; + + _active = true; + _countdownCtr = 0; + _percentList[0] = 120; + _percentList[1] = 50; + _percentList[2] = 75; + _percentList[3] = 114; +} + +void Scene3700::Viewer::synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsByte(_active); + s.syncAsSint16LE(_countdownCtr); + for (int idx = 0; idx < 4; ++idx) { + s.syncAsSint16LE(_frameList[idx]); + s.syncAsSint16LE(_percentList[idx]); + } +} + +void Scene3700::Viewer::dispatch() { + if (_active) { + if (_countdownCtr-- <= 0) { + _countdownCtr = VIEW_FRAME_DELAY; + + for (int idx = 3; idx > 1; --idx) + _frameList[idx] = _frameList[idx - 1]; + + int newFrame; + do { + newFrame = _globals->_randomSource.getRandomNumber(4) + 1; + } while (newFrame == _frameList[2]); + + _frameList[1] = newFrame; + _flags |= OBJFLAG_PANES; + } + } +} + +void Scene3700::Viewer::reposition() { + _bounds = Rect(123, 40, 285, 123); +} + +void Scene3700::Viewer::draw() { + Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(1); + + for (int idx = 0; idx < 4; ++idx) { + Visage &v = (idx == 0) ? _images1 : _images2; + + GfxSurface img = v.getFrame(_frameList[idx]); + Rect destRect = img.getBounds(); + destRect.resize(img, (_position.x - _globals->_sceneOffset.x), + (_position.y - _globals->_sceneOffset.y - _yDiff), _percentList[idx]); + + destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left, + -_globals->_sceneManager._scene->_sceneBounds.top); + + _globals->gfxManager().copyFrom(img, destRect, priorityRegion); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene3700::Action1::signal() { + Scene3700 *scene = (Scene3700 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_stripManager.start(2162, this); + break; + case 2: + scene->_viewer._active = false; + setDelay(90); + break; + case 3: + scene->_soundHandler.play(196); + scene->_viewer.hide(); + + scene->_hotspot1.postInit(); + scene->_hotspot1.setVisage(3710); + scene->_hotspot1.setStrip(1); + scene->_hotspot1.setFrame(1); + scene->_hotspot1.setPosition(Common::Point(204, 120)); + + setDelay(90); + break; + case 4: + scene->_soundHandler.play(197); + scene->_hotspot1.hide(); + + scene->_hotspot2.postInit(); + scene->_hotspot2.setVisage(3710); + scene->_hotspot2.setStrip(2); + scene->_hotspot2.setFrame(1); + scene->_hotspot2.setPosition(Common::Point(204, 120)); + + setDelay(30); + break; + case 5: + scene->_soundHandler.play(198); + scene->_hotspot2.hide(); + scene->_hotspot1.show(); + setDelay(90); + break; + case 6: + scene->_stripManager.start(2166, this); + break; + case 7: + setDelay(60); + break; + case 8: + scene->_hotspot1.remove(); + scene->_hotspot2.show(); + _globals->setFlag(59); + setDelay(30); + break; + case 9: + _globals->_sceneManager.changeScene(2100); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene3700::postInit(tSage::SceneObjectList *OwnerList) { + Scene::postInit(); + loadScene(3700); + + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerMR); + _speakerSText.setTextPos(Common::Point(20, 15)); + _speakerMText.setTextPos(Common::Point(20, 15)); + + _viewer.postInit(); + _viewer.setVisage(3705); + _viewer.setStrip(1); + _viewer.setFrame(2); + _viewer.setPosition(Common::Point(195, 83)); + + setAction(&_action1); + _globals->_soundHandler.play(195); +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes4.h b/engines/tsage/ringworld/ringworld_scenes4.h new file mode 100644 index 0000000000..6c706d2dab --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes4.h @@ -0,0 +1,92 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES4_H +#define TSAGE_RINGWORLD_SCENES4_H + +#include "common/scummsys.h" +#include "tsage/core.h" +#include "tsage/converse.h" +#include "tsage/ringworld/ringworld_logic.h" + +namespace tSage { + +class Scene3500 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; +public: + SpeakerSText _speakerSText; + SpeakerMText _speakerMText; + SpeakerQText _speakerQText; + Action1 _action1; + Action2 _action2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene3700 : public Scene { + /* Custom classes */ + class Viewer : public SceneObject { + public: + Visage _images1; + Visage _images2; + + int _frameList[4]; + int _percentList[4]; + bool _active; + int _countdownCtr; + + Viewer(); + virtual Common::String getClassName() { return "Viewer"; } + virtual void synchronize(Serializer &s); + virtual void dispatch(); + virtual void reposition(); + virtual void draw(); + }; + + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; +public: + Viewer _viewer; + Action1 _action1; + SceneObject _hotspot1, _hotspot2; + SpeakerSText _speakerSText; + SpeakerMText _speakerMText; + SpeakerMR _speakerMR; + ASound _soundHandler; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp new file mode 100644 index 0000000000..0803a2039a --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -0,0 +1,4441 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/config-manager.h" +#include "tsage/ringworld/ringworld_scenes5.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 4000 - Village + * + *--------------------------------------------------------------------------*/ + +void Scene4000::Action1::signal() { + // Quinn has the peg. Everybody enter the screen. + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_hotspot5.postInit(); + scene->_hotspot5.setVisage(2870); + scene->_hotspot5.setObjectWrapper(new SceneObjectWrapper()); + scene->_hotspot5.animate(ANIM_MODE_1, NULL); + scene->_hotspot5.setPosition(Common::Point(116, 160)); + + Common::Point pt(208, 169); + NpcMover *mover = new NpcMover(); + scene->_hotspot5.addMover(mover, &pt, this); + + RING_INVENTORY._ale._sceneNumber = 0; + _globals->clearFlag(42); + _globals->clearFlag(36); + _globals->clearFlag(43); + _globals->clearFlag(37); + break; + } + case 1: { + scene->_guardRock.postInit(); + scene->_guardRock.setVisage(4001); + scene->_guardRock.animate(ANIM_MODE_1, NULL); + scene->_guardRock.setObjectWrapper(new SceneObjectWrapper()); + scene->_guardRock.setPosition(Common::Point(314, 132)); + scene->_guardRock._moveDiff = Common::Point(4, 2); + + ADD_PLAYER_MOVER_NULL(scene->_guardRock, 288, 167); + + scene->_olo.postInit(); + scene->_olo.setVisage(4006); + scene->_olo.animate(ANIM_MODE_1, NULL); + scene->_olo.setStrip(1); + scene->_olo.setPosition(Common::Point(207, 136)); + + ADD_PLAYER_MOVER_NULL(scene->_olo, 220, 151); + + scene->_miranda.postInit(); + scene->_miranda.setVisage(2701); + scene->_miranda.animate(ANIM_MODE_1, NULL); + scene->_miranda.setObjectWrapper(new SceneObjectWrapper()); + scene->_miranda._moveDiff = Common::Point(4, 2); + scene->_miranda.setPosition(Common::Point(300, 135)); + + ADD_PLAYER_MOVER_THIS(scene->_miranda, 266, 169); + + ADD_PLAYER_MOVER_NULL(_globals->_player, 241, 155); + break; + } + case 2: + scene->_stripManager.start(4400, this); + break; + case 3: { + Common::Point pt1(30, 86); + PlayerMover *mover1 = new PlayerMover(); + scene->_miranda.addMover(mover1, &pt1, this); + + ADD_PLAYER_MOVER_NULL(scene->_hotspot5, 3, 86); + break; + } + case 4: + ADD_MOVER(scene->_miranda, -30, 86); + ADD_MOVER_NULL(scene->_hotspot5, -40, 86); + break; + case 5: + _globals->_soundHandler.play(155); + _globals->setFlag(43); + _globals->setFlag(114); + scene->_stripManager.start(4430, this); + break; + case 6: + ADD_PLAYER_MOVER_THIS(scene->_olo, 277, 175); + ADD_PLAYER_MOVER_NULL(_globals->_player, 258, 187); + break; + case 7: + scene->_stripManager.start(4440, this); + break; + case 8: + setDelay(30); + break; + case 9: + _globals->setFlag(96); + _globals->_sceneManager.changeScene(4025); + break; + } +} + +void Scene4000::Action2::signal() { + // Quinn, Seeker and Miranda walks down to the village + // Then, they talk to Rock, and enter the priest hut + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL); + + scene->_hotspot5.postInit(); + scene->_hotspot5.setVisage(2801); + scene->_hotspot5.animate(ANIM_MODE_1, NULL); + scene->_hotspot5.setObjectWrapper(new SceneObjectWrapper()); + scene->_hotspot5._moveDiff.x = 5; + scene->_hotspot5.setPosition(Common::Point(-8, 88)); + + scene->_lander.setAction(&scene->_sequenceManager3, NULL, 4003, &scene->_hotspot5, NULL); + scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL); + break; + case 1: + _globals->_player.disableControl(); + + scene->_lander.remove(); + ADD_MOVER(scene->_guardRock, scene->_hotspot5._position.x + 30, scene->_hotspot5._position.y - 10); + break; + case 2: + _globals->_player.checkAngle(&scene->_guardRock); + scene->_hotspot5.checkAngle(&scene->_guardRock); + scene->_miranda.checkAngle(&scene->_guardRock); + scene->_stripManager.start(4000, this); + break; + case 3: + scene->_hotspot2.setVisage(4017); + scene->_hotspot2.animate(ANIM_MODE_1, NULL); + scene->_hotspot2.setStrip(2); + + ADD_MOVER(scene->_hotspot2, 116, 160); + ADD_MOVER(scene->_hotspot5, 116, 160); + + _globals->setFlag(37); + break; + case 4: + break; + case 5: + scene->_stripManager.start(4010, this); + break; + case 6: + ADD_PLAYER_MOVER_NULL(scene->_guardRock, 230, 149); + ADD_PLAYER_MOVER(210, 136); + ADD_PLAYER_MOVER_NULL(scene->_miranda, 210, 133); + break; + case 7: + _globals->_sceneManager.changeScene(4045); + break; + } +} + +void Scene4000::Action3::signal() { + // The guard walks to the left and exits the screen + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_hotspot8.setVisage(4017); + scene->_hotspot8.setFrame2(-1); + scene->_hotspot8.animate(ANIM_MODE_1, NULL); + scene->_hotspot8.setObjectWrapper(new SceneObjectWrapper()); + ADD_MOVER(scene->_hotspot8, 118, 145); + break; + case 1: + scene->_hotspot8.remove(); + remove(); + break; + } +} + +void Scene4000::Action4::signal() { + // Quinn ties the rope to the rock + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player._uiEnabled = false; + ADD_MOVER(_globals->_player, 257, 57); + break; + case 1: + _globals->_player.setVisage(4008); + _globals->_player.setPosition(Common::Point(258, 83)); + _globals->_player._frame = 1; + _globals->_player._strip = 3; + _globals->_player.animate(ANIM_MODE_4, 2, 1, this); + break; + case 2: + scene->_rope.postInit(); + scene->_rope.setVisage(4000); + scene->_rope.setStrip(7); + scene->_rope.setFrame(3); + scene->_rope.setPosition(Common::Point(268, 44)); + + RING_INVENTORY._rope._sceneNumber = 4000; + _globals->_events.setCursor(CURSOR_USE); + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 3: + _globals->_player.setVisage(2602); + _globals->_player.setPosition(Common::Point(257, 57)); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player._uiEnabled = true; + + _globals->setFlag(41); + remove(); + break; + } +} + +void Scene4000::Action5::signal() { + // Chat with Miranda + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(15); + break; + case 1: + scene->_stripManager.start(_globals->_stripNum, this); + break; + case 2: + setDelay(10); + break; + case 3: + scene->_hotspot8.setVisage(4017); + scene->_hotspot8.animate(ANIM_MODE_1, NULL); + scene->_hotspot8.setFrame2(-1); + scene->_hotspot8.setAction(&scene->_action3); + + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4000::Action6::signal() { + // Quinn and Miranda enter the screen and walk to the village. + // Rock comes and notices the alcohol. They all enter his hut. + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(30); + break; + case 1: + setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL); + + if (!_globals->getFlag(36)) + scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL); + break; + case 2: + _globals->_player.disableControl(); + ADD_MOVER(scene->_guardRock, _globals->_player._position.x + 30, _globals->_player._position.y - 5); + break; + case 3: + scene->_stripManager.start(_globals->getFlag(35) ? 4500 : 4502, this); + break; + case 4: + _globals->clearFlag(35); + ADD_MOVER_NULL(scene->_guardRock, 292, 138); + ADD_PLAYER_MOVER(283, 147); + + if (!_globals->getFlag(36)) + ADD_PLAYER_MOVER_NULL(scene->_miranda, 280, 150); + RING_INVENTORY._ale._sceneNumber = 4100; + break; + case 5: + _globals->_sceneManager.changeScene(4100); + break; + } +} + +void Scene4000::Action7::signal() { + // Climb down left Chimney using a rope + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + + scene->_rope.setFrame(1); + ADD_MOVER(_globals->_player, 247, 53); + break; + case 1: + _globals->_player.setVisage(4008); + _globals->_player.setStrip(4); + _globals->_player.setFrame(1); + _globals->_player.fixPriority(16); + _globals->_player.setPosition(Common::Point(260, 55)); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + _globals->_sceneManager.changeScene(4050); + break; + } +} + +void Scene4000::Action8::signal() { + // Climb down right Chimney using a rope + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + if (_globals->getFlag(41)) + scene->_rope.setFrame(2); + + ADD_MOVER(_globals->_player, 289, 53); + break; + case 1: + _globals->_player.setVisage(4008); + _globals->_player.setStrip(5); + _globals->_player.fixPriority(16); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(283, 52)); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + _globals->_player.remove(); + setDelay(60); + break; + case 3: + _globals->_soundHandler.play(170); + scene->_smoke2.setVisage(4000); + scene->_smoke2.setStrip(6); + scene->_smoke2.animate(ANIM_MODE_2, NULL); + setDelay(60); + break; + case 4: + _globals->_soundHandler.play(77, this); + break; + case 5: + _globals->_game->endGame(4000, 15); + remove(); + break; + } +} + +void Scene4000::Action9::signal() { + // Villager animations + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(119) + 240); + break; + case 1: + static_cast(_owner)->animate(ANIM_MODE_8, 1, this); + _actionIndex = 0; + break; + } +} + +void Scene4000::Action10::signal() { + // Villager animations + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(119) + 240); + break; + case 1: + static_cast(_owner)->animate(ANIM_MODE_8, 1, this); + _actionIndex = 0; + break; + } +} + +void Scene4000::Action11::signal() { + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + ADD_MOVER(scene->_lander, -30, 70); + break; + case 1: + setDelay(60); + break; + case 2: + scene->_hotspot5.postInit(); + scene->_hotspot5.setVisage(2801); + scene->_hotspot5.animate(ANIM_MODE_1, NULL); + scene->_hotspot5.setObjectWrapper(new SceneObjectWrapper()); + scene->_hotspot5._moveDiff.x = 4; + scene->_hotspot5.setPosition(Common::Point(-8, 88)); + + setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL); + + scene->_miranda.setPosition(Common::Point(-210, 139)); + scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL); + scene->_lander.setAction(&scene->_sequenceManager3, NULL, 4003, &scene->_hotspot5, NULL); + break; + case 3: + scene->_stripManager.start(8000, this); + break; + case 4: + ADD_MOVER(scene->_olo, 263, 187); + scene->_olo.animate(ANIM_MODE_1, NULL); + break; + case 5: + scene->_soundHandler1.stop(); + scene->_forceField.remove(); + + ADD_MOVER(_globals->_player, 340, 163); + ADD_MOVER_NULL(scene->_miranda, 340, 169); + ADD_MOVER_NULL(scene->_hotspot5, 340, 165); + break; + case 6: + _globals->_sceneManager.changeScene(4250); + break; + } +} + +void Scene4000::Action12::signal() { + // Quinn enter Rock's hut + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(5); + break; + case 1: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(4015, this); + break; + case 2: + _globals->setFlag(32); + if (scene->_stripManager._field2E8 == 275) { + _globals->setFlag(82); + ADD_MOVER_NULL(scene->_guardRock, 292, 138); + ADD_PLAYER_MOVER(283, 147); + } else { + setDelay(30); + } + break; + case 3: + if (scene->_stripManager._field2E8 == 275) { + _globals->_sceneManager.changeScene(4100); + } else { + ADD_PLAYER_MOVER_THIS(scene->_guardRock, 300, 132); + } + break; + case 4: + scene->_guardRock.hide(); + scene->_stripManager.start(4020, this); + break; + case 5: + _globals->setFlag(35); + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4000::Action13::signal() { + // Lander is landing + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + scene->_soundHandler2.play(151); + scene->_soundHandler2.holdAt(true); + ADD_MOVER(scene->_lander, -30, 70); + break; + case 2: + scene->_soundHandler2.release(); + _globals->_sceneManager.changeScene(4010); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4000::Miranda::doAction(int action) { + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(4000, 31); + break; + case CURSOR_LOOK: + SceneItem::display2(4000, 29); + break; + case CURSOR_TALK: + if (_globals->getFlag(31)) { + if (!_globals->getFlag(111)) { + _globals->setFlag(111); + _globals->_stripNum = 4070; + } else if (!_globals->getFlag(33)) + _globals->_stripNum = 4094; + else if (!_globals->getFlag(112)) { + _globals->setFlag(112); + _globals->_stripNum = 4300; + } else if (!_globals->getFlag(113)) { + _globals->setFlag(113); + _globals->_stripNum = 4093; + } else + _globals->_stripNum = 4094; + } else { + if (!_globals->getFlag(33)) + _globals->_stripNum = 4094; + else if (!_globals->getFlag(112)) { + _globals->setFlag(112); + _globals->_stripNum = 4300; + } else + _globals->_stripNum = 4094; + } + + scene->setAction(&scene->_action5); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::Hotspot8::doAction(int action) { + // Guard + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(4000, 26); + break; + case CURSOR_LOOK: + SceneItem::display2(4000, 25); + break; + case CURSOR_TALK: + if (RING_INVENTORY._peg._sceneNumber == 1) + SceneItem::display2(4000, 34); + else { + switch (_ctr) { + case 0: + _globals->_stripNum = 4090; + break; + case 1: + _globals->_stripNum = 4091; + break; + case 2: + _globals->_stripNum = 4092; + break; + default: + SceneItem::display2(4000, 34); + break; + } + + if (_globals->_stripNum) { + setAction(NULL); + addMover(NULL); + ++_ctr; + scene->setAction(&scene->_action5); + } + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::GuardRock::doAction(int action) { + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(4000, 28); + break; + case CURSOR_LOOK: + SceneItem::display2(4000, 27); + break; + case CURSOR_TALK: + error("*** Do we need dialog."); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::Ladder::doAction(int action) { + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4000, 30); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + if (_globals->getFlag(40)) { + scene->_sceneMode = 4005; + scene->setAction(&scene->_sequenceManager1, scene, 4005, &_globals->_player, NULL); + } else { + scene->_sceneMode = 4004; + scene->setAction(&scene->_sequenceManager1, scene, 4004, &_globals->_player, &scene->_ladder, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::TheTech::doAction(int action) { + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4000, 13); + break; + case OBJECT_SCANNER: + SceneItem::display2(4000, 19); + break; + case OBJECT_STUNNER: + SceneItem::display2(4000, 20); + break; + case CURSOR_USE: + if (_globals->getFlag(40)) + SceneItem::display2(4000, 37); + else { + _globals->_player.disableControl(); + if (_globals->_sceneObjects->contains(&scene->_miranda)) + _globals->clearFlag(96); + + scene->_sceneMode = 4012; + scene->setAction(&scene->_sequenceManager1, scene, 4012, &_globals->_player, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::Hotspot13::doAction(int action) { + // Rock between the two chimneys + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4000, 21); + break; + case OBJECT_ROPE: + if (_globals->getFlag(40)) + scene->setAction(&scene->_action4); + else + SceneItem::display2(4000, 22); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::Hotspot::doAction(int action) { + // Wall between the two doors + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4000, 16); + break; + case OBJECT_SCANNER: + SceneItem::display2(4000, 17); + break; + case OBJECT_STUNNER: + SceneItem::display2(4000, 18); + break; + case OBJECT_LADDER: { + _globals->_player.disableControl(); + + scene->_ladder.postInit(); + scene->_ladder.setVisage(4000); + scene->_ladder.setStrip(5); + scene->_ladder.setPosition(Common::Point(245, 147)); + scene->_ladder.hide(); + _globals->_sceneItems.push_front(&scene->_ladder); + + if (_globals->_sceneObjects->contains(&scene->_hotspot8)) { + scene->_hotspot8.setAction(NULL); + Common::Point pt(118, 145); + NpcMover *mover = new NpcMover(); + scene->_hotspot18.addMover(mover, &pt, NULL); + } + + scene->_sceneMode = 4004; + scene->setAction(&scene->_sequenceManager1, scene, 4011, &_globals->_player, &scene->_ladder, NULL); + break; + } + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::Hotspot17::doAction(int action) { + // Left Chimney + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4000, 23); + break; + case CURSOR_USE: + if (_globals->getFlag(40)) + scene->setAction(&scene->_action7); + else + SceneItem::display2(4000, 24); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::Hotspot18::doAction(int action) { + // Right Chimney + Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4000, 36); + break; + case CURSOR_USE: + if (_globals->getFlag(40)) + scene->setAction(&scene->_action8); + else + SceneItem::display2(4000, 24); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4000::Hotspot23::doAction(int action) { + // Door of the temple + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4000, _globals->getFlag(31) ? 10 : 9); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene4000::Scene4000() : + _forceField(0, CURSOR_LOOK, 4000, 14, CURSOR_USE, 4000, 32, OBJECT_STUNNER, 4000, 33, + OBJECT_SCANNER, 4000, 19, LIST_END), + _hotspot19(0, CURSOR_LOOK, 4000, 7, LIST_END), + _hotspot20(0, CURSOR_LOOK, 4000, 3, LIST_END), + _hotspot21(0, CURSOR_LOOK, 4000, 1, LIST_END), + _hotspot22(0, CURSOR_LOOK, 4000, 8, LIST_END), + _hotspot24(0, CURSOR_LOOK, 4000, 11, LIST_END), + _hotspot25(0, CURSOR_LOOK, 4000, 4, LIST_END), + _hotspot26(0, CURSOR_LOOK, 4000, 0, LIST_END) { +} + +void Scene4000::postInit(SceneObjectList *OwnerList) { + loadScene(4000); + Scene::postInit(); + setZoomPercents(0, 20, 70, 50); + + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerML); + _stripManager.addSpeaker(&_speakerMR); + _stripManager.addSpeaker(&_speakerSR); + _stripManager.addSpeaker(&_speakerCHFL); + _stripManager.addSpeaker(&_speakerPL); + _stripManager.addSpeaker(&_speakerPText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerCHFR); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerCHFText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerMText); + + _speakerCHFText._npc = &_guardRock; + _speakerSText._npc = &_hotspot5; + _speakerMText._npc = &_miranda; + _speakerPText._npc = &_olo; + _speakerQText._npc = &_globals->_player; + + _hotspot13.setBounds(Rect(263, 41, 278, 55)); + _hotspot14.setBounds(Rect(96 /*140*/, 177, 140 /*96*/, 204)); + _hotspot15.setBounds(Rect(227, 101, 264, 143)); + _hotspot16.setBounds(Rect(306, 100, 319, 148)); + _hotspot17.setBounds(Rect(231, 53, 254, 60)); + _hotspot18.setBounds(Rect(285, 51, 310, 60)); + _hotspot26.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot21.setBounds(Rect(28, 7, 53, 64)); + _hotspot22.setBounds(Rect(125, 155, 140, 189)); + _hotspot23.setBounds(Rect(205, 102, 220, 142)); + _hotspot24.setBounds(Rect(270, 111, 297, 147)); + + _hotspot19._sceneRegionId = 16; + _hotspot20._sceneRegionId = 18; + _hotspot25._sceneRegionId = 17; + + _smoke1.postInit(); + _smoke1.setVisage(4000); + _smoke1.fixPriority(1); + _smoke1.setFrame(2); + _smoke1.setPosition(Common::Point(242, 59)); + _smoke1.animate(ANIM_MODE_2, NULL); + + _smoke2.postInit(); + _smoke2.setVisage(4000); + _smoke2.setStrip(2); + _smoke2.fixPriority(1); + _smoke2.setFrame(2); + _smoke2.setPosition(Common::Point(299, 59)); + _smoke2.animate(ANIM_MODE_2, NULL); + + if (RING_INVENTORY._ladder._sceneNumber != 4000) { + // if ladder is not in the scene, activate the hotspot on the wall + _hotspot8.postInit(); + _hotspot8.setVisage(4018); + _hotspot8.setObjectWrapper(new SceneObjectWrapper()); + _hotspot8._strip = 2; + _hotspot8._numFrames = 5; + _hotspot8.setPosition(Common::Point(306, 154)); + _hotspot8.setAction(&_action9); + } + + _theTech.postInit(); + _theTech.setVisage(4000); + _theTech.setStrip(3); + _theTech.setFrame(3); + _theTech.fixPriority(200); + _theTech.setPosition(Common::Point(281, 176)); + + if (_globals->getFlag(34)) { + _soundHandler1.play(156); + + _forceField.postInit(); + _forceField.setVisage(4000); + _forceField.setStrip(4); + _forceField.setPosition(Common::Point(312, 174)); + _forceField.fixPriority(200); + _forceField.animate(ANIM_MODE_8, 0, NULL); + + _globals->_sceneItems.push_back(&_forceField); + } + + _globals->_player.postInit(); + _globals->_player.setVisage(2602); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(-28, 86)); + + if (!_globals->getFlag(36) && !_globals->getFlag(43)) { + _miranda.postInit(); + _miranda.setVisage(2701); + _miranda.animate(ANIM_MODE_1, NULL); + _miranda.setObjectWrapper(new SceneObjectWrapper()); + _miranda._moveDiff = Common::Point(4, 2); + _miranda.setPosition(Common::Point(-210, 139)); + + _globals->_sceneItems.push_back(&_miranda); + } + + _globals->clearFlag(40); + + switch (_globals->_sceneManager._previousScene) { + case 2320: + _globals->_soundHandler.play(155); + + if (RING_INVENTORY._ale._sceneNumber == 1) { + _guardRock.postInit(); + _guardRock.setVisage(4001); + _guardRock.animate(ANIM_MODE_1, NULL); + _guardRock.setObjectWrapper(new SceneObjectWrapper()); + _guardRock.setPosition(Common::Point(314, 132)); + + setAction(&_action6); + } else { + _globals->_player.disableControl(); + _sceneMode = 4001; + setAction(&_sequenceManager1, this, 4001, &_globals->_player, NULL); + + if (!_globals->getFlag(36) && !_globals->getFlag(43)) + _miranda.setAction(&_sequenceManager2, NULL, 4002, &_miranda, NULL); + } + + if (_globals->getFlag(42)) + _hotspot8.setAction(&_action3); + else if (_globals->getFlag(91)) + _hotspot8.remove(); + break; + + case 4010: + _miranda.setPosition(Common::Point(-210, 139)); + + _guardRock.postInit(); + _guardRock.setVisage(4001); + _guardRock.animate(ANIM_MODE_1, NULL); + _guardRock.setObjectWrapper(new SceneObjectWrapper()); + _guardRock.setPosition(Common::Point(314, 132)); + + _hotspot2.postInit(); + _hotspot2.setVisage(4018); + _hotspot2._strip = 1; + _hotspot2._numFrames = 5; + _hotspot2.setPosition(Common::Point(182, 146)); + _hotspot2.setAction(&_action10); + + setAction(&_action2); + break; + + case 4025: + if (RING_INVENTORY._ladder._sceneNumber == 4000) + _hotspot8.remove(); + + _globals->_player.setPosition(Common::Point(260, 185)); + + if (!_globals->getFlag(36) && !_globals->getFlag(43)) + _miranda.setPosition(Common::Point(246, 146)); + + if (_globals->getFlag(96)) { + _olo.postInit(); + _olo.setVisage(4006); + _olo.animate(ANIM_MODE_1, NULL); + _olo.setObjectWrapper(new SceneObjectWrapper()); + _olo.setPosition(Common::Point(290, 163)); + } + + if (_globals->_stripNum == 4025) { + _soundHandler1.play(182); + _forceField.remove(); + + _hotspot5.postInit(); + _hotspot5.setVisage(2801); + _hotspot5.animate(ANIM_MODE_1, NULL); + _hotspot5.setObjectWrapper(new SceneObjectWrapper()); + _hotspot5._moveDiff.x = 4; + _hotspot5.setPosition(Common::Point(-18, 86)); + + _globals->_player.disableControl(); + + if (!_globals->getFlag(96)) { + _olo.postInit(); + _olo.setVisage(4006); + _olo.animate(ANIM_MODE_1, NULL); + _olo.setObjectWrapper(new SceneObjectWrapper()); + _olo.setPosition(Common::Point(195, 128)); + + Common::Point pt(268, 157); + PlayerMover *mover = new PlayerMover(); + _olo.addMover(mover, &pt, NULL); + } + + _sceneMode = 4003; + setAction(&_sequenceManager1, this, 4003, &_hotspot5, NULL); + } else if (_globals->getFlag(96)) { + _globals->_player.disableControl(); + _sceneMode = 4013; + setAction(&_sequenceManager1, this, 4013, &_olo, NULL); + } + + _globals->clearFlag(96); + break; + + case 4045: + _globals->_player.enableControl(); + + if (RING_INVENTORY._ladder._sceneNumber != 4000) { + _hotspot8.setVisage(4017); + _hotspot8.animate(ANIM_MODE_1, NULL); + _hotspot8.setPosition(Common::Point(199, 188)); + _hotspot8.setAction(&_action3); + } + + _globals->_player.setPosition(Common::Point(208, 153)); + if (!_globals->getFlag(36) && !_globals->getFlag(43)) + _miranda.setPosition(Common::Point(246, 146)); + + if (_globals->getFlag(39)) { + // Ollo follows Quinn and gives explanations on the Tech. + _globals->clearFlag(39); + + _olo.postInit(); + _olo.setVisage(4006); + _olo.animate(ANIM_MODE_1, NULL); + _olo.setObjectWrapper(new SceneObjectWrapper()); + _olo.setPosition(Common::Point(219, 150)); + + _sceneMode = 4010; + _globals->_player.disableControl(); + // This is the buggy animation where Miranda comments the Tech even + // if she's not in the room but in the lander. + setAction(&_sequenceManager1, this, 4010, &_globals->_player, &_olo, NULL); + } + + if (_globals->_stripNum == 4000) { + _globals->_stripNum = 0; + + _guardRock.postInit(); + _guardRock.setVisage(4001); + _guardRock.animate(ANIM_MODE_1, NULL); + _guardRock.setObjectWrapper(new SceneObjectWrapper()); + _guardRock.setPosition(Common::Point(231, 159)); + _guardRock.setStrip(4); + + setAction(&_action12); + } + break; + + case 4050: + _globals->_soundHandler.play(155); + _globals->_player.disableControl(); + + if (_globals->_stripNum == 4050) { + _globals->_player.setVisage(4008); + _globals->_player.setStrip(4); + _globals->_player.setFrame(_globals->_player.getFrameCount()); + _globals->_player.fixPriority(16); + _globals->_player.setPosition(Common::Point(260, 55)); + + _sceneMode = 4007; + setAction(&_sequenceManager1, this, 4007, &_globals->_player, NULL); + } else { + _globals->_player.setPosition(Common::Point(208, 153)); + _globals->_player.enableControl(); + } + + if (RING_INVENTORY._ladder._sceneNumber != 4000) + _hotspot8.remove(); + break; + + case 4100: + _globals->_player.enableControl(); + _globals->_player.setPosition(Common::Point(270, 155)); + + if (_globals->getFlag(42) && (RING_INVENTORY._ladder._sceneNumber != 4000)) { + _hotspot8.setVisage(4017); + _hotspot8.animate(ANIM_MODE_1, NULL); + _hotspot8.setPosition(Common::Point(244, 151)); + _hotspot8.setAction(&_action3); + } + + if (!_globals->getFlag(36) && !_globals->getFlag(43)) + _miranda.setPosition(Common::Point(246, 146)); + break; + + default: + _globals->_soundHandler.play(155); + + _lander.postInit(); + _lander.setVisage(4002); + _lander._moveDiff = Common::Point(10, 10); + _lander.setPosition(Common::Point(-100, 80)); + _lander.changeZoom(-1); + _lander.setPosition(Common::Point(130, -1)); + _lander.animate(ANIM_MODE_2, NULL); + + if (_globals->_stripNum == 9000) { + _olo.postInit(); + _olo.setVisage(4006); + _olo.setPosition(Common::Point(235, 153)); + + _guardRock.postInit(); + _guardRock.setVisage(4001); + _guardRock.setStrip(3); + _guardRock.setPosition(Common::Point(255, 153)); + + setAction(&_action11); + RING_INVENTORY._ladder._sceneNumber = 4100; + RING_INVENTORY._rope._sceneNumber = 4150; + + _soundHandler1.play(156); + + _forceField.postInit(); + _forceField.setVisage(4000); + _forceField.setStrip(4); + _forceField.setPosition(Common::Point(312, 174)); + _forceField.fixPriority(200); + _forceField.animate(ANIM_MODE_8, 0, NULL); + } else { + if (!_globals->getFlag(37)) { + _hotspot2.postInit(); + _hotspot2.setVisage(4018); + _hotspot2._strip = 1; + _hotspot2._numFrames = 5; + _hotspot2.setPosition(Common::Point(182, 146)); + _hotspot2.setAction(&_action10); + } + _miranda.setPosition(Common::Point(-210, 139)); + setAction(&_action13); + } + + break; + } + + if (RING_INVENTORY._ladder._sceneNumber == 4000) { + _ladder.postInit(); + _ladder.setVisage(4000); + _ladder.setStrip(5); + _ladder.setPosition(Common::Point(245, 147)); + + _globals->_sceneItems.push_back(&_ladder); + } + + if (RING_INVENTORY._rope._sceneNumber == 4000) { + _rope.postInit(); + _rope.setVisage(4000); + _rope.setStrip(7); + _rope.fixPriority(1); + _rope.setPosition(Common::Point(268, 44)); + } + + _globals->_sceneItems.addItems(&_hotspot8, &_hotspot17, &_hotspot18, &_hotspot14, &_hotspot15, + &_hotspot16, &_theTech, &_hotspot13, &_hotspot21, &_hotspot20, &_hotspot22, &_hotspot23, + &_hotspot24, &_hotspot25, &_hotspot19, &_hotspot26, NULL); +} + +void Scene4000::signal() { + switch (_sceneMode) { + case 4010: + _globals->setFlag(38); + _olo.remove(); + // Deliberate fall-through + case 4001: + _globals->_player.enableControl(); + break; + case 4002: + case 4011: + break; + case 4003: + _sceneMode = 4014; + setAction(&_sequenceManager1, this, 4014, &_globals->_player, &_hotspot5, NULL); + break; + case 4004: + RING_INVENTORY._ladder._sceneNumber = 4000; + // Deliberate fall-through + case 4007: + _globals->_player._uiEnabled = true; + _globals->_events.setCursor(CURSOR_USE); + _globals->setFlag(40); + break; + case 4005: + _globals->_player.enableControl(); + _globals->_events.setCursor(CURSOR_WALK); + _globals->clearFlag(40); + break; + case 4006: + _globals->_sceneManager.changeScene(4045); + break; + case 4008: + _globals->_sceneManager.changeScene(2320); + break; + case 4009: + _globals->_sceneManager.changeScene(2200); + break; + case 4012: + _globals->_player.checkAngle(&_theTech); + _globals->_sceneManager.changeScene(4025); + break; + case 4013: + _globals->_player.enableControl(); + _olo.remove(); + break; + case 4014: + _globals->_sceneManager.changeScene(4250); + break; + case 4015: + ADD_MOVER_NULL(_miranda, 0, _miranda._position.y - 5); + break; + } +} + +void Scene4000::dispatch() { + Scene::dispatch(); + + if ((_globals->_player.getRegionIndex() == 10) || (_globals->_player.getRegionIndex() == 6)) + _globals->_player.fixPriority(200); + if (_globals->_player.getRegionIndex() == 11) + _globals->_player.fixPriority(-1); + if (_globals->_player.getRegionIndex() == 5) + _globals->_player.fixPriority(94); + + if (_globals->_sceneObjects->contains(&_hotspot5)) { + if ((_hotspot5.getRegionIndex() == 10) || (_hotspot5.getRegionIndex() == 6)) + _hotspot5.fixPriority(200); + if (_hotspot5.getRegionIndex() == 11) + _hotspot5.fixPriority(-1); + if (_hotspot5.getRegionIndex() == 5) + _hotspot5.fixPriority(94); + } + + if (_globals->_sceneObjects->contains(&_miranda)) { + if (!_miranda._mover) + _miranda.checkAngle(&_globals->_player); + if (!_action && _globals->_player.getRegionIndex() == 23) { + ADD_MOVER_NULL(_miranda, 204, 186); + } + + if ((_miranda.getRegionIndex() == 10) || (_miranda.getRegionIndex() == 6)) + _miranda.fixPriority(200); + if (_miranda.getRegionIndex() == 11) + _miranda.fixPriority(-1); + if (_miranda.getRegionIndex() == 5) + _miranda.fixPriority(94); + } + + if (!_action) { + if ((RING_INVENTORY._peg._sceneNumber == 1) && _globals->getFlag(34) && + _globals->getFlag(37) && !_globals->getFlag(40)) { + _globals->_player.disableControl(); + _soundHandler1.play(177); + _globals->_soundHandler.play(178); + + setAction(&_action1); + } + + if (_globals->_player.getRegionIndex() == 2) + _globals->_sceneManager.changeScene(4045); + if (_globals->_player.getRegionIndex() == 15) + _globals->_sceneManager.changeScene(4100); + + if ((_globals->_player._position.x <= 5) && (_globals->_player._position.y < 100)) { + _globals->_player.disableControl(); + + if (!_globals->_sceneObjects->contains(&_miranda) || (_miranda._position.y <= 100)) { + _sceneMode = 4008; + setAction(&_sequenceManager1, this, 4008, &_globals->_player, NULL); + } else { + _sceneMode = 4015; + _globals->_player.addMover(NULL); + setAction(&_sequenceManager1, this, 4015, &_globals->_player, &_miranda, NULL); + } + } + } +} + +/*-------------------------------------------------------------------------- + * Scene 4010 - Village - Outside Lander + * + *--------------------------------------------------------------------------*/ + +void Scene4010::postInit(SceneObjectList *OwnerList) { + loadScene(4010); + Scene::postInit(); + setZoomPercents(0, 20, 70, 50); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerMText); + _speakerSText._npc = &_hotspot1; + _speakerMText._npc = &_hotspot2; + _speakerQText._npc = &_globals->_player; + + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(-38, 175)); + _globals->_player.changeZoom(75); + + _hotspot2.postInit(); + _hotspot2.setVisage(2705); + _hotspot2.animate(ANIM_MODE_1, NULL); + _hotspot2.setObjectWrapper(new SceneObjectWrapper()); + _hotspot2._moveDiff = Common::Point(4, 2); + _hotspot2.setPosition(Common::Point(-50, 185)); + _hotspot2.changeZoom(75); + + _hotspot1.postInit(); + _hotspot1.setVisage(2806); + _hotspot1.setPosition(Common::Point(-20, 175)); + _hotspot1.changeZoom(75); + _hotspot1.animate(ANIM_MODE_1, NULL); + _hotspot1.setObjectWrapper(new SceneObjectWrapper()); + + _globals->_player.disableControl(); + setAction(&_sequenceManager, this, 4017, &_globals->_player, &_hotspot1, &_hotspot2, NULL); +} + +void Scene4010::signal() { + _globals->_sceneManager.changeScene(4000); +} + +/*-------------------------------------------------------------------------- + * Scene 4025 - Village - Puzzle Board + * + *--------------------------------------------------------------------------*/ + +void Scene4025::Action1::signal() { + Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_armHotspot._strip = scene->_pegPtr->_armStrip; + scene->_armHotspot._frame = 4; + scene->_armHotspot.animate(ANIM_MODE_4, 2, -1, this); + + if (scene->_pegPtr->_armStrip > 3) { + if (scene->_hole1._armStrip == scene->_pegPtr->_armStrip) + scene->_hole1._pegPtr = NULL; + if (scene->_hole2._armStrip == scene->_pegPtr->_armStrip) + scene->_hole2._pegPtr = NULL; + if (scene->_hole3._armStrip == scene->_pegPtr->_armStrip) + scene->_hole3._pegPtr = NULL; + if (scene->_hole4._armStrip == scene->_pegPtr->_armStrip) + scene->_hole4._pegPtr = NULL; + if (scene->_hole5._armStrip == scene->_pegPtr->_armStrip) + scene->_hole5._pegPtr = NULL; + } + break; + case 1: + scene->_pegPtr->hide(); + + if (scene->_pegPtr2) { + if (scene->_pegPtr->_armStrip == 3) + scene->_pegPtr2->_strip = 2; + + scene->_pegPtr2->setPosition(scene->_pegPtr->_position); + scene->_pegPtr2->show(); + scene->_pegPtr2->_armStrip = scene->_pegPtr->_armStrip; + } + + scene->_pegPtr->_armStrip = 0; + scene->_pegPtr->setPosition(Common::Point(-10, -10)); + scene->_pegPtr2 = scene->_pegPtr; + scene->_armHotspot.animate(ANIM_MODE_5, this); + break; + + case 2: + _globals->_player._uiEnabled = true; + _globals->_events.setCursor(CURSOR_USE); + remove(); + break; + } +} + +void Scene4025::Action2::signal() { + Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_armHotspot._strip = scene->_holePtr->_armStrip; + scene->_armHotspot.animate(ANIM_MODE_4, 2, -1, this); + break; + case 1: + if (!scene->_pegPtr2) { + // Getting a peg from a hole + scene->_holePtr->_pegPtr->hide(); + scene->_pegPtr = scene->_holePtr->_pegPtr; + scene->_pegPtr->_armStrip = 0; + scene->_pegPtr->setPosition(Common::Point(-10, -10)); + scene->_pegPtr2 = scene->_holePtr->_pegPtr; + scene->_holePtr->_pegPtr = NULL; + } else { + // Placing a peg into a hole + scene->_pegPtr2 = NULL; + if (scene->_holePtr->_pegPtr) { + scene->_holePtr->_pegPtr->hide(); + scene->_pegPtr2 = scene->_holePtr->_pegPtr; + } + + assert(scene->_pegPtr); + scene->_pegPtr->setPosition(scene->_holePtr->_newPosition); + scene->_pegPtr->setStrip(1); + scene->_pegPtr->show(); + scene->_pegPtr->_armStrip = scene->_holePtr->_armStrip; + + scene->_holePtr->_pegPtr = scene->_pegPtr; + scene->_pegPtr = scene->_pegPtr2; + } + scene->_armHotspot.animate(ANIM_MODE_5, this); + break; + case 2: + _globals->_player._uiEnabled = true; + _globals->_events.setCursor(CURSOR_USE); + remove(); + break; + } +} + +void Scene4025::Action3::signal() { + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + _globals->_scenePalette.addRotation(64, 111, -1); + setDelay(120); + break; + case 1: + _globals->clearFlag(34); + _globals->_stripNum = 4025; + _globals->_sceneManager.changeScene(4000); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4025::Hole::synchronize(Serializer &s) { + SceneObject::synchronize(s); + SYNC_POINTER(_pegPtr); + s.syncAsSint16LE(_armStrip); + s.syncAsSint16LE(_newPosition.x); + s.syncAsSint16LE(_newPosition.y); +} + +void Scene4025::Hole::doAction(int action) { + Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4025, 3); + break; + case CURSOR_USE: + if (!scene->_pegPtr && !_pegPtr) { + setAction(&scene->_sequenceManager, scene, 4028, NULL); + } else { + _globals->_player.disableControl(); + scene->_holePtr = this; + scene->setAction(&scene->_action2); + } + break; + case OBJECT_PEG: + if (!scene->_pegPtr2) { + _globals->_player.disableControl(); + _globals->_events.setCursor(CURSOR_USE); + RING_INVENTORY._peg._sceneNumber = 4025; + + scene->_pegPtr = &scene->_peg5; + scene->_holePtr = this; + scene->_pegPtr->_armStrip = 0; + scene->_pegPtr2 = scene->_pegPtr; + + scene->setAction(&scene->_action2); + } else { + scene->_sceneMode = 4027; + scene->setAction(&scene->_sequenceManager, scene, 4027, NULL); + } + break; + } +} + +void Scene4025::Peg::synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsSint16LE(_field88); + s.syncAsSint16LE(_armStrip); +} + +void Scene4025::Peg::doAction(int action) { + Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4025, 1); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->_pegPtr = this; + scene->setAction(&scene->_action1); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene4025::Scene4025() : Scene() { + _holePtr = NULL; + _pegPtr = _pegPtr2 = NULL; +} + +void Scene4025::postInit(SceneObjectList *OwnerList) { + loadScene(4025); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _globals->_events.setCursor(CURSOR_USE); + _pegPtr = _pegPtr2 = NULL; + + _peg1.postInit(); + _peg1._field88 = 1; + _peg1.setVisage(4025); + _peg1.setStrip(2); + _peg1.setFrame(1); + _peg1.setPosition(Common::Point(203, 61)); + + _peg2.postInit(); + _peg2._field88 = 4; + _peg2.setVisage(4025); + _peg2.setStrip(2); + _peg2.setFrame(2); + _peg2.setPosition(Common::Point(195, 57)); + + _peg3.postInit(); + _peg3._field88 = 0; + _peg3.setVisage(4025); + _peg3.setStrip(2); + _peg3.setFrame(3); + _peg3.setPosition(Common::Point(202, 66)); + + _peg4.postInit(); + _peg4._field88 = 3; + _peg4.setVisage(4025); + _peg4.setStrip(2); + _peg4.setFrame(4); + _peg4.setPosition(Common::Point(194, 68)); + + _peg5.postInit(); + _peg5._field88 = 2; + _peg5.setVisage(4025); + _peg5.setStrip(1); + _peg5.setFrame(5); + _peg5.hide(); + + // Hole N-W + _hole1.postInit(); + _hole1.setVisage(4025); + _hole1.setStrip(1); + _hole1.setFrame2(6); + _hole1.setPosition(Common::Point(123, 51)); + _hole1._pegPtr = NULL; + _hole1._newPosition = Common::Point(123, 44); + _hole1._armStrip = 8; + + // Hole N-E + _hole2.postInit(); + _hole2.setVisage(4025); + _hole2.setStrip(1); + _hole2.setFrame2(7); + _hole2.setPosition(Common::Point(167, 51)); + _hole2._pegPtr = NULL; + _hole2._newPosition = Common::Point(166, 44); + _hole2._armStrip = 7; + + // Hole Center + _hole3.postInit(); + _hole3.setVisage(4025); + _hole3.setStrip(1); + _hole3.setFrame2(8); + _hole3.setPosition(Common::Point(145, 69)); + _hole3._pegPtr = NULL; + _hole3._newPosition = Common::Point(145, 60); + _hole3._armStrip = 6; + + // Hole S-W + _hole4.postInit(); + _hole4.setVisage(4025); + _hole4.setStrip(1); + _hole4.setFrame2(9); + _hole4.setPosition(Common::Point(123, 87)); + _hole4._pegPtr = NULL; + _hole4._newPosition = Common::Point(123, 80); + _hole4._armStrip = 5; + + // Hole S-E + _hole5.postInit(); + _hole5.setVisage(4025); + _hole5.setStrip(1); + _hole5.setFrame2(10); + _hole5.setPosition(Common::Point(167, 87)); + _hole5._pegPtr = NULL; + _hole5._newPosition = Common::Point(166, 80); + _hole5._armStrip = 4; + + _hole1.fixPriority(1); + _hole2.fixPriority(1); + _hole3.fixPriority(1); + _hole4.fixPriority(1); + _hole5.fixPriority(1); + + _armHotspot.postInit(); + _armHotspot.setVisage(4025); + _armHotspot.setPosition(Common::Point(190, 161)); + _armHotspot.setStrip(3); + _armHotspot.setFrame(4); + + _globals->_sceneItems.addItems(&_hole1, &_hole2, &_hole3, &_hole4, &_hole5, + &_peg1, &_peg2, &_peg3, &_peg4, &_peg5, NULL); + + _globals->_player._uiEnabled = true; + _globals->_player.disableControl(); + setAction(&_sequenceManager, this, 4026, NULL); +} + +void Scene4025::synchronize(Serializer &s) { + Scene::synchronize(s); + SYNC_POINTER(_pegPtr); + SYNC_POINTER(_pegPtr2); + SYNC_POINTER(_holePtr); +} + +void Scene4025::remove() { + _globals->_scenePalette.clearListeners(); + Scene::remove(); +} + +void Scene4025::signal() { + if (_sceneMode != 4027) { + if (_sceneMode != 4028) { + _gfxButton.setText(EXIT_MSG); + _gfxButton._bounds.center(144, 107); + _gfxButton.draw(); + _gfxButton._bounds.expandPanes(); + } + + _globals->_player._uiEnabled = true; + } + + _globals->_events.setCursor(CURSOR_USE); +} + +void Scene4025::process(Event &event) { + Scene::process(event); + + if (_gfxButton.process(event)) { + if (RING_INVENTORY._peg._sceneNumber == 4025) + RING_INVENTORY._peg._sceneNumber = 1; + + _globals->_sceneManager.changeScene(4000); + } +} + +void Scene4025::dispatch() { + if (!_action && (_peg1._armStrip == 7) && (_peg2._armStrip == 4) && (_peg3._armStrip == 8) && + (_peg4._armStrip == 5) && (_peg5._armStrip == 6)) + setAction(&_action3); + + Scene::dispatch(); +} + +/*-------------------------------------------------------------------------- + * Scene 4045 - Village - Temple Antechamber + * + *--------------------------------------------------------------------------*/ + +void Scene4045::Action1::signal() { + Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(60); + break; + case 1: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(4040, this, scene); + break; + case 2: + scene->_olloFace.animate(ANIM_MODE_NONE, NULL); + scene->_hotspot4.animate(ANIM_MODE_5, this); + break; + case 3: + setDelay(60); + break; + case 4: + scene->_hotspot4.animate(ANIM_MODE_6, this); + break; + case 5: + ADD_MOVER(_globals->_player, 150, 300); + break; + case 6: + _globals->_stripNum = 4000; + _globals->_sceneManager.changeScene(4000); + remove(); + break; + } +} + +void Scene4045::Action2::signal() { + Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(15); + break; + case 1: + scene->_stripManager.start(_globals->_stripNum, this, scene); + break; + case 2: + scene->_olloFace.animate(ANIM_MODE_NONE, NULL); + setDelay(10); + break; + case 3: + if (_globals->getFlag(38)) { + _globals->_player.enableControl(); + remove(); + } else { + ADD_MOVER(_globals->_player, 150, 300); + } + break; + case 4: + _globals->setFlag(39); + _globals->_sceneManager.changeScene(4000); + break; + } +} + +void Scene4045::Action3::signal() { + Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + scene->_hotspot4.animate(ANIM_MODE_5, this); + break; + case 1: + scene->_stripManager.start(4504, this, scene); + break; + case 2: + scene->_hotspot4.animate(ANIM_MODE_6, NULL); + scene->_olloFace.animate(ANIM_MODE_NONE, NULL); + ADD_MOVER(_globals->_player, 91, 1264); + break; + case 3: + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4045::OlloStand::doAction(int action) { + Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(4045, 19); + break; + case CURSOR_LOOK: + SceneItem::display2(4045, (_strip == 1) ? 5 : 14); + break; + case CURSOR_USE: + SceneItem::display2(4045, 18); + break; + case CURSOR_TALK: + if (_strip == 5) { + setStrip(6); + animate(ANIM_MODE_NONE, NULL); + } + if (_globals->_player._position.y < 135) { + scene->_sceneMode = 4046; + _numFrames = 10; + _globals->_player.disableControl(); + + scene->setAction(&scene->_sequenceManager, this, 4046, &_globals->_player, this, NULL); + } else { + if (!_globals->getFlag(31)) { + _globals->setFlag(31); + _globals->_stripNum = 4080; + } else if (!_globals->getFlag(38)) + _globals->_stripNum = 4060; + else + _globals->_stripNum = 4503; + + scene->setAction(&scene->_action2); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4045::Miranda::doAction(int action) { + Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4045, 9); + break; + case CURSOR_TALK: + scene->_sceneMode = 4102; + _globals->_player.disableControl(); + scene->setAction(&scene->_sequenceManager, scene, 4104, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4045::Necklace::doAction(int action) { + Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4045, 17); + break; + case CURSOR_USE: + if (_globals->_player._position.y < 135) { + SceneItem::display2(4045, 16); + RING_INVENTORY._peg._sceneNumber = 1; + _globals->_events.setCursor(CURSOR_WALK); + remove(); + } else { + scene->_sceneMode = 4047; + _globals->_player.disableControl(); + scene->setAction(&scene->_sequenceManager, scene, 4047, &_globals->_player, &scene->_olloStand, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene4045::Scene4045() : + _flame(0, CURSOR_LOOK, 4045, 1, CURSOR_USE, 4100, 21, LIST_END), + _hotspot7(9, CURSOR_LOOK, 4045, 0, CURSOR_USE, 4045, 15, LIST_END), + _hotspot8(10, CURSOR_LOOK, 4045, 2, LIST_END), + _hotspot9(11, CURSOR_LOOK, 4045, 3, CURSOR_USE, 4045, 15, LIST_END), + _hotspot10(12, CURSOR_LOOK, 4045, 4, CURSOR_USE, 4100, 19, LIST_END), + _hotspot11(13, CURSOR_LOOK, 4045, 6, CURSOR_USE, 4045, 15, LIST_END), + _hotspot12(14, CURSOR_LOOK, 4045, 7, CURSOR_USE, 4150, 29, LIST_END), + _hotspot13(15, CURSOR_LOOK, 4045, 8, CURSOR_USE, 4100, 19, LIST_END), + _hotspot14(0, CURSOR_LOOK, 4045, 10, LIST_END) { + + _hotspot14.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); +} + +void Scene4045::postInit(SceneObjectList *OwnerList) { + loadScene(4045); + Scene::postInit(); + setZoomPercents(100, 60, 200, 100); + + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerML); + _stripManager.addSpeaker(&_speakerPR); + _stripManager.addSpeaker(&_speakerPText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.setCallback(this); + + _speakerQText._textPos.y = 140; + + _flame.postInit(); + _flame.setVisage(4045); + _flame.setPosition(Common::Point(47, 111)); + _flame.animate(ANIM_MODE_2, NULL); + _flame.fixPriority(156); + _globals->_sceneItems.push_back(&_flame); + + _globals->_player.postInit(); + _globals->_player.setVisage(4200); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player._moveDiff = Common::Point(7, 4); + + _olloStand.postInit(); + _olloStand.setVisage(4051); + + _olloFace.postInit(); + _olloFace.setVisage(4051); + _olloFace.setStrip(4); + _olloFace.fixPriority(152); + + if(_globals->_sceneManager._previousScene == 4050) { + _globals->_soundHandler.play(155); + _globals->_player.setPosition(Common::Point(72, 128)); + _globals->_player.enableControl(); + + _olloStand.setStrip(5); + _olloStand.setPosition(Common::Point(173, 99)); + _olloStand._numFrames = 1; + _olloStand.animate(ANIM_MODE_2, NULL); + + _olloFace.setPosition(Common::Point(177, 40)); + + if (RING_INVENTORY._peg._sceneNumber == 4045) { + _necklace.postInit(); + _necklace.setVisage(4045); + _necklace.setStrip(2); + _necklace.setPosition(Common::Point(108, 82)); + _globals->_sceneItems.push_back(&_necklace); + } + } else { + _globals->_player.setPosition(Common::Point(108, 192)); + _globals->_player.setStrip(4); + + if (!_globals->getFlag(36) && !_globals->getFlag(43)) { + _miranda.postInit(); + _miranda.setVisage(4102); + _miranda.animate(ANIM_MODE_NONE, NULL); + _miranda.setStrip(3); + _miranda.setFrame(2); + _miranda.changeZoom(-1); + + _miranda.setPosition(Common::Point(66, 209)); + _globals->_sceneItems.push_back(&_miranda); + } + + if (_globals->getFlag(31)) { + // Olo asleep + _olloStand.setVisage(4051); + _olloStand.setStrip(5); + _olloStand.setPosition(Common::Point(173, 99)); + _olloStand._numFrames = 1; + _olloStand.animate(ANIM_MODE_2, NULL); + + _olloFace.setPosition(Common::Point(177, 40)); + + if (RING_INVENTORY._peg._sceneNumber == 4045) { + _necklace.postInit(); + _necklace.setVisage(4045); + _necklace.setStrip(2); + _necklace.setPosition(Common::Point(108, 82)); + _globals->_sceneItems.push_back(&_necklace); + } + } else { + _olloStand.setPosition(Common::Point(186, 149)); + + _hotspot4.postInit(); + _hotspot4.setVisage(4051); + _hotspot4.setStrip(2); + _hotspot4.fixPriority(152); + _hotspot4.setPosition(Common::Point(202, 80)); + + _olloFace.setPosition(Common::Point(192, 77)); + _globals->setFlag(31); + setAction(&_action1); + + _globals->_player.disableControl(); + } + } + + _globals->_sceneItems.addItems(&_olloStand, &_hotspot7, &_hotspot8, &_hotspot9, &_hotspot10, + &_hotspot13, &_hotspot11, &_hotspot12, &_hotspot14, NULL); +} + +void Scene4045::stripCallback(int v) { + switch (v) { + case 1: + _olloFace.animate(ANIM_MODE_7, 0, NULL); + break; + case 2: + _olloFace.animate(ANIM_MODE_NONE, NULL); + break; + } +} + +void Scene4045::signal() { + switch (_sceneMode) { + case 4046: + case 4047: + _olloFace.animate(ANIM_MODE_NONE, NULL); + break; + case 4050: + _globals->_sceneManager.changeScene(4000); + break; + case 4102: + _globals->_player.enableControl(); + break; + } +} + +void Scene4045::dispatch() { + if (!_action) { + if (_globals->_player.getRegionIndex() == 8) { + _globals->_player.addMover(NULL); + if (_olloStand._strip != 1) { + _globals->_player.disableControl(); + _sceneMode = 4046; + _olloStand._numFrames = 10; + setAction(&_sequenceManager, this, 4046, &_globals->_player, &_olloStand, NULL); + } else { + setAction(&_action3); + } + } + + if (_globals->_player.getRegionIndex() == 10) + _globals->_sceneManager.changeScene(4050); + if (_globals->_player._position.y >= 196) { + _sceneMode = 4050; + _globals->_player.disableControl(); + setAction(&_sequenceManager, this, 4105, &_globals->_player, NULL); + } + } + + Scene::dispatch(); +} + +/*-------------------------------------------------------------------------- + * Scene 4050 - Village - Outside + * + *--------------------------------------------------------------------------*/ + +void Scene4050::Action1::signal() { + // "Map" on the wall + Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: { + Common::Point pt(204, 152); + PlayerMover *mover = new PlayerMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_player.checkAngle(&scene->_hotspot17); + + scene->_hotspot14.postInit(); + scene->_hotspot14.setVisage(4050); + scene->_hotspot14.setStrip(2); + scene->_hotspot14.setPosition(Common::Point(91, 154)); + scene->_hotspot14.fixPriority(200); + setDelay(10); + break; + case 3: + _globals->_events.waitForPress(); + _globals->setFlag(45); + scene->_hotspot14.remove(); + + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4050::Action2::signal() { + // Climb down the rope + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(120); + break; + case 1: + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + _globals->_player.setVisage(4202); + _globals->_player.changeZoom(100); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(192, 130)); + + ADD_MOVER(_globals->_player, 215, 130); + break; + case 3: + _globals->_player.setVisage(4052); + _globals->_player.setStrip(5); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(236, 130)); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 4: + _globals->_player.setVisage(4202); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setPosition(Common::Point(210, 185)); + _globals->_player.fixPriority(-1); + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4050::Action3::signal() { + // Climb up the rope + switch (_actionIndex++) { + case 0: + ADD_PLAYER_MOVER(210, 185); + break; + case 1: + _globals->_player.fixPriority(200); + _globals->_player.setVisage(4052); + _globals->_player.setStrip(5); + _globals->_player.changeZoom(100); + _globals->_player.setFrame(_globals->_player.getFrameCount()); + _globals->_player.setPosition(Common::Point(236, 130)); + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 2: + _globals->_player.setVisage(4202); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(215, 130)); + ADD_MOVER(_globals->_player, 212, 130); + break; + case 3: + _globals->_stripNum = 4050; + _globals->_sceneManager.changeScene(4000); + break; + } +} + +void Scene4050::Action4::signal() { + Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + ADD_MOVER(_globals->_player, 189, 135); + _globals->_player.fixPriority(200); + break; + case 1: + _globals->_player._moveDiff.y = 3; + _globals->_player.setStrip2(3); + _globals->_player._frame = 1; + _globals->_player.setPosition(Common::Point(189, 129)); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + _globals->_player.setVisage(4202); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(192, 130)); + _globals->_player.changeZoom(100); + ADD_MOVER(_globals->_player, 215, 130); + + scene->_hotspot16.postInit(); + scene->_hotspot16.setVisage(4052); + scene->_hotspot16.animate(ANIM_MODE_1, NULL); + scene->_hotspot16.setStrip2(6); + scene->_hotspot16.setPosition(Common::Point(160, 240)); + ADD_MOVER(scene->_hotspot16, 172, 188); + break; + case 3: + _globals->_player.setVisage(4052); + _globals->_player.setStrip(5); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(238, 130)); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 4: + _globals->_player.setVisage(4052); + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(216, 184)); + _globals->_player.fixPriority(-1); + break; + case 5: + scene->_hotspot16.setStrip2(4); + scene->_hotspot16.setFrame(1); + scene->_hotspot16.animate(ANIM_MODE_4, 4, 1, this);; + break; + case 6: + scene->_hotspot16.animate(ANIM_MODE_5, NULL); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 7: + _globals->_player.setVisage(4202); + _globals->_player.setStrip(6); + _globals->_player.setFrame(1); + + scene->_stripManager.start(4051, this); + break; + case 8: + setDelay(15); + break; + case 9: + _globals->_sceneManager.changeScene(4000); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4050::Hotspot15::doAction(int action) { + Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4050, 14); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + setAction(&scene->_action3); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4050::Hotspot17::doAction(int action) { + Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + scene->setAction(&scene->_action1); + break; + case CURSOR_USE: + SceneItem::display2(4050, 24); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene4050::Scene4050() : + _hotspot1(0, CURSOR_LOOK, 4050, 0, LIST_END), + _hotspot2(0, CURSOR_LOOK, 4050, 1, CURSOR_USE, 4050, 15, LIST_END), + _hotspot3(0, CURSOR_LOOK, 4050, 2, CURSOR_USE, 4050, 16, LIST_END), + _hotspot4(0, CURSOR_LOOK, 4050, 4, LIST_END), + _hotspot5(0, CURSOR_LOOK, 4050, 5, LIST_END), + _hotspot6(0, CURSOR_LOOK, 4050, 5, LIST_END), + _hotspot7(0, CURSOR_LOOK, 4050, 6, CURSOR_USE, 4050, 18, LIST_END), + _hotspot8(0, CURSOR_LOOK, 4050, 7, CURSOR_USE, 4050, 19, LIST_END), + _hotspot9(0, CURSOR_LOOK, 4050, 8, CURSOR_USE, 4050, 20, LIST_END), + _hotspot10(0, CURSOR_LOOK, 4050, 9, CURSOR_USE, 4050, 21, LIST_END), + _hotspot11(0, CURSOR_LOOK, 4050, 10, CURSOR_USE, 4050, 22, LIST_END), + _hotspot12(0, CURSOR_LOOK, 4050, 11, CURSOR_USE, 4050, 23, LIST_END), + _hotspot13(0, CURSOR_LOOK, 4050, 3, CURSOR_USE, 4050, 17, LIST_END) { +} + +void Scene4050::postInit(SceneObjectList *OwnerList) { + loadScene(4050); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerPText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerGameText); + + _globals->_player.postInit(); + + switch (_globals->_sceneManager._previousScene) { + case 4000: + if (_globals->getFlag(41)) { + // Using a rope + _hotspot15.postInit(); + _hotspot15.setVisage(4054); + _hotspot15.setPosition(Common::Point(206, 103)); + _globals->_sceneItems.push_back(&_hotspot15); + + _globals->_player.setVisage(4008); + _globals->_player.setPosition(Common::Point(206, 62)); + _globals->_player.changeZoom(130); + _globals->_player.fixPriority(200); + _globals->_player.setStrip(2); + + setAction(&_action2); + _globals->_soundHandler.play(175); + } else { + // Without the rope + _globals->_player.setVisage(5315); + _globals->_player.setPosition(Common::Point(189, 83)); + _globals->_player.changeZoom(130); + _globals->_player.setStrip2(2); + _globals->_player._moveDiff.y = 10; + _globals->_player.animate(ANIM_MODE_2, NULL); + + setAction(&_action4); + _globals->_soundHandler.play(176); + } + break; + case 4045: + _hotspot15.postInit(); + _hotspot15.setVisage(4054); + _hotspot15.setPosition(Common::Point(206, 103)); + _globals->_sceneItems.push_back(&_hotspot15); + + _globals->_player.setVisage(4202); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(193, 193)); + + _globals->_soundHandler.play(175); + break; + default: + break; + } + + _hotspot13.postInit(); + _hotspot13.setVisage(4053); + _hotspot13.animate(ANIM_MODE_2, NULL); + _hotspot13.setPosition(Common::Point(190, 97)); + + _hotspot17.postInit(); + _hotspot17.setVisage(4050); + _hotspot17.setPosition(Common::Point(209, 119)); + _hotspot17.fixPriority(2); + + _hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot2.setBounds(Rect(150, 25, 198, 125)); + _hotspot3.setBounds(Rect(56, 94, 88, 153)); + _hotspot4.setBounds(Rect(170, 7, 209, 18)); + _hotspot5.setBounds(Rect(190, 72, 212, 92)); + _hotspot6.setBounds(Rect(122, 75, 145, 93)); + _hotspot7.setBounds(Rect(109, 103, 263, 158)); + _hotspot8.setBounds(Rect(157, 160, 213, 173)); + _hotspot9.setBounds(Rect(95, 157, 120, 178)); + _hotspot10.setBounds(Rect(278, 43, 310, 115)); + _hotspot11.setBounds(Rect(263, 105, 279, 147)); + _hotspot12.setBounds(Rect(258, 154, 307, 180)); + + _globals->_sceneItems.addItems(&_hotspot17, &_hotspot12, &_hotspot11, &_hotspot10, &_hotspot13, + &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot6, &_hotspot8, &_hotspot9, + &_hotspot7, &_hotspot1, NULL); +} + +void Scene4050::signal() { + if (_sceneMode == 4050) + _globals->_sceneManager.changeScene(4045); +} + +void Scene4050::dispatch() { + if (!_action) { + if ((_globals->_player._canWalk) && (_globals->_player._position.y > 196)) { + _sceneMode = 4050; + _globals->_player.disableControl(); + + Common::Point pt(160, 275); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + } + } + Scene::dispatch(); +} + +/*-------------------------------------------------------------------------- + * Scene 4100 - Village - Hut + * + *--------------------------------------------------------------------------*/ + +void Scene4100::Action1::signal() { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(10); + break; + case 1: + scene->_stripManager.start(_globals->_stripNum, this); + break; + case 2: + setDelay(30); + break; + case 3: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4100::Action2::signal() { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_hotspot2.postInit(); + scene->_hotspot2.changeZoom(95); + scene->_hotspot2.setVisage(4120); + scene->_hotspot2.animate(ANIM_MODE_1, NULL); + scene->_hotspot2.setStrip2(4); + scene->_hotspot2.fixPriority(100); + scene->_hotspot2.setPosition(Common::Point(214, 119)); + + setDelay(3); + break; + case 1: + ADD_MOVER(scene->_hotspot2, 249, 131); + break; + case 2: + scene->_hotspot2.setStrip2(3); + scene->_hotspot2.setFrame2(5); + scene->_hotspot2.animate(ANIM_MODE_NONE, NULL); + setDelay(3); + break; + case 3: + remove(); + break; + } +} + + +void Scene4100::Action3::signal() { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->clearFlag(43); + _globals->setFlag(36); + setDelay(15); + break; + case 1: + scene->_stripManager.start(4505, this); + break; + case 2: + setAction(&scene->_action2, this); + break; + case 3: + scene->_stripManager.start(4510, this); + break; + case 4: + setDelay(15); + break; + case 5: + _globals->_sceneManager.changeScene(4150); + break; + default: + break; + } +} + +void Scene4100::Action4::signal() { + // Rock getting drunk + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + scene->_hotspot1.animate(ANIM_MODE_5, this); + break; + case 2: + scene->_hotspot1.setVisage(4105); + scene->_hotspot1.setFrame(1); + scene->_hotspot1.animate(ANIM_MODE_5, this); + break; + case 3: + _globals->clearFlag(43); + _globals->setFlag(42); + scene->_stripManager.start(4119, this); + break; + case 4: + setDelay(15); + break; + case 5: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4100::Action5::signal() { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + ADD_PLAYER_MOVER(58, 151); + break; + case 1: + if (RING_INVENTORY._ladder._sceneNumber == 4100) { + RING_INVENTORY._ladder._sceneNumber = 1; + scene->_ladder.remove(); + } else { + scene->_ladder.postInit(); + scene->_ladder.setVisage(4101); + scene->_ladder.setPosition(Common::Point(49, 144)); + + RING_INVENTORY._ladder._sceneNumber = 4100; + _globals->_sceneItems.push_front(&scene->_ladder); + } + + _globals->_player.enableControl(); + remove(); + break; + } +} + + +void Scene4100::Action6::signal() { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + scene->_stripManager.start(4103, this); + ADD_PLAYER_MOVER(245, 167); + break; + case 1: + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4100::Hotspot1::doAction(int action) { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_STUNNER: + SceneItem::display2(4100, 16); + break; + case OBJECT_ALE: + _globals->_player.disableControl(); + scene->setAction(&scene->_action3); + break; + case CURSOR_LOOK: + SceneItem::display2(4100, _globals->getFlag(42) ? 24 : 12); + break; + case CURSOR_USE: + SceneItem::display2(4100, 22); + break; + case CURSOR_TALK: + if (RING_INVENTORY._peg._sceneNumber == 1) { + _globals->_player.disableControl(); + scene->_sceneMode = 4109; + scene->setAction(&scene->_sequenceManager, scene, 4109, NULL); + } else if (_globals->getFlag(42)) { + scene->_sceneMode = 4102; + scene->setAction(&scene->_sequenceManager, scene, 4102, NULL); + } else { + if (_globals->getFlag(33)) + _globals->_stripNum = 4077; + else if (_globals->getFlag(82)) { + _globals->clearFlag(82); + _globals->_stripNum = 4100; + } else { + _globals->_stripNum = 4075; + _globals->setFlag(33); + } + + scene->setAction(&scene->_action1); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4100::Hotspot2::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + error("*** The Chief's daughter... WOW!"); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4100::Miranda::doAction(int action) { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4100, 14); + break; + case CURSOR_TALK: + scene->_sceneMode = 4102; + scene->setAction(&scene->_sequenceManager, scene, 4104, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4100::Ladder::doAction(int action) { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4100, 2); + break; + case CURSOR_USE: + if (_globals->getFlag(42)) { + _globals->_player.disableControl(); + scene->setAction(&scene->_action5); + } else { + scene->_sceneMode = 4102; + scene->setAction(&scene->_sequenceManager, scene, 4103, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/** + Exit hotspot, South + */ +void Scene4100::Hotspot14::doAction(int action) { + Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4100, 0); + break; + case OBJECT_LADDER: + _globals->_player.disableControl(); + scene->setAction(&scene->_action5); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + + +/*--------------------------------------------------------------------------*/ + +Scene4100::Scene4100() : + _hotspot3(0, CURSOR_LOOK, 4100, 10, CURSOR_USE, 4100, 21, LIST_END), + _hotspot4(0, CURSOR_LOOK, 4100, 8, LIST_END), + _hotspot7(0, CURSOR_USE, 4100, 3, CURSOR_USE, 4150, 29, LIST_END), + _hotspot8(0, CURSOR_LOOK, 4100, 5, LIST_END), + _hotspot9(0, CURSOR_LOOK, 4100, 6, CURSOR_USE, 4100, 20, LIST_END), + _hotspot10(0, CURSOR_LOOK, 4100, 7, CURSOR_USE, 4100, 19, LIST_END), + _hotspot11(0, CURSOR_LOOK, 4100, 8, CURSOR_USE, 4100, 18, LIST_END), + _hotspot12(0, CURSOR_LOOK, 4100, 9, LIST_END), + _hotspot13(0, CURSOR_LOOK, 4100, 11, CURSOR_USE, 4100, 17, LIST_END) { +} + +void Scene4100::postInit(SceneObjectList *OwnerList) { + loadScene(4100); + Scene::postInit(); + setZoomPercents(135, 80, 190, 100); + + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerCHFText); + _stripManager.addSpeaker(&_speakerCDRText); + _stripManager.addSpeaker(&_speakerCDR); + _stripManager.addSpeaker(&_speakerML); + _stripManager.addSpeaker(&_speakerQR); + + _globals->_player.postInit(); + _globals->_player.setVisage(4200); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip(4); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(88, 180)); + _globals->_player._moveDiff = Common::Point(7, 4); + + _hotspot1.postInit(); + _hotspot1.setVisage(4102); + _hotspot1.fixPriority(129); + _hotspot1.setPosition(Common::Point(171, 120)); + + _hotspot3.postInit(); + _hotspot3.setVisage(4130); + _hotspot3.animate(ANIM_MODE_2, NULL); + _hotspot3.fixPriority(200); + _hotspot3.setPosition(Common::Point(272, 110)); + + _hotspot4.postInit(); + _hotspot4.setVisage(4130); + _hotspot4.animate(ANIM_MODE_2, NULL); + _hotspot4.setStrip2(2); + _hotspot4.setPosition(Common::Point(152, 167)); + + if (_globals->getFlag(36)) { + _hotspot1.setVisage(4105); + _hotspot1.setStrip(1); + _hotspot1.setFrame(4); + } else if (!_globals->getFlag(43)) { + _miranda.postInit(); + _miranda.setVisage(4102); + _miranda.setStrip2(3); + _miranda.setFrame(2); + _miranda.setPosition(Common::Point(65, 188)); + + _globals->_sceneItems.push_back(&_miranda); + } + + if (RING_INVENTORY._ladder._sceneNumber == 4100) { + _ladder.postInit(); + _ladder.setVisage(4101); + _ladder.setPosition(Common::Point(49, 144)); + + _globals->_sceneItems.push_back(&_ladder); + } + + _hotspot14.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot7._sceneRegionId = 16; + _hotspot8.setBounds(Rect(90, 0, 211, 113)); + _hotspot9.setBounds(Rect(207, 96, 235, 115)); + _hotspot10.setBounds(Rect(87, 81, 212, 107)); + _hotspot11.setBounds(Rect(61, 148, 243, 168)); + _hotspot12.setBounds(Rect(229, 59, 256, 122)); + _hotspot13.setBounds(Rect(255, 152, 286, 183)); + + _globals->_sceneItems.addItems(&_hotspot3, &_hotspot1, &_hotspot13, &_hotspot12, &_hotspot4, + &_hotspot11, &_hotspot9, &_hotspot7, &_hotspot10, &_hotspot8, &_hotspot14, NULL); + + if (_globals->_sceneManager._previousScene == 4150) { + _globals->_soundHandler.play(155); + + if (!_globals->getFlag(42)) { + _hotspot1.setVisage(4104); + _hotspot1.setPosition(Common::Point(152, 118)); + _hotspot1.setStrip2(-1); + _hotspot1.setFrame2(-1); + _hotspot1.setFrame(1); + + _globals->_player.setStrip(2); + _globals->_player.disableControl(); + setAction(&_action4); + + _globals->clearFlag(43); + } else { + // Workaround: In the original, the mouse is hidden when Quinn + // goes back to scene 4150 then to scene 4100. This enables everything. + _globals->_player.enableControl(); + } + + _globals->_player.setPosition(Common::Point(252, 139)); + _globals->_player.setStrip(2); + } else { + if ((RING_INVENTORY._ale._sceneNumber == 4100) && !_globals->getFlag(42)) { + _globals->_player.disableControl(); + setAction(&_action3); + } + if (_globals->getFlag(35)) { + _globals->_player.disableControl(); + _sceneMode = 4101; + setAction(&_sequenceManager, this, 4101, &_globals->_player, NULL); + } + } +} + +void Scene4100::signal() { + switch (_sceneMode) { + case 4101: + _globals->_sceneManager.changeScene(4000); + break; + case 4102: + case 4103: + case 4109: + _globals->_player.enableControl(); + break; + } +} + +void Scene4100::dispatch() { + if (!_action) { + if ((_globals->_player.getRegionIndex() == 15) && !_globals->getFlag(42)) + setAction(&_action6); + + if (_globals->_player.getRegionIndex() == 8) + _globals->_sceneManager.changeScene(4150); + + if (_globals->_player._position.y >= 196) { + _globals->_player.disableControl(); + _sceneMode = 4101; + setAction(&_sequenceManager, this, 4105, &_globals->_player, NULL); + } + } + + Scene::dispatch(); +} + +/*-------------------------------------------------------------------------- + * Scene 4150 - Village - Bedroom + * + *--------------------------------------------------------------------------*/ + +void Scene4150::Action1::signal() { + Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; + byte adjustData[4] = {0, 0, 0, 0}; + + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + scene->_stripManager.start(4520, this); + break; + case 2: + setDelay(15); + break; + case 3: + setAction(&scene->_action2, this); + break; + case 4: { + for (int idx = 100; idx >= 0; idx -= 5) { + _globals->_scenePalette.fade(adjustData, false, idx); + g_system->updateScreen(); + g_system->delayMillis(10); + } + + scene->_hotspot4.postInit(); + scene->_hotspot4.setVisage(4150); + scene->_hotspot4.setStrip(2); + scene->_hotspot4.setPosition(Common::Point(166, 157)); + + scene->_hotspot1.postInit(); + scene->_hotspot1.setVisage(4156); + scene->_hotspot1.setStrip(1); + scene->_hotspot1.setFrame(1); + + setDelay(120); + break; + } + case 5: + _globals->_scenePalette.loadPalette(4150); + _globals->_scenePalette.refresh(); + setDelay(60); + break; + case 6: + scene->_stripManager.start(4522, this); + break; + case 7: + for (int idx = 100; idx >= 0; idx -= 5) { + _globals->_scenePalette.fade(adjustData, false, idx); + g_system->updateScreen(); + g_system->delayMillis(10); + } + + scene->_hotspot4.remove(); + scene->_hotspot1.setVisage(4157); + scene->_hotspot1.animate(ANIM_MODE_NONE, NULL); + scene->_hotspot1.setStrip(1); + scene->_hotspot1.setFrame(1); + scene->_hotspot1.show(); + + _globals->_player.setVisage(4200); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip(3); + _globals->_player.setPosition(Common::Point(139, 166)); + _globals->_player._moveDiff = Common::Point(7, 3); + _globals->_player.show(); + + setDelay(120); + break; + case 8: + _globals->_scenePalette.loadPalette(4150); + _globals->_scenePalette.refresh(); + setDelay(30); + break; + case 9: + scene->_stripManager.start(4523, this); + break; + case 10: + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player._moveDiff = Common::Point(7, 4); + _globals->_player.setStrip(3); + _globals->_player.enableControl(); + + remove(); + break; + } +} + +void Scene4150::Action2::signal() { + Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(3); + break; + case 1: + scene->_hotspot1.setVisage(4152); + scene->_hotspot1.setStrip(1); + scene->_hotspot1.setFrame(1); + scene->_hotspot1.animate(ANIM_MODE_5, this); + + _globals->_player.animate(ANIM_MODE_5, NULL); + break; + case 2: + _globals->_player.hide(); + scene->_hotspot1.setVisage(4153); + scene->_hotspot1.setStrip(1); + scene->_hotspot1.setFrame(1); + scene->_hotspot1.animate(ANIM_MODE_5, this); + break; + case 3: + remove(); + break; + } +} + +void Scene4150::Action3::signal() { + Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(15); + break; + case 1: + _globals->_player.checkAngle(&scene->_hotspot3); + + if (RING_INVENTORY._rope._sceneNumber == 1) { + scene->_hotspot3.postInit(); + scene->_hotspot3.setVisage(4150); + scene->_hotspot3.setPosition(Common::Point(175, 70)); + + RING_INVENTORY._rope._sceneNumber = 4150; + _globals->_sceneItems.push_front(&scene->_hotspot3); + } else { + RING_INVENTORY._rope._sceneNumber = 1; + scene->_hotspot3.remove(); + } + + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4150::HotspotGroup1::doAction(int action) { + Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4150, 0); + break; + case OBJECT_ROPE: + scene->setAction(&scene->_action3); + break; + } +} + +void Scene4150::HotspotGroup3::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4150, _globals->getFlag(46) ? 9 : 8); + _globals->setFlag(46); + break; + case CURSOR_USE: + SceneItem::display2(4150, 30); + break; + } +} + +void Scene4150::HotspotGroup6::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4150, _globals->getFlag(47) ? 16 : 15); + _globals->setFlag(47); + break; + case CURSOR_USE: + SceneItem::display2(4150, 31); + break; + } +} + +void Scene4150::Hotspot3::doAction(int action) { + Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4150, 20); + break; + case CURSOR_USE: + scene->setAction(&scene->_action3); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene4150::Scene4150() : + _hotspot1(0, CURSOR_LOOK, 4150, 17, CURSOR_USE, 4150, 21, CURSOR_TALK, 4150, 21, + OBJECT_SCANNER, 4150, 22, OBJECT_STUNNER, 4150, 23, LIST_END), + _hotspot2(0, CURSOR_LOOK, 4150, 4, CURSOR_USE, 4150, 24, LIST_END), + _hotspot7(0, CURSOR_LOOK, 4150, 1, CURSOR_USE, 4150, 25, OBJECT_ROPE, 4150, 26, LIST_END), + _hotspot8(0, CURSOR_LOOK, 4150, 1, CURSOR_USE, 4150, 25, OBJECT_ROPE, 4150, 26, LIST_END), + _hotspot9(0, CURSOR_LOOK, 4150, 2, CURSOR_USE, 4150, 27, OBJECT_SCANNER, 4150, 28, + OBJECT_STUNNER, 4150, 32, LIST_END), + _hotspot10(0, CURSOR_LOOK, 4150, 5, CURSOR_USE, 4150, 29, LIST_END), + _hotspot11(0, CURSOR_LOOK, 4150, 6, CURSOR_USE, 4150, 29, LIST_END), + _hotspot12(0, CURSOR_LOOK, 4150, 7, CURSOR_USE, 4150, 29, LIST_END), + _hotspot17(0, CURSOR_LOOK, 4150, 10, CURSOR_USE, 4150, 27, OBJECT_STUNNER, 4150, 32, LIST_END), + _hotspot18(0, CURSOR_LOOK, 4150, 11, CURSOR_USE, 4150, 27, OBJECT_STUNNER, 4150, 32, LIST_END), + _hotspot19(0, CURSOR_LOOK, 4150, 12, CURSOR_USE, 4150, 29, LIST_END), + _hotspot20(0, CURSOR_LOOK, 4150, 13, CURSOR_USE, 4150, 29, LIST_END), + _hotspot21(0, CURSOR_LOOK, 4150, 13, CURSOR_USE, 4150, 29, LIST_END), + _hotspot22(0, CURSOR_LOOK, 4150, 13, CURSOR_USE, 4150, 29, LIST_END), + _hotspot23(0, CURSOR_LOOK, 4150, 14, CURSOR_USE, 4150, 27, OBJECT_STUNNER, 4150, 32, LIST_END), + _hotspot24(0, CURSOR_LOOK, 4150, 14, CURSOR_USE, 4150, 27, OBJECT_STUNNER, 4150, 32, LIST_END) + { +} + +void Scene4150::postInit(SceneObjectList *OwnerList) { + loadScene(4150); + Scene::postInit(); + setZoomPercents(60, 85, 200, 100); + + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerCDL); + _stripManager.addSpeaker(&_speakerQText); + + _hotspot2.postInit(); + _hotspot2.setVisage(4171); + _hotspot2.animate(ANIM_MODE_2, NULL); + _hotspot2.fixPriority(100); + _hotspot2.setPosition(Common::Point(76, 147)); + + _hotspot1.postInit(); + _hotspot1.setPosition(Common::Point(177, 201)); + + if (_globals->getFlag(44)) { + _globals->_player.postInit(); + _globals->_player.setVisage(4200); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setStrip(2); + _globals->_player.setPosition(Common::Point(328, 160)); + _globals->_player._moveDiff = Common::Point(7, 4); + _globals->_player.disableControl(); + + _sceneMode = 4151; + setAction(&_sequenceManager, this, 4151, &_globals->_player, NULL); + + _hotspot1.setVisage(4157); + _hotspot1.setPosition(Common::Point(177, 201)); + } else { + _globals->_player.postInit(); + _globals->_player.setVisage(4154); + _globals->_player._canWalk = false; + _globals->_player.setPosition(Common::Point(198, 202)); + _globals->_player.disableControl(); + + _hotspot1.setVisage(4152); + setAction(&_action1); + _globals->setFlag(44); + } + + if (RING_INVENTORY._rope._sceneNumber == 4150) { + _hotspot3.postInit(); + _hotspot3.setVisage(4150); + _hotspot3.setPosition(Common::Point(175, 70)); + + _globals->_sceneItems.push_back(&_hotspot3); + } + + _globals->_sceneItems.push_back(&_hotspot1); + + _hotspot5.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot6.setBounds(Rect(28, 121, 80, 148)); + _hotspot7.setBounds(Rect(27, 17, 127, 100)); + _hotspot8.setBounds(Rect(62, 11, 117, 22)); + _hotspot9.setBounds(Rect(48, 78, 104, 94)); + _hotspot10.setBounds(Rect(32, 107, 58, 119)); + _hotspot11.setBounds(Rect(1, 130, 17, 163)); + _hotspot12.setBounds(Rect(1, 158, 78, 197)); + _hotspot13.setBounds(Rect(253, 11, 274, 188)); + _hotspot14.setBounds(Rect(4, 15, 29, 153)); + _hotspot15.setBounds(Rect(127, 22, 146, 133)); + _hotspot16.setBounds(Rect(165, 22, 181, 141)); + _hotspot17.setBounds(Rect(186, 31, 217, 52)); + _hotspot18.setBounds(Rect(200, 31, 251, 86)); + _hotspot19.setBounds(Rect(183, 81, 234, 111)); + _hotspot20.setBounds(Rect(188, 120, 219, 142)); + _hotspot21.setBounds(Rect(235, 122, 249, 145)); + _hotspot22.setBounds(Rect(283, 125, 320, 146)); + _hotspot23.setBounds(Rect(284, 27, 306, 160)); + _hotspot24.setBounds(Rect(257, 72, 284, 99)); + _hotspot25.setBounds(Rect(183, 155, 316, 190)); + _hotspot26.setBounds(Rect(98, 169, 238, 198)); + + _globals->_sceneItems.addItems(&_hotspot24, &_hotspot23, &_hotspot13, &_hotspot25, + &_hotspot26, &_hotspot19, &_hotspot22, &_hotspot20, &_hotspot17, &_hotspot16, + &_hotspot15, &_hotspot11, &_hotspot14, &_hotspot18, &_hotspot21, &_hotspot12, + &_hotspot10, &_hotspot9, &_hotspot8, &_hotspot7, &_hotspot6, &_hotspot2, + &_hotspot5, NULL); + + _globals->_soundHandler.play(165); + _soundHandler.play(311); +} + +void Scene4150::signal() { + if (_sceneMode == 4151) + _globals->_player.enableControl(); + else if (_sceneMode == 4152) + _globals->_sceneManager.changeScene(4100); +} + +void Scene4150::dispatch() { + Scene::dispatch(); + + if (!_action && (_globals->_player._position.x >= 316)) { + _globals->_soundHandler.fadeOut(NULL); + _soundHandler.fadeOut(NULL); + _globals->_player.disableControl(); + _sceneMode = 4152; + setAction(&_sequenceManager, this, 4152, &_globals->_player, NULL); + } +} + +/*-------------------------------------------------------------------------- + * Scene 4000 - Village + * + *--------------------------------------------------------------------------*/ + +void Scene4250::Action1::signal() { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + ADD_MOVER_NULL(_globals->_player, 6, 190); + ADD_MOVER_NULL(scene->_hotspot3, 9, 195); + ADD_MOVER(scene->_hotspot1, 12, 185); + break; + case 2: + setDelay(30); + break; + case 3: + scene->_stripManager.start(4450, this); + break; + case 4: + case 7: + setDelay(15); + break; + case 5: + ADD_PLAYER_MOVER(220, 175); + scene->_hotspot1.fixPriority(105); + ADD_PLAYER_MOVER_NULL(scene->_hotspot1, 197, 173); + break; + case 6: + scene->_stripManager.start(4470, this); + break; + case 8: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4250::Action2::signal() { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + ADD_PLAYER_MOVER(247, 182); + break; + case 1: + _globals->_player.setVisage(2670); + _globals->_player.changeZoom(50); + _globals->_player.setStrip(3); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300)) { + scene->_stripManager.start(4205, this); + } else { + scene->_stripManager.start(4490, this); + } + break; + case 3: + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 4: + _globals->_player.setVisage(2602); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.changeZoom(70); + + if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300)) { + _globals->_player.enableControl(); + remove(); + } else { + ADD_PLAYER_MOVER(6, 180); + ADD_PLAYER_MOVER_NULL(scene->_hotspot1, 12, 185); + } + break; + case 5: + ADD_PLAYER_MOVER(-16, 180); + ADD_PLAYER_MOVER_NULL(scene->_hotspot1, -12, 185); + scene->_hotspot3.setStrip2(2); + ADD_MOVER_NULL(scene->_hotspot5, -30, 195); + break; + case 6: + _globals->clearFlag(59); + _globals->clearFlag(70); + _globals->clearFlag(37); + _globals->clearFlag(114); + _globals->clearFlag(36); + _globals->clearFlag(43); + _globals->_sceneManager.changeScene(2100); + break; + } +} + +void Scene4250::Action3::signal() { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(3); + break; + case 1: + scene->_stripManager.start(4480, this); + break; + case 2: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4250::Action4::signal() { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + _globals->_player.addMover(NULL); + scene->_stripManager.start((RING_INVENTORY._helmet._sceneNumber == 4250) ? 4259 : 4256, this); + break; + case 2: + ADD_PLAYER_MOVER(_globals->_player._position.x + 5, _globals->_player._position.y); + break; + case 3: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene4250::Action5::signal() { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + scene->_hotspot4.fixPriority(195); + scene->_hotspot1.fixPriority(105); + ADD_MOVER_NULL(_globals->_player, 6, 185); + ADD_MOVER_NULL(scene->_hotspot4, 9, 190); + ADD_MOVER(scene->_hotspot1, 12, 180); + break; + case 2: + ADD_PLAYER_MOVER(252, 176); + ADD_PLAYER_MOVER_NULL(scene->_hotspot1, 197, 173); + ADD_PLAYER_MOVER_NULL(scene->_hotspot4, 239, 195); + break; + case 3: + scene->_hotspot4.fixPriority(-1); + scene->_hotspot1.setStrip(5); + scene->_hotspot4.setStrip(7); + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4250::Hotspot1::doAction(int action) { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 19 : 14); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + if (!_globals->_sceneObjects->contains(&scene->_hotspot4)) { + scene->setAction(&scene->_action3); + } else { + scene->_sceneMode = 4260; + if (RING_INVENTORY._helmet._sceneNumber == 4250) { + scene->_sceneMode = 4265; + scene->setAction(&scene->_sequenceManager, scene, 4265, this, NULL); + } else { + scene->setAction(&scene->_sequenceManager, scene, + _globals->_sceneObjects->contains(&scene->_hotspot6) ? 4260 : 4262, this, NULL); + } + } + break; + case OBJECT_SCANNER: + if (RING_INVENTORY._helmet._sceneNumber == 4250) + SceneItem::display2(4250, 21); + else + SceneHotspot::doAction(action); + break; + case OBJECT_STUNNER: + if (RING_INVENTORY._helmet._sceneNumber == 4250) + SceneItem::display2(4250, 22); + else + SceneHotspot::doAction(action); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4250::Hotspot2::doAction(int action) { + //Ship with stasis field + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + case CURSOR_USE: + SceneItem::display2(4250, 16); + break; + case OBJECT_SCANNER: + if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300)) + scene->setAction(&scene->_action2); + else if (_globals->getFlag(55)) + SceneItem::display2(4250, 17); + else { + _globals->setFlag(55); + scene->setAction(&scene->_action2); + } + break; + case OBJECT_STASIS_NEGATOR: + _globals->_player.disableControl(); + scene->_sceneMode = 4252; + scene->setAction(&scene->_sequenceManager, scene, 4252, &_globals->_player, this, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4250::Hotspot4::doAction(int action) { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 18 : 5); + break; + case OBJECT_SCANNER: + if (RING_INVENTORY._helmet._sceneNumber == 4250) + SceneItem::display2(4250, 21); + else + SceneHotspot::doAction(action); + break; + case OBJECT_STUNNER: + if (RING_INVENTORY._helmet._sceneNumber == 4250) + SceneItem::display2(4250, 22); + else + SceneHotspot::doAction(action); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + if (!_globals->_sceneObjects->contains(&scene->_hotspot6)) { + scene->_sceneMode = 4254; + scene->setAction(&scene->_sequenceManager, scene, 4263, NULL); + } else { + scene->_sceneMode = 4254; + + if (RING_INVENTORY._helmet._sceneNumber == 4250) { + scene->_sceneMode = 4266; + scene->setAction(&scene->_sequenceManager, scene, 4266, this, NULL); + } else { + scene->setAction(&scene->_sequenceManager, scene, + (RING_INVENTORY._concentrator._sceneNumber == 1) ? 4255 : 4254, NULL); + } + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4250::Hotspot6::doAction(int action) { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 7 : 6); + break; + case OBJECT_SCANNER: + SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 1 : 2); + break; + case OBJECT_STUNNER: + SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 20 : 3); + break; + case OBJECT_HELMET: + _globals->_soundHandler.play(354); + _globals->_player.disableControl(); + RING_INVENTORY._helmet._sceneNumber = 4250; + + if (RING_INVENTORY._concentrator._sceneNumber == 1) { + if (_globals->getFlag(115)) { + scene->_sceneMode = 4269; + scene->setAction(&scene->_sequenceManager, scene, 4269, this, NULL); + } else { + _globals->setFlag(115); + _globals->_events.setCursor(CURSOR_WALK); + scene->_sceneMode = 4256; + scene->setAction(&scene->_sequenceManager, scene, 4256, this, NULL); + } + } else if (RING_INVENTORY._keyDevice._sceneNumber == 1) { + scene->_sceneMode = 4267; + scene->setAction(&scene->_sequenceManager, scene, 4267, this, NULL); + } else if (RING_INVENTORY._keyDevice._sceneNumber == 4300) { + scene->_sceneMode = 4268; + scene->setAction(&scene->_sequenceManager, scene, 4268, this, NULL); + } else { + _globals->_events.setCursor(CURSOR_WALK); + ADD_MOVER_NULL(scene->_hotspot1, 241, 169); + scene->_sceneMode = 4261; + scene->setAction(&scene->_sequenceManager, scene, 4261, &_globals->_player, this, NULL); + } + break; + case OBJECT_NULLIFIER: + if (RING_INVENTORY._helmet._sceneNumber == 4250) { + _globals->_soundHandler.play(353); + _globals->_player.disableControl(); + RING_INVENTORY._helmet._sceneNumber = 1; + + scene->_sceneMode = 4257; + scene->setAction(&scene->_sequenceManager, scene, 4257, &_globals->_player, this, NULL); + } else { + SceneItem::display2(4250, 4); + } + break; + case CURSOR_TALK: + if (RING_INVENTORY._helmet._sceneNumber == 4250) + doAction(OBJECT_HELMET); + else { + _globals->_player.disableControl(); + scene->_sceneMode = 4264; + scene->setAction(&scene->_sequenceManager, scene, 4264, this, NULL); + } + break; + case CURSOR_USE: + if (RING_INVENTORY._helmet._sceneNumber == 4250) + doAction(OBJECT_HELMET); + else { + _globals->_player.disableControl(); + if ((RING_INVENTORY._items._sceneNumber != 1) || (RING_INVENTORY._concentrator._sceneNumber != 1)) { + scene->_sceneMode = 4258; + scene->setAction(&scene->_sequenceManager, scene, 4258, this, NULL); + } else { + scene->_hotspot2.postInit(); + scene->_hotspot2.setVisage(4251); + scene->_hotspot2.setFrame(scene->_hotspot2.getFrameCount()); + scene->_hotspot2.setPosition(Common::Point(267, 172)); + scene->_hotspot2.hide(); + + scene->_sceneMode = 4259; + scene->setAction(&scene->_sequenceManager, scene, 4259, &_globals->_player, this, &scene->_hotspot2, NULL); + } + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4250::Hotspot8::doAction(int action) { + Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + case CURSOR_USE: + _globals->_sceneManager.changeScene(4300); + break; + case OBJECT_SCANNER: + SceneItem::display2(4250, 24); + break; + case OBJECT_STUNNER: + SceneItem::display2(4250, 25); + break; + case OBJECT_STASIS_NEGATOR: + _globals->_player.disableControl(); + scene->_sceneMode = 4270; + scene->setAction(&scene->_sequenceManager, scene, + (RING_INVENTORY._helmet._sceneNumber == 4250) ? 4270 : 4271, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene4250::Scene4250() : + _hotspot7(0, CURSOR_LOOK, 4250, 0, LIST_END) { +} + +void Scene4250::postInit(tSage::SceneObjectList *OwnerList) { + loadScene(4250); + Scene::postInit(); + setZoomPercents(160, 90, 185, 100); + + _stripManager.addSpeaker(&_speakerSR); + _stripManager.addSpeaker(&_speakerSL); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerGameText); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerPText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerFLText); + + _speakerSText.setTextPos(Common::Point(40, 40)); + _speakerPText.setTextPos(Common::Point(40, 100)); + _hotspot8._sceneRegionId = 16; + + _globals->_player.postInit(); + _globals->_player.setVisage(2602); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(-13, 190)); + _globals->_player.changeZoom(-1); + _globals->_player._moveDiff = Common::Point(4, 1); + + _hotspot1.postInit(); + _hotspot1.setVisage(2801); + _hotspot1.animate(ANIM_MODE_1, NULL); + _hotspot1.setObjectWrapper(new SceneObjectWrapper()); + _hotspot1.setPosition(Common::Point(-18, 185)); + _hotspot1.changeZoom(-1); + _hotspot1._moveDiff = Common::Point(4, 1); + _globals->_sceneItems.push_back(&_hotspot1); + + if (_globals->_sceneManager._previousScene == 4300) { + _hotspot5.postInit(); + _hotspot5.setVisage(4250); + _hotspot5.setPosition(Common::Point(268, 168)); + _hotspot5.fixPriority(1); + + _hotspot4.postInit(); + _hotspot4.setVisage(2701); + _hotspot4.animate(ANIM_MODE_1, NULL); + _hotspot4.setObjectWrapper(new SceneObjectWrapper()); + _hotspot4.setPosition(Common::Point(272, 175)); + _hotspot4.setStrip(2); + _hotspot4._moveDiff = Common::Point(4, 1); + _hotspot4.changeZoom(70); + _globals->_sceneItems.push_back(&_hotspot4); + + _hotspot1.setPosition(Common::Point(197, 173)); + _hotspot1.changeZoom(70); + + _globals->_player.setPosition(Common::Point(252, 176)); + _globals->_player.changeZoom(70); + + _hotspot6.postInit(); + _hotspot6.setVisage(4302); + _hotspot6.setStrip(4); + _hotspot6.setFrame(3); + _hotspot6.changeZoom(50); + _hotspot6.fixPriority(70); + _hotspot6.setPosition(Common::Point(261, 175)); + + if (RING_INVENTORY._helmet._sceneNumber == 4250) { + _hotspot6.setStrip(6); + _hotspot6.setFrame(_hotspot6.getFrameCount()); + } + + if (_globals->getFlag(98)) { + _globals->_sceneItems.push_front(&_hotspot6); + } else { + _hotspot6.hide(); + if ((_globals->_stripNum == 4300) || (_globals->_stripNum == 4301)) { + _globals->setFlag(98); + _globals->_player.setVisage(4302); + _globals->_player.setStrip(5); + _globals->_player.changeZoom(50); + _globals->_player.disableControl(); + + _hotspot4.setPosition(Common::Point(239, 195)); + _sceneMode = 4253; + _globals->_sceneItems.push_front(&_hotspot6); + + setAction(&_sequenceManager, this, 4253, &_globals->_player, &_hotspot6, &_hotspot4, NULL); + } + } + } else if (_globals->_stripNum == 9000) { + _hotspot4.postInit(); + _hotspot4.setVisage(2701); + _hotspot4.animate(ANIM_MODE_1, NULL); + _hotspot4.setObjectWrapper(new SceneObjectWrapper()); + _hotspot4.setPosition(Common::Point(-15, 195)); + _hotspot4._moveDiff = Common::Point(4, 1); + _globals->_sceneItems.push_back(&_hotspot4); + + setAction(&_action5); + } else { + _hotspot3.postInit(); + _hotspot3.setVisage(4006); + _hotspot3.animate(ANIM_MODE_1, NULL); + _hotspot3.setObjectWrapper(new SceneObjectWrapper()); + _hotspot3.setPosition(Common::Point(-15, 195)); + _hotspot3.setStrip2(3); + _hotspot3._moveDiff = Common::Point(4, 1); + + setAction(&_action1); + _globals->clearFlag(43); + _globals->clearFlag(114); + _globals->clearFlag(36); + } + + if (_globals->getFlag(17)) { + _globals->_sceneItems.push_back(&_hotspot8); + } else { + _hotspot2.postInit(); + _hotspot2.setVisage(4251); + _hotspot2.setStrip2(1); + _hotspot2.fixPriority(2); + _hotspot2.setFrame(1); + _hotspot2.setPosition(Common::Point(267, 172)); + + _globals->_sceneItems.push_back(&_hotspot2); + } + + _hotspot7.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _globals->_sceneItems.push_back(&_hotspot7); + _globals->_soundHandler.play(185); +} + +void Scene4250::signal() { + switch (_sceneMode) { + case 4252: + _globals->setFlag(17); + _globals->_sceneManager.changeScene(4301); + break; + case 4253: + if (_globals->_stripNum == 4301) { + _sceneMode = 4261; + ADD_MOVER_NULL(_hotspot1, 241, 169); + setAction(&_sequenceManager, this, 4261, &_globals->_player, &_hotspot6, NULL); + } else { + _globals->_player.enableControl(); + } + break; + case 4254: + case 4256: + case 4257: + case 4258: + case 4260: + case 4264: + case 4265: + case 4266: + case 4267: + case 4268: + case 4269: + case 4270: + _globals->_player.enableControl(); + break; + case 4259: + _globals->_soundHandler.play(360); + _globals->_sceneManager.changeScene(9900); + break; + case 4261: + RING_INVENTORY._keyDevice._sceneNumber = 1; + _globals->_player.enableControl(); + break; + case 4255: + case 4262: + case 4263: + default: + break; + } +} + +void Scene4250::dispatch() { + if (_globals->_player.getRegionIndex() == 8) + _globals->_player.changeZoom(90 - (_globals->_player._position.y - 153)); + if (_globals->_player.getRegionIndex() == 12) + _globals->_player.changeZoom(70); + if (_globals->_player.getRegionIndex() == 15) { + _globals->_player.changeZoom(-1); + _globals->_player.fixPriority(-1); + } + + if (_hotspot1.getRegionIndex() == 8) + _hotspot1.changeZoom(90 - (_hotspot1._position.y - 153)); + if (_hotspot1.getRegionIndex() == 12) + _hotspot1.changeZoom(70); + if (_hotspot1.getRegionIndex() == 15) { + _hotspot1.changeZoom(-1); + _hotspot1.fixPriority(-1); + } + + if (_hotspot4.getRegionIndex() == 8) + _hotspot4.changeZoom(90 - (_hotspot4._position.y - 153)); + if (_hotspot4.getRegionIndex() == 12) + _hotspot4.changeZoom(70); + if (_hotspot4.getRegionIndex() == 15) { + _hotspot4.changeZoom(-1); + _hotspot4.fixPriority(-1); + } + + Scene::dispatch(); + + if (!_action) { + if (!_globals->getFlag(55) && (_globals->_player.getRegionIndex() == 12)) { + setAction(&_action4); + } + + if (_globals->_sceneObjects->contains(&_hotspot6) && (_globals->_player.getRegionIndex() == 12)) + setAction(&_action4); + } +} + +/*-------------------------------------------------------------------------- + * Scene 4300 - Village - Slaver Ship + * + *--------------------------------------------------------------------------*/ + +void Scene4300::Action1::signal() { + Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->setFlag(56); + _globals->_scenePalette.addRotation(240, 254, -1); + scene->_hotspot7.animate(ANIM_MODE_6, this); + _globals->_soundHandler.play(164); + break; + case 1: + _globals->_soundHandler.play(340); + scene->_soundHandler1.play(341); + scene->_hotspot1.remove(); + setDelay(3); + break; + case 2: + scene->_soundHandler1.play(341); + scene->_hotspot2.remove(); + setDelay(6); + break; + case 3: + scene->_soundHandler1.play(341); + scene->_hotspot3.remove(); + setDelay(6); + break; + case 4: + scene->_soundHandler1.play(341); + scene->_hotspot4.remove(); + setDelay(12); + break; + case 5: + scene->_soundHandler1.play(341); + scene->_hotspot5.remove(); + setDelay(12); + break; + case 6: + scene->_soundHandler1.play(341); + scene->_hotspot6.remove(); + setDelay(60); + break; + case 7: + scene->_hotspot10.fixPriority(250); + scene->_hotspot10.animate(ANIM_MODE_5, this); + break; + case 8: + scene->_hotspot13.show(); + scene->_stripManager.start(8015, this, scene); + break; + case 9: + _globals->_soundHandler.play(350); + _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; + _globals->_events.setCursor(CURSOR_USE); + _globals->_player.enableControl(); + + remove(); + break; + } +} + +void Scene4300::Action2::signal() { + Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(3); + break; + case 1: + scene->_stripManager.start(8016, this, scene); + break; + case 2: + _globals->_player.enableControl(); + remove(); + break; + } +} + + +/*--------------------------------------------------------------------------*/ + +void Scene4300::Hotspot8::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4300, 15); + break; + case CURSOR_USE: + SceneItem::display2(4300, 18); + break; + case OBJECT_SCANNER: + SceneItem::display2(4300, 14); + break; + case OBJECT_STUNNER: + SceneItem::display2(4300, 19); + break; + case OBJECT_KEY_DEVICE: + RING_INVENTORY._keyDevice._sceneNumber = 4300; + _globals->_scenePalette.addRotation(240, 254, -1); + animate(ANIM_MODE_5, NULL); + + _globals->setFlag(99); + _globals->_sceneItems.push_back(this); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4300::Hotspot9::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) || + (RING_INVENTORY._concentrator._sceneNumber == 1)) + SceneItem::display2(4300, 7); + else + SceneItem::display2(4300, 1); + break; + case CURSOR_USE: + if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) || + (RING_INVENTORY._concentrator._sceneNumber == 1)) + SceneItem::display2(4300, 7); + else + SceneItem::display2(4300, 3); + break; + case OBJECT_STUNNER: + SceneItem::display2(4300, 24); + break; + case OBJECT_SCANNER: + if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) || + (RING_INVENTORY._concentrator._sceneNumber != 1)) + SceneItem::display2(4300, 22); + else + SceneItem::display2(4300, 23); + break; + default: + NamedHotspot::doAction(action); + break; + } +} + +void Scene4300::Hotspot10::doAction(int action) { + // Alien + Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4300, 2); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + scene->setAction(&scene->_action2); + break; + case OBJECT_SCANNER: + SceneItem::display2(4300, 20); + break; + case OBJECT_STUNNER: + SceneItem::display2(4300, 21); + break; + case CURSOR_USE: + case OBJECT_HELMET: + _globals->_stripNum = (action == CURSOR_USE) ? 4300 : 4301; + _globals->_events.setCursor(CURSOR_NONE); + _globals->_sceneManager.changeScene(4250); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4300::Hotspot15::signal() { + Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; + + scene->_soundHandler2.play(345); + + _strip = (_globals->_randomSource.getRandomNumber(6) < 2) ? 2 : 1; + if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) || + (RING_INVENTORY._concentrator._sceneNumber == 1)) { + setStrip(1); + setFrame(1); + animate(ANIM_MODE_NONE, NULL); + } else { + animate(ANIM_MODE_5, this); + } +} + +void Scene4300::Hotspot16::doAction(int action) { + Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4300, 8); + break; + case CURSOR_USE: + if ((RING_INVENTORY._stasisBox2._sceneNumber != 4300) && + (RING_INVENTORY._concentrator._sceneNumber != 4300)) { + SceneItem::display2(4300, 16); + } else { + scene->_sceneMode = 4302; + scene->setAction(&scene->_sequenceManager, scene, 4302, this, NULL); + } + break; + case OBJECT_SCANNER: + SceneItem::display2(4300, 27); + break; + case OBJECT_STUNNER: + SceneItem::display2(4300, 24); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene4300::Hotspot17::doAction(int action) { + Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4300, (RING_INVENTORY._stasisBox2._sceneNumber == 4300) ? 17 : 11); + break; + case CURSOR_USE: + if (RING_INVENTORY._stasisBox2._sceneNumber != 4300) + SceneItem::display2(4300, 13); + else { + _globals->_scenePalette.clearListeners(); + remove(); + + SceneItem::display2(4300, 12); + RING_INVENTORY._concentrator._sceneNumber = 1; + } + break; + case OBJECT_SCANNER: + SceneItem::display2(4300, 25); + break; + case OBJECT_STUNNER: + SceneItem::display2(4300, 26); + break; + case OBJECT_STASIS_BOX2: + scene->_soundHandler1.play(352); + _globals->_events.setCursor(CURSOR_USE); + scene->_sceneMode = 4303; + + scene->setAction(&scene->_sequenceManager, scene, 4303, this, NULL); + break; + } +} + +void Scene4300::Hotspot19::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4300, 9); + break; + case OBJECT_SCANNER: + SceneItem::display2(4300, 28); + break; + case OBJECT_STUNNER: + SceneItem::display2(4300, 24); + break; + case CURSOR_USE: + if ((RING_INVENTORY._stasisBox2._sceneNumber != 4300) && + (RING_INVENTORY._concentrator._sceneNumber != 4300)) + SceneItem::display2(4300, 10); + else + SceneItem::display2(4300, 29); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene4300::Scene4300() : + _hotspot18(0, CURSOR_LOOK, 4300, 0, LIST_END) { +} + +void Scene4300::postInit(SceneObjectList *OwnerList) { + loadScene(4300); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerFLText); + + _hotspot11.setup(76, 97, 102, 127, 4300, 5, 6); + + _hotspot7.postInit(); + _hotspot7.setPosition(Common::Point(90, 128)); + _hotspot7.setVisage(4303); + _hotspot7.fixPriority(250); + _globals->_sceneItems.push_back(&_hotspot7); + + _hotspot9.setup(120, 49, 174, 91, 4300, -1, -1); + + _hotspot15.postInit(); + _hotspot15.setVisage(4300); + _hotspot15.setPosition(Common::Point(149, 79)); + _hotspot15.signal(); + + if (!_globals->getFlag(99)) { + _hotspot8.postInit(); + _hotspot8.setVisage(4300); + _hotspot8.setStrip(3); + _hotspot8.setPosition(Common::Point(196, 47)); + _globals->_sceneItems.push_back(&_hotspot8); + } + + if (RING_INVENTORY._concentrator._sceneNumber == 4300) { + _hotspot17.postInit(); + _hotspot17.setVisage(4300); + _hotspot17.setStrip(6); + _hotspot17.fixPriority(1); + _hotspot17.setPosition(Common::Point(200, 69)); + + if (RING_INVENTORY._stasisBox2._sceneNumber == 4300) + _hotspot17.setFrame(_hotspot17.getFrameCount()); + + _globals->_sceneItems.push_back(&_hotspot17); + } + + if (!_globals->getFlag(98)) { + _hotspot10.postInit(); + _hotspot10.setVisage(4302); + _hotspot10.setPosition(Common::Point(244, 179)); + _hotspot10.fixPriority(100); + _globals->_sceneItems.push_back(&_hotspot10); + + _hotspot12.postInit(); + _hotspot12.setVisage(4302); + _hotspot12.setStrip2(3); + _hotspot12.setPosition(Common::Point(231, 185)); + _hotspot12.fixPriority(251); + _hotspot12.hide(); + + _hotspot13.postInit(); + _hotspot13.hide(); + _hotspot13.setVisage(4302); + _hotspot13.setStrip2(2); + _hotspot13.setPosition(Common::Point(256, 168)); + _hotspot13.fixPriority(251); + _hotspot13._numFrames = 1; + _hotspot13.animate(ANIM_MODE_8, 0, NULL); + } + + if (RING_INVENTORY._items._sceneNumber == 4300) { + _hotspot16.postInit(); + _hotspot16.setVisage(4300); + _hotspot16.setPosition(Common::Point(169, 141)); + _hotspot16.fixPriority(1); + _hotspot16.setStrip(4); + _globals->_sceneItems.push_back(&_hotspot16); + } + + if (_globals->_sceneManager._previousScene == 4301) { + _globals->_player.disableControl(); + _hotspot7.setFrame(_hotspot7.getFrameCount()); + + _hotspot1.postInit(); + _hotspot1.setVisage(4301); + _hotspot1.fixPriority(145); + _hotspot1.setPosition(Common::Point(160, 64)); + + _hotspot2.postInit(); + _hotspot2.setVisage(4301); + _hotspot2.setStrip2(2); + _hotspot2.fixPriority(140); + _hotspot2.setPosition(Common::Point(166, 90)); + + _hotspot3.postInit(); + _hotspot3.setVisage(4301); + _hotspot3.setStrip2(3); + _hotspot3.fixPriority(135); + _hotspot3.setPosition(Common::Point(173, 114)); + + _hotspot4.postInit(); + _hotspot4.setVisage(4301); + _hotspot4.setStrip2(4); + _hotspot4.fixPriority(130); + _hotspot4.setPosition(Common::Point(187, 141)); + + _hotspot5.postInit(); + _hotspot5.setVisage(4301); + _hotspot5.setStrip2(5); + _hotspot5.fixPriority(125); + _hotspot5.setPosition(Common::Point(201, 164)); + + _hotspot6.postInit(); + _hotspot6.setVisage(4301); + _hotspot6.setStrip2(6); + _hotspot6.fixPriority(120); + _hotspot6.setPosition(Common::Point(219, 186)); + + setAction(&_action1); + } else { + _globals->_player.disableControl(); + _sceneMode = 4304; + setAction(&_sequenceManager, this, 4304, NULL); + } + + _hotspot10.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot19._sceneRegionId = 0; + _globals->_sceneItems.push_back(&_hotspot19); + _globals->_sceneItems.push_back(&_hotspot18); +} + +void Scene4300::stripCallback(int v) { + switch (v) { + case 1: + _hotspot12.show(); + _hotspot12.animate(ANIM_MODE_7, 0, NULL); + break; + case 2: + _hotspot12.hide(); + break; + } +} + +void Scene4300::remove() { + _globals->_scenePalette.clearListeners(); + Scene::remove(); +} + +void Scene4300::signal() { + switch (_sceneMode) { + case 4302: + RING_INVENTORY._items._sceneNumber = 1; + _hotspot16.remove(); + _globals->_player.enableControl(); + break; + case 4303: + RING_INVENTORY._stasisBox2._sceneNumber = 4300; + _hotspot15.setStrip(1); + _hotspot15.setFrame(1); + _hotspot15.animate(ANIM_MODE_NONE, NULL); + break; + case 4304: + _hotspot14.postInit(); + _hotspot14.setVisage(4300); + _hotspot14.setStrip(7); + _hotspot14.setPosition(Common::Point(60, 199)); + + _gfxButton.setText(EXIT_MSG); + _gfxButton._bounds.center(60, 193); + _gfxButton.draw(); + _gfxButton._bounds.expandPanes(); + + _globals->_player.enableControl(); + _globals->_scenePalette.addRotation(240, 254, -1); + break; + } +} + +void Scene4300::dispatch() { + if (_action) + _action->dispatch(); +} + +void Scene4300::process(Event &event) { + Scene::process(event); + if (_gfxButton.process(event)) + _globals->_sceneManager.changeScene(4250); +} + +/*-------------------------------------------------------------------------- + * Scene 4301 - Village - Slaver Ship Keypad + * + *--------------------------------------------------------------------------*/ + +void Scene4301::Action1::synchronize(Serializer &s) { + Action::synchronize(s); + s.syncAsSint16LE(_field34E); + for (int idx = 0; idx < 6; ++idx) + s.syncAsSint16LE(_indexList[idx]); +} + +void Scene4301::Action1::remove() { + Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene; + _globals->_player.enableControl(); + + for (_state = 0; _state < 6; ++_state) + _buttonList[_state].remove(); + + scene->_hotspot3.remove(); + scene->_hotspot2.remove(); + + scene->_hotspot1.animate(ANIM_MODE_6, NULL); + Action::remove(); +} + +void Scene4301::Action1::signal() { + Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_soundHandler.play(164); + scene->_hotspot1.animate(ANIM_MODE_5, this); + break; + case 1: + _globals->_soundHandler.play(335); + _globals->_events.setCursor(CURSOR_USE); + + scene->_hotspot2.postInit(); + scene->_hotspot2.setVisage(4303); + scene->_hotspot2.setStrip(2); + scene->_hotspot2.setFrame(1); + scene->_hotspot2.setPosition(Common::Point(30, 15)); + scene->_hotspot2.fixPriority(255); + + scene->_hotspot3.postInit(); + scene->_hotspot3.setVisage(4303); + scene->_hotspot3.setStrip(2); + scene->_hotspot3.setFrame(2); + scene->_hotspot3.setPosition(Common::Point(48, 29)); + scene->_hotspot3.fixPriority(255); + scene->_hotspot3.hide(); + + _field34E = 0; + _state = 0; + _actionIndex = 2; + break; + case 10: + // Puzzle: Wrong code + _globals->_events.setCursor(CURSOR_NONE); + scene->_soundHandler.play(337); + if (scene->_hotspot3._flags & OBJFLAG_HIDE) + scene->_hotspot3.show(); + else + scene->_hotspot3.hide(); + setDelay(20); + + if (_state <= 8) + _actionIndex = 10; + ++_state; + break; + case 11: + for (_state = 0; _state < 6; ++_state) + _buttonList[_state].remove(); + + scene->_soundHandler.play(338); + scene->_hotspot3.hide(); + + _actionIndex = 2; + _state = 0; + _globals->_events.setCursor(CURSOR_USE); + break; + case 20: + // Puzzle: Correct code + _globals->_player.disableControl(); + scene->_soundHandler.play(339); + scene->_hotspot3._frame = 3; + if (scene->_hotspot3._flags & OBJFLAG_HIDE) + scene->_hotspot3.show(); + else + scene->_hotspot3.hide(); + + if (_state <= 8) + _actionIndex = 20; + ++_state; + + setDelay(20); + break; + case 21: + scene->_field68E = true; + remove(); + break; + } +} + +void Scene4301::Action1::process(Event &event) { + // Puzzle + Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene; + Rect buttonsRect; + + Action::process(event); + if (event.handled || (_actionIndex != 2)) + return; + + buttonsRect = Rect(14, 35, 112, 100); + buttonsRect.translate(30, 15); + + if ((event.eventType == EVENT_BUTTON_DOWN) && buttonsRect.contains(event.mousePos)) { + event.handled = true; + scene->_soundHandler.play(336); + + int buttonIndex = ((event.mousePos.y - buttonsRect.top) / 33) * 3 + + ((event.mousePos.x - buttonsRect.left) / 33); + + _buttonList[_state].postInit(); + _buttonList[_state].setVisage(4303); + _buttonList[_state].setStrip(buttonIndex + 3); + _buttonList[_state].setFrame(1); + _buttonList[_state].setPosition(Common::Point((_state % 3) * 25 + 55, (_state / 3) * 25 + 121)); + _buttonList[_state].fixPriority(255); + _buttonList[_state]._numFrames = 25; + _buttonList[_state].animate(ANIM_MODE_5, NULL); + + _indexList[_state++] = buttonIndex; + + if (_state == 6) { + // Six buttons pressed + if ((_indexList[0] == 2) && (_indexList[1] == 3) && (_indexList[2] == 0) && + (_indexList[3] == 4) && (_indexList[4] == 1) && (_indexList[5] == 5)) { + // Entered the correct full combination + _state = 0; + _actionIndex = 20; + } else { + // Incorrect combination entered + _state = 0; + _actionIndex = 10; + } + + signal(); + } + } + + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) { + event.handled = true; + remove(); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4301::Hotspot4::doAction(int action) { + // Hatch near door + Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene; + + if (action == CURSOR_USE) { + _globals->_player.disableControl(); + scene->setAction(&scene->_action1); + } else { + NamedHotspot::doAction(action); + } +} + +void Scene4301::Hotspot5::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(4300, 0); + break; + case CURSOR_USE: + SceneItem::display2(4300, 30); + break; + case OBJECT_SCANNER: + SceneItem::display2(4300, 31); + break; + case OBJECT_STUNNER: + SceneItem::display2(4300, 32); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene4301::postInit(SceneObjectList *OwnerList) { + _globals->setFlag(50); + loadScene(4301); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _field68E = false; + RING_INVENTORY._stasisBox2._sceneNumber = 1; + _hotspot4.setup(97, 76, 127, 102, 4300, 5, 6); + + _hotspot1.postInit(); + _hotspot1.setPosition(Common::Point(90, 128)); + _hotspot1.setVisage(4303); + _hotspot1._strip = 1; + _hotspot1._frame = 1; + _hotspot1.fixPriority(250); + + _hotspot5.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _globals->_sceneItems.push_back(&_hotspot5); + + _globals->_player.enableControl(); +} + +void Scene4301::dispatch() { + if (_action) { + _action->dispatch(); + } else if (_field68E) { + _field68E = 0; + _globals->clearFlag(50); + _globals->_sceneManager._fadeMode = FADEMODE_NONE; + _globals->_sceneManager.setNewScene(4300); + } +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes5.h b/engines/tsage/ringworld/ringworld_scenes5.h new file mode 100644 index 0000000000..d28e809678 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes5.h @@ -0,0 +1,693 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES5_H +#define TSAGE_RINGWORLD_SCENES5_H + +#include "common/scummsys.h" +#include "tsage/core.h" +#include "tsage/converse.h" +#include "tsage/ringworld/ringworld_logic.h" + +namespace tSage { + +class Scene4000 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + class Action8 : public Action { + public: + virtual void signal(); + }; + class Action9 : public Action { + public: + virtual void signal(); + }; + class Action10 : public Action { + public: + virtual void signal(); + }; + class Action11 : public Action { + public: + virtual void signal(); + }; + class Action12 : public Action { + public: + virtual void signal(); + }; + class Action13 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Miranda : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8 : public SceneObject { + private: + int _ctr; + public: + virtual void synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsUint16LE(_ctr); + } + virtual void doAction(int action); + }; + class GuardRock : public SceneObject { + public: + virtual void doAction(int action); + }; + class Ladder : public SceneObject { + public: + virtual void doAction(int action); + }; + class TheTech : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot13 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot17 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot18 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot23 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3; + ASound _soundHandler1, _soundHandler2; + SpeakerQR _speakerQR; + SpeakerML _speakerML; + SpeakerMR _speakerMR; + SpeakerSR _speakerSR; + SpeakerCHFL _speakerCHFL; + SpeakerPL _speakerPL; + SpeakerPText _speakerPText; + SpeakerQText _speakerQText; + SpeakerSText _speakerSText; + SpeakerMText _speakerMText; + SpeakerCHFR _speakerCHFR; + SpeakerQL _speakerQL; + SpeakerCHFText _speakerCHFText; + SceneObject _smoke1, _hotspot2, _lander, _olo, _hotspot5, _rope; + Miranda _miranda; + Hotspot8 _hotspot8; + GuardRock _guardRock; + Ladder _ladder; + DisplayHotspot _forceField; + TheTech _theTech; + Hotspot13 _hotspot13; + Hotspot _hotspot14, _hotspot15, _hotspot16; + Hotspot17 _hotspot17; + Hotspot18 _hotspot18; + DisplayHotspot _hotspot19, _hotspot20, _hotspot21, _hotspot22; + Hotspot23 _hotspot23; + DisplayHotspot _hotspot24, _hotspot25, _hotspot26; + SceneObject _smoke2; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + Action9 _action9; + Action10 _action10; + Action11 _action11; + Action12 _action12; + Action13 _action13; + + Scene4000(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene4010 : public Scene { +public: + SequenceManager _sequenceManager; + SpeakerQText _speakerQText; + SpeakerSText _speakerSText; + SpeakerMText _speakerMText; + SceneObject _hotspot1, _hotspot2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + +class Scene4025 : public Scene { + /* Custom classes */ + class Peg; + + class Hole : public SceneObject { + public: + Peg *_pegPtr; + int _armStrip; + Common::Point _newPosition; + + virtual void synchronize(Serializer &s); + virtual void doAction(int action); + }; + class Peg : public SceneObject { + public: + int _field88; + int _armStrip; + + Peg() : SceneObject() { _field88 = 0; _armStrip = 3; } + virtual void synchronize(Serializer &s); + virtual void doAction(int action); + }; + + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; +public: + SequenceManager _sequenceManager; + GfxButton _gfxButton; + SceneObject _armHotspot; + Hole _hole1, _hole2, _hole3, _hole4, _hole5; + Peg _peg1, _peg2, _peg3, _peg4, _peg5; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Peg *_pegPtr, *_pegPtr2; + Hole *_holePtr; + + Scene4025(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + +class Scene4045 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class OlloStand : public SceneObject { + public: + virtual void doAction(int action); + }; + class Miranda : public SceneObject { + public: + virtual void doAction(int action); + }; + class Necklace : public SceneObject { + public: + virtual void doAction(int action); + }; + +public: + SequenceManager _sequenceManager; + SpeakerQR _speakerQR; + SpeakerML _speakerML; + SpeakerPR _speakerPR; + SpeakerPText _speakerPText; + SpeakerQText _speakerQText; + SpeakerQL _speakerQL; + OlloStand _olloStand; + Miranda _miranda; + DisplayHotspot _flame; + SceneObject _hotspot4, _olloFace; + Necklace _necklace; + DisplayHotspot _hotspot7, _hotspot8, _hotspot9, _hotspot10; + DisplayHotspot _hotspot11, _hotspot12, _hotspot13, _hotspot14; + Action1 _action1; + Action2 _action2; + Action3 _action3; + + Scene4045(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void stripCallback(int v); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene4050 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot15 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot17 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + SpeakerPText _speakerPText; + SpeakerQText _speakerQText; + SpeakerGameText _speakerGameText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + DisplayHotspot _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5; + DisplayHotspot _hotspot6, _hotspot7, _hotspot8, _hotspot9, _hotspot10; + DisplayHotspot _hotspot11, _hotspot12, _hotspot13; + SceneObject _hotspot14; + Hotspot15 _hotspot15; + SceneObject _hotspot16; + Hotspot17 _hotspot17; + + Scene4050(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene4100 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Miranda : public SceneObject { + public: + virtual void doAction(int action); + }; + class Ladder : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot14 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + SpeakerMText _speakerMText; + SpeakerML _speakerML; + SpeakerQText _speakerQText; + SpeakerQR _speakerQR; + SpeakerCHFText _speakerCHFText; + SpeakerCDRText _speakerCDRText; + SpeakerCDR _speakerCDR; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Hotspot1 _hotspot1; + Hotspot2 _hotspot2; + DisplayHotspot _hotspot3, _hotspot4; + Miranda _miranda; + Ladder _ladder; + DisplayHotspot _hotspot7, _hotspot8, _hotspot9, _hotspot10; + DisplayHotspot _hotspot11, _hotspot12, _hotspot13; + Hotspot14 _hotspot14; + + Scene4100(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene4150 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class HotspotGroup1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class HotspotGroup3 : public SceneObject { + public: + virtual void doAction(int action); + }; + class HotspotGroup6 : public SceneObject { + public: + virtual void doAction(int action); + }; + + class Hotspot3 : public SceneObject { + public: + virtual void doAction(int action); + }; + +public: + SequenceManager _sequenceManager; + ASound _soundHandler; + SpeakerQText _speakerQText; + SpeakerQR _speakerQR; + SpeakerCDL _speakerCDL; + Action1 _action1; + Action2 _action2; + Action3 _action3; + DisplayHotspot _hotspot1, _hotspot2; + Hotspot3 _hotspot3; + SceneObject _hotspot4; + HotspotGroup1 _hotspot5, _hotspot6; + DisplayHotspot _hotspot7, _hotspot8, _hotspot9, _hotspot10, _hotspot11, _hotspot12; + HotspotGroup3 _hotspot13, _hotspot14, _hotspot15, _hotspot16; + DisplayHotspot _hotspot17, _hotspot18, _hotspot19, _hotspot20, _hotspot21; + DisplayHotspot _hotspot22, _hotspot23, _hotspot24; + HotspotGroup6 _hotspot25, _hotspot26; + + Scene4150(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene4250 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot4 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot6 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8 : public SceneObject { + public: + virtual void doAction(int action); + }; + +public: + SequenceManager _sequenceManager; + ASound _soundHandler; + SpeakerSR _speakerSR; + SpeakerSL _speakerSL; + SpeakerSText _speakerSText; + SpeakerGameText _speakerGameText; + SpeakerQL _speakerQL; + SpeakerQR _speakerQR; + SpeakerQText _speakerQText; + SpeakerPText _speakerPText; + SpeakerMText _speakerMText; + SpeakerFLText _speakerFLText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Hotspot1 _hotspot1; + Hotspot2 _hotspot2; + SceneObject _hotspot3; + Hotspot4 _hotspot4; + SceneObject _hotspot5; + Hotspot6 _hotspot6; + DisplayHotspot _hotspot7; + Hotspot8 _hotspot8; + + Scene4250(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene4300 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot8 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot9 : public NamedHotspot { + public: + virtual void doAction(int action); + }; + class Hotspot10 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot15 : public SceneObject { + public: + virtual void signal(); + }; + class Hotspot16 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot17 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot19 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + ASound _soundHandler1, _soundHandler2; + SequenceManager _sequenceManager; + GfxButton _gfxButton; + SpeakerQText _speakerQText; + SpeakerSText _speakerSText; + SpeakerMText _speakerMText; + SpeakerFLText _speakerFLText; + + SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4; + SceneObject _hotspot5, _hotspot6, _hotspot7; + Hotspot8 _hotspot8; + Hotspot9 _hotspot9; + Hotspot10 _hotspot10; + NamedHotspot _hotspot11; + SceneObject _hotspot12, _hotspot13, _hotspot14; + Hotspot15 _hotspot15; + Hotspot16 _hotspot16; + Hotspot17 _hotspot17; + DisplayHotspot _hotspot18; + Hotspot19 _hotspot19; + Action1 _action1; + Action2 _action2; + + Scene4300(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void stripCallback(int v); + virtual void remove(); + virtual void signal(); + virtual void dispatch(); + virtual void process(Event &event); +}; + +class Scene4301 : public Scene { + /* Actions */ + class Action1 : public ActionExt { + public: + SceneObject _buttonList[6]; + int _field34E; + int _indexList[6]; + + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + }; + + /* Hotspots */ + class Hotspot4 : public NamedHotspot { + public: + virtual void doAction(int action); + }; + class Hotspot5 : public NamedHotspot { + public: + virtual void doAction(int action); + }; + +public: + Common::List _list1; + SequenceManager _sequenceManager; + ASound _soundHandler; + Action1 _action1; + SceneObject _hotspot1, _hotspot2, _hotspot3; + Hotspot4 _hotspot4; + Hotspot5 _hotspot5; + bool _field68E; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void dispatch(); + virtual void synchronize(Serializer &s) { + Scene::synchronize(s); + s.syncAsSint16LE(_field68E); + } +}; + + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_scenes6.cpp b/engines/tsage/ringworld/ringworld_scenes6.cpp new file mode 100644 index 0000000000..6b335fe7c3 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes6.cpp @@ -0,0 +1,2200 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "tsage/ringworld/ringworld_scenes6.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 5000 - Caverns - Entrance + * + *--------------------------------------------------------------------------*/ + +void Scene5000::Action1::signal() { + // Ship landing + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_soundHandler.play(190); + scene->_soundHandler.holdAt(true); + ADD_MOVER(scene->_hotspot1, 283, 12); + break; + case 2: + break; + case 3: + scene->_hotspot1._moveDiff.y = 1; + scene->_hotspot4.setPosition(Common::Point(scene->_hotspot1._position.x, + scene->_hotspot1._position.y + 15)); + scene->_hotspot4.show(); + setDelay(15); + break; + case 4: + scene->_soundHandler.release(); + ADD_MOVER(scene->_hotspot1, 233, 80); + break; + case 5: + scene->_hotspot3.animate(ANIM_MODE_8, 0, NULL); + scene->_hotspot3.show(); + ADD_MOVER(scene->_hotspot1, 233, 90); + break; + case 6: + scene->_hotspot3.remove(); + scene->_hotspot2.setPosition(Common::Point(233, 76)); + scene->_hotspot2.show(); + scene->_hotspot2.animate(ANIM_MODE_5, this); + + scene->_hotspot4.remove(); + break; + case 7: + setDelay(60); + scene->_hotspot2.remove(); + break; + case 8: + scene->_hotspot5.show(); + scene->_hotspot5.animate(ANIM_MODE_5, this); + break; + case 9: + scene->setAction(&scene->_action2); + break; + } +} + +void Scene5000::Action1::dispatch() { + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + Action::dispatch(); + + if (_actionIndex == 3) { + if (scene->_hotspot1._percent % 2 == 0) { + ++scene->_hotspot1._position.y; + if (scene->_hotspot1._position.x > 233) + --scene->_hotspot1._position.x; + } + + scene->_hotspot1.changeZoom(++scene->_hotspot1._percent); + scene->_hotspot1._flags |= OBJFLAG_PANES; + + if (scene->_hotspot1._percent >= 100) + signal(); + } + + if ((_actionIndex == 5) || (_actionIndex == 6)) { + scene->_hotspot4.setPosition(Common::Point(scene->_hotspot1._position.x, + scene->_hotspot1._position.y + 15)); + } +} + +void Scene5000::Action2::signal() { + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.setPosition(Common::Point(217, 76)); + setDelay(10); + break; + case 1: + _globals->_player.setStrip2(3); + _globals->_player.animate(ANIM_MODE_1, NULL); + ADD_MOVER(_globals->_player, 214, 89); + break; + case 2: + if (!_globals->getFlag(59)) + setAction(&scene->_action3, this); + _globals->_player.fixPriority(15); + ADD_MOVER(_globals->_player, 208, 100); + break; + case 3: + ADD_MOVER(_globals->_player, 213, 98); + break; + case 4: + _globals->_player.fixPriority(20); + ADD_MOVER(_globals->_player, 215, 115); + break; + case 5: + _globals->_player.changeZoom(47); + ADD_MOVER(_globals->_player, 220, 125); + break; + case 6: + ADD_MOVER(_globals->_player, 229, 115); + break; + case 7: + _globals->_player.changeZoom(-1); + _globals->_player.fixPriority(35); + ADD_MOVER(_globals->_player, 201, 166); + break; + case 8: + _globals->_player.updateZoom(); + ADD_MOVER(_globals->_player, 205, 146); + break; + case 9: + _globals->_player.changeZoom(-1); + _globals->_player.fixPriority(50); + ADD_MOVER(_globals->_player, 220, 182); + break; + case 10: + _globals->_player.updateZoom(); + ADD_MOVER(_globals->_player, 208, 163); + break; + case 11: + _globals->_player.changeZoom(-1); + _globals->_player.setStrip2(-1); + _globals->_player.fixPriority(-1); + ADD_MOVER(_globals->_player, 208, 175); + break; + case 12: + _globals->_player.setStrip(8); + _globals->_player.setFrame(1); + setDelay(10); + break; + case 13: + if (!_globals->_sceneObjects->contains(&scene->_hotspot7)) + setDelay(10); + break; + case 14: + setDelay(30); + break; + case 15: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene5000::Action3::signal() { + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_hotspot7.postInit(); + scene->_hotspot7.setVisage(2809); + scene->_hotspot7.setObjectWrapper(new SceneObjectWrapper()); + scene->_hotspot7.setPosition(Common::Point(217, 76)); + scene->_hotspot7.changeZoom(10); + scene->_hotspot7.setStrip2(3); + scene->_hotspot7.fixPriority(200); + scene->_hotspot7._moveDiff.y = 2; + scene->_hotspot7.animate(ANIM_MODE_1, NULL); + ADD_MOVER(scene->_hotspot7, 214, 89); + + _globals->_sceneItems.push_front(&scene->_hotspot7); + break; + case 2: + scene->_hotspot7.changeZoom(-1); + scene->_hotspot7.fixPriority(14); + ADD_MOVER(scene->_hotspot7, 208, 100); + break; + case 3: + ADD_MOVER(scene->_hotspot7, 213, 98); + break; + case 4: + scene->_hotspot7.fixPriority(19); + ADD_MOVER(scene->_hotspot7, 215, 115); + break; + case 5: + scene->_hotspot7.changeZoom(46); + ADD_MOVER(scene->_hotspot7, 220, 125); + break; + case 6: + ADD_MOVER(scene->_hotspot7, 229, 115); + break; + case 7: + scene->_hotspot7.changeZoom(-1); + scene->_hotspot7.fixPriority(34); + ADD_MOVER(scene->_hotspot7, 201, 166); + break; + case 8: + scene->_hotspot7.updateZoom(); + ADD_MOVER(scene->_hotspot7, 205, 146); + break; + case 9: + scene->_hotspot7.changeZoom(-1); + scene->_hotspot7.fixPriority(49); + ADD_MOVER(scene->_hotspot7, 210, 182); + break; + case 10: + scene->_hotspot7.updateZoom(); + ADD_MOVER(scene->_hotspot7, 208, 163); + break; + case 11: + scene->_hotspot7.changeZoom(-1); + scene->_hotspot7.setStrip2(-1); + scene->_hotspot7.fixPriority(-1); + ADD_MOVER(scene->_hotspot7, 175, 166); + break; + case 12: + ADD_MOVER(scene->_hotspot7, 126, 146); + break; + case 13: + scene->_hotspot7.setStrip(2); + remove(); + break; + } +} + +void Scene5000::Action4::signal() { + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: + _globals->_player.fixPriority(50); + _globals->_player.setStrip2(4); + ADD_MOVER(_globals->_player, 210, 182); + break; + case 2: + ADD_MOVER(_globals->_player, 205, 146); + break; + case 3: + _globals->_player.fixPriority(35); + ADD_MOVER(_globals->_player, 201, 166); + break; + case 4: + ADD_MOVER(_globals->_player, 229, 115); + break; + case 5: + _globals->_player.fixPriority(20); + _globals->_player.changeZoom(47); + ADD_MOVER(_globals->_player, 220, 125); + break; + case 6: + ADD_MOVER(_globals->_player, 215, 115); + break; + case 7: + _globals->_player.changeZoom(-1); + ADD_MOVER(_globals->_player, 213, 98); + break; + case 8: + _globals->_player.fixPriority(15); + ADD_MOVER(_globals->_player, 208, 100); + break; + case 9: + ADD_MOVER(_globals->_player, 214, 89); + break; + case 10: + ADD_MOVER(_globals->_player, 217, 76); + break; + case 11: + _globals->_player.hide(); + setDelay(60); + break; + case 12: + if (!_globals->_sceneObjects->contains(&scene->_hotspot7)) + _globals->_sceneManager.changeScene(2320); + remove(); + break; + } +} + +void Scene5000::Action5::signal() { + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + ADD_MOVER(_globals->_player, 91, 155); + break; + case 1: + _globals->_player.setVisage(2670); + _globals->_player._strip = 4; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + SceneItem::display2(5000, _globals->_sceneObjects->contains(&scene->_hotspot7) ? 17 : 13); + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 3: + _globals->_player.setVisage(0); + _globals->_player._strip = 8; + _globals->_player.animate(ANIM_MODE_1, NULL); + + _globals->_player.enableControl(); + remove(); + } +} + +void Scene5000::Action6::signal() { + // Discussion between the hero and Seeker, then the hero goes back to the lander + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + _globals->_events.setCursor(CURSOR_WALK); + scene->_stripManager.start(2150, this); + break; + case 2: + _globals->_events.setCursor(CURSOR_NONE); + scene->setAction(&scene->_sequenceManager, this, 5001, &scene->_hotspot7, NULL); + break; + case 3: + ADD_PLAYER_MOVER(208, 163); + break; + case 4: + _globals->_player.fixPriority(50); + _globals->_player.setStrip2(4); + ADD_MOVER(_globals->_player, 210, 182); + break; + case 5: + _globals->_sceneManager.changeScene(2100); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene5000::Hotspot7::doAction(int action) { + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5000, 12); + break; + case CURSOR_TALK: + scene->setAction(&scene->_action6); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5000::Hotspot8::doAction(int action) { + // Cave + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5000, 10); + break; + case OBJECT_STUNNER: + SceneItem::display2(5000, 14); + break; + case OBJECT_SCANNER: + scene->setAction(&scene->_action5); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5000::HotspotGroup1::doAction(int action) { + Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; + + if (_globals->_sceneObjects->contains(&scene->_hotspot7)) + scene->setAction(&scene->_action6); + else + SceneItem::display2(5000, 11); +} +/*--------------------------------------------------------------------------*/ + +Scene5000::Scene5000() : + _hotspot1(0, CURSOR_LOOK, 5000, 3, LIST_END), + _hotspot12(0, CURSOR_LOOK, 5000, 6, CURSOR_USE, 5000, 7, OBJECT_STUNNER, 5000, 14, + OBJECT_SCANNER, 5000, 16, LIST_END), + _hotspot13(0, CURSOR_LOOK, 5000, 8, CURSOR_USE, 5000, 9, OBJECT_STUNNER, 5000, 0, + OBJECT_SCANNER, 5000, 16, LIST_END), + _hotspot14(0, CURSOR_LOOK, 5000, 8, CURSOR_USE, 5000, 9, OBJECT_STUNNER, 5000, 0, + OBJECT_SCANNER, 5000, 16, LIST_END), + _hotspot15(0, CURSOR_LOOK, 5000, 2, OBJECT_STUNNER, 5000, 15, LIST_END), + _hotspot16(0, CURSOR_LOOK, 5000, 4, CURSOR_USE, 5000, 5, LIST_END), + _hotspot17(0, CURSOR_LOOK, 5000, 1, LIST_END), + _hotspot18(0, CURSOR_LOOK, 5000, 0, LIST_END) { +} + + +void Scene5000::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + loadScene(5000); + + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerQText); + + _globals->_player.postInit(); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player._moveDiff = Common::Point(4, 2); + _globals->_player.changeZoom(-1); + _globals->_player.disableControl(); + + _hotspot1.postInit(); + _hotspot1.setVisage(5001); + _hotspot1.setFrame2(1); + _hotspot1._moveDiff = Common::Point(5, 5); + _hotspot1.fixPriority(10); + _hotspot1.changeZoom(10); + + _hotspot4.postInit(); + _hotspot4.setVisage(5001); + _hotspot4.setStrip2(2); + _hotspot4._moveDiff = Common::Point(5, 1); + _hotspot4.fixPriority(10); + _hotspot4.changeZoom(100); + _hotspot4.animate(ANIM_MODE_8, 0, NULL); + _hotspot4.hide(); + + _hotspot2.postInit(); + _hotspot2.setVisage(5001); + _hotspot2.setStrip2(3); + _hotspot2._numFrames = 5; + _hotspot2.hide(); + + _hotspot3.postInit(); + _hotspot3.setVisage(5001); + _hotspot3.setStrip2(5); + _hotspot3._numFrames = 5; + _hotspot3.setPosition(Common::Point(233, 76)); + _hotspot3.hide(); + + _hotspot5.postInit(); + _hotspot5.setVisage(5001); + _hotspot5.setStrip2(4); + _hotspot5._numFrames = 5; + _hotspot5.fixPriority(15); + _hotspot5.setPosition(Common::Point(218, 76)); + _hotspot5.hide(); + + _hotspot9.postInit(); + _hotspot9.setVisage(5002); + _hotspot9.fixPriority(80); + _hotspot9.setPosition(Common::Point(71, 174)); + + _hotspot10.postInit(); + _hotspot10.setVisage(5002); + _hotspot10.setStrip2(2); + _hotspot10.setPosition(Common::Point(87, 120)); + + _hotspot11.postInit(); + _hotspot11.setVisage(5002); + _hotspot11.setStrip2(2); + _hotspot11.setFrame(3); + _hotspot10.setPosition(Common::Point(93, 118)); + + setZoomPercents(95, 10, 145, 100); + + _hotspot8.setBounds(Rect(0, 73, 87, 144)); + _hotspot18.setBounds(Rect(54, 0, 319, 85)); + _hotspot17.setBounds(Rect(184, 0, 199, 79)); + _hotspot13.setBounds(Rect(0, 164, 135, 200)); + _hotspot14.setBounds(Rect(0, 0, 105, 140)); + _hotspot15.setBounds(Rect(266, 70, 291, 85)); + _hotspot16.setBounds(Rect(0, 86, 319, 200)); + _hotspot12.setBounds(Rect(230, 143, 244, 150)); + + _globals->_sceneItems.addItems(&_hotspot9, &_hotspot10, &_hotspot11, &_hotspot8, &_hotspot13, + &_hotspot14, &_hotspot12, &_hotspot15, &_hotspot17, &_hotspot18, &_hotspot16, NULL); + + switch (_globals->_sceneManager._previousScene) { + case 1000: + case 2100: + case 2320: + if (_globals->getFlag(59)) { + _hotspot1.setPosition(Common::Point(233, 90)); + _hotspot1.changeZoom(100); + _hotspot1.show(); + + _hotspot5.setFrame(1); + _hotspot5.animate(ANIM_MODE_5, NULL); + _hotspot5.setPosition(Common::Point(218, 76)); + _hotspot5.show(); + + _globals->_player.setPosition(Common::Point(217, -10)); + _globals->_player.disableControl(); + + setAction(&_action2); + } else { + _globals->_player.setPosition(Common::Point(217, -10)); + _hotspot1.setPosition(Common::Point(320, -10)); + _globals->_player.disableControl(); + + setAction(&_action1); + } + break; + default: + _globals->_player.disableControl(); + _globals->_player.setPosition(Common::Point(0, 146)); + + _hotspot1.changeZoom(100); + _hotspot1.setPosition(Common::Point(233, 90)); + _hotspot1.show(); + + _hotspot5.setFrame(_hotspot5.getFrameCount()); + _hotspot5.show(); + + _sceneMode = 5004; + setAction(&_sequenceManager, this, 5004, &_globals->_player, NULL); + break; + } + + _globals->_soundHandler.play(190); +} + +void Scene5000::signal() { + switch (_sceneMode) { + case 5002: + case 5003: + case 5004: + _globals->_player.enableControl(); + break; + case 5005: + _globals->_sceneManager.changeScene(5100); + break; + } +} + +void Scene5000::dispatch() { + Scene::dispatch(); + + if (!_action) { + if (!_globals->_sceneObjects->contains(&_hotspot7) && (_globals->_player.getRegionIndex() == 10)) { + _globals->_player.disableControl(); + _sceneMode = 5005; + setAction(&_sequenceManager, this, 5005, &_globals->_player, NULL); + } + + if (_globals->_player.getRegionIndex() == 8) { + _globals->_player.disableControl(); + + if (_globals->_sceneObjects->contains(&_hotspot7)) { + _sceneMode = 5003; + _globals->_player.addMover(NULL); + setAction(&_sequenceManager, this, 5003, &_globals->_player, NULL); + } else { + setAction(&_action4); + } + } + + if (_globals->_sceneObjects->contains(&_hotspot7) && (_globals->_player.getRegionIndex() == 15)) { + _sceneMode = 5002; + _globals->_player.disableControl(); + _globals->_player.addMover(NULL); + setAction(&_sequenceManager, this, 5002, &_globals->_player, NULL); + } + } +} + +/*-------------------------------------------------------------------------- + * Scene 5100 - Caverns + * + *--------------------------------------------------------------------------*/ + +void Scene5100::Action1::signal() { + // Quinn enters the cave for the first time + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + ADD_MOVER(_globals->_player, 1111, 165); + break; + case 2: + _globals->_player.setStrip(6); + _globals->_player.setFrame(1); + setDelay(60); + break; + case 3: + if (_globals->getFlag(10)) { + _globals->_player.enableControl(); + remove(); + } else { + _globals->setFlag(10); + scene->_stripManager.start(5102, this); + } + break; + case 4: + scene->_soundHandler.play(206); + + scene->_hotspot5.postInit(); + scene->_hotspot5.setVisage(5362); + scene->_hotspot5.setPosition(Common::Point(1160, 34)); + scene->_hotspot5.setStrip2(2); + scene->_hotspot5.animate(ANIM_MODE_1, NULL); + scene->_hotspot5.fixPriority(10); + + _globals->_sceneItems.push_front(&scene->_hotspot5); + ADD_MOVER(scene->_hotspot5, 999, 14); + break; + case 5: + scene->_hotspot5.setStrip2(4); + scene->_hotspot5._frame = 1; + scene->_hotspot5.animate(ANIM_MODE_5, this); + break; + case 6: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene5100::Action2::signal() { + // Quinn and Seeker exit the cave + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(5); + break; + case 1: + if (scene->_hotspot8._visage == 2806) + setDelay(1); + else + scene->_hotspot8.animate(ANIM_MODE_5, this); + break; + case 2: + if (scene->_hotspot8._visage != 2806) { + scene->_hotspot8.setVisage(2806); + scene->_hotspot8.setPosition(Common::Point(548, 193)); + scene->_hotspot8.animate(ANIM_MODE_1, NULL); + scene->_hotspot8._angle = 325; + scene->_hotspot8.setObjectWrapper(new SceneObjectWrapper()); + scene->_hotspot8.setStrip(8); + } + + scene->_stripManager.start(5129, this); + break; + case 3: + if (_globals->_player._position.x >= 966) { + ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 1215, 155); + } else { + ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 966, 185); + } + + if (_globals->_player._position.x >= 966) { + setDelay(1); + } else { + ADD_PLAYER_MOVER(966, 190); + } + break; + case 4: + ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 1215, 155); + ADD_PLAYER_MOVER(1215, 155); + break; + case 5: + _globals->_sceneManager.changeScene(2100); + break; + } +} + +void Scene5100::Action3::signal() { + // Quinns shots flesheater + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->setFlag(62); + _globals->_player.disableControl(); + _globals->_player.addMover(NULL); + + scene->_hotspot2.addMover(NULL); + scene->_hotspot3.addMover(NULL); + _globals->_player.setVisage(2672); + + if (static_cast(_owner)->_position.x >= _globals->_player._position.x) + _globals->_player._strip = 4; + else + _globals->_player._strip = 3; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 1: + _globals->_player.setVisage(2674); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 2: + scene->_soundHandler.play(28); + if (static_cast(_owner)->_position.x < _globals->_player._position.x) { + scene->_hotspot2.setVisage(5130); + scene->_hotspot2._strip = 1; + scene->_hotspot2._frame = 1; + scene->_hotspot2.animate(ANIM_MODE_5, this); + scene->_hotspot2.setAction(NULL); + + scene->_hotspot3.setStrip2(1); + ADD_PLAYER_MOVER_NULL(scene->_hotspot3, 1200, 100); + } else { + scene->_hotspot3.setVisage(5130); + scene->_hotspot3._strip = 1; + scene->_hotspot3._frame = 1; + scene->_hotspot3.animate(ANIM_MODE_5, this); + scene->_hotspot3.setAction(NULL); + + scene->_hotspot2.setStrip2(2); + ADD_PLAYER_MOVER_NULL(scene->_hotspot2, 10, 140); + + } + + _globals->_player.setVisage(2672); + _globals->_player._frame = _globals->_player.getFrameCount(); + _globals->_player.animate(ANIM_MODE_6, this); + break; + case 3: + break; + case 4: + SceneItem::display2(5100, 38); + _globals->_player.enableControl(); + + _globals->_player.setVisage(0); + _globals->_player._strip = 8; + _globals->_player.animate(ANIM_MODE_1, NULL); + remove(); + break; + } +} + +void Scene5100::Action4::signal() { + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + _globals->_player.disableControl(); + scene->_soundHandler.play(208); + SceneItem::display2(5100, 15); + + ObjectMover3 *mover = new ObjectMover3(); + scene->_hotspot2.addMover(mover, &_globals->_player, 20, this); + break; + } + case 1: + scene->_hotspot1.postInit(); + scene->_hotspot1.setVisage(5120); + scene->_hotspot1.setPosition(Common::Point(795, 161)); + scene->_hotspot1._strip = 4; + scene->_hotspot1.animate(ANIM_MODE_5, this); + break; + case 2: + setDelay(15); + break; + case 3: + _globals->_sceneManager.changeScene(5200); + break; + } +} + +void Scene5100::Action5::signal() { + // Quinns forgot the statis box in the throne room, and goes back + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(60); + break; + case 1: + scene->_stripManager.start(5128, this); + break; + case 2: + setDelay(15); + break; + case 3: + scene->_sceneMode = 5106; + scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot14, NULL); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene5100::HotspotGroup1::doAction(int action) { + // Flesh Eaters + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5100, _globals->getFlag(62) ? 41 : 26); + break; + case CURSOR_USE: + SceneItem::display2(5100, 11); + break; + case OBJECT_SCANNER: + SceneItem::display2(5100, 17); + break; + case OBJECT_STUNNER: + if (_globals->getFlag(62)) + SceneItem::display2(5100, 42); + else + setAction(&scene->_action3); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5100::Hotspot4::doAction(int action) { + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5100, 31); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->_sceneMode = 5110; + scene->setAction(&scene->_sequenceManager, scene, 5110, &_globals->_player, this, &scene->_hotspot7, NULL); + break; + case CURSOR_TALK: + SceneItem::display2(5100, 34); + break; + case OBJECT_STUNNER: + SceneItem::display2(5100, 36); + break; + case OBJECT_SCANNER: + SceneItem::display2(5100, 37); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5100::HotspotGroup2::doAction(int action) { + // Bat + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5100, _globals->getFlag(108) ? 47 : 23); + break; + case CURSOR_USE: + SceneItem::display2(5100, 29); + break; + case CURSOR_TALK: + if (_position.x >= 600) + SceneItem::display2(5100, 28); + else { + _globals->_player.disableControl(); + scene->_sceneMode = 5114; + scene->setAction(&scene->_sequenceManager, scene, 5114, NULL); + } + break; + case OBJECT_SCANNER: + SceneItem::display2(5100, 43); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5100::Hotspot9::doAction(int action) { + // Rope + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5100, 32); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->_sceneMode = 5117; + scene->setAction(&scene->_sequenceManager, scene, 5117, &_globals->_player, NULL); + break; + case OBJECT_STUNNER: + SceneItem::display2(5100, 35); + break; + case OBJECT_SCANNER: + SceneItem::display2(5100, 44); + break; + case OBJECT_BONE: + _globals->_player.disableControl(); + scene->_sceneMode = 5116; + scene->setAction(&scene->_sequenceManager, scene, 5116, &_globals->_player, this, &scene->_hotspot10, + &scene->_hotspot4, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5100::Hotspot17::doAction(int action) { + // Rock blocking pit entrance + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5100, 18); + break; + case CURSOR_USE: + if (_globals->getFlag(67)) + SceneItem::display2(5100, 19); + else { + _globals->_player.disableControl(); + scene->_sceneMode = 5101; + scene->setAction(&scene->_sequenceManager, scene, 5101, &_globals->_player, this, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5100::Hotspot18::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->_sceneManager._previousScene != 5000) { + SceneItem::display2(5100, 3); + } else { + switch (_index1) { + case 0: + SceneItem::display2(5100, 0); + ++_index1; + break; + case 1: + SceneItem::display2(5100, 1); + ++_index1; + break; + default: + SceneItem::display2(5100, 2); + break; + } + } + break; + case CURSOR_USE: + switch (_index2) { + case 0: + SceneItem::display2(5100, 8); + ++_index2; + break; + case 1: + SceneItem::display2(5100, 9); + ++_index2; + break; + default: + SceneItem::display2(5100, 10); + break; + } + break; + + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5100::Hotspot19::doAction(int action) { + // Pillar + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5100, _globals->_sceneObjects->contains(&scene->_hotspot14) ? 27 : 20); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->_sceneMode = 5106; + + if (_globals->getFlag(66)) + scene->setAction(&scene->_sequenceManager, scene, 5113, &_globals->_player, NULL); + else { + _globals->setFlag(66); + scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot14, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5100::Hotspot20::doAction(int action) { + Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5100, 21); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + + if (_globals->getFlag(67)) { + scene->_sceneMode = 5112; + scene->setAction(&scene->_sequenceManager, scene, 5112, &_globals->_player, NULL); + } else { + scene->_sceneMode = 5101; + scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot17, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene5100::Scene5100() : + _hotspot16(0, CURSOR_LOOK, 5100, 48, LIST_END), + _hotspot21(0, CURSOR_LOOK, 5100, 4, CURSOR_USE, 5100, 5, LIST_END) { +} + +void Scene5100::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(50, 10, 200, 100); + _sceneMode = 0; + + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerGameText); + _stripManager.addSpeaker(&_speakerBatText); + _speakerQText._npc = &_globals->_player; + _speakerMText._npc = &_globals->_player; + _speakerSText._npc = &_hotspot8; + + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.disableControl(); + + if ((!_globals->getFlag(66)) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) { + _hotspot14.postInit(); + _hotspot14.setVisage(5101); + _hotspot14.setPosition(Common::Point(498, 147)); + _hotspot14.fixPriority(200); + _hotspot14._moveDiff.y = 10; + } + + _hotspot17.postInit(); + _hotspot17.setVisage(5101); + _hotspot17._strip = 2; + _hotspot17.fixPriority(200); + + if (_globals->getFlag(67)) + _hotspot17.setPosition(Common::Point(554, 192)); + else + _hotspot17.setPosition(Common::Point(539, 179)); + + _hotspot19.setBounds(Rect(488, 115, 508, 148)); + _hotspot21.setBounds(Rect(1150, 85, 1173, 112)); + _hotspot20.setBounds(Rect(517, 193, 562, 200)); + _globals->_sceneItems.addItems(&_hotspot19, &_hotspot21, NULL); + + if (_globals->getFlag(67)) { + _globals->_sceneItems.addItems(&_hotspot20, &_hotspot17, NULL); + } else { + _globals->_sceneItems.addItems(&_hotspot17, &_hotspot20, NULL); + } + + if (!_globals->getFlag(105)) { + _hotspot4.postInit(); + _hotspot4.setVisage(5363); + _hotspot4.setPosition(Common::Point(1025, 65)); + _hotspot4.setStrip(4); + _hotspot4.animate(ANIM_MODE_7, 0, NULL);; + _globals->_sceneItems.push_back(&_hotspot4); + + _hotspot9.postInit(); + _hotspot9.setVisage(5363); + _hotspot9.setPosition(Common::Point(966, 120)); + _globals->_sceneItems.push_back(&_hotspot9); + + _hotspot10.postInit(); + _hotspot10.setVisage(5363); + _hotspot10.setPosition(Common::Point(999, 68)); + _hotspot10.setStrip(2); + + _hotspot6.postInit(); + _hotspot6.setVisage(5362); + _hotspot6.setPosition(Common::Point(1017, 34)); + _hotspot6._strip = 4; + _hotspot6._frame = _hotspot6.getFrameCount(); + _globals->_sceneItems.push_back(&_hotspot6); + } + + _hotspot16._sceneRegionId = 15; + _globals->_sceneItems.push_back(&_hotspot16); + + if (!_globals->getFlag(62)) { + _hotspot2.postInit(); + _hotspot2.setVisage(5110); + _hotspot2.animate(ANIM_MODE_1, NULL); + _hotspot2._moveDiff.x = 4; + _globals->_sceneItems.push_back(&_hotspot2); + + _hotspot3.postInit(); + _hotspot3.setVisage(5110); + _hotspot3.animate(ANIM_MODE_1, NULL); + _hotspot3._moveDiff.x = 4; + _globals->_sceneItems.push_back(&_hotspot3); + + if (_globals->getFlag(61)) { + _hotspot2.setPosition(Common::Point(483, 189)); + _hotspot3.setPosition(Common::Point(811, 182)); + } else { + _hotspot2.setPosition(Common::Point(610, 170)); + _hotspot3.setPosition(Common::Point(600, 180)); + } + } + + if (_globals->getFlag(60) && (RING_INVENTORY._stasisBox._sceneNumber == 1) && + _globals->getFlag(107) && _globals->getFlag(67)) { + _hotspot8.postInit(); + _hotspot8.setVisage(2806); + _hotspot8.setPosition(Common::Point(557, 178)); + _hotspot8.animate(ANIM_MODE_1, NULL); + _hotspot8.setObjectWrapper(new SceneObjectWrapper()); + + _globals->clearFlag(59); + } + + switch (_globals->_sceneManager._previousScene) { + case 5000: + default: + _globals->_player.setPosition(Common::Point(1184, 160)); + setAction(&_action1); + break; + case 5200: + if (_globals->_stripNum == 5200) { + _globals->_player.setVisage(5101); + _globals->_player.fixPriority(200); + _globals->_player.setStrip(5); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(513, 199)); + + _sceneMode = 5108; + setAction(&_sequenceManager, this, 5108, &_globals->_player, NULL); + } else { + _globals->_player.setPosition(Common::Point(20, 175)); + + _hotspot13.postInit(); + _hotspot13.setVisage(5110); + _hotspot13.setPosition(Common::Point(578, 192)); + _hotspot13._strip = 2; + + _hotspot11.postInit(); + _hotspot11.setVisage(5110); + _hotspot11.setPosition(Common::Point(5, 162)); + _hotspot11.setStrip2(1); + _hotspot11._moveDiff = Common::Point(4, 2); + _hotspot11.animate(ANIM_MODE_1, NULL); + + ObjectMover2 *mover = new ObjectMover2(); + _hotspot11.addMover(mover, 15, 20, &_globals->_player); + + _hotspot12.postInit(); + _hotspot12.setVisage(5110); + _hotspot12.setPosition(Common::Point(15, 164)); + _hotspot12.setStrip2(1); + _hotspot12._moveDiff = Common::Point(4, 2); + _hotspot12.animate(ANIM_MODE_1, NULL); + + ObjectMover2 *mover2 = new ObjectMover2(); + _hotspot12.addMover(mover2, 25, 50, &_globals->_player); + + _hotspot17.setPosition(Common::Point(554, 182)); + _globals->_player.disableControl(); + + _sceneMode = 5105; + setAction(&_sequenceManager, this, 5105, &_globals->_player, NULL); + } + break; + case 5300: + switch (_globals->_stripNum) { + case 5300: + _sceneMode = 5111; + + _globals->_player.setVisage(5101); + _globals->_player.setStrip(6); + _globals->_player.fixPriority(170); + _globals->_player.setPosition(Common::Point(1168, 110)); + + setAction(&_sequenceManager, this, 5111, &_globals->_player, NULL); + _hotspot8.setPosition(Common::Point(1107, 178)); + break; + case 5302: + _globals->_player.setPosition(Common::Point(512, 190)); + + if (_globals->_sceneObjects->contains(&_hotspot8)) + setAction(&_action2); + else + _globals->_player.enableControl(); + break; + case 5303: + _hotspot8.setVisage(5102); + _hotspot8.setPosition(Common::Point(533, 172)); + _globals->_player.setPosition(Common::Point(512, 190)); + setAction(&_action2); + break; + } + + if (_globals->getFlag(108)) { + _hotspot6.postInit(); + _hotspot6.setVisage(5362); + _hotspot6.setPosition(Common::Point(542, 19)); + _hotspot6.setStrip(6); + _hotspot6.setFrame(1); + _globals->_sceneItems.push_back(&_hotspot6); + } else if (RING_INVENTORY._vial._sceneNumber != 5100) { + _hotspot6.postInit(); + _hotspot6.setVisage(5362); + _hotspot6.setPosition(Common::Point(1152, 70)); + _hotspot6.fixPriority(170); + _hotspot6.setStrip(6); + _hotspot6.setFrame(1); + _globals->_sceneItems.push_back(&_hotspot6); + } + break; + } + + _hotspot18.setBounds(Rect(0, 0, 1280, 200)); + _globals->_sceneItems.push_back(&_hotspot18); + + _hotspot15.postInit(); + _hotspot15.setVisage(5140); + _hotspot15.setStrip(3); + _hotspot15.setPosition(Common::Point(977, 173)); + _hotspot15.fixPriority(1); + + _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position); + loadScene(5100); + _globals->_soundHandler.play(205); +} + +void Scene5100::signal() { + switch (_sceneMode) { + case 5101: + case 5112: + _globals->setFlag(67); + _globals->_sceneManager.changeScene(5300); + break; + case 5102: + case 5114: + _globals->_player.enableControl(); + break; + case 5103: + if (_globals->getFlag(61)) { + SceneItem::display2(5100, 46); + _globals->_sceneManager.changeScene(5300); + } else { + SceneItem::display2(5100, 45); + _globals->_sceneManager.changeScene(5200); + } + break; + case 5105: + _globals->_sceneManager.changeScene(5300); + break; + case 5106: + _globals->_stripNum = 5111; + _globals->_sceneManager.changeScene(5200); + break; + case 5108: + if (!_globals->getFlag(60)) + _globals->_player.enableControl(); + else if (RING_INVENTORY._stasisBox._sceneNumber == 1) + setAction(&_action2); + else + setAction(&_action5); + break; + case 5110: + SceneItem::display2(5100, 30); + _globals->_player._angle = 325; + _globals->_player.enableControl(); + break; + case 5111: + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setVisage(0); + _globals->_player.setStrip(6); + _globals->_player.fixPriority(-1); + _globals->_player.animate(ANIM_MODE_1, NULL); + + if ((RING_INVENTORY._vial._sceneNumber != 5100) && !_globals->getFlag(108)) { + _globals->setFlag(108); + _sceneMode = 5130; + _globals->_player.disableControl(); + + _speakerBatText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 20, 30)); + setAction(&_sequenceManager, this, 5130, &_globals->_player, &_hotspot6, NULL); + } else if (_globals->_sceneObjects->contains(&_hotspot8)) { + setAction(&_action2); + } else { + _globals->_player.enableControl(); + } + break; + case 5116: + _globals->setFlag(105); + RING_INVENTORY._bone._sceneNumber = 0; + + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setVisage(0); + _globals->_player.setStrip(6); + _globals->_player.fixPriority(-1); + _globals->_player.animate(ANIM_MODE_1, NULL); + // No break on purpose + case 5117: + _globals->_player.enableControl(); + break; + case 5130: + _hotspot6.setVisage(5362); + _hotspot6.setPosition(Common::Point(542, 25)); + _hotspot6.setStrip(6); + _hotspot6.setFrame(1); + _globals->_player.enableControl(); + break; + case 5150: + _globals->clearFlag(60); + _globals->_sceneManager.changeScene(5300); + break; + } +} + +void Scene5100::dispatch() { + // Flesheater trap + if (_hotspot15._bounds.contains(_globals->_player._position) && !_globals->_player._visage) { + _globals->_player.disableControl(); + _globals->_player.addMover(NULL); + + _soundHandler.play(207); + _sceneMode = 5103; + setAction(&_sequenceManager, this, (_globals->_player._position.x >= 966) ? 5104 : 5103, + &_globals->_player, &_hotspot15, NULL); + } + + if (_globals->getFlag(61) && !_globals->getFlag(62) && + ((_globals->_player._position.x - _hotspot2._position.x) < 160) && + (_globals->_sceneManager._previousScene != 5200) && (_sceneMode != 5150)) { + setAction(NULL); + _sceneMode = 5150; + _soundHandler.play(208); + + if (RING_INVENTORY._vial._sceneNumber == 5100) { + _globals->_player.addMover(NULL); + _globals->_player.disableControl(); + SceneItem::display2(5100, 39); + } + + _hotspot2.setStrip2(1); + _hotspot3.setStrip2(2); + + ObjectMover3 *mover1 = new ObjectMover3(); + _hotspot2.addMover(mover1, &_globals->_player, 20, this); + ObjectMover3 *mover2 = new ObjectMover3(); + _hotspot3.addMover(mover2, &_globals->_player, 20, this); + } + + if (!_action) { + if (((_globals->_player._position.x - _hotspot2._position.x) < 130) && !_globals->getFlag(61)) { + _globals->_player._canWalk = false; + _globals->_player.addMover(NULL); + + Common::Point pt(20, 25); + PlayerMover2 *mover = new PlayerMover2(); + _hotspot3.addMover(mover, &pt, &_globals->_player); + setAction(&_action4); + } + + if ((_globals->_sceneManager._scene->_backgroundBounds.right - 85) <= _globals->_player._position.x) + _globals->_sceneManager.changeScene(5000); + + if (_globals->_player.getRegionIndex() == 8) { + _sceneMode = 5114; + setAction(&_sequenceManager, this, 5115, &_globals->_player, NULL); + } + } + + Scene::dispatch(); +} + +/*-------------------------------------------------------------------------- + * Scene 5200 - Caverns - Throne Room + * + *--------------------------------------------------------------------------*/ + +void Scene5200::Action1::signal() { + Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(59) + 120); + break; + case 1: + scene->_hotspot3.animate(ANIM_MODE_8, 1, this); + _actionIndex = 0; + break; + } +} + +void Scene5200::Action2::signal() { + // Quinn obtains the stasis box from the flesheater throne room + Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + ADD_PLAYER_MOVER(92, 52); + break; + case 1: + _globals->_player.setVisage(5202); + _globals->_player._strip = 4; + _globals->_player._frame = 1; + _globals->_player.animate(ANIM_MODE_4, 3, 1, this); + break; + case 2: + scene->_soundHandler.stop(); + scene->_hotspot14.remove(); + + RING_INVENTORY._stasisBox._sceneNumber = 1; + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 3: + _globals->_player.setVisage(0); + _globals->_player._strip = 3; + _globals->_player.animate(ANIM_MODE_1, NULL); + + scene->_hotspot8.animate(ANIM_MODE_2, NULL); + ADD_MOVER(scene->_hotspot8, 141, 77); + break; + case 4: + scene->_soundHandler.play(303); + + scene->_hotspot8._strip = 2; + scene->_hotspot8._frame = 1; + scene->_hotspot8.animate(ANIM_MODE_5, this); + break; + case 5: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene5200::Action3::signal() { + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(5); + break; + case 1: + ADD_PLAYER_MOVER(285, 62); + break; + case 2: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene5200::Action4::signal() { + Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(120); + break; + case 1: + _globals->_soundHandler.play(209); + scene->_stripManager.start(5202, this, scene); + break; + case 2: + scene->_hotspot6.animate(ANIM_MODE_5, this); + break; + case 3: + setDelay(10); + break; + case 4: + scene->_stripManager.start(5204, this, scene); + break; + case 5: + setDelay(60); + break; + case 6: + _globals->_sceneManager.changeScene(5100); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene5200::Hotspot9::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (!_state) { + ++_state; + SceneItem::display2(5200, 5); + } else { + SceneItem::display2(5200, 6); + } + break; + case CURSOR_USE: + SceneItem::display2(5200, 14); + break; + default: + SceneItem::doAction(action); + break; + } +} + +void Scene5200::Hotspot10::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (!_state) { + ++_state; + SceneItem::display2(5200, 7); + } else { + SceneItem::display2(5200, 8); + } + break; + default: + SceneObject::doAction(action); + break; + } +} + +void Scene5200::Hotspot14::doAction(int action) { + Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5200, 4); + break; + case CURSOR_USE: + scene->setAction(&scene->_action2); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene5200::Scene5200() : + _hotspot11(0, CURSOR_LOOK, 5200, 0, CURSOR_USE, 5200, 13, LIST_END), + _hotspot12(10, CURSOR_LOOK, 5200, 9, LIST_END), + _hotspot13(8, CURSOR_LOOK, 5200, 0, CURSOR_USE, 5200, 13, LIST_END) { +} + + +void Scene5200::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 150, 199, 150); + _fieldA = 5600; + _fieldE = 5100; + + _hotspot9._state = 0; + _hotspot10._state = 0; + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerGameText); + _stripManager.addSpeaker(&_speakerFLText); + _stripManager.addSpeaker(&_speakerFLL); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.setCallback(this); + + _speakerFLText._textPos.x = 160; + _speakerQText._textPos.x = 20; + + if (RING_INVENTORY._stasisBox._sceneNumber == 5200) { + _soundHandler.play(216); + _soundHandler.holdAt(true); + + _hotspot14.postInit(); + _hotspot14.setVisage(5202); + _hotspot14._strip = 3; + _hotspot14.setPosition(Common::Point(105, 52)); + _hotspot14.fixPriority(90); + + _hotspot8.postInit(); + _hotspot8.setVisage(5202); + _hotspot8._strip = 1; + _hotspot8.setPosition(Common::Point(96, 53)); + _hotspot8.fixPriority(90); + _globals->_sceneItems.push_back(&_hotspot14); + } + + if (_globals->_stripNum == 5111) { + // Happens when the player enters the throne room via the secret passage, + // after talking with the bat. No NPCs are around and the player can + // obtain the stasis box. + _globals->_soundHandler.play(205); + _globals->_player.disableControl(); + + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.changeZoom(75); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip(1); + _globals->_player.setFrame(3); + _globals->_player.setPosition(Common::Point(307, 62)); + + setAction(&_action3); + } else { + // Happens when the player is captured by the flesh eaters the first time. + _globals->_player.postInit(); + _globals->_player.setVisage(2640); + _globals->_player._strip = 1; + _globals->_player._frame = 4; + _globals->_player.setPosition(Common::Point(105, 199)); + + _hotspot5.postInit(); + _hotspot5.setVisage(5210); + _hotspot5._frame = 2; + _hotspot5.setPosition(Common::Point(189, 167)); + + _hotspot6.postInit(); + _hotspot6.setVisage(5210); + _hotspot6._frame = 1; + _hotspot6._strip = 2; + _hotspot6.setPosition(Common::Point(159, 137)); + + _hotspot7.postInit(); + _hotspot7.setVisage(5210); + _hotspot7._frame = 1; + _hotspot7._strip = 4; + _hotspot7.fixPriority(168); + _hotspot7.setPosition(Common::Point(186, 106)); + + _hotspot1.postInit(); + _hotspot1.setVisage(5212); + _hotspot1._frame = 1; + _hotspot1.setPosition(Common::Point(62, 132)); + + _hotspot2.postInit(); + _hotspot2.setVisage(5212); + _hotspot2._strip = 3; + _hotspot2.setPosition(Common::Point(148, 141)); + _hotspot2.fixPriority(90); + + _hotspot3.postInit(); + _hotspot3.setVisage(5212); + _hotspot3._strip = 2; + _hotspot3.setPosition(Common::Point(62, 109)); + _hotspot3.fixPriority(138); + _hotspot3.setAction(&_action1); + + _hotspot4.postInit(); + _hotspot4.setVisage(5212); + _hotspot4._strip = 4; + _hotspot4.setPosition(Common::Point(146, 110)); + _hotspot4.fixPriority(90); + + _globals->_player.disableControl(); + _globals->setFlag(61); + + setAction(&_action4); + } + + _hotspot11.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot9._sceneRegionId = 11; + _hotspot10._sceneRegionId = 9; + _hotspot12._sceneRegionId = 10; + _hotspot13._sceneRegionId = 8; + + _globals->_sceneItems.addItems(&_hotspot12, &_hotspot13, &_hotspot9, &_hotspot10, &_hotspot11, NULL); + _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position); + loadScene(5200); +} + +void Scene5200::stripCallback(int v) { + switch (v) { + case 1: + _hotspot7.animate(ANIM_MODE_2, NULL); + break; + case 2: + _hotspot7.animate(ANIM_MODE_NONE, NULL); + break; + } +} + +void Scene5200::dispatch() { + Scene::dispatch(); + + if (!_action && (_globals->_player.getRegionIndex() == 12)) { + _globals->_stripNum = 5200; + _globals->_sceneManager.changeScene(5100); + } +} + +/*-------------------------------------------------------------------------- + * Scene 5300 - Caverns - Pit + * + *--------------------------------------------------------------------------*/ + +void Scene5300::Action1::signal() { + // Seeker waking up + Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + scene->_hotspot2._numFrames = 4; + scene->_hotspot2.animate(ANIM_MODE_8, 1, NULL); + setDelay(120); + break; + case 2: + scene->_hotspot2.animate(ANIM_MODE_NONE, NULL); + + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setStrip2(-1); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + ADD_MOVER(_globals->_player, 85, 170); + break; + case 3: + scene->_hotspot2.fixPriority(-1); + _globals->_player.checkAngle(&scene->_hotspot2); + setAction(&scene->_sequenceManager, this, 5305, &scene->_hotspot2, NULL); + break; + case 4: + scene->_stripManager.start(5316, this); + break; + case 5: + if (!_globals->getFlag(106) || !_globals->getFlag(107) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) { + _globals->_player.enableControl(); + remove(); + } else { + _globals->setFlag(60); + scene->_hotspot2._numFrames = 10; + + if (_globals->getFlag(67)) { + scene->_sceneMode = 5310; + scene->setAction(&scene->_sequenceManager, scene, 5310, &_globals->_player, &scene->_hotspot2, NULL); + } else { + scene->_sceneMode = 5347; + scene->setAction(&scene->_sequenceManager, scene, 5347, NULL); + } + } + break; + } +} + +void Scene5300::Action2::signal() { + Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(60); + break; + case 1: + _globals->setFlag(60); + scene->_stripManager.start(5328, this); + break; + case 2: + if (RING_INVENTORY._stasisBox._sceneNumber == 1) { + _globals->_stripNum = 5303; + setDelay(5); + } else { + _globals->_stripNum = 5302; + scene->_stripManager.start(5329, this); + } + break; + case 3: + _globals->_sceneManager.changeScene(5100); + remove(); + break; + } +} + +void Scene5300::Action3::signal() { + Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(30); + break; + case 1: + scene->_stripManager.start(_globals->_stripNum, this); + break; + case 2: + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene5300::Hotspot1::doAction(int action) { + Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5300, 24); + break; + case CURSOR_TALK: + _globals->_stripNum = 5312; + scene->setAction(&scene->_action3); + break; + default: + SceneHotspot::doAction(action); + break; + } +} +void Scene5300::Hotspot2::doAction(int action) { + // Seeker + Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5300, 23); + break; + case CURSOR_USE: + if (!_globals->getFlag(106)) { + _globals->_player.disableControl(); + scene->_sceneMode = 5302; + scene->setAction(&scene->_sequenceManager, scene, 5302, &_globals->_player, NULL); + } else { + SceneItem::display2(5300, _globals->getFlag(107) ? 25 : 20); + } + break; + case CURSOR_TALK: + if (!_globals->getFlag(106)) { + _globals->_player.disableControl(); + scene->_sceneMode = 5302; + scene->setAction(&scene->_sequenceManager, scene, 5302, &_globals->_player, NULL); + } else if (!_globals->getFlag(107)) { + SceneItem::display2(5300, 11); + } else { + _globals->_player.disableControl(); + + if (RING_INVENTORY._stasisBox._sceneNumber != 1) { + scene->_sceneMode = 5316; + scene->setAction(&scene->_sequenceManager, scene, 5316, NULL); + } else { + _globals->setFlag(60); + if (_globals->getFlag(67)) { + scene->_sceneMode = 5315; + scene->setAction(&scene->_sequenceManager, scene, 5315, this, NULL); + } else { + scene->_sceneMode = 5347; + scene->setAction(&scene->_sequenceManager, scene, 5347, NULL); + } + } + } + break; + case OBJECT_SCANNER: + SceneItem::display2(5300, _globals->getFlag(107) ? 10 : 9); + break; + case OBJECT_MEDKIT: + if (_globals->getFlag(106)) + SceneItem::display2(5300, 7); + else { + _globals->setFlag(106); + _globals->_player.disableControl(); + + scene->_sceneMode = 5303; + scene->setAction(&scene->_sequenceManager, scene, 5303, &_globals->_player, NULL); + } + break; + case OBJECT_VIAL: + if (_globals->getFlag(107)) { + SceneItem::display2(5300, 8); + } else { + RING_INVENTORY._vial._sceneNumber = 5300; + _globals->setFlag(107); + _globals->_player.disableControl(); + scene->_sceneMode = 5304; + + scene->setAction(&scene->_sequenceManager, scene, 5304, &_globals->_player, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5300::Hotspot5::doAction(int action) { + // Sharp bone + Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5300, 27); + break; + case CURSOR_USE: + RING_INVENTORY._bone._sceneNumber = 1; + _globals->_player.disableControl(); + + scene->_sceneMode = 5309; + scene->setAction(&scene->_sequenceManager, scene, 5309, &_globals->_player, this, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5300::Hotspot6::doAction(int action) { + // Left Hole + Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber == 1)) + SceneItem::display2(5300, 4); + else + SceneItem::display2(5300, 26); + break; + case CURSOR_USE: + if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber != 5100)) { + _globals->_player.disableControl(); + scene->_sceneMode = 5301; + scene->setAction(&scene->_sequenceManager, scene, 5301, &_globals->_player, NULL); + } else { + _globals->_player.disableControl(); + scene->_sceneMode = 5307; + RING_INVENTORY._vial._sceneNumber = 1; + + scene->setAction(&scene->_sequenceManager, scene, 5307, &scene->_hotspot1, &_globals->_player, + &scene->_hotspot4, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5300::Hotspot7::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(63)) + SceneItem::display2(5300, 2); + else { + _globals->setFlag(63); + SceneItem::display2(5300, 0); + SceneItem::display2(5300, 1); + } + break; + case CURSOR_USE: + if (_globals->getFlag(64)) + SceneItem::display2(5300, 15); + else { + _globals->setFlag(64); + SceneItem::display2(5300, 14); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene5300::Hotspot8::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(5300, _globals->getFlag(65) ? 6 : 5); + break; + case CURSOR_USE: + SceneItem::display2(5300, 18); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene5300::Scene5300() : + _hotspot3(0, CURSOR_LOOK, 5300, 3, CURSOR_USE, 5300, 16, LIST_END) { +} + +void Scene5300::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + loadScene(5300); + setZoomPercents(0, 100, 199, 100); + + _stripManager.addSpeaker(&_speakerQR); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerBatR); + _stripManager.addSpeaker(&_speakerSR); + _stripManager.addSpeaker(&_speakerSL); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerBatText); + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerGameText); + + if (_globals->getFlag(106) && _globals->getFlag(107)) { + _hotspot2.postInit(); + _hotspot2.setVisage(2806); + _hotspot2.setObjectWrapper(new SceneObjectWrapper()); + _hotspot2.setPosition(Common::Point(63, 170)); + _hotspot2.animate(ANIM_MODE_1, NULL); + } else { + _hotspot2.postInit(); + _hotspot2.setVisage(5310); + _hotspot2.setPosition(Common::Point(63, 170)); + _hotspot2.animate(ANIM_MODE_1, NULL); + _hotspot2.fixPriority(98); + } + + _hotspot1.postInit(); + _hotspot1.setVisage(5362); + _hotspot1.setStrip2(3); + _hotspot1.setFrame2(5); + _hotspot1.setPosition(Common::Point(76, 48)); + + _hotspot4.postInit(); + _hotspot4.setVisage(5316); + _hotspot4.setStrip(2); + _hotspot4.setPosition(Common::Point(89, 65)); + _hotspot4.animate(ANIM_MODE_2, NULL); + _hotspot4.hide(); + + if (_globals->getFlag(67)) { + _globals->_player.postInit(); + _globals->_player.setVisage(5316); + _globals->_player.setPosition(Common::Point(191, 27)); + _globals->_player.disableControl(); + + if (_globals->getFlag(107) && _globals->getFlag(106)) { + _hotspot2.setVisage(2806); + _hotspot2.postInit(); + _hotspot2.setObjectWrapper(new SceneObjectWrapper()); + _hotspot2.animate(ANIM_MODE_1, NULL); + + setAction(&_action2); + } else { + _globals->_player.setVisage(5315); + _globals->_player.setPosition(Common::Point(204, 86)); + _globals->_player.animate(ANIM_MODE_2, NULL); + _globals->_player.setStrip2(1); + _globals->_player._moveDiff.y = 12; + + _sceneMode = 5308; + setAction(&_sequenceManager, this, 5308, &_globals->_player, NULL); + } + } else { + _hotspot3.postInit(); + _hotspot3.setVisage(5301); + _hotspot3.setPosition(Common::Point(172, 32)); + _hotspot3.fixPriority(1); + _hotspot3.animate(ANIM_MODE_NONE, NULL); + + _globals->_player.postInit(); + _globals->_player.setVisage(5315); + _globals->_player.setPosition(Common::Point(204, 86)); + _globals->_player.animate(ANIM_MODE_2, NULL); + _globals->_player.setStrip2(1); + _globals->_player._moveDiff.y = 12; + _globals->_player.disableControl(); + + _sceneMode = 5306; + setAction(&_sequenceManager, this, 5306, &_globals->_player, &_hotspot3, NULL); + } + + _field1B0A = 1; + if (RING_INVENTORY._bone._sceneNumber == 5300) { + _hotspot5.postInit(); + _hotspot5.setVisage(5301); + _hotspot5.setStrip(2); + _hotspot5.setPosition(Common::Point(190, 147)); + _globals->_sceneItems.push_back(&_hotspot5); + } + + _hotspot6.setBounds(Rect(74, 51, 114, 69)); + _hotspot7.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _hotspot8._sceneRegionId = 8; + + _globals->_sceneItems.addItems(&_hotspot8, &_hotspot2, &_hotspot6, &_hotspot3, &_hotspot7, NULL); + _globals->_soundHandler.play(212); +} + +void Scene5300::signal() { + switch (_sceneMode) { + case 5301: + _globals->_stripNum = 5300; + _globals->_sceneManager.changeScene(5100); + break; + case 5307: + _soundHandler.fadeOut(NULL); + // No break on purpose + case 5302: + case 5308: + case 5316: + case 5347: + _globals->_player.setStrip2(-1); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.enableControl(); + break; + case 5303: + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.enableControl(); + + if (_globals->getFlag(107)) + setAction(&_action1); + else + SceneItem::display2(5300, 28); + break; + case 5304: + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.enableControl(); + + if (_globals->getFlag(106)) + setAction(&_action1); + else + SceneItem::display2(5300, 28); + break; + case 5306: + _globals->clearFlag(67); + _globals->_player.setStrip2(-1); + + if ((RING_INVENTORY._vial._sceneNumber == 1) || (RING_INVENTORY._vial._sceneNumber == 5300)) + _stripManager.start(5303, this); + else + _stripManager.start(5302, this); + _sceneMode = 5302; + break; + case 5309: + _hotspot5.remove(); + _globals->_player.enableControl(); + break; + case 5310: + _hotspot2.fixPriority(41); + _sceneMode = 5315; + + setAction(&_sequenceManager, this, 5315, &_hotspot2, NULL); + break; + case 5315: + _globals->_stripNum = 5302; + _globals->_sceneManager.changeScene(5100); + break; + } +} + + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes6.h b/engines/tsage/ringworld/ringworld_scenes6.h new file mode 100644 index 0000000000..db6efd0e18 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes6.h @@ -0,0 +1,330 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES6_H +#define TSAGE_RINGWORLD_SCENES6_H + +#include "common/scummsys.h" +#include "tsage/ringworld/ringworld_logic.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace tSage { + +class Scene5000 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + virtual void dispatch(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot7 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8 : public SceneObject { + public: + virtual void doAction(int action); + }; + class HotspotGroup1 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + ASound _soundHandler; + SpeakerSText _speakerSText; + SpeakerQText _speakerQText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + DisplayHotspot _hotspot1; + SceneObject _hotspot2, _hotspot3, _hotspot4, _hotspot5, _hotspot6; + Hotspot7 _hotspot7; + Hotspot8 _hotspot8; + HotspotGroup1 _hotspot9, _hotspot10, _hotspot11; + DisplayHotspot _hotspot12, _hotspot13, _hotspot14, _hotspot15; + DisplayHotspot _hotspot16, _hotspot17, _hotspot18; + + Scene5000(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene5100 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class HotspotGroup1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class HotspotGroup2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot4 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot9 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot17 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot18 : public SceneHotspot { + public: + int _index1; + int _index2; + + virtual void doAction(int action); + }; + class Hotspot19 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot20 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + SequenceManager _sequenceManager; + ASound _soundHandler; + SpeakerMText _speakerMText; + SpeakerQText _speakerQText; + SpeakerSText _speakerSText; + SpeakerBatText _speakerBatText; + SpeakerGameText _speakerGameText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + HotspotGroup1 _hotspot1, _hotspot2, _hotspot3; + Hotspot4 _hotspot4; + HotspotGroup2 _hotspot5, _hotspot6, _hotspot7; + SceneObject _hotspot8; + Hotspot9 _hotspot9; + SceneObject _hotspot10, _hotspot11, _hotspot12, _hotspot13, _hotspot14, _hotspot15; + DisplayHotspot _hotspot16; + Hotspot17 _hotspot17; + Hotspot18 _hotspot18; + Hotspot19 _hotspot19; + Hotspot20 _hotspot20; + DisplayHotspot _hotspot21; + + Scene5100(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene5200 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot9 : public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class Hotspot10 : public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class Hotspot14 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + ASound _soundHandler; + SpeakerFLL _speakerFLL; + SpeakerFLText _speakerFLText; + SpeakerQL _speakerQL; + SpeakerQText _speakerQText; + SpeakerGameText _speakerGameText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + + SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5, _hotspot6, _hotspot7; + SceneObject _hotspot8; + Hotspot9 _hotspot9; + Hotspot10 _hotspot10; + DisplayHotspot _hotspot11, _hotspot12, _hotspot13; + Hotspot14 _hotspot14; + + Scene5200(); + virtual void stripCallback(int v); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void dispatch(); +}; + +class Scene5300 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + + /* Hotspots */ + class Hotspot1 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot2 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot5 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot6 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot7 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8 : public SceneObject { + public: + virtual void doAction(int action); + }; +public: + ASound _soundHandler; + SequenceManager _sequenceManager; + SpeakerQR _speakerQR; + SpeakerQL _speakerQL; + SpeakerQText _speakerQText; + SpeakerBatR _speakerBatR; + SpeakerBatText _speakerBatText; + SpeakerSR _speakerSR; + SpeakerSL _speakerSL; + SpeakerSText _speakerSText; + SpeakerGameText _speakerGameText; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Hotspot1 _hotspot1; + Hotspot2 _hotspot2; + DisplayHotspot _hotspot3; + SceneObject _hotspot4; + Hotspot5 _hotspot5; + Hotspot6 _hotspot6; + Hotspot7 _hotspot7; + Hotspot8 _hotspot8; + int _field1B0A; + + Scene5300(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void synchronize(Serializer &s) { + Scene::synchronize(s); + s.syncAsSint16LE(_field1B0A); + } +}; + + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld/ringworld_scenes8.cpp b/engines/tsage/ringworld/ringworld_scenes8.cpp new file mode 100644 index 0000000000..5b01bb2c58 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes8.cpp @@ -0,0 +1,2545 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "graphics/cursorman.h" +#include "tsage/ringworld/ringworld_scenes8.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +void NamedHotspotMult::synchronize(Serializer &s) { + SceneHotspot::synchronize(s); + s.syncAsSint16LE(_useLineNum); + s.syncAsSint16LE(_lookLineNum); +} + +void SceneObject7700::synchronize(Serializer &s) { + SceneObject::synchronize(s); + if (s.getVersion() >= 3) { + s.syncAsSint16LE(_lookLineNum); + s.syncAsSint16LE(_defltLineNum); + } +} + +/*-------------------------------------------------------------------------- + * Scene 7000 - Landing near beach + * + *--------------------------------------------------------------------------*/ + +void Scene7000::Action1::signal() { + // Quinn walks from the lander to the seaside (action6) then discuss with Skeenar + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + setAction(&scene->_action6, this); + break; + case 2: + scene->_soundHandler.play(252); + scene->_object8.remove(); + scene->_object1.postInit(); + scene->_object1.setVisage(7003); + scene->_object1.animate(ANIM_MODE_5, this); + scene->_object1.setPosition(Common::Point(151, 182)); + scene->_object1.fixPriority(205); + _globals->_sceneItems.push_front(&scene->_object1); + break; + case 3: + scene->_object1._numFrames = 4; + scene->_object1.setStrip(2); + scene->_object1.animate(ANIM_MODE_8, 0, NULL); + scene->_stripManager.start(7005, this); + break; + case 4: + scene->_object1.animate(ANIM_MODE_2, NULL); + setDelay(3); + break; + case 5: + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action2::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + _globals->_player.addMover(NULL); + _globals->_player.setVisage(7006); + _globals->_player.setStrip(1); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(_globals->_player._position.x, _globals->_player._position.y + 13)); + _globals->_player.changeZoom(68); + _globals->_player.animate(ANIM_MODE_5, this); + scene->_object1.remove(); + break; + case 2: + _globals->_sceneManager.changeScene(7100); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action3::dispatch() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + Action::dispatch(); + if (_actionIndex == 4) + scene->_object4.setPosition(Common::Point(scene->_object3._position.x, scene->_object3._position.y + 15)); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action3::signal() { + // Lander is landing + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + scene->setZoomPercents(10, 10, 62, 100); + scene->_object4.postInit(); + scene->_object4.setVisage(5001); + scene->_object4.setStrip2(2); + scene->_object4.animate(ANIM_MODE_8, 0, NULL); + scene->_object4.setPosition(Common::Point(10, 18)); + scene->_object4.fixPriority(10); + scene->_object4.changeZoom(100); + scene->_object4.hide(); + break; + case 1: { + NpcMover *mover = new NpcMover(); + Common::Point pt(107, 65); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 2: + scene->_object3._moveDiff.y = 1; + scene->_object3.fixPriority(10); + scene->_object4.setPosition(Common::Point(scene->_object3._position.x, scene->_object3._position.y + 15)); + scene->_object4.show(); + setDelay(30); + break; + case 3: { + NpcMover *mover = new NpcMover(); + Common::Point pt(107, 92); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 4: + scene->_object4.remove(); + _globals->_sceneManager.changeScene(2100); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action4::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 1: + scene->_object1.hide(); + setDelay(300); + break; + case 2: + _globals->_soundHandler.play(252); + scene->_object1.show(); + scene->_object1.setStrip(3); + scene->_object1.setFrame(1); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 3: + scene->_object1.setStrip(4); + scene->_object1.animate(ANIM_MODE_8, 0, NULL); + _globals->setFlag(81); + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action5::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + NpcMover *playerMover = new NpcMover(); + Common::Point pt(88, 121); + _globals->_player.addMover(playerMover, &pt, this); + break; + } + case 1: + _globals->_player.checkAngle(&scene->_object1); + _globals->_soundHandler.play(252); + scene->_object1.setStrip(2); + scene->_stripManager.start(7015, this); + break; + case 2: + scene->_object1.setStrip(1); + scene->_object1.setFrame(4); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 3: { + scene->_object1.remove(); + NpcMover *mover = new NpcMover(); + Common::Point pt(31, 94); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 4: { + NpcMover *mover = new NpcMover(); + Common::Point pt(11, 94); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: { + _globals->_player.fixPriority(10); + NpcMover *mover = new NpcMover(); + Common::Point pt(11, 89); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: { + NpcMover *mover = new NpcMover(); + Common::Point pt(41, 89); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 7: + _globals->clearFlag(36); + _globals->clearFlag(37); + _globals->clearFlag(72); + _globals->clearFlag(13); + _globals->_sceneManager.changeScene(2100); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action6::signal() { + // Quinn walks from the lander to the seaside + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: { + NpcMover *mover = new NpcMover(); + Common::Point pt(12, 91); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: { + NpcMover *mover = new NpcMover(); + Common::Point pt(8, 91); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: { + NpcMover *mover = new NpcMover(); + Common::Point pt(31, 96); + _globals->_player.addMover(mover, &pt, this); + _globals->_player.fixPriority(-1); + break; + } + case 4: { + NpcMover *mover = new NpcMover(); + Common::Point pt(83, 117); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: { + NpcMover *mover = new NpcMover(); + Common::Point pt(95, 121); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: + _globals->_player.setStrip(3); + _globals->_player.setFrame(1); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action7::signal() { + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + setDelay(3); + break; + case 2: { + NpcMover *mover = new NpcMover(); + Common::Point pt(31, 94); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: { + NpcMover *mover = new NpcMover(); + Common::Point pt(11, 94); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 4: { + _globals->_player.fixPriority(10); + NpcMover *mover = new NpcMover(); + Common::Point pt(11, 89); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: { + NpcMover *mover = new NpcMover(); + Common::Point pt(41, 89); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: + if (_globals->getFlag(13)) + _globals->_sceneManager.changeScene(2280); + else + _globals->_sceneManager.changeScene(2320); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Hotspot1::doAction(int action) { + if (action == CURSOR_LOOK) + SceneItem::display2(7000, 2); + else + SceneHotspot::doAction(action); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Object1::doAction(int action) { + // Skeenar + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_TRANSLATOR: + _globals->_player.disableControl(); + RING_INVENTORY._translator._sceneNumber = 7000; + + if ((RING_INVENTORY._waldos._sceneNumber != 7000) && (RING_INVENTORY._jar._sceneNumber != 7000)) { + scene->_sceneMode = 7004; + scene->setAction(&scene->_sequenceManager, scene, 7004, &_globals->_player, this, NULL); + } else if (RING_INVENTORY._waldos._sceneNumber != 7000) { + scene->_sceneMode = 7011; + scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, NULL); + } else if (RING_INVENTORY._jar._sceneNumber != 7000) { + scene->_sceneMode = 7012; + scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, NULL); + } else { + scene->_sceneMode = 7015; + scene->setAction(&scene->_sequenceManager, scene, 7017, &_globals->_player, NULL); + } + break; + case OBJECT_WALDOS: + _globals->_player.disableControl(); + RING_INVENTORY._waldos._sceneNumber = 7000; + if (RING_INVENTORY._translator._sceneNumber == 7000) { + if (RING_INVENTORY._jar._sceneNumber == 7000) { + scene->_sceneMode = 7015; + scene->setAction(&scene->_sequenceManager, scene, 7015, &_globals->_player, NULL); + } else { + scene->_sceneMode = 7006; + scene->setAction(&scene->_sequenceManager, scene, 7006, &_globals->_player, NULL); + } + } else { + scene->_sceneMode = 7009; + scene->setAction(&scene->_sequenceManager, scene, 7009, &_globals->_player, NULL); + } + break; + case OBJECT_JAR: + _globals->_player.disableControl(); + RING_INVENTORY._jar._sceneNumber = 7000; + + if (RING_INVENTORY._translator._sceneNumber == 7000) { + if (RING_INVENTORY._waldos._sceneNumber != 7000) { + scene->_sceneMode = 7007; + scene->setAction(&scene->_sequenceManager, scene, 7007, &_globals->_player, &scene->_object1, NULL); + } else { + scene->_sceneMode = 7015; + scene->setAction(&scene->_sequenceManager, scene, 7016, &_globals->_player, NULL); + } + } else { + scene->_sceneMode = 7008; + scene->setAction(&scene->_sequenceManager, scene, 7008, &_globals->_player, NULL); + } + break; + case CURSOR_LOOK: + if (_globals->getFlag(81)) + SceneItem::display2(7000, 1); + else + SceneItem::display2(7000, 0); + break; + case CURSOR_USE: + if (_globals->getFlag(81)) { + RING_INVENTORY._stasisBox2._sceneNumber = 1; + _globals->_player.disableControl(); + scene->setAction(&scene->_action5); + } else { + SceneItem::display2(7000, 5); + } + break; + case CURSOR_TALK: + if (_globals->getFlag(81)) { + RING_INVENTORY._stasisBox2._sceneNumber = 1; + _globals->_player.disableControl(); + scene->setAction(&scene->_action5); + } else if (_globals->getFlag(52)) { + scene->_sceneMode = 7005; + scene->setAction(&scene->_sequenceManager, scene, 7013, NULL); + } else if (_globals->getFlag(13)) { + scene->_sceneMode = 7002; + scene->setAction(&scene->_sequenceManager, scene, 7014, NULL); + } else { + scene->_sceneMode = 7002; + scene->setAction(&scene->_sequenceManager, scene, 7002, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::dispatch() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + if (!_action) { + if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 8) { + if (!_globals->getFlag(13)) { + _globals->_player.disableControl(); + _globals->_player.addMover(NULL); + SceneItem::display2(7000, 3); + _sceneMode = 7001; + setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL); + } else if (!_globals->getFlag(52)) { + setAction(&_action2); + } else { + _globals->_player.disableControl(); + _sceneMode = 7003; + setAction(&scene->_sequenceManager, this, 7003, &_globals->_player, NULL); + } + } + if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 9) + scene->setAction(&scene->_action7); + } + Scene::dispatch(); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::postInit(SceneObjectList *OwnerList) { + loadScene(7000); + Scene::postInit(); + setZoomPercents(93, 25, 119, 55); + _stripManager.addSpeaker(&_speakerSKText); + _stripManager.addSpeaker(&_speakerSKL); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerQR); + + _speakerSKText._npc = &_object1; + _speakerQText._npc = &_globals->_player; + + _object5.postInit(); + _object5.setVisage(7001); + _object5.setStrip2(1); + _object5.animate(ANIM_MODE_2, NULL); + _object5.setPosition(Common::Point(49, 147)); + _object5.fixPriority(1); + + _object6.postInit(); + _object6.setVisage(7001); + _object6.setStrip2(2); + _object6.animate(ANIM_MODE_2, NULL); + _object6.setPosition(Common::Point(160, 139)); + _object6.fixPriority(1); + + _object7.postInit(); + _object7.setVisage(7001); + _object7.setStrip2(3); + _object7.animate(ANIM_MODE_2, NULL); + _object7.setPosition(Common::Point(272, 129)); + _object7.fixPriority(1); + + _object8.postInit(); + _object8.setVisage(7001); + _object8.setStrip2(4); + _object8.animate(ANIM_MODE_2, NULL); + _object8.setPosition(Common::Point(176, 175)); + _object8.fixPriority(1); + + if (_globals->getFlag(72)) { + _object3.postInit(); + _object3.setVisage(5001); + _object3.setStrip2(1); + _object3.setPosition(Common::Point(107, 92)); + _object3.changeZoom(100); + _object3.fixPriority(10); + + _object1.postInit(); + _object1.setVisage(7003); + if (_globals->getFlag(81)) + _object1.setStrip(4); + else + _object1.setStrip(2); + _object1.setPosition(Common::Point(87, 129)); + _object1._numFrames = 4; + _object1.changeZoom(45); + _object1.animate(ANIM_MODE_8, 0, NULL); + _globals->_sceneItems.push_back(&_object1); + } + _soundHandler.play(251); + if (_globals->_sceneManager._previousScene == 2100) { + if (_globals->getFlag(72)) { + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + SceneObjectWrapper *wrapper = new SceneObjectWrapper(); + _globals->_player.setObjectWrapper(wrapper); + _globals->_player.setPosition(Common::Point(57, 94)); + _globals->_player.changeZoom(-1); + _globals->_player.fixPriority(10); + if (_globals->getFlag(81)) { + setAction(&_action4); + } else { + _object1.setPosition(Common::Point(151, 182)); + _object1.changeZoom(100); + setAction(&_action1); + } + } else { + _globals->_soundHandler.play(250); + _globals->setFlag(72); + + _object3.postInit(); + _object3.setVisage(5001); + _object3.setStrip2(1); + _object3.animate(ANIM_MODE_1, NULL); + _object3.setPosition(Common::Point(307, 0)); + _object3.changeZoom(-1); + setAction(&_action3); + } + } else if (_globals->_sceneManager._previousScene == 2280) { + _globals->_player.postInit(); + _globals->_player.setVisage(2170); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setPosition(Common::Point(57, 94)); + _globals->_player.changeZoom(-1); + _globals->_player.fixPriority(10); + _globals->_player.disableControl(); + _sceneMode = 7001; + setAction(&_action6, this); + if (!_globals->getFlag(81)) { + _object1.setPosition(Common::Point(151, 182)); + _object1.changeZoom(100); + } + _object8.remove(); + _object9.remove(); + } else if (_globals->_sceneManager._previousScene == 2320) { + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, NULL); + SceneObjectWrapper *wrapper = new SceneObjectWrapper(); + _globals->_player.setObjectWrapper(wrapper); + _globals->_player.setPosition(Common::Point(57, 94)); + _globals->_player.changeZoom(-1); + _globals->_player.fixPriority(10); + _sceneMode = 7001; + setAction(&_action6, this); + } else { + _globals->setFlag(72); + + _object3.postInit(); + _object3.setVisage(5001); + _object3.setStrip2(1); + _object3.setPosition(Common::Point(307, 0)); + _soundHandler.play(151); + _soundHandler.holdAt(true); + _globals->_soundHandler.play(250); + setAction(&_action3); + } + + _hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); + _globals->_sceneItems.push_back(&_hotspot1); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + switch (_sceneMode) { + case 7001: + case 7002: + case 7004: + case 7005: + case 7006: + case 7007: + case 7008: + case 7009: + _globals->_player.enableControl(); + break; + case 7003: + _sceneMode = 7001; + setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL); + break; + case 7011: + _sceneMode = 7005; + setAction(&scene->_sequenceManager, this, 7005, &_globals->_player, NULL); + break; + case 7012: + _sceneMode = 7005; + setAction(&scene->_sequenceManager, this, 7012, &_globals->_player, NULL); + break; + case 7015: + setAction(&_action4); + break; + } +} + + +/*-------------------------------------------------------------------------- + * Scene 7100 - Underwater: swimming + * + *--------------------------------------------------------------------------*/ + +void Scene7100::Action3::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + Common::Point pt(433, 308); + NpcMover *mover = new NpcMover(); + scene->_object4.addMover(mover, &pt, this); + break; + } + case 2: + scene->_object4.remove(); + remove(); + break; + } +} + +void Scene7100::Action4::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(1) + 1); + break; + case 1: { + scene->_object5.setStrip(3); + Common::Point pt(85, 52); + NpcMover *mover = new NpcMover(); + scene->_object5.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object5.setStrip(4); + Common::Point pt(20, 52); + NpcMover *mover = new NpcMover(); + scene->_object5.addMover(mover, &pt, this); + break; + } + case 3: + _actionIndex = 0; + setDelay(1); + break; + } +} + +void Scene7100::Action5::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + Common::Point pt(59, 151); + NpcMover *mover = new NpcMover(); + scene->_object9.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object9.setStrip2(1); + Common::Point pt(127, 144); + NpcMover *mover = new NpcMover(); + scene->_object9.addMover(mover, &pt, this); + break; + } + case 3: { + scene->_object9.setStrip2(2); + scene->_object9.fixPriority(180); + Common::Point pt(8, 181); + NpcMover *mover = new NpcMover(); + scene->_object9.addMover(mover, &pt, this); + break; + } + case 4: { + scene->_object9.remove(); + remove(); + } + } +} + +void Scene7100::Action6::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + scene->_object10.fixPriority(8); + scene->_object10.setPosition(Common::Point(155, 187)); + + scene->_object11.fixPriority(8); + scene->_object11.setPosition(Common::Point(155, 190)); + + scene->_object12.fixPriority(8); + scene->_object12.setPosition(Common::Point(151, 193)); + break; + case 1: { + Common::Point pt1(167, 187); + NpcMover *mover1 = new NpcMover(); + scene->_object10.addMover(mover1, &pt1, this); + + Common::Point pt2(165, 185); + NpcMover *mover2 = new NpcMover(); + scene->_object11.addMover(mover2, &pt2, NULL); + + Common::Point pt3(163, 183); + NpcMover *mover3 = new NpcMover(); + scene->_object12.addMover(mover3, &pt3, NULL); + break; + } + case 2: { + scene->_object10.setStrip2(6); + Common::Point pt1(91, 187); + NpcMover *mover1 = new NpcMover(); + scene->_object10.addMover(mover1, &pt1, this); + + scene->_object11.setStrip2(6); + scene->_object11.fixPriority(50); + Common::Point pt2(89, 185); + NpcMover *mover2 = new NpcMover(); + scene->_object11.addMover(mover2, &pt2, NULL); + + scene->_object12.setStrip2(6); + scene->_object12.fixPriority(50); + Common::Point pt3(87, 183); + NpcMover *mover3 = new NpcMover(); + scene->_object12.addMover(mover3, &pt3, NULL); + break; + } + case 3: + _actionIndex = 0; + setDelay(1); + break; + } +} + +void Scene7100::Action7::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + scene->_object13.setStrip2(8); + Common::Point pt(324, 87); + NpcMover *mover = new NpcMover(); + scene->_object13.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object13.setStrip2(2); + Common::Point pt(524, 104); + NpcMover *mover = new NpcMover(); + scene->_object13.addMover(mover, &pt, NULL); + break; + } + case 3: + _actionIndex = 0; + setDelay(1); + break; + } +} + +void Scene7100::Action8::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + scene->_object17.setStrip2(4); + scene->_object18.setStrip2(4); + scene->_object19.setStrip2(4); + + Common::Point pt1(482, 153); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(480, 146); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, NULL); + + Common::Point pt3(470, 153); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, NULL); + break; + } + case 2: { + scene->_object17.setStrip2(3); + scene->_object18.setStrip2(3); + scene->_object19.setStrip2(3); + + Common::Point pt1(506, 186); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(502, 179); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, NULL); + + Common::Point pt3(495, 184); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, NULL); + break; + } + case 3: { + scene->_object17.setStrip2(4); + scene->_object18.setStrip2(4); + scene->_object19.setStrip2(4); + + Common::Point pt1(386, 167); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(379, 161); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, NULL); + + Common::Point pt3(373, 167); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, NULL); + break; + } + case 4: { + scene->_object17.setStrip2(3); + scene->_object18.setStrip2(3); + scene->_object19.setStrip2(3); + + Common::Point pt1(479, 193); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(473, 187); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, NULL); + + Common::Point pt3(466, 192); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, NULL); + break; + } + case 5: { + Common::Point pt1(552, 183); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(552, 178); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, NULL); + + Common::Point pt3(541, 183); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, NULL); + + _actionIndex = 0; + break; + } + } +} + +void Scene7100::Action9::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + scene->_object24.setStrip2(1); + Common::Point pt(64, 159); + NpcMover *mover = new NpcMover(); + scene->_object24.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object24.setStrip2(2); + scene->_object24.fixPriority(160); + Common::Point pt(34, 159); + NpcMover *mover = new NpcMover(); + scene->_object24.addMover(mover, &pt, this); + break; + } + case 3: { + scene->_object24.setStrip2(1); + Common::Point pt(64, 159); + NpcMover *mover = new NpcMover(); + scene->_object24.addMover(mover, &pt, this); + break; + } + case 4: { + scene->_object24.setStrip2(2); + scene->_object24.fixPriority(180); + Common::Point pt(-12, 182); + NpcMover *mover = new NpcMover(); + scene->_object24.addMover(mover, &pt, this); + break; + } + case 5: { + _actionIndex = 0; + setDelay(1); + break; + } + } +} + +void Scene7100::Action10::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1000); + break; + case 1: { + Common::Point pt(610, -60); + NpcMover *mover = new NpcMover(); + scene->_object25.addMover(mover, &pt, this); + break; + } + case 2: + scene->_object25.remove(); + remove(); + break; + } +} + +void Scene7100::Action11::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: { + Common::Point pt(154, 175); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + ObjectMover2 *mover2 = new ObjectMover2(); + scene->_object1.addMover(mover2, 25, 35, &_globals->_player); + break; + } + case 2: { + Common::Point pt(700, 155); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: + _globals->_sceneManager.changeScene(7200); + remove(); + break; + } +} + +void Scene7100::postInit(SceneObjectList *OwnerList) { + loadScene(7100); + Scene::postInit(); + setZoomPercents(60, 85, 200, 100); + + _object2.postInit(); + _object2.setVisage(7161); + _object2.animate(ANIM_MODE_2, NULL); + _object2.setPosition(Common::Point(10, 140)); + _object2._numFrames = 1; + _object2.fixPriority(180); + _object2.setAction(&_action1, NULL); + + _object3.postInit(); + _object3.setVisage(7161); + _object3.animate(ANIM_MODE_2, NULL); + _object3.setPosition(Common::Point(34, 115)); + _object3._numFrames = 1; + _object3.fixPriority(180); + _object3.setAction(&_action2, NULL); + + _object4.postInit(); + _object4.setVisage(7164); + _object4.animate(ANIM_MODE_2, NULL); + _object4.setPosition(Common::Point(-10, 159)); + _object4._numFrames = 2; + _object4.fixPriority(250); + _object4.setAction(&_action3, NULL); + + _object5.postInit(); + _object5.setVisage(7162); + _object5.setStrip(3); + _object5.animate(ANIM_MODE_2, NULL); + _object5.setPosition(Common::Point(20, 52)); + _object5.setAction(&_action4, NULL); + + _object9.postInit(); + _object9.setVisage(7160); + _object5.setStrip(2); + _object9.animate(ANIM_MODE_2, NULL); + _object9.setPosition(Common::Point(110, 168)); + _object9._numFrames = 2; + _object9.fixPriority(16); + _object9.setAction(&_action5, NULL); + + _object13.postInit(); + _object13.setVisage(7161); + _object13.setStrip(8); + _object13.animate(ANIM_MODE_2, NULL); + _object13.setPosition(Common::Point(524, 104)); + _object13._numFrames = 5; + _object13.fixPriority(250); + _object13.setAction(&_action7, NULL); + + _object17.postInit(); + _object17.setVisage(7160); + _object17.setStrip(3); + _object17.animate(ANIM_MODE_2, NULL); + _object17.setPosition(Common::Point(552, 183)); + _object17._numFrames = 4; + _object17._moveDiff.x = 12; + _object17._moveDiff.y = 12; + _object17.setAction(&_action8, NULL); + + _object18.postInit(); + _object18.setVisage(7160); + _object18.setStrip(3); + _object18.animate(ANIM_MODE_2, NULL); + _object18.setPosition(Common::Point(552, 178)); + _object18._numFrames = 4; + _object18._moveDiff.x = 12; + _object18._moveDiff.y = 12; + + _object19.postInit(); + _object19.setVisage(7160); + _object19.setStrip(3); + _object19.animate(ANIM_MODE_2, NULL); + _object19.setPosition(Common::Point(541, 183)); + _object19._numFrames = 4; + _object19._moveDiff.x = 12; + _object19._moveDiff.y = 12; + + _object24.postInit(); + _object24.setVisage(7162); + _object24.setStrip(1); + _object24.animate(ANIM_MODE_2, NULL); + _object24.setPosition(Common::Point(-12, 182)); + _object24._numFrames = 4; + _object24.fixPriority(180); + _object24.setAction(&_action9, NULL); + + _object25.postInit(); + _object25.setVisage(7163); + _object25.animate(ANIM_MODE_2, NULL); + _object25.setPosition(Common::Point(551, 145)); + _object25._numFrames = 5; + _object25.fixPriority(160); + _object25.setAction(&_action10, NULL); + + // Swimmer 1 + _globals->_player.postInit(); + _globals->_player.setVisage(7101); + _globals->_player.animate(ANIM_MODE_2, NULL); + _globals->_player._moveDiff.x = 4; + _globals->_player._moveDiff.y = 2; + _globals->_player.setPosition(Common::Point(135, 135)); + _globals->_player.fixPriority(200); + _globals->_player.disableControl(); + + // Swimmer 2 + _object1.postInit(); + _object1.setVisage(7110); + _object1.animate(ANIM_MODE_1, NULL); + _object1._moveDiff.x = 4; + _object1._moveDiff.y = 2; + _object1.setPosition(Common::Point(100, 100)); + + setAction(&_action11); + _soundHandler1.play(270); + _soundHandler2.play(275); + _globals->_soundHandler.play(270); +} +/*-------------------------------------------------------------------------- + * Scene 7200 - Underwater: Entering the cave + * + *--------------------------------------------------------------------------*/ + +void Scene7200::Action1::signal() { + Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(15); + break; + case 1: { + PlayerMover *mover1 = new PlayerMover(); + Common::Point pt1(165, 147); + scene->_swimmer.addMover(mover1, &pt1, this); + Common::Point pt2(207, 138); + PlayerMover *mover2 = new PlayerMover(); + _globals->_player.addMover(mover2, &pt2, this); + break; + } + case 2: + break; + case 3: + _globals->_sceneManager.changeScene(7300); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7200::Action2::signal() { + Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(3); + break; + case 1: { + scene->_object2.fixPriority(25); + scene->_object3.fixPriority(25); + scene->_object4.fixPriority(25); + scene->_object2.setStrip(1); + scene->_object3.setStrip(1); + scene->_object4.setStrip(1); + NpcMover *mover1 = new NpcMover(); + Common::Point pt1(54, 90); + scene->_object2.addMover(mover1, &pt1, this); + NpcMover *mover2 = new NpcMover(); + Common::Point pt2(56, 85); + scene->_object3.addMover(mover2, &pt2, NULL); + NpcMover *mover3 = new NpcMover(); + Common::Point pt3(54, 80); + scene->_object4.addMover(mover3, &pt3, NULL); + break; + } + case 2: { + scene->_object2.fixPriority(160); + scene->_object3.fixPriority(160); + scene->_object4.fixPriority(160); + scene->_object2.setStrip(2); + scene->_object3.setStrip(2); + scene->_object4.setStrip(2); + NpcMover *mover1 = new NpcMover(); + Common::Point pt1(10, 89); + scene->_object2.addMover(mover1, &pt1, this); + NpcMover *mover2 = new NpcMover(); + Common::Point pt2(12, 84); + scene->_object3.addMover(mover2, &pt2, NULL); + NpcMover *mover3 = new NpcMover(); + Common::Point pt3(10, 79); + scene->_object4.addMover(mover3, &pt3, NULL); + break; + } + case 3: + _actionIndex = 0; + setDelay(1); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7200::postInit(SceneObjectList *OwnerList) { + loadScene(7200); + Scene::postInit(); + _object2.postInit(); + _object2.setVisage(7160); + _object2.animate(ANIM_MODE_2, NULL); + _object2.setZoom(10); + _object2.setPosition(Common::Point(53, 88)); + _object2.setAction(&_action2); + + _object3.postInit(); + _object3.setVisage(7160); + _object3.animate(ANIM_MODE_2, NULL); + _object3.setZoom(10); + _object3.setPosition(Common::Point(55, 83)); + + _object4.postInit(); + _object4.setVisage(7160); + _object4.animate(ANIM_MODE_2, NULL); + _object4.setZoom(10); + _object4.setPosition(Common::Point(57, 78)); + + _object5.postInit(); + _object5.setVisage(7201); + _object5.setPosition(Common::Point(300, 172)); + _object5.setPriority(172); + _object5.animate(ANIM_MODE_2, NULL); + _object5._numFrames = 3; + + _object6.postInit(); + _object6.setVisage(7201); + _object6.setStrip2(3); + _object6.setPosition(Common::Point(144, 97)); + _object6.setPriority(199); + _object6.animate(ANIM_MODE_2, NULL); + _object6._numFrames = 3; + + _object7.postInit(); + _object7.setVisage(7201); + _object7.setStrip2(4); + _object7.setPosition(Common::Point(115, 123)); + _object7.setPriority(199); + _object7.animate(ANIM_MODE_2, NULL); + _object7._numFrames = 3; + + _object8.postInit(); + _object8.setVisage(7201); + _object8.setStrip2(6); + _object8.setPosition(Common::Point(140, 173)); + _object8.setPriority(199); + _object8.animate(ANIM_MODE_2, NULL); + _object8._numFrames = 3; + + _object9.postInit(); + _object9.setVisage(7201); + _object9.setStrip2(7); + _object9.setPosition(Common::Point(215, 196)); + _object9.setPriority(199); + _object9.animate(ANIM_MODE_2, NULL); + _object9._numFrames = 3; + + // Orange swimmer + _globals->_player.postInit(); + _globals->_player.setVisage(7110); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setZoom(50); + _globals->_player.setPosition(Common::Point(-18, 16)); + _globals->_player.disableControl(); + + _swimmer.postInit(); + _swimmer.setVisage(7101); + _swimmer.animate(ANIM_MODE_1, NULL); + _swimmer.setObjectWrapper(new SceneObjectWrapper()); + _swimmer.setZoom(50); + _swimmer.setPosition(Common::Point(-8, 16)); + + setAction(&_action1); + _soundHandler.play(271); +} + +/*-------------------------------------------------------------------------- + * Scene 7300 - Underwater: Lord Poria + * + *--------------------------------------------------------------------------*/ + +void Scene7300::Action1::signal() { + Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + case 1: + case 3: + setDelay(30); + break; + case 2: + scene->_stripManager.start(7300, this); + break; + case 4: { + NpcMover *mover = new NpcMover(); + Common::Point pt(102, 122); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 6: + _globals->_player.setStrip(3); + _globals->_player._numFrames = 5; + _globals->_player.animate(ANIM_MODE_2, this); + if (RING_INVENTORY._translator._sceneNumber == 1) + scene->_stripManager.start(7310, this); + else + scene->_stripManager.start(7305, this); + break; + case 7: + setDelay(3); + _globals->_soundHandler.fadeOut(NULL); + break; + case 8: + _globals->_sceneManager.changeScene(2280); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::Action2::signal() { + Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + NpcMover *mover1 = new NpcMover(); + Common::Point pt(_globals->_randomSource.getRandomNumber(3) + 203, _globals->_randomSource.getRandomNumber(3) + 96); + scene->_object3.addMover(mover1, &pt, this); + _actionIndex = 0; + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::Action3::signal() { + Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + NpcMover *mover1 = new NpcMover(); + Common::Point pt(_globals->_randomSource.getRandomNumber(5) + 76, _globals->_randomSource.getRandomNumber(5) + 78); + scene->_object1.addMover(mover1, &pt, this); + _actionIndex = 0; + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::Action4::signal() { + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + _actionIndex = 0; + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::dispatch() { + Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; + scene->_object4.setPosition(Common::Point(scene->_object3._position.x + 15, scene->_object3._position.y + 61)); + scene->_object2.setPosition(Common::Point(scene->_object1._position.x + 1, scene->_object1._position.y - 31)); + + Scene::dispatch(); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::postInit(SceneObjectList *OwnerList) { + loadScene(7300); + + Scene::postInit(); + setZoomPercents(60, 85, 200, 100); + + _globals->setFlag(52); + _globals->setFlag(24); + _globals->setFlag(109); + + _stripManager.addSpeaker(&_speakerPOR); + _stripManager.addSpeaker(&_speakerPOText); + _stripManager.addSpeaker(&_speakerSKText); + _stripManager.addSpeaker(&_speakerQU); + + _speakerSKText.setTextPos(Common::Point(100, 20)); + _speakerPOText.setTextPos(Common::Point(100, 160)); + + _object4.postInit(); + _object4.setVisage(7311); + _object4.setStrip(1); + _object4.setFrame(1); + _object4.setPosition(Common::Point(218, 157)); + + _object3.postInit(); + _object3.setVisage(7311); + _object3.setStrip(2); + _object3.setFrame(1); + _object3.setPosition(Common::Point(203, 96)); + _object3._numFrames = 2; + _object3._moveDiff = Common::Point(1, 1); + _object3.animate(ANIM_MODE_8, 0, NULL); + _object3._moveRate = 2; + _object3.setAction(&_action2); + + _globals->_player.postInit(); + _globals->_player.setVisage(7305); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setPosition(Common::Point(-100, 100)); + _globals->_player.disableControl(); + + _object1.postInit(); + _object1.setVisage(7312); + _object1.animate(ANIM_MODE_1, NULL); + _object1._moveDiff = Common::Point(1, 1); + _object1.setPosition(Common::Point(76, 78)); + _object1._moveRate = 1; + _object1.setAction(&_action3); + + _object2.postInit(); + _object2.setVisage(7312); + _object2.setStrip(2); + _object2.animate(ANIM_MODE_2, NULL); + _object2.setPosition(Common::Point(77, 47)); + _object2.fixPriority(190); + + _object5.postInit(); + _object5.setVisage(7300); + _object5.setPosition(Common::Point(106, 45)); + _object5.animate(ANIM_MODE_2, NULL); + _object5._numFrames = 5; + + _object6.postInit(); + _object6.setVisage(7300); + _object6.setStrip2(2); + _object6.setPosition(Common::Point(283, 193)); + _object6.animate(ANIM_MODE_2, NULL); + _object6._numFrames = 3; + + _object7.postInit(); + _object7.setVisage(7300); + _object7.setStrip(4); + _object7.setPosition(Common::Point(295, 77)); + _object7.animate(ANIM_MODE_2, NULL); + _object7._numFrames = 3; + + _object8.postInit(); + _object8.setVisage(7300); + _object8.setStrip(5); + _object8.setPosition(Common::Point(1, 147)); + _object8.animate(ANIM_MODE_2, NULL); + _object8._numFrames = 2; + + setAction(&_action1); + _globals->_soundHandler.play(272); +} + +/*-------------------------------------------------------------------------- + * Scene 7600 - Floating Buildings: Outside + * + *--------------------------------------------------------------------------*/ + +void Scene7600::Action1::signal() { + switch (_actionIndex++) { + case 0: + setDelay(120); + break; + case 1: { + PlayerMover *mover = new PlayerMover(); + Common::Point pt(389, 57); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_sceneManager.changeScene(7700); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7600::Action2::signal() { + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: { + NpcMover *mover = new NpcMover(); + Common::Point pt(-30, 195); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_sceneManager.changeScene(2320); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7600::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(100, 0, 200, 100); + + _object2.postInit(); + _object2.setVisage(7601); + _object2.setStrip(1); + _object2.animate(ANIM_MODE_2, NULL); + _object2.setPosition(Common::Point(48, 135)); + _object2.fixPriority(1); + + _object3.postInit(); + _object3.setVisage(7601); + _object3.setStrip(2); + _object3.animate(ANIM_MODE_2, NULL); + _object3.setPosition(Common::Point(158, 136)); + _object3.fixPriority(1); + + _object4.postInit(); + _object4.setVisage(7601); + _object4.setStrip(3); + _object4.animate(ANIM_MODE_2, NULL); + _object4.setPosition(Common::Point(293, 141)); + _object4.fixPriority(1); + + _object5.postInit(); + _object5.setVisage(7601); + _object5.setStrip(4); + _object5.animate(ANIM_MODE_2, NULL); + _object5.setPosition(Common::Point(405, 143)); + _object5.fixPriority(1); + + _object6.postInit(); + _object6.setVisage(7601); + _object6.setStrip(5); + _object6.animate(ANIM_MODE_2, NULL); + _object6.setPosition(Common::Point(379, 191)); + _object6.fixPriority(1); + + _globals->_player.postInit(); + _globals->_player.setVisage(2333); + _globals->_player.animate(ANIM_MODE_1, NULL); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setStrip(1); + _globals->_player._moveDiff = Common::Point(16, 16); + _globals->_player.changeZoom(-1); + _globals->_player.disableControl(); + + if (_globals->_sceneManager._previousScene == 7700) { + _globals->_player.setPosition(Common::Point(389, 57)); + setAction(&_action2); + } else { + _globals->_player.setPosition(Common::Point(-50, 195)); + setAction(&_action1); + } + _sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y); + loadScene(7600); + _soundHandler2.play(255); + _soundHandler1.play(251); +} + +/*-------------------------------------------------------------------------- + * Scene 7700 - Floating Buildings: In the lab + * + *--------------------------------------------------------------------------*/ + +void Scene7700::Action1::signal() { + SceneObjectExt *fmtObj = (SceneObjectExt *) _endHandler; + switch (_actionIndex++) { + case 0: { + PlayerMover *mover1 = new PlayerMover(); + Common::Point pt = Common::Point(fmtObj->_position.x, fmtObj->_position.y + 30); + _globals->_player.addMover(mover1, &pt, this); + break; + } + case 1: + _globals->_player.checkAngle(fmtObj); + if (fmtObj->_state == 0) + fmtObj->animate(ANIM_MODE_5, this); + else + fmtObj->animate(ANIM_MODE_6, this); + break; + case 2: + remove(); + break; + } +} + +void Scene7700::Action2::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 0: + case 2: + setDelay(_globals->_randomSource.getRandomNumber(60) + 60); + break; + case 1: + scene->_prof.animate(ANIM_MODE_7, 0, NULL); + setDelay(20); + break; + case 3: + scene->_prof.animate(ANIM_MODE_6, this); + _actionIndex = 0; + break; + } +} + +void Scene7700::Action3::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 0: + scene->_object15.animate(ANIM_MODE_5, this); + break; + case 1: + scene->_sceneItem10.remove(); + scene->_object15.remove(); + scene->_sceneHotspot8.remove(); + scene->_sceneHotspot9.remove(); + scene->_object19.remove(); + setDelay(60); + // No break on purpose! + case 2: + scene->_soundHandler.play(260); + scene->_object8.setVisage(7703); + scene->_object8.setPosition(Common::Point(177, 97)); + scene->_object8.setStrip2(3); + scene->_object8.animate(ANIM_MODE_5, this); + scene->_object8._numFrames = 3; + break; + case 3: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene7700::Action4::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 2: + scene->_object13.remove(); + // No break on purpose! + case 0: + setDelay(3); + break; + case 1: + CursorMan.showMouse(false); + scene->_object13.postInit(); + scene->_object13.setVisage(7700); + scene->_object13.setStrip2(7); + scene->_object13.setPosition(Common::Point(151, 33)); + scene->_object13.animate(ANIM_MODE_5, this); + break; + case 3: + CursorMan.showMouse(true); + SceneItem::display2(7700, 11); + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene7700::Action5::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(240)); + break; + case 1: { + scene->_cloud.setFrame(_globals->_randomSource.getRandomNumber(1) + 1); + scene->_cloud.setPosition(Common::Point(133, 145 + _globals->_randomSource.getRandomNumber(54))); + + Common::Point pt(360, scene->_cloud._position.y); + NpcMover *mover = new NpcMover(); + scene->_cloud.addMover(mover, &pt, this); + _actionIndex = 0; + break; + } + } +} + +void Scene7700::Action6::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: { + Common::Point pt(2, 66); + NpcMover *mover = new NpcMover(); + scene->_easterEgg1.addMover(mover, &pt, this); + break; + } + case 2: + scene->_easterEgg1.setStrip(2); + scene->_easterEgg1.setPosition(Common::Point(43, 65)); + + scene->_easterEgg2.postInit(); + scene->_easterEgg2.setVisage(7708); + scene->_easterEgg2.setStrip(3); + scene->_easterEgg2.setPosition(Common::Point(116, 54)); + scene->_easterEgg2.animate(ANIM_MODE_2, NULL); + + setDelay(120); + break; + case 3: + scene->_easterEgg1.remove(); + scene->_easterEgg2.remove(); + remove(); + break; + } +} + +void Scene7700::SceneHotspot1::doAction(int action) { + if (action == CURSOR_LOOK) + SceneItem::display2(7700, 4); + else + SceneHotspot::doAction(action); +} + +void Scene7700::SceneHotspot2::doAction(int action) { + if (action == CURSOR_LOOK) + SceneItem::display2(7700, 6); + else + SceneHotspot::doAction(action); +} + +void Scene7700::SceneHotspot3::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_KEY: + SceneItem::display2(7702, 3); + RING_INVENTORY._key._sceneNumber = 7700; + break; + case CURSOR_LOOK: + if (RING_INVENTORY._key._sceneNumber == 7700) + scene->setAction(&scene->_action4, NULL); + else + SceneItem::display2(7700, 53); + break; + case CURSOR_USE: + if (!_globals->getFlag(78)) { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); + } else if (RING_INVENTORY._key._sceneNumber == 7700) { + _globals->_player.disableControl(); + scene->_sceneMode = 7705; + scene->setAction(&scene->_sequenceManager, scene, 7705, &_globals->_player, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneHotspot4::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(7700, 12); + break; + case CURSOR_USE: + if (!_globals->getFlag(78)) { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); + } else { + SceneItem::display2(7700, 12); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneHotspot5::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(7700, 28); + break; + case CURSOR_USE: + if (_globals->getFlag(78)) { + if (RING_INVENTORY._paper._sceneNumber == 7700) { + _globals->_player.disableControl(); + scene->_sceneMode = 7708; + scene->setAction(&scene->_sequenceManager, scene, 7708, &_globals->_player, NULL); + } + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneHotspot6::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(7700, 43); + break; + case CURSOR_USE: + SceneItem::display2(7700, 56); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneItem7::doAction(int action) { + if (action == CURSOR_LOOK) + SceneItem::display2(7700, 51); +} + +void Scene7700::SceneHotspot8::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(7700, 48); + break; + case CURSOR_USE: + scene->_sceneMode = 7709; + scene->_soundHandler.play(259); + scene->_object15.setFrame(scene->_object15.getFrameCount()); + scene->_object15.animate(ANIM_MODE_6, scene); + if ((scene->_field977 == 2) && (scene->_field97B == 0)) { + scene->_field979++; + } else { + scene->_field97B = 0; + scene->_field979 = 0; + scene->_field977 = 0; + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneHotspot9::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(7700, 48); + break; + case CURSOR_USE: + scene->_sceneMode = 7709; + scene->_soundHandler.play(259); + scene->_object15.setFrame(1); + scene->_object15.animate(ANIM_MODE_5, scene); + if (scene->_field977 > 2) { + scene->_field97B = 0; + scene->_field979 = 0; + scene->_field977 = 0; + } + + if (scene->_field979 != 0) { + if (scene->_field979 != 4) { + scene->_field97B = 0; + scene->_field979 = 0; + scene->_field977 = 0; + } else { + scene->_field97B++; + if (scene->_field97B == 3) { + _globals->_player.disableControl(); + scene->setAction(&scene->_action3); + } + } + } else { + scene->_field977++; + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneItem10::doAction(int action) { +} + +void Scene7700::Object1::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(7700, _lookLineNum); + } else if (action == CURSOR_USE) { + if (_globals->getFlag(78)) { + _globals->_player.disableControl(); + scene->setAction(&scene->_action1, this); + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::SceneHotspot11::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(7700, _lookLineNum); + break; + case CURSOR_USE: + SceneItem::display2(7701, _useLineNum); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::Object1::signal() { + if (_state == 0) { + _state = 1; + SceneItem::display2(7701, _defltLineNum); + } else { + _state = 0; + } + _globals->_player.enableControl(); +} + +void Scene7700::Object3::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(7700, 34); + } else if (action == CURSOR_USE) { + if (_globals->getFlag(78)) { + if (scene->_object3._frame == 1) { + _globals->_player.disableControl(); + scene->_sceneMode = 7707; + scene->setAction(&scene->_sequenceManager, scene, 7707, &_globals->_player, this, NULL); + } else { + SceneItem::display2(7700, 60); + } + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object7::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(78)) + SceneItem::display2(7700, 45); + else + SceneItem::display2(7700, 44); + break; + case CURSOR_USE: + if (_globals->getFlag(78)) { + SceneItem::display2(7701, 41); + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7714, NULL); + } + break; + case CURSOR_TALK: + if (_globals->getFlag(78)) { + SceneItem::display2(7702, 1); + } else { + _globals->_player.disableControl(); + if (_state == 0) { + _state = 1; + scene->_sceneMode = 7703; + scene->setAction(&scene->_sequenceManager, scene, 7703, NULL); + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7712, NULL); + } + } + break; + case OBJECT_STUNNER: + if (!_globals->getFlag(78)) { + _globals->_soundHandler.stop(); + _globals->setFlag(78); + setAction(NULL); + _globals->_player.disableControl(); + scene->_sceneMode = 7704; + scene->setAction(&scene->_sequenceManager, scene, 7704, &_globals->_player, this, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::Object8::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) { + if (_strip == 3) { + scene->_object9.postInit(); + scene->_object9.setVisage(7701); + scene->_object9.setStrip2(3); + scene->_object9.setPosition(Common::Point(91, 166)); + scene->_object9.fixPriority(200); + + scene->_object14.postInit(); + scene->_object14.setVisage(7701); + scene->_object14.setStrip(2); + scene->_object14.fixPriority(250); + scene->_object14.setPosition(Common::Point(139, 151)); + + scene->_gfxButton.setText(EXIT_MSG); + scene->_gfxButton._bounds.center(140, 189); + scene->_gfxButton.draw(); + + _globals->_sceneItems.push_front(&scene->_sceneItem10); + _globals->_sceneItems.push_front(&scene->_object9); + _globals->_player._canWalk = false; + } else if (_globals->getFlag(78)) { + scene->_object15.postInit(); + scene->_object15.setVisage(7701); + scene->_object15.setPosition(Common::Point(140, 165)); + scene->_object15.fixPriority(200); + + scene->_gfxButton.setText(EXIT_MSG); + scene->_gfxButton._bounds.center(140, 186); + scene->_gfxButton.draw(); + scene->_gfxButton._bounds.expandPanes(); + + scene->_object19.postInit(); + scene->_object19.setVisage(7700); + scene->_object19.setStrip(6); + scene->_object19.setPosition(Common::Point(140, 192)); + + _globals->_sceneItems.push_front(&scene->_sceneItem10); + _globals->_sceneItems.push_front(&scene->_sceneHotspot8); + _globals->_sceneItems.push_front(&scene->_sceneHotspot9); + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player._canWalk = false; + } else { + scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object9::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(7700, 49); + break; + case CURSOR_USE: + SceneItem::display2(7701, 42); + break; + case CURSOR_TALK: + SceneItem::display2(7702, 4); + break; + case OBJECT_KEY: + if (_frame == 1) { + if (!_globals->getFlag(80)) { + scene->_object10.postInit(); + scene->_object10.setVisage(7701); + scene->_object10.setStrip(4); + scene->_object10.setPosition(Common::Point(159, 136)); + _globals->_sceneItems.push_front(&scene->_object10); + scene->_object10.fixPriority(240); + } + + scene->_soundHandler.play(262); + scene->_object14.animate(ANIM_MODE_5, NULL); + } + _globals->_events.setCursor(CURSOR_WALK); + break; + default: + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object10::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(7700, 50); + } else if (action == CURSOR_USE) { + _globals->_player._canWalk = true; + RING_INVENTORY._translator._sceneNumber = 1; + _globals->setFlag(80); + scene->_sceneItem10.remove(); + scene->_gfxButton._bounds.expandPanes(); + scene->_object14.remove(); + scene->_object9.remove(); + remove(); + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object11::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_SCANNER: + if (_frame != 1) + SceneItem::display2(7701, 44); + else + SceneItem::doAction(action); + break; + case CURSOR_LOOK: + if (_frame != 1) + SceneItem::display2(7700, 9); + else + SceneItem::display2(7700, 52); + break; + case CURSOR_USE: + if (_frame != 1) { + SceneItem::display2(7701, 8); + } else { + _globals->setFlag(49); + _globals->_player.disableControl(); + scene->_sceneMode = 7706; + scene->setAction(&scene->_sequenceManager, scene, 7706, &_globals->_player, this, NULL); + } + break; + case OBJECT_EMPTY_JAR: + RING_INVENTORY._emptyJar._sceneNumber = 0; + RING_INVENTORY._jar._sceneNumber = 1; + _globals->_player.disableControl(); + scene->_sceneMode = 7710; + scene->setAction(&scene->_sequenceManager, scene, 7710, &_globals->_player, NULL); + break; + default: + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object12::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display2(7700, 15); + } else if (action == CURSOR_USE) { + if (_globals->getFlag(78)) { + scene->_sceneMode = 7713; + scene->setAction(&scene->_sequenceManager, scene, 7713, &_globals->_player, NULL); + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::signal() { + switch (_sceneMode) { + case 7701: + _globals->_player.fixPriority(-1); + _globals->_player.setStrip2(-1); + if (_globals->getFlag(78)) { + _globals->_player.enableControl(); + } else { + _sceneMode = 7711; + setAction(&_sequenceManager, this, 7711, NULL); + } + break; + case 7702: + _globals->_soundHandler.fadeOut(NULL); + _globals->_sceneManager.changeScene(7600); + break; + case 7703: + case 7706: + case 7707: + case 7711: + case 7712: + _globals->_player.enableControl(); + break; + case 7704: + _globals->_soundHandler.play(256); + _prof.setStrip2(4); + _prof.setFrame2(1); + _prof.setPosition(Common::Point(159, 87)); + _globals->_player.enableControl(); + break; + case 7705: + RING_INVENTORY._key._sceneNumber = 1; + _globals->_player.enableControl(); + break; + case 7708: + RING_INVENTORY._paper._sceneNumber = 1; + _globals->_player.enableControl(); + break; + case 7709: + _globals->_events.setCursor(CURSOR_USE); + break; + case 7710: + _globals->_player.enableControl(); + SceneItem::display2(7700, 62); + break; + case 7713: + _emptyJar.remove(); + RING_INVENTORY._emptyJar._sceneNumber = 1; + break; + default: + break; + } +} + +void Scene7700::process(Event &event) { + Scene::process(event); + + if (contains(_globals->_sceneItems, &_sceneItem10)) { + if (_gfxButton.process(event)) { + _sceneItem10.remove(); + _object15.remove(); + _object9.remove(); + if (_globals->_sceneObjects->contains(&_object10)) + _object10.remove(); + if (_globals->_sceneObjects->contains(&_object14)) + _object14.remove(); + _object19.remove(); + _gfxButton._bounds.expandPanes(); + _globals->_player._canWalk = true; + } + } + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_p)) { + event.handled = true; + if (!_globals->_sceneObjects->contains(&_easterEgg1)) { + _easterEgg1.postInit(); + _easterEgg1.setVisage(7708); + _easterEgg1.setPosition(Common::Point(163, 50)); + _easterEgg1.fixPriority(1); + _easterEgg1.animate(ANIM_MODE_2, NULL); + _easterEgg1.setAction(&_action6); + } + } +} + +void Scene7700::dispatch() { + if ((_globals->_sceneRegions.indexOf(_globals->_player._position) == 6) || (_globals->_player._position.x < 10)) + _globals->_player.changeZoom(100 - ((_globals->_player._position.y - 68) / 2)); + else + _globals->_player.changeZoom(-1); + + if ((_action == 0) && (_globals->_sceneRegions.indexOf(_globals->_player._position) == 30)) { + _globals->_player.disableControl(); + _sceneMode = 7702; + setAction(&_sequenceManager, this, 7702, &_globals->_player, NULL); + } + Scene::dispatch(); +} + +void Scene7700::postInit(SceneObjectList *OwnerList) { + loadScene(7700); + Scene::postInit(); + setZoomPercents(100, 80, 200, 100); + _globals->setFlag(53); + _field97B = 0; + _field979 = 0; + _field977 = 0; + + _stripManager.addSpeaker(&_speakerEText); + _stripManager.addSpeaker(&_speakerQText); + _speakerQText._npc = &_globals->_player; + _speakerEText._npc = &_prof; + + _globals->_player.postInit(); + _globals->_player.setVisage(4201); + _globals->_player.animate(ANIM_MODE_1, NULL); + SceneObjectWrapper *wrapper = new SceneObjectWrapper(); + _globals->_player.setObjectWrapper(wrapper); + _globals->_player.setPosition(Common::Point(-19, 68)); + _globals->_player.setStrip2(7); + _globals->_player.fixPriority(95); + _globals->_player.changeZoom(80); + _globals->_player._moveDiff.x = 6; + _globals->_player._moveDiff.y = 3; + _globals->_player.disableControl(); + + _prof.postInit(); + _prof.setVisage(7706); + + if (_globals->getFlag(78)) { + _prof.setStrip2(4); + _prof.fixPriority(80); + _prof.setPosition(Common::Point(159, 87)); + } else { + _prof.setPosition(Common::Point(203, 87)); + _prof.setStrip2(2); + _prof._numFrames = 6; + _prof.setAction(&_action2); + } + + _cloud.postInit(); + _cloud.setVisage(7700); + _cloud.setStrip2(5); + _cloud.fixPriority(1); + _cloud.setPosition(Common::Point(133, 160)); + _cloud._moveDiff.x = 1; + _cloud._moveRate = 7; + _cloud.setAction(&_action5); + + _object1.postInit(); + _object1.setVisage(7700); + _object1.setPosition(Common::Point(184, 61)); + _object1._lookLineNum = 18; + _object1._defltLineNum = 16; + + _object2.postInit(); + _object2.setVisage(7700); + _object2.setPosition(Common::Point(184, 70)); + _object2.fixPriority(60); + _object2._lookLineNum = 19; + _object2._defltLineNum = 17; + + _object3.postInit(); + _object3.setVisage(7703); + _object3.setPosition(Common::Point(288, 36)); + _object3.setStrip(2); + + _object4.postInit(); + _object4.setVisage(7700); + _object4.setPosition(Common::Point(268, 59)); + _object4.setStrip(2); + _object4._lookLineNum = 37; + _object4._defltLineNum = 35; + + _object5.postInit(); + _object5.setVisage(7700); + _object5.setPosition(Common::Point(268, 67)); + _object5.fixPriority(58); + _object5.setStrip2(3); + _object5._lookLineNum = 38; + _object5._defltLineNum = 36; + + _object6.postInit(); + _object6.setVisage(7700); + _object6.setPosition(Common::Point(268, 75)); + _object6.fixPriority(57); + _object6.setStrip2(4); + _object6._lookLineNum = 40; + _object6._defltLineNum = 43; + + _object8.postInit(); + _object8.setVisage(7703); + _object8.setPosition(Common::Point(203, 91)); + _object8.setStrip2(4); + _object8.fixPriority(86); + + _sceneHotspot8.setBounds(82, 141, 161, 92); + _sceneHotspot9.setBounds(82, 187, 161, 141); + + _cork.postInit(); + _cork.setVisage(7703); + _cork.setPosition(Common::Point(32, 128)); + + if (_globals->getFlag(49)) + _cork.setFrame(_cork.getFrameCount()); + + if (RING_INVENTORY._emptyJar._sceneNumber == 7700) { + _emptyJar.postInit(); + _emptyJar.setVisage(7700); + _emptyJar.setStrip(8); + _emptyJar.setPosition(Common::Point(189, 48)); + _globals->_sceneItems.addItems(&_emptyJar, NULL); + } + _sceneHotspot1._sceneRegionId = 28; + _sceneHotspot2._sceneRegionId = 6; + _sceneHotspot3._sceneRegionId = 10; + _sceneHotspot4._sceneRegionId = 11; + _sceneHotspot5._sceneRegionId = 9; + _sceneHotspot6._sceneRegionId = 7; + + _sceneItem7.setBounds(0, 320, 200, 0); + _sceneItem10.setBounds(0, 320, 200, 0); + + _sceneHotspot11._sceneRegionId = 57; + _sceneHotspot11._useLineNum = 0; + _sceneHotspot11._lookLineNum = 0; + _sceneHotspot12._sceneRegionId = 2; + _sceneHotspot12._useLineNum = 2; + _sceneHotspot12._lookLineNum = 2; + _sceneHotspot13._sceneRegionId = 12; + _sceneHotspot13._useLineNum = 3; + _sceneHotspot13._lookLineNum = 3; + _sceneHotspot14._sceneRegionId = 18; + _sceneHotspot14._useLineNum = 4; + _sceneHotspot14._lookLineNum = 5; + _sceneHotspot15.setBounds(0, 55, 50, 8); + _sceneHotspot15._useLineNum = 6; + _sceneHotspot15._lookLineNum = 7; + _sceneHotspot16.setBounds(0, 130, 34, 103); + _sceneHotspot16._useLineNum = 7; + _sceneHotspot16._lookLineNum = 8; + _sceneHotspot17.setBounds(41, 180, 46, 170); + _sceneHotspot17._useLineNum = 11; + _sceneHotspot17._lookLineNum = 13; + _sceneHotspot18.setBounds(38, 187, 46, 180); + _sceneHotspot18._useLineNum = 12; + _sceneHotspot18._lookLineNum = 14; + _sceneHotspot19._sceneRegionId = 3; + _sceneHotspot19._useLineNum = 14; + _sceneHotspot19._lookLineNum = 16; + _sceneHotspot20._sceneRegionId = 14; + _sceneHotspot20._useLineNum = 15; + _sceneHotspot20._lookLineNum = 17; + _sceneHotspot21.setBounds(9, 215, 26, 210); + _sceneHotspot21._useLineNum = 18; + _sceneHotspot21._lookLineNum = 20; + _sceneHotspot22.setBounds(10, 221, 26, 215); + _sceneHotspot22._useLineNum = 19; + _sceneHotspot22._lookLineNum = 21; + _sceneHotspot23.setBounds(6, 230, 26, 225); + _sceneHotspot23._useLineNum = 20; + _sceneHotspot23._lookLineNum = 22; + _sceneHotspot24._sceneRegionId = 13; + _sceneHotspot24._useLineNum = 21; + _sceneHotspot24._lookLineNum = 23; + _sceneHotspot25._sceneRegionId = 21; + _sceneHotspot25._useLineNum = 22; + _sceneHotspot25._lookLineNum = 24; + _sceneHotspot26._sceneRegionId = 19; + _sceneHotspot26._useLineNum = 23; + _sceneHotspot26._lookLineNum = 25; + _sceneHotspot27._sceneRegionId = 27; + _sceneHotspot27._useLineNum = 24; + _sceneHotspot27._lookLineNum = 26; + _sceneHotspot28._sceneRegionId = 15; + _sceneHotspot28._useLineNum = 25; + _sceneHotspot28._lookLineNum = 27; + _sceneHotspot29._sceneRegionId = 26; + _sceneHotspot29._useLineNum = 27; + _sceneHotspot29._lookLineNum = 29; + _sceneHotspot30.setBounds(0, 317, 34, 310); + _sceneHotspot30._useLineNum = 28; + _sceneHotspot30._lookLineNum = 30; + _sceneHotspot31._sceneRegionId = 17; + _sceneHotspot31._useLineNum = 29; + _sceneHotspot31._lookLineNum = 31; + _sceneHotspot32._sceneRegionId = 25; + _sceneHotspot32._useLineNum = 30; + _sceneHotspot32._lookLineNum = 32; + _sceneHotspot33._sceneRegionId = 5; + _sceneHotspot33._useLineNum = 31; + _sceneHotspot33._lookLineNum = 33; + _sceneHotspot34.setBounds(42, 292, 48, 281); + _sceneHotspot34._useLineNum = 32; + _sceneHotspot34._lookLineNum = 35; + _sceneHotspot35._sceneRegionId = 24; + _sceneHotspot35._useLineNum = 38; + _sceneHotspot35._lookLineNum = 41; + _sceneHotspot36._sceneRegionId = 1; + _sceneHotspot36._useLineNum = 39; + _sceneHotspot36._lookLineNum = 42; + + _globals->_sceneItems.addItems(&_prof, &_sceneHotspot35, &_object8, &_sceneHotspot34, &_sceneHotspot33, &_sceneHotspot32, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot31, &_sceneHotspot30, &_sceneHotspot29, &_sceneHotspot5, &_sceneHotspot28, &_sceneHotspot27, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot26, &_sceneHotspot25, &_sceneHotspot24, &_sceneHotspot23, &_sceneHotspot22, &_sceneHotspot21, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot20, &_sceneHotspot19, &_sceneHotspot18, &_sceneHotspot17, &_sceneHotspot4, &_sceneHotspot3, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot16, &_sceneHotspot15, &_sceneHotspot2, &_sceneHotspot14, &_cork, &_sceneHotspot1, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot13, &_sceneHotspot12, &_sceneHotspot11, &_object2, &_object1, &_object3, NULL); + _globals->_sceneItems.addItems(&_object6, &_object5, &_object4, &_sceneHotspot6, &_sceneHotspot36, &_sceneItem7, NULL); + + _sceneMode = 7701; + setAction(&_sequenceManager, this, 7701, &_globals->_player, NULL); + _soundHandler.play(256); +} + +Scene7700::Scene7700() { + _object1._state = 0; + _object2._state = 0; + _object4._state = 0; + _object5._state = 0; + _object6._state = 0; + _prof._state = 0; +} + +void Scene7700::synchronize(Serializer &s) { + Scene::synchronize(s); + if (s.getVersion() >= 3) { + s.syncAsSint16LE(_field977); + s.syncAsSint16LE(_field979); + s.syncAsSint16LE(_field97B); + } +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes8.h b/engines/tsage/ringworld/ringworld_scenes8.h new file mode 100644 index 0000000000..e4f82fc164 --- /dev/null +++ b/engines/tsage/ringworld/ringworld_scenes8.h @@ -0,0 +1,490 @@ +/* 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES8_H +#define TSAGE_RINGWORLD_SCENES8_H + +#include "common/scummsys.h" +#include "tsage/ringworld/ringworld_logic.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace tSage { + +class NamedHotspotMult : public SceneHotspot { +public: + int _useLineNum, _lookLineNum; + NamedHotspotMult() : SceneHotspot() {} + + virtual Common::String getClassName() { return "NamedHotspotMult"; } + virtual void synchronize(Serializer &s); +}; + +class SceneObject7700 : public SceneObjectExt { +public: + int _lookLineNum, _defltLineNum; + + virtual void synchronize(Serializer &s); + virtual Common::String getClassName() { return "SceneObject7700"; } +}; + +class Scene7000 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void dispatch(); + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + + /* Objects */ + class Object1 : public SceneObject { + public: + virtual void doAction(int action); + }; + + /* Items */ + class Hotspot1 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + +public: + ASound _soundHandler; + SequenceManager _sequenceManager; + SpeakerSKText _speakerSKText; + SpeakerSKL _speakerSKL; + SpeakerQL _speakerQL; + SpeakerQR _speakerQR; + SpeakerQText _speakerQText; + Object1 _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObject _object8; + SceneObject _object9; + SceneObject _object10; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Hotspot1 _hotspot1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + +class Scene7100 : public Scene { + /* Actions */ + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + class Action7 : public Action { + public: + virtual void signal(); + }; + class Action8 : public Action { + public: + virtual void signal(); + }; + class Action9 : public Action { + public: + virtual void signal(); + }; + class Action10 : public Action { + public: + virtual void signal(); + }; + class Action11 : public Action { + public: + virtual void signal(); + }; + +public: + ASound _soundHandler1; + ASound _soundHandler2; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObject _object8; + SceneObject _object9; + SceneObject _object10; + SceneObject _object11; + SceneObject _object12; + SceneObject _object13; + SceneObject _object14; + SceneObject _object15; + SceneObject _object16; + SceneObject _object17; + SceneObject _object18; + SceneObject _object19; + SceneObject _object20; + SceneObject _object21; + SceneObject _object22; + SceneObject _object23; + SceneObject _object24; + SceneObject _object25; + Action _action1; + Action _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + Action9 _action9; + Action10 _action10; + Action11 _action11; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene7200 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + +public: + Action1 _action1; + Action2 _action2; + SceneObject _swimmer; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObject _object8; + SceneObject _object9; + ASound _soundHandler; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene7300 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + +public: + SpeakerPOR _speakerPOR; + SpeakerPOText _speakerPOText; + SpeakerSKText _speakerSKText; + SpeakerQU _speakerQU; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObject _object8; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void dispatch(); +}; + +class Scene7600 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + +public: + Action1 _action1; + Action2 _action2; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + ASound _soundHandler1; + ASound _soundHandler2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene7700 : public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; + class Action2 : public Action { + public: + virtual void signal(); + }; + class Action3 : public Action { + public: + virtual void signal(); + }; + class Action4 : public Action { + public: + virtual void signal(); + }; + class Action5 : public Action { + public: + virtual void signal(); + }; + class Action6 : public Action { + public: + virtual void signal(); + }; + + class Object1 : public SceneObject7700 { + public: + virtual void signal(); + virtual void doAction(int action); + }; + class Object3 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object7 : public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class Object8 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object9 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object10 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object11 : public SceneObject { + public: + virtual void doAction(int action); + }; + class Object12 : public SceneObject { + public: + virtual void doAction(int action); + }; + + /* Items */ + class SceneHotspot1 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot2 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot3 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot4 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot5 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot6 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneItem7 : public SceneItem { + public: + virtual void doAction(int action); + }; + class SceneHotspot8 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot9 : public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneItem10 : public SceneItem { + public: + virtual void doAction(int action); + }; + class SceneHotspot11 : public NamedHotspotMult { + public: + virtual void doAction(int action); + }; +public: + ASound _soundHandler; + SequenceManager _sequenceManager; + GfxButton _gfxButton; + SpeakerEText _speakerEText; + SpeakerQText _speakerQText; + Object1 _object1; + Object1 _object2; + Object3 _object3; + Object1 _object4; + Object1 _object5; + Object1 _object6; + Object7 _prof; + Object8 _object8; + Object9 _object9; + Object10 _object10; + Object11 _cork; + Object12 _emptyJar; + SceneObject _object13; + SceneObject _object14; + SceneObject _object15; + SceneObject _cloud; + SceneObject _easterEgg1; + SceneObject _easterEgg2; + SceneObject _object19; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + SceneHotspot1 _sceneHotspot1; + SceneHotspot2 _sceneHotspot2; + SceneHotspot3 _sceneHotspot3; + SceneHotspot4 _sceneHotspot4; + SceneHotspot5 _sceneHotspot5; + SceneHotspot6 _sceneHotspot6; + SceneItem7 _sceneItem7; + SceneHotspot8 _sceneHotspot8; + SceneHotspot9 _sceneHotspot9; + SceneItem10 _sceneItem10; + SceneHotspot11 _sceneHotspot11; + SceneHotspot11 _sceneHotspot12; + SceneHotspot11 _sceneHotspot13; + SceneHotspot11 _sceneHotspot14; + SceneHotspot11 _sceneHotspot15; + SceneHotspot11 _sceneHotspot16; + SceneHotspot11 _sceneHotspot17; + SceneHotspot11 _sceneHotspot18; + SceneHotspot11 _sceneHotspot19; + SceneHotspot11 _sceneHotspot20; + SceneHotspot11 _sceneHotspot21; + SceneHotspot11 _sceneHotspot22; + SceneHotspot11 _sceneHotspot23; + SceneHotspot11 _sceneHotspot24; + SceneHotspot11 _sceneHotspot25; + SceneHotspot11 _sceneHotspot26; + SceneHotspot11 _sceneHotspot27; + SceneHotspot11 _sceneHotspot28; + SceneHotspot11 _sceneHotspot29; + SceneHotspot11 _sceneHotspot30; + SceneHotspot11 _sceneHotspot31; + SceneHotspot11 _sceneHotspot32; + SceneHotspot11 _sceneHotspot33; + SceneHotspot11 _sceneHotspot34; + SceneHotspot11 _sceneHotspot35; + SceneHotspot11 _sceneHotspot36; + int _field977, _field979, _field97B; + + Scene7700(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void synchronize(Serializer &s); +}; + +} // End of namespace tSage + +#endif diff --git a/engines/tsage/ringworld_demo.cpp b/engines/tsage/ringworld_demo.cpp deleted file mode 100644 index b24fec98f9..0000000000 --- a/engines/tsage/ringworld_demo.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "tsage/ringworld_demo.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -void RingworldDemoGame::start() { - // Start the demo's single scene - _globals->_sceneManager.changeScene(1); - - _globals->_events.setCursor(CURSOR_NONE); -} - -Scene *RingworldDemoGame::createScene(int sceneNumber) { - // The demo only has a single scene, so ignore the scene number and always return it - return new RingworldDemoScene(); -} - -void RingworldDemoGame::quitGame() { - if (MessageDialog::show(DEMO_EXIT_MSG, EXIT_BTN_STRING, DEMO_BTN_STRING) == 0) - _vm->quitGame(); -} - -void RingworldDemoGame::pauseGame() { - _globals->_events.setCursor(CURSOR_ARROW); - MessageDialog *dlg = new MessageDialog(DEMO_PAUSED_MSG, EXIT_BTN_STRING, DEMO_RESUME_BTN_STRING); - dlg->draw(); - - GfxButton *selectedButton = dlg->execute(&dlg->_btn2); - bool exitFlag = selectedButton != &dlg->_btn2; - - delete dlg; - _globals->_events.hideCursor(); - - if (exitFlag) - _vm->quitGame(); -} - -void RingworldDemoGame::processEvent(Event &event) { - if (event.eventType == EVENT_KEYPRESS) { - switch (event.kbd.keycode) { - case Common::KEYCODE_F1: - // F1 - Help - MessageDialog::show(DEMO_HELP_MSG, OK_BTN_STRING); - break; - - case Common::KEYCODE_F2: { - // F2 - Sound Options - ConfigDialog *dlg = new ConfigDialog(); - dlg->runModal(); - delete dlg; - _globals->_soundManager.syncSounds(); - _globals->_events.setCursorFromFlag(); - break; - } - - case Common::KEYCODE_F3: - // F3 - Quit - quitGame(); - event.handled = false; - break; - - default: - break; - } - } else if (event.eventType == EVENT_BUTTON_DOWN) { - pauseGame(); - event.handled = true; - } -} - -/*-------------------------------------------------------------------------- - * Ringworld Demo scene - * - *--------------------------------------------------------------------------*/ - -void RingworldDemoScene::postInit(SceneObjectList *OwnerList) { - signal(); -} - -void RingworldDemoScene::signal() { - _soundHandler.play(4); - _actor1.postInit(); - _actor2.postInit(); - _actor3.postInit(); - _actor4.postInit(); - _actor5.postInit(); - _actor6.postInit(); - - setAction(&_sequenceManager, this, 22, &_actor1, &_actor2, &_actor3, &_actor4, &_actor5, &_actor6, NULL); -} - -void RingworldDemoScene::process(Event &event) { - -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_demo.h b/engines/tsage/ringworld_demo.h deleted file mode 100644 index 3e7431e107..0000000000 --- a/engines/tsage/ringworld_demo.h +++ /dev/null @@ -1,59 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_DEMO_H -#define TSAGE_RINGWORLD_DEMO_H - -#include "common/scummsys.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" -#include "tsage/sound.h" - -namespace tSage { - -class RingworldDemoGame: public Game { -private: - void pauseGame(); -public: - virtual void start(); - virtual Scene *createScene(int sceneNumber); - virtual void quitGame(); - virtual void processEvent(Event &event); -}; - -class RingworldDemoScene: public Scene { -public: - SequenceManager _sequenceManager; - SceneObject _actor1, _actor2, _actor3; - SceneObject _actor4, _actor5, _actor6; - ASound _soundHandler; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void process(Event &event); - virtual void signal(); -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp deleted file mode 100644 index 070d8afd25..0000000000 --- a/engines/tsage/ringworld_logic.cpp +++ /dev/null @@ -1,1490 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/config-manager.h" -#include "common/translation.h" -#include "gui/saveload.h" -#include "tsage/ringworld_logic.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" -#include "tsage/ringworld_demo.h" -#include "tsage/ringworld_scenes1.h" -#include "tsage/ringworld_scenes2.h" -#include "tsage/ringworld_scenes3.h" -#include "tsage/ringworld_scenes4.h" -#include "tsage/ringworld_scenes5.h" -#include "tsage/ringworld_scenes6.h" -#include "tsage/ringworld_scenes8.h" -#include "tsage/ringworld_scenes10.h" - -namespace tSage { - -Scene *RingworldGame::createScene(int sceneNumber) { - switch (sceneNumber) { - /* Scene group 1 */ - // Kziniti Palace (Introduction) - case 10: return new Scene10(); - // Outer Space (Introduction) - case 15: return new Scene15(); - // Cut-scenes for Ch'mee house in distance - case 20: return new Scene20(); - // Outside Ch'mee residence - case 30: return new Scene30(); - // Chmeee Home - case 40: return new Scene40(); - // By Flycycles - case 50: return new Scene50(); - // Flycycle controls - case 60: return new Scene60(); - // Shipyard Entrance - case 90: return new Scene90(); - // Ship Close-up - case 95: return new Scene95(); - // Sunflower navigation sequence - case 6100: return new Scene6100(); - - /* Scene group 2 */ - // Title screen - case 1000: return new Scene1000(); - // Fleeing planet cutscene - case 1001: return new Scene1001(); - // Unused - case 1250: return new Scene1250(); - // Ringworld Wall - case 1400: return new Scene1400(); - // Ringworld Space-port - case 1500: return new Scene1500(); - - /* Scene group 3 - Part #1 */ - // Cockpit cutscenes - case 2000: return new Scene2000(); - // Starcraft - Cockpit - case 2100: return new Scene2100(); - // Encyclopedia - case 2120: return new Scene2120(); - // Starcraft - Level 2 - case 2150: return new Scene2150(); - // Starcraft - AutoDoc - case 2200: return new Scene2200(); - // Stasis Field Map - case 2222: return new Scene2222(); - // Starcraft - Quinn's Room - case 2230: return new Scene2230(); - - /* Scene group 3 - Part #2 */ - // Starcraft - Storage Room - case 2280: return new Scene2280(); - // Starcraft - Hanger Bay - case 2300: return new Scene2300(); - // Starcraft - Copy Protection Screen - case 2310: return new Scene2310(); - // Starcraft - Lander Bay - case 2320: return new Scene2320(); - // Scene 2400 - Descending in Lander - case 2400: return new Scene2400(); - - /* Scene group 4 */ - // Ringworld Scan - case 3500: return new Scene3500(); - // Remote Viewer - case 3700: return new Scene3700(); - - /* Scene group 5 */ - // Village - case 4000: return new Scene4000(); - // Village - Outside Lander - case 4010: return new Scene4010(); - // Village - Puzzle Board - case 4025: return new Scene4025(); - // Village - Temple Antechamber - case 4045: return new Scene4045(); - // Village - Temple - case 4050: return new Scene4050(); - // Village - Hut - case 4100: return new Scene4100(); - // Village - Bedroom - case 4150: return new Scene4150(); - // Village - Near Slaver Ship - case 4250: return new Scene4250(); - // Village - Slaver Ship - case 4300: return new Scene4300(); - // Village - Slaver Ship Keypad - case 4301: return new Scene4301(); - - /* Scene group 6 */ - // Caverns - Entrance - case 5000: return new Scene5000(); - // Caverns - case 5100: return new Scene5100(); - // Caverns - Throne-room - case 5200: return new Scene5200(); - // Caverns - Pit - case 5300: return new Scene5300(); - - /* Scene group 8 */ - // Landing near beach - case 7000: return new Scene7000(); - // Underwater: swimming - case 7100: return new Scene7100(); - // Underwater: Entering the cave - case 7200: return new Scene7200(); - // Underwater: Lord Poria - case 7300: return new Scene7300(); - // Floating Buildings: Outside - case 7600: return new Scene7600(); - // Floating Buildings: In the lab - case 7700: return new Scene7700(); - - /* Scene group 10 */ - // Near beach: Slave washing clothes - case 9100: return new Scene9100(); - // Castle: Outside the bulwarks - case 9150: return new Scene9150(); - // Castle: Near the fountain - case 9200: return new Scene9200(); - // Castle: In front of a large guarded door - case 9300: return new Scene9300(); - // Castle: In a hallway - case 9350: return new Scene9350(); - // Castle: In a hallway - case 9360: return new Scene9360(); - // Castle: Black-Smith room - case 9400: return new Scene9400(); - // Castle: Dining room - case 9450: return new Scene9450(); - // Castle: Bedroom - case 9500: return new Scene9500(); - // Castle: Balcony - case 9700: return new Scene9700(); - // Castle: In the garden - case 9750: return new Scene9750(); - // Castle: Dressing room - case 9850: return new Scene9850(); - // Ending - case 9900: return new Scene9900(); - // Space travel - case 9999: return new Scene9999(); - - default: - error("Unknown scene number - %d", sceneNumber); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -DisplayHotspot::DisplayHotspot(int regionId, ...) { - _sceneRegionId = regionId; - - // Load up the actions - va_list va; - va_start(va, regionId); - - int param = va_arg(va, int); - while (param != LIST_END) { - _actions.push_back(param); - param = va_arg(va, int); - } - - va_end(va); -} - -bool DisplayHotspot::performAction(int action) { - for (uint i = 0; i < _actions.size(); i += 3) { - if (_actions[i] == action) { - display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - return true; - } - } - - return false; -} - -/*--------------------------------------------------------------------------*/ - -DisplayObject::DisplayObject(int firstAction, ...) { - // Load up the actions - va_list va; - va_start(va, firstAction); - - int param = firstAction; - while (param != LIST_END) { - _actions.push_back(param); - param = va_arg(va, int); - } - - va_end(va); -} - -bool DisplayObject::performAction(int action) { - for (uint i = 0; i < _actions.size(); i += 3) { - if (_actions[i] == action) { - display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - return true; - } - } - - return false; -} - -/*--------------------------------------------------------------------------*/ - -SceneArea::SceneArea() { - _savedArea = NULL; - _pt.x = _pt.y = 0; -} - -SceneArea::~SceneArea() { - delete _savedArea; -} - -void SceneArea::setup(int resNum, int rlbNum, int subNum, int actionId) { - _resNum = resNum; - _rlbNum = rlbNum; - _subNum = subNum; - _actionId = actionId; - - _surface = surfaceFromRes(resNum, rlbNum, subNum); -} - -void SceneArea::draw2() { - _surface.draw(Common::Point(_bounds.left, _bounds.top)); -} - -void SceneArea::display() { - _bounds.left = _pt.x - (_surface.getBounds().width() / 2); - _bounds.top = _pt.y + 1 - _surface.getBounds().height(); - _bounds.setWidth(_surface.getBounds().width()); - _bounds.setHeight(_surface.getBounds().height()); - - _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); - draw2(); -} - -void SceneArea::restore() { - assert(_savedArea); - _savedArea->draw(Common::Point(_bounds.left, _bounds.top)); - delete _savedArea; - _savedArea = NULL; -} - -void SceneArea::draw(bool flag) { - _surface = surfaceFromRes(_resNum, _rlbNum, flag ? _subNum + 1 : _subNum); - _surface.draw(Common::Point(_bounds.left, _bounds.top)); -} - -void SceneArea::wait() { - // Wait until a mouse or keypress - Event event; - while (!_vm->shouldQuit() && !_globals->_events.getEvent(event)) { - g_system->updateScreen(); - g_system->delayMillis(10); - } - - SynchronizedList::iterator ii; - for (ii = _globals->_sceneItems.begin(); ii != _globals->_sceneItems.end(); ++ii) { - SceneItem *sceneItem = *ii; - if (sceneItem->contains(event.mousePos)) { - sceneItem->doAction(_actionId); - break; - } - } - - _globals->_events.setCursor(CURSOR_ARROW); -} - -void SceneArea::synchronize(Serializer &s) { - if (s.getVersion() >= 2) - SavedObject::synchronize(s); - - s.syncAsSint16LE(_pt.x); - s.syncAsSint16LE(_pt.y); - s.syncAsSint32LE(_resNum); - s.syncAsSint32LE(_rlbNum); - s.syncAsSint32LE(_subNum); - s.syncAsSint32LE(_actionId); - _bounds.synchronize(s); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerGText::SpeakerGText() { - _speakerName = "GTEXT"; - _textWidth = 160; - _textPos = Common::Point(130, 10); - _color1 = 42; - _hideObjects = false; -} - -void SpeakerGText::setText(const Common::String &msg) { - // Set the animation properties - _sceneObject.postInit(); - _sceneObject.setVisage(9405); - _sceneObject.setStrip2(3); - _sceneObject.fixPriority(255); - _sceneObject.changeZoom(100); - _sceneObject._frame = 1; - _sceneObject.setPosition(Common::Point(183, 71)); - _sceneObject.animate(ANIM_MODE_7, 0, NULL); - - // Set the text - Rect textRect; - _globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth); - textRect.center(_sceneObject._position.x, _sceneObject._position.y); - _textPos.x = textRect.left; - Speaker::setText(msg); -} - -void SpeakerGText::removeText() { - _sceneObject.remove(); - Speaker::removeText(); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPOR::SpeakerPOR() { - _speakerName = "POR"; - _newSceneNumber = 7221; - _textPos = Common::Point(10, 30); - _color1 = 41; -} - -void SpeakerPOR::SpeakerAction1::signal(){ - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(60) + 60); - break; - case 1: - static_cast(_owner)->animate(ANIM_MODE_5, this, NULL); - break; - case 2: - setDelay(_globals->_randomSource.getRandomNumber(10)); - _actionIndex = 0; - break; - default: - break; - } -} - -void SpeakerPOR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(7223); - _object1.setStrip2(2); - _object1.setPosition(Common::Point(191, 166)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(7223); - _object2.setPosition(Common::Point(159, 86)); - _object2.setAction(&_speakerAction, NULL); - - _object3.postInit(&_objectList); - _object3.setVisage(7223); - _object3.setStrip(3); - _object3.setPosition(Common::Point(119, 107)); - _object3.fixPriority(199); - _object3.setAction(&_action2); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerOR::SpeakerOR() { - _speakerName = "OR"; - _newSceneNumber = 9430; - _textPos = Common::Point(8, 36); - _color1 = 42; - _textWidth = 136; -} - -void SpeakerOR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(9431); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(202, 147)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(9431); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.setZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(199, 85)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerOText::SpeakerOText() : SpeakerGText() { - _speakerName = "OTEXT"; - _textWidth = 240; - _textPos = Common::Point(130, 10); - _color1 = 42; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQText::SpeakerQText() : ScreenSpeaker() { - _speakerName = "QTEXT"; - _textPos = Common::Point(160, 40); - _color1 = 35; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSText::SpeakerSText() : ScreenSpeaker() { - _speakerName = "STEXT"; - _color1 = 13; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPOText::SpeakerPOText() : ScreenSpeaker() { - _speakerName = "POTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 41; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerMText::SpeakerMText() { - _speakerName = "MTEXT"; - _color1 = 22; - _textWidth = 230; - _textMode = ALIGN_CENTER; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCText::SpeakerCText() { - _speakerName = "CTEXT"; - _color1 = 4; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerEText::SpeakerEText() { - _speakerName = "ETEXT"; - _textPos = Common::Point(20, 20); - _color1 = 22; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerGR::SpeakerGR() : AnimatedSpeaker() { - _speakerName = "GR"; - _newSceneNumber = 9220; - _textWidth = 136; - _textPos = Common::Point(168, 36); - _color1 = 14; -} - -void SpeakerGR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(9221); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(101, 70)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerHText::SpeakerHText() { - _speakerName = "HTEXT"; - _textPos = Common::Point(160, 40); - _color1 = 52; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSKText::SpeakerSKText() : ScreenSpeaker() { - _speakerName = "SKTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 9; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPText::SpeakerPText() { - _speakerName = "PTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 5; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCHFText::SpeakerCHFText() { - _speakerName = "CHFTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 56; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCDRText::SpeakerCDRText() { - _speakerName = "CDRTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 52; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerFLText::SpeakerFLText() { - _speakerName = "FLTEXT"; - _textPos = Common::Point(10, 40); - _color1 = 17; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerBatText::SpeakerBatText() { - _speakerName = "BATTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTER; - _color1 = 3; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSKL::SpeakerSKL() : AnimatedSpeaker() { - _speakerName = "SKL"; - _newSceneNumber = 7011; - _textPos = Common::Point(10, 30); - _color1 = 9; -} - -void SpeakerSKL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(7013); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(203, 120)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(7013); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(197, 80)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQL::SpeakerQL() : AnimatedSpeaker() { - _speakerName = "QL"; - _newSceneNumber = 2610; - _textPos = Common::Point(160, 30); - _color1 = 35; - _textMode = ALIGN_CENTER; -} - -void SpeakerQL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2612); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(128, 146)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2612); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(122, 84)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSR::SpeakerSR() { - _speakerName = "SR"; - _newSceneNumber = 2811; - _textPos = Common::Point(10, 30); - _color1 = 13; - _textMode = ALIGN_CENTER; -} - -void SpeakerSR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2813); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(224, 198)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2813); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(203, 96)); - _object2.setAction(&_speakerAction, NULL); - - _object3.postInit(&_objectList); - _object3.setVisage(2813); - _object3.setStrip(3); - _object3.setPosition(Common::Point(204, 91)); - _object3.fixPriority(199); - _object3._numFrames = 3; - _object3.animate(ANIM_MODE_7, 0, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSL::SpeakerSL() { - _speakerName = "SL"; - _newSceneNumber = 2810; - _textPos = Common::Point(140, 30); - _textWidth = 160; - _color1 = 13; - _textMode = ALIGN_CENTER; -} - -void SpeakerSL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2812); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(95, 198)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2812); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(116, 96)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQR::SpeakerQR() { - _speakerName = "QR"; - _newSceneNumber = 2611; - _textPos = Common::Point(10, 30); - _color1 = 35; - _textMode = ALIGN_CENTER; -} - -void SpeakerQR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2613); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(191, 146)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2613); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(197, 84)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQU::SpeakerQU() { - _speakerName = "QU"; - _newSceneNumber = 7020; - _textPos = Common::Point(160, 30); - _color1 = 35; - _textMode = ALIGN_CENTER; -} - -void SpeakerQU::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(7021); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(116, 120)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(7021); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(111, 84)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCR::SpeakerCR() { - _speakerName = "CR"; - _newSceneNumber = 9010; - _textPos = Common::Point(20, 40); - _color1 = 4; -} - -void SpeakerCR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(9011); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.setPosition(Common::Point(219, 168)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(9011); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.setPosition(Common::Point(232, 81)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerMR::SpeakerMR() { - _speakerName = "MR"; - _newSceneNumber = 2711; - _textPos = Common::Point(10, 40); - _color1 = 22; -} - -void SpeakerMR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2713); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(220, 143)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2713); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(215, 99)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerSAL::SpeakerSAL() { - _speakerName = "SAL"; - _newSceneNumber = 2851; - _textPos = Common::Point(10, 30); - _color1 = 13; - _textMode = ALIGN_CENTER; -} - -void SpeakerSAL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2853); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(185, 200)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2853); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(170, 92)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerML::SpeakerML() { - _speakerName = "ML"; - _newSceneNumber = 2710; - _textPos = Common::Point(160, 40); - _color1 = 22; -} - -void SpeakerML::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(2712); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(99, 143)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(2712); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(105, 99)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCHFL::SpeakerCHFL() { - _speakerName = "CHFL"; - _newSceneNumber = 4111; - _textPos = Common::Point(10, 40); - _color1 = 56; -} - -void SpeakerCHFL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4113); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(205, 116)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4113); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(202, 71)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCHFR::SpeakerCHFR() { - _speakerName = "CHFR"; - _newSceneNumber = 4110; - _textPos = Common::Point(160, 40); - _color1 = 56; -} - -void SpeakerCHFR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4112); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(103, 116)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4112); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(106, 71)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPL::SpeakerPL() { - _speakerName = "PL"; - _newSceneNumber = 4060; - _textPos = Common::Point(160, 40); - _color1 = 5; -} - -void SpeakerPL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4062); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(107, 117)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4062); - _object2.setStrip2(1); - _object2.fixPriority(200); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(105, 62)); - _object2.setAction(&_speakerAction, NULL); - - _object3.postInit(&_objectList); - _object3.setVisage(4062); - _object3.setStrip2(3); - _object3.fixPriority(255); - _object3.changeZoom(100); - _object3._frame = 1; - _object3.setPosition(Common::Point(105, 59)); - _object3.setAction(&_speakerAction2, NULL); - - Speaker::setText(msg); -} - -void SpeakerPL::removeText() { - _object3.remove(); - AnimatedSpeaker::removeText(); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerPR::SpeakerPR() { - _speakerName = "PR"; - _newSceneNumber = 4061; - _textPos = Common::Point(10, 40); - _color1 = 5; -} - -void SpeakerPR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4063); - _object1.setStrip2(1); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(212, 117)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4063); - _object2.setStrip2(2); - _object2.fixPriority(200); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(214, 62)); - _object2.setAction(&_speakerAction, NULL); - - _object3.postInit(&_objectList); - _object3.setVisage(4063); - _object3.setStrip2(3); - _object3.fixPriority(255); - _object3.changeZoom(100); - _object3._frame = 1; - _object3.setPosition(Common::Point(214, 59)); - _object3.setAction(&_speakerAction2, NULL); - - Speaker::setText(msg); -} - -void SpeakerPR::removeText() { - _object3.remove(); - AnimatedSpeaker::removeText(); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCDR::SpeakerCDR() { - _speakerName = "CDR"; - _newSceneNumber = 4161; - _textPos = Common::Point(10, 40); - _color1 = 52; -} - -void SpeakerCDR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4163); - _object1.setStrip2(1); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(208, 97)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4163); - _object2.setStrip2(2); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(200, 57)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCDL::SpeakerCDL() { - _speakerName = "CDL"; - _newSceneNumber = 4160; - _textPos = Common::Point(160, 40); - _color1 = 52; -} - -void SpeakerCDL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(4162); - _object1.setStrip2(1); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(112, 97)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(4162); - _object2.setStrip2(2); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(115, 57)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerFLL::SpeakerFLL() { - _speakerName = "FLL"; - _newSceneNumber = 5221; - _textPos = Common::Point(10, 40); - _color1 = 17; -} - -void SpeakerFLL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(5223); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(216, 129)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(5223); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(210, 67)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -SpeakerBatR::SpeakerBatR() { - _speakerName = "BATR"; - _newSceneNumber = 5360; - _textPos = Common::Point(140, 40); - _color1 = 3; -} - -void SpeakerBatR::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(5361); - _object1.setStrip2(2); - _object1.fixPriority(255); - _object1.changeZoom(100); - _object1._frame = 1; - _object1.setPosition(Common::Point(137, 122)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(5361); - _object2.setStrip2(1); - _object2.fixPriority(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(137, 104)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} - -/*--------------------------------------------------------------------------*/ - -RingworldInvObjectList::RingworldInvObjectList() : - _stunner(2280, 1, 2, OBJECT_STUNNER, "This is your stunner."), - _scanner(1, 1, 3, OBJECT_SCANNER, "A combination scanner comm unit."), - _stasisBox(5200, 1, 4, OBJECT_STASIS_BOX, "A stasis box."), - _infoDisk(40, 1, 1, OBJECT_INFODISK, "The infodisk you took from the assassin."), - _stasisNegator(0, 2, 2, OBJECT_STASIS_NEGATOR, "The stasis field negator."), - _keyDevice(4250, 1, 6, OBJECT_KEY_DEVICE, "A magnetic key device."), - _medkit(2280, 1, 7, OBJECT_MEDKIT, "Your medkit."), - _ladder(4100, 1, 8, OBJECT_LADDER, "The chief's ladder."), - _rope(4150, 1, 9, OBJECT_ROPE, "The chief's rope."), - _key(7700, 1, 11, OBJECT_KEY, "A key."), - _translator(7700, 1, 13, OBJECT_TRANSLATOR, "The dolphin translator box."), - _ale(2150, 1, 10, OBJECT_ALE, "A bottle of ale."), - _paper(7700, 1, 12, OBJECT_PAPER, "A slip of paper with the numbers 2,4, and 3 written on it."), - _waldos(0, 1, 14, OBJECT_WALDOS, "A pair of waldos from the ruined probe."), - _stasisBox2(8100, 1, 4, OBJECT_STASIS_BOX2, "A stasis box."), - _ring(8100, 2, 5, OBJECT_RING, "This is a signet ring sent to you by Louis Wu."), - _cloak(9850, 2, 6, OBJECT_CLOAK, "A fine silk cloak."), - _tunic(9450, 2, 7, OBJECT_TUNIC, "The patriarch's soiled tunic."), - _candle(9500, 2, 8, OBJECT_CANDLE, "A tallow candle."), - _straw(9400, 2, 9, OBJECT_STRAW, "Clean, dry straw."), - _scimitar(9850, 1, 18, OBJECT_SCIMITAR, "A scimitar from the Patriarch's closet."), - _sword(9850, 1, 17, OBJECT_SWORD, "A short sword from the Patriarch's closet."), - _helmet(9500, 2, 4, OBJECT_HELMET, "Some type of helmet."), - _items(4300, 2, 10, OBJECT_ITEMS, "Two interesting items from the Tnuctipun vessel."), - _concentrator(4300, 2, 11, OBJECT_CONCENTRATOR, "The Tnuctipun anti-matter concentrator contained in a stasis field."), - _nullifier(5200, 2, 12, OBJECT_NULLIFIER, "A purported neural wave nullifier."), - _peg(4045, 2, 16, OBJECT_PEG, "A peg with a symbol."), - _vial(5100, 2, 17, OBJECT_VIAL, "A vial of the bat creatures anti-pheromone drug."), - _jacket(9850, 3, 1, OBJECT_JACKET, "A natty padded jacket."), - _tunic2(9850, 3, 2, OBJECT_TUNIC2, "A very hairy tunic."), - _bone(5300, 3, 5, OBJECT_BONE, "A very sharp bone."), - _jar(7700, 3, 4, OBJECT_JAR, "An jar filled with a green substance."), - _emptyJar(7700, 3, 3, OBJECT_EMPTY_JAR, "An empty jar.") { - - // Add the items to the list - _itemList.push_back(&_stunner); - _itemList.push_back(&_scanner); - _itemList.push_back(&_stasisBox); - _itemList.push_back(&_infoDisk); - _itemList.push_back(&_stasisNegator); - _itemList.push_back(&_keyDevice); - _itemList.push_back(&_medkit); - _itemList.push_back(&_ladder); - _itemList.push_back(&_rope); - _itemList.push_back(&_key); - _itemList.push_back(&_translator); - _itemList.push_back(&_ale); - _itemList.push_back(&_paper); - _itemList.push_back(&_waldos); - _itemList.push_back(&_stasisBox2); - _itemList.push_back(&_ring); - _itemList.push_back(&_cloak); - _itemList.push_back(&_tunic); - _itemList.push_back(&_candle); - _itemList.push_back(&_straw); - _itemList.push_back(&_scimitar); - _itemList.push_back(&_sword); - _itemList.push_back(&_helmet); - _itemList.push_back(&_items); - _itemList.push_back(&_concentrator); - _itemList.push_back(&_nullifier); - _itemList.push_back(&_peg); - _itemList.push_back(&_vial); - _itemList.push_back(&_jacket); - _itemList.push_back(&_tunic2); - _itemList.push_back(&_bone); - _itemList.push_back(&_jar); - _itemList.push_back(&_emptyJar); - - _selectedItem = NULL; -} - -/*--------------------------------------------------------------------------*/ - -void RingworldGame::restartGame() { - if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1) - _globals->_game->restart(); -} - -void RingworldGame::saveGame() { - if (!_vm->canSaveGameStateCurrently()) - MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING); - else { - // Show the save dialog - handleSaveLoad(true, _globals->_sceneHandler._saveGameSlot, _globals->_sceneHandler._saveName); - } -} - -void RingworldGame::restoreGame() { - if (!_vm->canLoadGameStateCurrently()) - MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING); - else { - // Show the load dialog - handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName); - } -} - -void RingworldGame::quitGame() { - if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) - _vm->quitGame(); -} - -void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) { - const EnginePlugin *plugin = 0; - EngineMan.findGame(_vm->getGameId(), &plugin); - GUI::SaveLoadChooser *dialog; - if (saveFlag) - dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save")); - else - dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load")); - - dialog->setSaveMode(saveFlag); - - saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName()); - saveName = dialog->getResultString(); - - delete dialog; -} - -void RingworldGame::start() { - // Set some default flags - _globals->setFlag(12); - _globals->setFlag(34); - - // Set the screen to scroll in response to the player moving off-screen - _globals->_scrollFollower = &_globals->_player; - - // Set the object's that will be in the player's inventory by default - RING_INVENTORY._stunner._sceneNumber = 1; - RING_INVENTORY._scanner._sceneNumber = 1; - RING_INVENTORY._ring._sceneNumber = 1; - - int slot = -1; - - if (ConfMan.hasKey("save_slot")) { - slot = ConfMan.getInt("save_slot"); - Common::String file = _vm->generateSaveName(slot); - Common::InSaveFile *in = _vm->_system->getSavefileManager()->openForLoading(file); - if (in) - delete in; - else - slot = -1; - } - - if (slot >= 0) - _globals->_sceneHandler._loadGameSlot = slot; - else - // Switch to the title screen - _globals->_sceneManager.setNewScene(1000); - - _globals->_events.showCursor(); -} - -void RingworldGame::restart() { - _globals->_scenePalette.clearListeners(); - _globals->_soundHandler.stop(); - - // Reset the flags - _globals->reset(); - _globals->setFlag(34); - - // Clear save/load slots - _globals->_sceneHandler._saveGameSlot = -1; - _globals->_sceneHandler._loadGameSlot = -1; - - _globals->_stripNum = 0; - _globals->_events.setCursor(CURSOR_WALK); - - // Reset item properties - RING_INVENTORY._stunner._sceneNumber = 1; - RING_INVENTORY._scanner._sceneNumber = 1; - RING_INVENTORY._stasisBox._sceneNumber = 5200; - RING_INVENTORY._infoDisk._sceneNumber = 40; - RING_INVENTORY._stasisNegator._sceneNumber = 0; - RING_INVENTORY._keyDevice._sceneNumber = 0; - RING_INVENTORY._medkit._sceneNumber = 2280; - RING_INVENTORY._ladder._sceneNumber = 4100; - RING_INVENTORY._rope._sceneNumber = 4150; - RING_INVENTORY._key._sceneNumber = 7700; - RING_INVENTORY._translator._sceneNumber = 2150; - RING_INVENTORY._paper._sceneNumber = 7700; - RING_INVENTORY._waldos._sceneNumber = 0; - RING_INVENTORY._ring._sceneNumber = 1; - RING_INVENTORY._stasisBox2._sceneNumber = 8100; - RING_INVENTORY._cloak._sceneNumber = 9850; - RING_INVENTORY._tunic._sceneNumber = 9450; - RING_INVENTORY._candle._sceneNumber = 9500; - RING_INVENTORY._straw._sceneNumber = 9400; - RING_INVENTORY._scimitar._sceneNumber = 9850; - RING_INVENTORY._sword._sceneNumber = 9850; - RING_INVENTORY._helmet._sceneNumber = 9500; - RING_INVENTORY._items._sceneNumber = 4300; - RING_INVENTORY._concentrator._sceneNumber = 4300; - RING_INVENTORY._nullifier._sceneNumber = 4300; - RING_INVENTORY._peg._sceneNumber = 4045; - RING_INVENTORY._vial._sceneNumber = 5100; - RING_INVENTORY._jacket._sceneNumber = 9850; - RING_INVENTORY._tunic2._sceneNumber = 9850; - RING_INVENTORY._bone._sceneNumber = 5300; - RING_INVENTORY._jar._sceneNumber = 7700; - RING_INVENTORY._emptyJar._sceneNumber = 7700; - RING_INVENTORY._selectedItem = NULL; - - // Change to the first game scene - _globals->_sceneManager.changeScene(30); -} - -void RingworldGame::endGame(int resNum, int lineNum) { - _globals->_events.setCursor(CURSOR_WALK); - Common::String msg = _resourceManager->getMessage(resNum, lineNum); - bool savesExist = _saver->savegamesExist(); - - if (!savesExist) { - // No savegames exist, so prompt the user to restart or quit - if (MessageDialog::show(msg, QUIT_BTN_STRING, RESTART_BTN_STRING) == 0) - _vm->quitGame(); - else - restart(); - } else { - // Savegames exist, so prompt for Restore/Restart - bool breakFlag; - do { - if (_vm->shouldQuit()) { - breakFlag = true; - } else if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) { - restart(); - breakFlag = true; - } else { - handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName); - breakFlag = _globals->_sceneHandler._loadGameSlot >= 0; - } - } while (!breakFlag); - } - - _globals->_events.setCursorFromFlag(); -} - -void RingworldGame::processEvent(Event &event) { - if (event.eventType == EVENT_KEYPRESS) { - switch (event.kbd.keycode) { - case Common::KEYCODE_F1: - // F1 - Help - MessageDialog::show(HELP_MSG, OK_BTN_STRING); - break; - - case Common::KEYCODE_F2: { - // F2 - Sound Options - ConfigDialog *dlg = new ConfigDialog(); - dlg->runModal(); - delete dlg; - _globals->_soundManager.syncSounds(); - _globals->_events.setCursorFromFlag(); - break; - } - - case Common::KEYCODE_F3: - // F3 - Quit - quitGame(); - event.handled = false; - break; - - case Common::KEYCODE_F4: - // F4 - Restart - restartGame(); - _globals->_events.setCursorFromFlag(); - break; - - case Common::KEYCODE_F7: - // F7 - Restore - restoreGame(); - _globals->_events.setCursorFromFlag(); - break; - - case Common::KEYCODE_F10: - // F10 - Pause - GfxDialog::setPalette(); - MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING); - _globals->_events.setCursorFromFlag(); - break; - - default: - break; - } - } -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h deleted file mode 100644 index 19b0f10b42..0000000000 --- a/engines/tsage/ringworld_logic.h +++ /dev/null @@ -1,461 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_LOGIC_H -#define TSAGE_RINGWORLD_LOGIC_H - -#include "common/scummsys.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" - -namespace tSage { - -#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ - _globals->_player.addMover(mover, &pt, this); } -#define ADD_PLAYER_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ - OBJ.addMover(mover, &pt, NULL); } -#define ADD_PLAYER_MOVER_THIS(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ - OBJ.addMover(mover, &pt, this); } - -#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \ - OBJ.addMover(mover, &pt, this); } -#define ADD_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \ - OBJ.addMover(mover, &pt, NULL); } - - -class SceneFactory { -public: - static Scene *createScene(int sceneNumber); -}; - -class DisplayHotspot : public SceneObject { -private: - Common::Array _actions; - bool performAction(int action); -public: - DisplayHotspot(int regionId, ...); - - virtual void doAction(int action) { - if (!performAction(action)) - SceneHotspot::doAction(action); - } -}; - -class DisplayObject : public SceneObject { -private: - Common::Array _actions; - bool performAction(int action); -public: - DisplayObject(int firstAction, ...); - - virtual void doAction(int action) { - if (!performAction(action)) - SceneHotspot::doAction(action); - } -}; - -class SceneArea : public SavedObject { -public: - GfxSurface _surface; - GfxSurface *_savedArea; - Common::Point _pt; - int _resNum; - int _rlbNum; - int _subNum; - int _actionId; - Rect _bounds; -public: - SceneArea(); - ~SceneArea(); - - void setup(int resNum, int rlbNum, int subNum, int actionId); - void draw2(); - void display(); - void restore(); - - virtual void synchronize(Serializer &s); - virtual void draw(bool flag); - virtual void wait(); -}; - -/*--------------------------------------------------------------------------*/ -// Ringworld specific game speakers - -class SpeakerGText : public Speaker { -public: - SceneObject _sceneObject; -public: - SpeakerGText(); - - virtual Common::String getClassName() { return "SpeakerGText"; } - virtual void setText(const Common::String &msg); - virtual void removeText(); -}; - -class SpeakerPOR : public AnimatedSpeaker { - class SpeakerAction1 : public SpeakerAction { - public: - virtual void signal(); - }; - -public: - SceneObject _object3; - SpeakerAction1 _action2; -public: - SpeakerPOR(); - virtual Common::String getClassName() { return "SpeakerPOR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerOR : public AnimatedSpeaker { -public: - SpeakerOR(); - virtual Common::String getClassName() { return "SpeakerOR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerOText : public SpeakerGText { -public: - SpeakerOText(); - - virtual Common::String getClassName() { return "SpeakerOText"; } -}; - -class SpeakerPOText : public ScreenSpeaker { -public: - SpeakerPOText(); - - virtual Common::String getClassName() { return "SpeakerPOText"; } -}; - -class SpeakerSText : public ScreenSpeaker { -public: - SpeakerSText(); - - virtual Common::String getClassName() { return "SpeakerSText"; } -}; - -class SpeakerQText : public ScreenSpeaker { -public: - SpeakerQText(); - - virtual Common::String getClassName() { return "SpeakerQText"; } -}; - -class SpeakerMText : public ScreenSpeaker { -public: - SpeakerMText(); - - virtual Common::String getClassName() { return "SpeakerMText"; } -}; - -class SpeakerCText : public ScreenSpeaker { -public: - SpeakerCText(); - - virtual Common::String getClassName() { return "SpeakerCText"; } -}; - -class SpeakerEText : public ScreenSpeaker { -public: - SpeakerEText(); - - virtual Common::String getClassName() { return "SpeakerEText"; } -}; - -class SpeakerGR : public AnimatedSpeaker { -public: - SpeakerGR(); - - virtual Common::String getClassName() { return "SpeakerGR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerHText : public ScreenSpeaker { -public: - SpeakerHText(); - - virtual Common::String getClassName() { return "SpeakerHText"; } -}; - -class SpeakerPText : public ScreenSpeaker { -public: - SpeakerPText(); - - virtual Common::String getClassName() { return "SpeakerPText"; } -}; - -class SpeakerCHFText : public ScreenSpeaker { -public: - SpeakerCHFText(); - - virtual Common::String getClassName() { return "SpeakerCHFText"; } -}; - -class SpeakerSKText : public ScreenSpeaker { -public: - SpeakerSKText(); - - virtual Common::String getClassName() { return "SpeakerSKText"; } -}; - -class SpeakerCDRText : public ScreenSpeaker { -public: - SpeakerCDRText(); - - virtual Common::String getClassName() { return "SpeakerCDRText"; } -}; - -class SpeakerFLText : public ScreenSpeaker { -public: - SpeakerFLText(); - - virtual Common::String getClassName() { return "SpeakerFLText"; } -}; - -class SpeakerBatText : public ScreenSpeaker { -public: - SpeakerBatText(); - - virtual Common::String getClassName() { return "SpeakerFLText"; } -}; - -class SpeakerQR : public AnimatedSpeaker { -public: - SpeakerQR(); - - virtual Common::String getClassName() { return "SpeakerQR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerQU : public AnimatedSpeaker { -public: - SpeakerQU(); - - virtual Common::String getClassName() { return "SpeakerQU"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerSKL : public AnimatedSpeaker { -public: - SpeakerSKL(); - - virtual Common::String getClassName() { return "SpeakerQL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerQL : public AnimatedSpeaker { -public: - SpeakerQL(); - - virtual Common::String getClassName() { return "SpeakerQL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerSR : public AnimatedSpeaker { -public: - SceneObject _object3; -public: - SpeakerSR(); - - virtual Common::String getClassName() { return "SpeakerSR"; } - void setText(const Common::String &msg); -}; - -class SpeakerSL : public AnimatedSpeaker { -public: - SpeakerSL(); - - virtual Common::String getClassName() { return "SpeakerSL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerCR : public AnimatedSpeaker { -public: - SpeakerCR(); - - virtual Common::String getClassName() { return "SpeakerCR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerMR : public AnimatedSpeaker { -public: - SpeakerMR(); - - virtual Common::String getClassName() { return "SpeakerMR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerSAL : public AnimatedSpeaker { -public: - SpeakerSAL(); - - virtual Common::String getClassName() { return "SpeakerSAL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerML : public AnimatedSpeaker { -public: - SpeakerML(); - - virtual Common::String getClassName() { return "SpeakerML"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerCHFL : public AnimatedSpeaker { -public: - SpeakerCHFL(); - - virtual Common::String getClassName() { return "SpeakerCHFL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerCHFR : public AnimatedSpeaker { -public: - SpeakerCHFR(); - - virtual Common::String getClassName() { return "SpeakerCHFR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerPL : public AnimatedSpeaker { -public: - SceneObject _object3; - SpeakerAction _speakerAction2; - - SpeakerPL(); - - virtual Common::String getClassName() { return "SpeakerPL"; } - virtual void setText(const Common::String &msg); - virtual void removeText(); -}; - -class SpeakerPR : public AnimatedSpeaker { -public: - SceneObject _object3; - SpeakerAction _speakerAction2; - - SpeakerPR(); - - virtual Common::String getClassName() { return "SpeakerPR"; } - virtual void setText(const Common::String &msg); - virtual void removeText(); -}; - -class SpeakerCDR : public AnimatedSpeaker { -public: - SpeakerCDR(); - - virtual Common::String getClassName() { return "SpeakerCDR"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerCDL : public AnimatedSpeaker { -public: - SpeakerCDL(); - - virtual Common::String getClassName() { return "SpeakerCDL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerFLL : public AnimatedSpeaker { -public: - SpeakerFLL(); - - virtual Common::String getClassName() { return "SpeakerFLL"; } - virtual void setText(const Common::String &msg); -}; - -class SpeakerBatR : public AnimatedSpeaker { -public: - SpeakerBatR(); - - virtual Common::String getClassName() { return "SpeakerBatR"; } - virtual void setText(const Common::String &msg); -}; - -/*--------------------------------------------------------------------------*/ - -class RingworldInvObjectList : public InvObjectList { -public: - InvObject _stunner; - InvObject _scanner; - InvObject _stasisBox; - InvObject _infoDisk; - InvObject _stasisNegator; - InvObject _keyDevice; - InvObject _medkit; - InvObject _ladder; - InvObject _rope; - InvObject _key; - InvObject _translator; - InvObject _ale; - InvObject _paper; - InvObject _waldos; - InvObject _stasisBox2; - InvObject _ring; - InvObject _cloak; - InvObject _tunic; - InvObject _candle; - InvObject _straw; - InvObject _scimitar; - InvObject _sword; - InvObject _helmet; - InvObject _items; - InvObject _concentrator; - InvObject _nullifier; - InvObject _peg; - InvObject _vial; - InvObject _jacket; - InvObject _tunic2; - InvObject _bone; - InvObject _jar; - InvObject _emptyJar; -public: - RingworldInvObjectList(); - - virtual Common::String getClassName() { return "RingworldInvObjectList"; } -}; - -#define RING_INVENTORY (*((RingworldInvObjectList *)_globals->_inventory)) - -class RingworldGame: public Game { -protected: - virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName); -public: - virtual void start(); - virtual void restart(); - virtual void restartGame(); - virtual void saveGame(); - virtual void restoreGame(); - virtual void quitGame(); - virtual void endGame(int resNum, int lineNum); - - virtual Scene *createScene(int sceneNumber); - virtual void processEvent(Event &event); -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp deleted file mode 100644 index f97cfa4ae6..0000000000 --- a/engines/tsage/ringworld_scenes1.cpp +++ /dev/null @@ -1,3345 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "tsage/ringworld_scenes1.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -/*-------------------------------------------------------------------------- - * Scene 10 - Kziniti Palace (Introduction) - * - *--------------------------------------------------------------------------*/ - -void Scene10::Action1::signal() { - Scene10 *scene = (Scene10 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(6); - break; - case 1: - _globals->_scenePalette.addRotation(240, 254, -1); - scene->_stripManager.start(10, this); - break; - case 2: - scene->_speakerSText.setTextPos(Common::Point(20, 20)); - scene->_speakerSText._color1 = 10; - scene->_speakerSText._textWidth = 160; - scene->_stripManager.start(11, this, scene); - break; - case 3: - scene->_object2.hide(); - scene->_object3.hide(); - scene->_object3.setAction(NULL); - scene->_object4.animate(ANIM_MODE_5, this); - break; - case 4: - case 9: - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 5: - scene->_object2.setStrip(3); - scene->_object2.setFrame(1); - scene->_object2.setPosition(Common::Point(240, 51)); - scene->_object2.show(); - - scene->_object3.setStrip(6); - scene->_object3.setFrame(1); - scene->_object3.setPosition(Common::Point(200, 76)); - scene->_object3._numFrames = 20; - scene->_object3.show(); - - scene->_stripManager.start(12, this, scene); - break; - case 6: - scene->_object2.hide(); - scene->_object3.hide(); - scene->_object1.animate(ANIM_MODE_6, this); - break; - case 7: - scene->_object3.show(); - scene->_object3.setStrip2(5); - scene->_object3._numFrames = 10; - scene->_object3.setPosition(Common::Point(180, 87)); - scene->_object3.setAction(&scene->_action2); - - scene->_object2.setStrip(4); - scene->_object2.setFrame(1); - scene->_object2.setPosition(Common::Point(204, 59)); - scene->_object2.show(); - - scene->_stripManager.start(13, this, scene); - break; - case 8: - scene->_object2.hide(); - scene->_object3.hide(); - scene->_object4.animate(ANIM_MODE_6, this); - break; - case 10: - _globals->_soundHandler.fadeOut(this); - break; - case 11: - _globals->_scenePalette.clearListeners(); - _globals->_sceneManager.changeScene(15); - break; - } -} - -void Scene10::Action2::signal() { - Scene10 *scene = (Scene10 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(179)); - break; - case 1: - scene->_object3.setFrame(1); - scene->_object3.animate(ANIM_MODE_5, this); - _actionIndex = 0; - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene10::postInit(SceneObjectList *OwnerList) { - loadScene(10); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerQText); - _speakerSText._speakerName = "STEXT"; - _speakerQText._speakerName = "QTEXT"; - _speakerSText._hideObjects = false; - _speakerQText._hideObjects = false; - _speakerQText.setTextPos(Common::Point(140, 120)); - _speakerQText._color1 = 4; - _speakerQText._textWidth = 160; - _speakerSText.setTextPos(Common::Point(20, 20)); - _speakerSText._color1 = 7; - _speakerSText._textWidth = 320; - - _stripManager.setCallback(this); - - _object1.postInit(); - _object1.setVisage(10); - _object1.setPosition(Common::Point(232, 90)); - _object1.fixPriority(1); - - _object2.postInit(); - _object2.setVisage(10); - _object2.setStrip(4); - _object2.setFrame(1); - _object2.setPosition(Common::Point(204, 59)); - _object2.fixPriority(198); - - _object3.postInit(); - _object3.setVisage(10); - _object3.setStrip2(5); - _object3.setPosition(Common::Point(180, 87)); - _object3.fixPriority(196); - _object3.setAction(&_action2); - - _object4.postInit(); - _object4.setVisage(10); - _object4.setStrip(2); - _object4.setPosition(Common::Point(0, 209)); - _object4.animate(ANIM_MODE_1, NULL); - - _object5.postInit(); - _object5.setVisage(11); - _object5.setPosition(Common::Point(107, 146)); - _object5.animate(ANIM_MODE_2, NULL); - _object5._numFrames = 5; - - _object6.postInit(); - _object6.setVisage(11); - _object6.setStrip(2); - _object6.setPosition(Common::Point(287, 149)); - _object6.animate(ANIM_MODE_2, NULL); - _object6._numFrames = 5; - - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; - - setAction(&_action1); - _globals->_soundHandler.play(5); -} - -void Scene10::stripCallback(int v) { - switch (v) { - case 1: - _object2.animate(ANIM_MODE_7, -1, NULL); - break; - case 2: - _object2.animate(ANIM_MODE_NONE); - break; - case 3: - _object2.animate(ANIM_MODE_7, -1, NULL); - _object3.animate(ANIM_MODE_5, NULL); - break; - default: - break; - } -} - -/*-------------------------------------------------------------------------- - * Scene 15 - Outer Space (Introduction) - * - *--------------------------------------------------------------------------*/ - -void Scene15::Action1::signal() { - Scene15 *scene = (Scene15 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - SceneItem::display(15, 0, SET_Y, 20, SET_FONT, 2, SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 7, - SET_WIDTH, 320, SET_KEEP_ONSCREEN, 1, LIST_END); - setDelay(300); - break; - case 2: { - SceneItem::display(15, 1, SET_Y, 20, SET_FONT, 2, SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 7, - SET_WIDTH, 320, SET_KEEP_ONSCREEN, 1, LIST_END); - scene->_object1.postInit(); - scene->_object1.setVisage(15); - scene->_object1.setPosition(Common::Point(160, -10)); - scene->_object1.animate(ANIM_MODE_2, NULL); - Common::Point pt(160, 100); - NpcMover *mover = new NpcMover(); - scene->_object1.addMover(mover, &pt, this); - scene->_soundHandler.play(7); - break; - } - case 3: - SceneItem::display(0, 0); - _globals->_sceneManager.changeScene(20); - break; - } -} - -void Scene15::Action1::dispatch() { - Scene15 *scene = (Scene15 *)_globals->_sceneManager._scene; - - if (scene->_object1._position.y < 100) - scene->_object1.changeZoom(100 - scene->_object1._position.y); - Action::dispatch(); -} - -/*--------------------------------------------------------------------------*/ - -void Scene15::postInit(SceneObjectList *OwnerList) { - loadScene(15); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - _globals->_soundHandler.play(6); - setAction(&_action1); -} - -/*-------------------------------------------------------------------------- - * Scene 20 - Cut-scenes where House Chmeee is in the distance - * - *--------------------------------------------------------------------------*/ - -void Scene20::Action1::signal() { - Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(120); - break; - case 1: - scene->_stripManager.start(20, this); - break; - case 2: - _globals->_soundHandler.fadeOut(this); - break; - case 3: - _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; - _globals->_sceneManager.changeScene(30); // First game scene - break; - default: - break; - } -} - -void Scene20::Action2::signal() { - Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene; - NpcMover *npcMover; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - SceneItem::display(20, 1, SET_WIDTH, 200, SET_Y, 20, SET_X, 160, SET_KEEP_ONSCREEN, true, - SET_EXT_BGCOLOR, 4, LIST_END); - setDelay(120); - break; - case 2: { - NpcMover *mover = new NpcMover(); - Common::Point pt(455, 77); - _globals->_player.addMover(mover, &pt, this); - ObjectMover2 *mover2 = new ObjectMover2(); - scene->_SceneObjectExt.addMover(mover2, 5, 10, &_globals->_player); - ObjectMover2 *mover3 = new ObjectMover2(); - scene->_sceneObject3.addMover(mover3, 10, 15, &_globals->_player); - break; - } - case 3: { - npcMover = new NpcMover(); - Common::Point pt(557, 100); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 4: { - npcMover = new NpcMover(); - Common::Point pt(602, 90); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 5: { - npcMover = new NpcMover(); - Common::Point pt(618, 90); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 6: { - npcMover = new NpcMover(); - Common::Point pt(615, 81); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 7: { - npcMover = new NpcMover(); - Common::Point pt(588, 79); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 8: - scene->_sound.release(); - _globals->_soundHandler.fadeOut(this); - break; - case 9: - SceneItem::display(0, 0, LIST_END); - _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; - _globals->_sceneManager.changeScene(40); - break; - default: - break; - } -} - -void Scene20::Action3::signal() { - Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene; - NpcMover *npcMover; - - switch (_actionIndex++) { - case 0: - setDelay(120); - break; - case 1: { - npcMover = new NpcMover(); - Common::Point pt(615, 81); - _globals->_player.addMover(npcMover, &pt, this); - ObjectMover2 *mover1 = new ObjectMover2(); - scene->_SceneObjectExt.addMover(mover1, 5, 10, &_globals->_player); - ObjectMover2 *mover2 = new ObjectMover2(); - scene->_sceneObject3.addMover(mover2, 20, 25, &_globals->_player); - break; - } - case 2: { - npcMover = new NpcMover(); - Common::Point pt(618, 90); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 3: { - _globals->_player._moveDiff = Common::Point(10, 10); - scene->_SceneObjectExt._moveDiff = Common::Point(10, 10); - scene->_sceneObject3._moveDiff = Common::Point(10, 10); - npcMover = new NpcMover(); - Common::Point pt(445, 132); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 4: { - npcMover = new NpcMover(); - Common::Point pt(151, 137); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 5: { - npcMover = new NpcMover(); - Common::Point pt(-15, 137); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 6: - scene->_sound.play(60, this, 127); - _globals->_soundHandler.release(); - break; - case 7: - _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; - _globals->_sceneManager.changeScene(90); - break; - default: - break; - } -} - -void Scene20::Action4::signal() { - Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene; - NpcMover *npcMover; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: { - npcMover = new NpcMover(); - Common::Point pt(486, 134); - _globals->_player.addMover(npcMover, &pt, this); - ObjectMover2 *mover1 = new ObjectMover2(); - scene->_SceneObjectExt.addMover(mover1, 20, 35, &_globals->_player); - break; - } - case 2: { - _globals->_player._moveDiff = Common::Point(12, 12); - scene->_SceneObjectExt._moveDiff = Common::Point(12, 12); - NpcMover *mover1 = new NpcMover(); - Common::Point pt(486, 134); - scene->_sceneObject3.addMover(mover1, &pt, this); - NpcMover *mover2 = new NpcMover(); - pt = Common::Point(-15, 134); - _globals->_player.addMover(mover2, &pt, NULL); - NpcMover *mover3 = new NpcMover(); - pt = Common::Point(-15, 134); - scene->_SceneObjectExt.addMover(mover3, &pt, NULL); - break; - } - case 3: { - scene->_sceneObject3._moveDiff = Common::Point(20, 20); - npcMover = new NpcMover(); - Common::Point pt(320, 134); - scene->_sceneObject3.addMover(npcMover, &pt, this); - break; - } - case 4: { - scene->_sound.play(28); - scene->_sceneObject4.postInit(); - scene->_sceneObject4.setVisage(21); - scene->_sceneObject4.setStrip(3); - scene->_sceneObject4.setPosition(Common::Point(scene->_sceneObject3._position.x - 36, - scene->_sceneObject3._position.y - 1)); - scene->_sceneObject4._moveDiff.x = 48; - - ObjectMover3 *mover = new ObjectMover3(); - scene->_sceneObject4.addMover(mover, &scene->_SceneObjectExt, 4, this); - break; - } - case 5: { - scene->_sound.play(42); - scene->_sceneObject4.remove(); - scene->_SceneObjectExt.setVisage(21); - scene->_SceneObjectExt.setStrip(1); - scene->_SceneObjectExt.setFrame(1); - scene->_SceneObjectExt.animate(ANIM_MODE_5, NULL); - - scene->_SceneObjectExt._moveDiff.x = 4; - NpcMover *mover1 = new NpcMover(); - Common::Point pt(scene->_SceneObjectExt._position.x - 12, scene->_SceneObjectExt._position.y + 5); - scene->_SceneObjectExt.addMover(mover1, &pt, NULL); - - scene->_sceneObject5.postInit(); - scene->_sceneObject5.setVisage(21); - scene->_sceneObject5.setStrip(3); - scene->_sceneObject5.setPosition(Common::Point(scene->_sceneObject3._position.x - 36, - scene->_sceneObject3._position.y - 1)); - scene->_sceneObject5._moveDiff.x = 48; - - ObjectMover3 *mover = new ObjectMover3(); - scene->_sceneObject5.addMover(mover, &_globals->_player, 4, this); - break; - } - case 6: { - scene->_sound.play(42); - scene->_SceneObjectExt.setStrip(2); - scene->_SceneObjectExt.animate(ANIM_MODE_2, NULL); - - scene->_sceneObject5.remove(); - _globals->_player.setVisage(21); - _globals->_player.setStrip(1); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - _globals->_player._moveDiff.x = 4; - - npcMover = new NpcMover(); - Common::Point pt(_globals->_player._position.x - 25, _globals->_player._position.y + 5); - _globals->_player.addMover(npcMover, &pt, this); - break; - } - case 7: - _globals->_player.setStrip(2); - _globals->_player.animate(ANIM_MODE_2, NULL); - scene->_sound.play(77, this, 127); - break; - case 8: - _globals->_game->endGame(20, 0); - break; - default: - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene20::Scene20() { -} - -void Scene20::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerGameText); - _speakerQText._npc = &_globals->_player; - - if (_globals->_sceneManager._previousScene == 30) { - // Cut scene: Assassins are coming - _globals->_player.postInit(); - _globals->_player.setVisage(20); - _globals->_player.setPosition(Common::Point(405, 69)); - _globals->_player._moveDiff = Common::Point(10, 10); - _globals->_player.animate(ANIM_MODE_1, NULL); - - _SceneObjectExt.postInit(); - _SceneObjectExt.setVisage(20); - _SceneObjectExt.setPosition(Common::Point(400, 69)); - _SceneObjectExt.animate(ANIM_MODE_1, NULL); - - _sceneObject3.postInit(); - _sceneObject3.setVisage(20); - _sceneObject3.setPosition(Common::Point(395, 69)); - _sceneObject3.animate(ANIM_MODE_1, NULL); - - _SceneObjectExt._moveDiff = Common::Point(10, 10); - _sceneObject3._moveDiff = Common::Point(10, 10); - _globals->_soundHandler.play(20); - _sound.play(21); - _sound.holdAt(true); - setAction(&_action2); - - _sceneBounds = Rect(320, 0, 640, 200); - } else if (_globals->_sceneManager._previousScene == 60) { - // Evasion - _sound.play(30); - _globals->_player.postInit(); - _globals->_player.setVisage(20); - _globals->_player.setPosition(Common::Point(588, 79)); - _globals->_player._moveDiff = Common::Point(5, 5); - _globals->_player.fixPriority(50); - _globals->_player.animate(ANIM_MODE_1, NULL); - - _SceneObjectExt.postInit(); - _SceneObjectExt.setVisage(20); - _SceneObjectExt.setPosition(Common::Point(583, 79)); - _SceneObjectExt.animate(ANIM_MODE_1, NULL); - - _sceneObject3.postInit(); - _sceneObject3.setVisage(20); - _sceneObject3.setStrip2(2); - _sceneObject3.setPosition(Common::Point(595, 79)); - _sceneObject3.animate(ANIM_MODE_1, NULL); - - if ((_globals->getFlag(120) && _globals->getFlag(116)) || - (_globals->getFlag(117) && _globals->getFlag(119))) { - // Successful evasion - setAction(&_action3); - } else if (_globals->getFlag(104)) { - _sceneMode = 21; - setAction(&_sequenceManager, this, 21, &_globals->_player, &_SceneObjectExt, NULL); - } else { - // Failed evasion - _sceneObject3._moveDiff = Common::Point(8, 8); - setAction(&_action4); - } - _sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y); - } else { - // Intro: Quinn looking at the monaster - _globals->_player.postInit(); - _globals->_player.setVisage(2640); - _globals->_player.animate(ANIM_MODE_NONE, NULL); - _globals->_player.setStrip2(1); - _globals->_player.setFrame2(4); - _globals->_player.fixPriority(200); - _globals->_player.setPosition(Common::Point(425, 233)); - - setAction(&_action1); - _speakerQText.setTextPos(Common::Point(350, 20)); - _speakerQText._textWidth = 260; - _speakerGameText.setTextPos(Common::Point(350, 20)); - _speakerGameText._textWidth = 260; - - _globals->_soundHandler.play(8); - _sceneBounds = Rect(320, 0, 640, 200); - } - - _globals->_player.disableControl(); - loadScene(20); -} - -void Scene20::signal() { - if (_sceneMode == 21) - _globals->_sceneManager.changeScene(90); -} - -/*-------------------------------------------------------------------------- - * Scene 30 - First game scene (Outside Ch'mee house) - * - *--------------------------------------------------------------------------*/ - -void Scene30::BeamObject::doAction(int action) { - if (action == OBJECT_SCANNER) - display2(30, 14); - else if (action == CURSOR_LOOK) - display2(30, 2); - else if (action == CURSOR_USE) { - Scene30 *parent = (Scene30 *)_globals->_sceneManager._scene; - parent->setAction(&parent->_beamAction); - } else - SceneObject::doAction(action); -} - -void Scene30::DoorObject::doAction(int action) { - if (action == OBJECT_SCANNER) - display2(30, 13); - else if (action == CURSOR_LOOK) - display2(30, 1); - else if (action == CURSOR_USE) - display2(30, 7); - else - SceneObject::doAction(action); -} - -void Scene30::BeamAction::signal() { - Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - // Disable control and move player to the doorway beam - _globals->_player.disableControl(); - NpcMover *mover = new NpcMover(); - Common::Point pt(114, 198); - _globals->_player.addMover(mover, &pt, this); - break; - } - - case 1: - // Perform the animation of player raising hand - _globals->_player.setVisage(31); - _globals->_player.setStrip(1); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - - case 2: - // Hide the beam and lower the player's hand - scene->_sound.play(10, NULL, 127); - _globals->_player.animate(ANIM_MODE_6, this); - scene->_beam.remove(); - break; - - case 3: { - // Bring the Kzin to the doorway - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip(7); - scene->_kzin.postInit(); - scene->_kzin.setVisage(2801); - scene->_kzin.animate(ANIM_MODE_1, NULL); - scene->_kzin.setObjectWrapper(new SceneObjectWrapper()); - scene->_kzin.setPosition(Common::Point(334, 1)); - NpcMover *mover = new NpcMover(); - Common::Point pt(158, 170); - scene->_kzin.addMover(mover, &pt, this); - _globals->_sceneItems.push_front(&scene->_kzin); - break; - } - - case 4: - // Open the door - scene->_sound.play(11, NULL, 127); - scene->_door.animate(ANIM_MODE_5, this); - break; - - case 5: - // Run the Kzin's talk sequence - scene->_sound.play(13, NULL, 127); - _globals->_soundHandler.play(12, NULL, 127); - scene->_stripManager.start((scene->_sceneMode == 0) ? 30 : 37, this); - break; - - case 6: - // Slight delay - setDelay(3); - break; - - case 7: - // Re-activate player control - scene->_sceneMode = 31; - scene->_kzin.setAction(&scene->_kzinAction); - _globals->_player.enableControl(); - - // End this action - remove(); - break; - - default: - break; - } -} - -void Scene30::KzinAction::signal() { - Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1200); - break; - case 1: - _globals->_soundHandler.fadeOut(NULL); - _globals->_player.disableControl(); - setAction(&scene->_sequenceManager, _globals->_sceneManager._scene, 31, &scene->_kzin, &scene->_door, NULL); - break; - case 2: - _globals->_player.enableControl(); - remove(); - break; - default: - break; - } -} - -void Scene30::RingAction::signal() { - Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - scene->_kzin.setAction(NULL); - NpcMover *mover = new NpcMover(); - Common::Point pt(114, 198); - _globals->_player.addMover(mover, &pt, this); - break; - } - - case 1: - _globals->_player.checkAngle(&scene->_kzin); - scene->_stripManager.start(32, this); - break; - - case 2: { - _globals->_player.animate(ANIM_MODE_1, NULL); - NpcMover *mover = new NpcMover(); - Common::Point pt(143, 177); - _globals->_player.addMover(mover, &pt, this); - break; - } - - case 3: - scene->_sound.play(11, NULL, 127); - scene->_door.animate(ANIM_MODE_6, this); - break; - - case 4: { - scene->_sound.play(13, NULL, 127); - NpcMover *kzinMover = new NpcMover(); - Common::Point pt(354, 5); - scene->_kzin.addMover(kzinMover, &pt, this); - NpcMover *playerMover = new NpcMover(); - pt = Common::Point(335, 36); - _globals->_player.addMover(playerMover, &pt, this); - break; - } - - case 5: - break; - - case 6: - _globals->_sceneManager.changeScene(20); - break; - - default: - break; - } -} - -void Scene30::TalkAction::signal() { - Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - scene->_kzin.setAction(NULL); - NpcMover *mover = new NpcMover(); - Common::Point pt(114, 198); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - _globals->_player.checkAngle(&scene->_kzin); - scene->_stripManager.start(34, this); - break; - case 2: - setDelay(5); - break; - case 3: - scene->_kzin.setAction(&scene->_kzinAction); - _globals->_player.enableControl(); - remove(); - break; - default: - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene30::KzinObject::doAction(int action) { - Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - display2(30, 12); - break; - case OBJECT_SCANNER: - display2(30, 11); - break; - case OBJECT_RING: - RING_INVENTORY._ring._sceneNumber = 30; - scene->setAction(&scene->_ringAction); - break; - case CURSOR_LOOK: - display2(30, 6); - break; - case CURSOR_USE: - display2(30, 10); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - scene->setAction(&scene->_talkAction); - break; - default: - SceneObject::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene30::Scene30() : - _groundHotspot(9, OBJECT_SCANNER, 50, 17, CURSOR_LOOK, 30, 3, CURSOR_USE, 30, 8, LIST_END), - _wallsHotspot(8, OBJECT_SCANNER, 50, 13, CURSOR_LOOK, 30, 0, CURSOR_USE, 30, 7, LIST_END), - _courtyardHotspot(0, CURSOR_LOOK, 30, 4, LIST_END), - _treeHotspot(10, OBJECT_SCANNER, 40, 39, CURSOR_LOOK, 30, 5, CURSOR_USE, 30, 9, LIST_END) { -} - -void Scene30::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - // Add the speaker classes to the strip manager - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerSR); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerQText); - _speakerSText._npc = &_kzin; - _speakerQText._npc = &_globals->_player; - - - // Setup player - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setStrip(7); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(114, 198)); - _globals->_player.changeZoom(75); - _globals->_player.enableControl(); - - // Set up beam object - _beam.postInit(); - _beam.setVisage(31); - _beam.setStrip(2); - _beam.setPosition(Common::Point(124, 178)); - _beam.fixPriority(188); - - // Set up door object - _door.postInit(); - _door.setVisage(30); - _door.setPosition(Common::Point(150, 183)); - - // Final processing and add of scene items - _courtyardHotspot.setBounds(Rect(0, 0, 320, 200)); - - // Add the objects and hotspots to the scene - _globals->_sceneItems.addItems(&_beam, &_wallsHotspot, &_door, &_treeHotspot, &_groundHotspot, - &_courtyardHotspot, NULL); - - // Load the scene data - loadScene(30); - _sceneMode = 0; -} - -void Scene30::signal() { - if (_sceneMode == 31) { - // Re-activate beam if the Kzin goes back inside - _beam.postInit(); - _beam.setVisage(31); - _beam.setStrip(2); - _beam.setPosition(Common::Point(124, 178)); - _beam.fixPriority(188); - _globals->_sceneItems.push_front(&_beam); - _globals->_player.enableControl(); - } else if (_sceneMode == 32) { - _globals->_player.disableControl(); - _sceneMode = 31; - setAction(&_sequenceManager, _globals->_sceneManager._scene, 31, &_kzin, &_door, NULL); - } -} - -/*-------------------------------------------------------------------------- - * Scene 40 - Chmeee Home - * - *--------------------------------------------------------------------------*/ - -void Scene40::Action1::signal() { - Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(120); - break; - case 1: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(40, this); - break; - case 2: - scene->_doorway.postInit(); - scene->_doorway.setVisage(46); - scene->_doorway.setPosition(Common::Point(305, 61)); - scene->_doorway.animate(ANIM_MODE_5, this); - scene->_soundHandler.play(25); - break; - case 3: - scene->_doorway.hide(); - scene->_dyingKzin.setPosition(Common::Point(296, 62)); - _globals->_player.animate(ANIM_MODE_5, NULL); - scene->_object1.setVisage(43); - scene->_object1.setStrip(3); - scene->_object1.animate(ANIM_MODE_5, NULL); - scene->_object2.hide(); - scene->_object3.hide(); - scene->_stripManager.start(45, this); - break; - case 4: - scene->_object2.remove(); - scene->_object3.remove(); - scene->_assassin.setVisage(42); - scene->_assassin.setStrip(2); - scene->_assassin.setFrame(1); - scene->_assassin.setPosition(Common::Point(13, 171)); - scene->_assassin.animate(ANIM_MODE_5, this); - scene->_soundHandler.play(25); - break; - case 5: - scene->_doorway.show(); - scene->_doorway.setVisage(42); - scene->_doorway.setStrip(3); - scene->_doorway.setFrame(1); - scene->_doorway.setPosition(Common::Point(41, 144)); - scene->_assassin.animate(ANIM_MODE_6, NULL); - setDelay(6); - break; - case 6: - scene->_doorway.setPosition(Common::Point(178, 101)); - setDelay(6); - break; - case 7: - scene->_doorway.setPosition(Common::Point(271, 69)); - setDelay(6); - break; - case 8: - scene->_doorway.remove(); - scene->_dyingKzin.animate(ANIM_MODE_5, this); - break; - case 9: { - scene->_dyingKzin.setStrip(1); - //Workaround: The original uses setFrame(1) but it's completely wrong. - scene->_dyingKzin.setFrame(2); - scene->_dyingKzin._moveDiff.y = 15; - scene->_dyingKzin.animate(ANIM_MODE_5, NULL); - Common::Point pt(223, 186); - NpcMover *mover = new NpcMover(); - scene->_dyingKzin.addMover(mover, &pt, this); - break; - } - case 10: { - scene->_soundHandler.play(27); - Common::Point pt(223, 184); - NpcMover *mover = new NpcMover(); - scene->_dyingKzin.addMover(mover, &pt, this); - break; - } - case 11: { - Common::Point pt(223, 186); - NpcMover *mover = new NpcMover(); - scene->_dyingKzin.addMover(mover, &pt, this); - break; - } - case 12: { - _globals->_soundHandler.play(26); - _globals->_player._uiEnabled = true; - scene->_assassin.setVisage(42); - scene->_assassin.setPosition(Common::Point(4, 191)); - scene->_assassin.setStrip(1); - scene->_assassin.animate(ANIM_MODE_1, NULL); - Common::Point pt(230, 187); - NpcMover *mover = new NpcMover(); - scene->_assassin.addMover(mover, &pt, this); - break; - } - case 13: - setDelay(180); - break; - case 14: - scene->_assassin.setVisage(45); - scene->_assassin.setStrip(1); - scene->_assassin.setFrame(1); - scene->_assassin.animate(ANIM_MODE_5, this); - scene->_soundHandler.play(28); - break; - case 15: - _globals->_player.disableControl(); - scene->_object1.setVisage(40); - scene->_object1.setStrip(4); - scene->_object1.setFrame(1); - scene->_object1.animate(ANIM_MODE_5, NULL); - _globals->_player.setVisage(40); - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 16: - _globals->_soundHandler.play(77, this); - break; - case 17: - _globals->_game->endGame(40, 20); - remove(); - break; - } -} - -void Scene40::Action2::signal() { - Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - if (scene->_assassin._position.x < 229) - _actionIndex = 0; - setDelay(1); - break; - case 1: - scene->_assassin.animate(ANIM_MODE_NONE, NULL); - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: { - scene->_soundHandler.play(28); - scene->_doorway.postInit(); - scene->_doorway.setVisage(16); - scene->_doorway.setStrip2(6); - scene->_doorway.fixPriority(200); - scene->_doorway.setPosition(Common::Point(159, 191)); - scene->_doorway._moveDiff = Common::Point(40, 40); - scene->_doorway._moveRate = 60; - scene->_doorway.animate(ANIM_MODE_5, NULL); - - Common::Point pt(271, 165); - NpcMover *mover = new NpcMover(); - scene->_doorway.addMover(mover, &pt, this); - break; - } - case 3: - scene->_doorway.remove(); - scene->_assassin.setVisage(44); - scene->_assassin._frame = 1; - scene->_assassin.animate(ANIM_MODE_5, this); - scene->_soundHandler.play(29); - RING_INVENTORY._infoDisk._sceneNumber = 40; - break; - case 4: - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 5: { - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip(1); - Common::Point pt(230, 195); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 6: { - _globals->_player.setStrip(7); - scene->_object1.setVisage(2806); - scene->_object1.animate(ANIM_MODE_1, NULL); - SceneObjectWrapper *wrapper = new SceneObjectWrapper(); - scene->_object1.setObjectWrapper(wrapper); - Common::Point pt(200, 190); - NpcMover *mover = new NpcMover(); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 7: - scene->_stripManager.start(44, this); - break; - case 8: { - Common::Point pt(170, 260); - NpcMover *mover = new NpcMover(); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 9: - scene->_dyingKzin.setAction(&scene->_action7); - scene->_object1.remove(); - _globals->_stripNum = 88; - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player.enableControl(); - scene->_assassin.setAction(&scene->_action8); - break; - } -} - -void Scene40::Action3::signal() { - Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.setAction(NULL); - _globals->_stripNum = 99; - _globals->_player.disableControl(); - Common::Point pt(240, 195); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - _globals->_player.setVisage(5010); - _globals->_player._strip = 2; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_4, 5, 1, this); - break; - case 2: - scene->_assassin.setStrip(2); - scene->_assassin.setFrame(1); - RING_INVENTORY._infoDisk._sceneNumber = 1; - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 3: - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip(7); - _globals->_stripNum = 88; - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene40::Action4::signal() { - switch (_actionIndex++) { - case 0: { - Common::Point pt(178, 190); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - _globals->_stripNum = 88; - _globals->_player.enableControl(); - break; - } -} - -void Scene40::Action5::signal() { - Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(119) + 120); - break; - case 1: - scene->_object2.animate(ANIM_MODE_8, 1, this); - _actionIndex = 0; - } -} - -void Scene40::Action6::signal() { - Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - scene->_object1.postInit(); - scene->_object1.setVisage(16); - scene->_object1.setStrip2(6); - scene->_object1._moveDiff = Common::Point(40, 40); - scene->_object1.setPosition(Common::Point(313, 53)); - scene->_object1._moveRate = 60; - - Common::Point pt(141, 194); - NpcMover *mover = new NpcMover(); - scene->_object1.addMover(mover, &pt, NULL); - scene->_object1.animate(ANIM_MODE_5, NULL); - - scene->_doorway.postInit(); - scene->_doorway.setVisage(46); - scene->_doorway.setPosition(Common::Point(305, 61)); - scene->_doorway.animate(ANIM_MODE_5, this); - scene->_soundHandler.play(25); - break; - } - case 1: - scene->_soundHandler.play(28); - scene->_doorway.setPosition(Common::Point(148, 74)); - scene->_doorway.setFrame(1); - scene->_doorway.setStrip(2); - scene->_doorway.animate(ANIM_MODE_5, this); - break; - case 2: - remove(); - break; - } -} - -void Scene40::Action7::signal() { - Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(499) + 500); - break; - case 1: - scene->_object7.postInit(); - scene->_object7.setVisage(46); - - if (_globals->_randomSource.getRandomNumber(32767) >= 16384) { - scene->_object7.setStrip(3); - scene->_object7.setPosition(Common::Point(15, 185)); - } else { - scene->_object7.setPosition(Common::Point(305, 61)); - scene->_object7.setFrame(15); - } - scene->_object7.animate(ANIM_MODE_5, this); - scene->_soundHandler.play(25); - break; - case 2: - scene->_object7.remove(); - _actionIndex = 0; - setDelay(60); - break; - } -} - -void Scene40::Action8::signal() { - Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(300); - break; - case 1: - _globals->_player.disableControl(); - - if ((_globals->_player._position.y >= 197) || (_globals->_player._visage)) { - _actionIndex = 1; - setDelay(30); - } else { - scene->_doorway.postInit(); - scene->_doorway.setVisage(16); - scene->_doorway.setStrip2(6); - scene->_doorway.fixPriority(200); - scene->_doorway._moveRate = 60; - - if (_globals->_player._position.x >= 145) { - scene->_doorway.fixPriority(-1); - scene->_doorway.setPosition(Common::Point(6, 157)); - } else { - scene->_doorway.setPosition(Common::Point(313, 53)); - } - - scene->_doorway._moveDiff = Common::Point(40, 40); - Common::Point pt(_globals->_player._position.x, _globals->_player._position.y - 18); - NpcMover *mover = new NpcMover(); - scene->_doorway.addMover(mover, &pt, this); - scene->_doorway.animate(ANIM_MODE_5, NULL); - } - break; - case 2: - scene->_doorway.remove(); - _globals->_player.setVisage(40); - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 3: - _globals->_soundHandler.play(77, this); - break; - case 4: - _globals->_game->endGame(40, 45); - remove(); - break; - } -} - -void Scene40::Action8::dispatch() { - if (_action) - _action->dispatch(); - - if (_delayFrames) { - uint32 frameNumber = _globals->_events.getFrameNumber(); - if ((_startFrame + 60) < frameNumber) { - --_delayFrames; - _startFrame = frameNumber; - - if (_delayFrames <= 0) { - _delayFrames = 0; - signal(); - } - } - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene40::DyingKzin::doAction(int action) { - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(40, 44); - break; - case OBJECT_SCANNER: - SceneItem::display2(40, 43); - break; - case CURSOR_LOOK: - SceneItem::display2(40, 12); - break; - case CURSOR_USE: - SceneItem::display2(40, 18); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene40::Assassin::doAction(int action) { - Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - if (scene->_assassin._visage == 44) - SceneItem::display2(40, 21); - else { - _globals->_player.disableControl(); - Common::Point pt(230, 187); - NpcMover *mover = new NpcMover(); - addMover(mover, &pt, NULL); - scene->setAction(&scene->_action2); - } - break; - case OBJECT_SCANNER: - SceneItem::display2(40, (scene->_assassin._visage == 44) ? 22 : 23); - break; - case CURSOR_LOOK: - if (scene->_assassin._visage != 44) - SceneItem::display2(40, 13); - else - SceneItem::display2(40, (RING_INVENTORY._infoDisk._sceneNumber == 1) ? 19 : 14); - break; - case CURSOR_USE: - if (scene->_assassin._visage != 44) - SceneItem::display2(40, 15); - else if (RING_INVENTORY._infoDisk._sceneNumber == 1) - SceneItem::display2(40, 19); - else { - _globals->_player.disableControl(); - setAction(&scene->_action3); - } - break; - case CURSOR_TALK: - SceneItem::display2(40, 38); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene40::Item2::doAction(int action) { - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(40, 35); - _globals->_events.setCursor(CURSOR_WALK); - break; - case OBJECT_SCANNER: - SceneItem::display2(40, 34); - break; - case CURSOR_LOOK: - SceneItem::display2(40, 8); - break; - case CURSOR_USE: - SceneItem::display2(40, 36); - break; - case CURSOR_TALK: - SceneItem::display2(40, 37); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene40::Item6::doAction(int action) { - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(40, 25); - _globals->_events.setCursor(CURSOR_WALK); - break; - case OBJECT_SCANNER: - SceneItem::display2(40, 42); - break; - case CURSOR_LOOK: - SceneItem::display2(40, 6); - break; - case CURSOR_USE: - SceneItem::display2(40, 36); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene40::Scene40() : - _item1(2, OBJECT_SCANNER, 40, 24, OBJECT_STUNNER, 40, 25, CURSOR_LOOK, 40, 7, CURSOR_USE, 40, 16, LIST_END), - _item3(5, OBJECT_SCANNER, 40, 28, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 2, CURSOR_USE, 40, 30, LIST_END), - _item4(6, OBJECT_SCANNER, 40, 31, OBJECT_STUNNER, 40, 32, CURSOR_LOOK, 40, 5, CURSOR_USE, 40, 33, LIST_END), - _item5(0, CURSOR_LOOK, 40, 11, LIST_END), - _item7(4, OBJECT_SCANNER, 40, 26, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 9, CURSOR_USE, 40, 17, LIST_END), - _item8(8, OBJECT_SCANNER, 40, 39, OBJECT_STUNNER, 40, 40, CURSOR_LOOK, 40, 3, CURSOR_USE, 40, 41, LIST_END) { -} - -void Scene40::postInit(SceneObjectList *OwnerList) { - loadScene(40); - Scene::postInit(); - - setZoomPercents(0, 100, 200, 100); - _globals->_stripNum = 99; - - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerSL); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerGameText); - - _speakerGameText._color1 = 9; - _speakerGameText.setTextPos(Common::Point(160, 30)); - _speakerQText._npc = &_globals->_player; - _speakerSText._npc = &_object1; - - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(130, 220)); - _globals->_player.disableControl(); - - if (_globals->_sceneManager._previousScene == 20) { - _globals->_soundHandler.play(24); - _globals->_player.setVisage(43); - - _object1.postInit(); - _object1.setVisage(41); - _object1.setPosition(Common::Point(105, 220)); - _object2.postInit(); - _object2.setVisage(41); - _object2.setStrip(6); - _object2.fixPriority(200); - _object2.setPosition(Common::Point(94, 189)); - _object2.setAction(&_action5); - - _object3.postInit(); - _object3.setVisage(41); - _object3.setStrip(5); - _object3.fixPriority(205); - _object3.setPosition(Common::Point(110, 186)); - _object3._numFrames = 2; - _object3.animate(ANIM_MODE_8, NULL, NULL); - - _assassin.postInit(); - _assassin.setPosition(Common::Point(-40, 191)); - _globals->_sceneItems.push_back(&_assassin); - - _dyingKzin.postInit(); - _dyingKzin.setVisage(40); - _dyingKzin.setStrip(6); - _dyingKzin.setPosition(Common::Point(-90, 65)); - _dyingKzin.fixPriority(170); - - setAction(&_action1); - } else { - _doorway.postInit(); - _doorway.setVisage(46); - _doorway.setPosition(Common::Point(148, 74)); - _doorway.setStrip(2); - _doorway.setFrame(_doorway.getFrameCount()); - - _dyingKzin.postInit(); - _dyingKzin.setVisage(40); - _dyingKzin.setPosition(Common::Point(205, 183)); - _dyingKzin.fixPriority(170); - _dyingKzin._frame = 9; - _dyingKzin.setAction(&_action7); - - _assassin.postInit(); - _assassin.setVisage(44); - _assassin.setPosition(Common::Point(230, 187)); - _assassin.setAction(&_action8); - - if (RING_INVENTORY._infoDisk._sceneNumber == 40) { - _assassin.setStrip(1); - _assassin.setFrame(_assassin.getFrameCount()); - } else { - _assassin.setStrip(2); - } - - _globals->_sceneItems.push_back(&_assassin); - _globals->_player.setPosition(Common::Point(170, 220)); - - setAction(&_action4); - } - - _item5.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _item6._sceneRegionId = 3; - _item2._sceneRegionId = 7; - - _globals->_sceneItems.addItems(&_dyingKzin, &_item8, &_item1, &_item2, &_item3, &_item4, - &_item6, &_item7, &_item5, NULL); -} - -void Scene40::signal() { - if (_sceneMode == 41) - _globals->_sceneManager.changeScene(50); -} - -void Scene40::dispatch() { - if ((_globals->_stripNum == 88) && (_globals->_player._position.y >= 197)) { - _globals->_player.disableControl(); - _globals->_stripNum = 0; - _globals->_player.setAction(NULL); - _sceneMode = 41; - setAction(&_sequenceManager, this, 41, &_globals->_player, NULL); - - if (_globals->_sceneManager._previousScene == 20) { - _dyingKzin.setAction(&_action6); - } - } - - Scene::dispatch(); -} - -/*-------------------------------------------------------------------------- - * Scene 50 - By Flycycles - * - *--------------------------------------------------------------------------*/ - -void Scene50::Action1::signal() { - Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setAction(&scene->_sequenceManager, this, 54, &_globals->_player, NULL); - break; - case 1: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(63, this); - break; - case 2: - if (scene->_stripManager._field2E8 != 107) { - _globals->_player.enableControl(); - remove(); - } else { - Common::Point pt(282, 139); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - } - break; - case 3: - _globals->_stripNum = -1; - _globals->_sceneManager.changeScene(60); - break; - } -} - -void Scene50::Action2::signal() { - Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - scene->_stripManager.start(66, this); - break; - case 1: { - Common::Point pt(141, 142); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - _globals->_sceneManager.changeScene(40); - remove(); - break; - } -} - -void Scene50::Action3::signal() { - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - Common::Point pt(136, 185); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - _globals->_sceneManager.changeScene(60); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene50::Object1::doAction(int action) { - Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(50, 20); - break; - case OBJECT_SCANNER: - SceneItem::display2(50, 19); - break; - case CURSOR_LOOK: - SceneItem::display2(50, 4); - break; - case CURSOR_USE: - SceneItem::display2(50, 21); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - scene->_sceneMode = 52; - scene->setAction(&scene->_sequenceManager, scene, 52, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene50::Object2::doAction(int action) { - Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(50, 11); - break; - case OBJECT_SCANNER: - SceneItem::display2(50, 10); - break; - case CURSOR_LOOK: - SceneItem::display2(50, 1); - break; - case OBJECT_INFODISK: - case CURSOR_USE: - _globals->_stripNum = 50; - scene->setAction(&scene->_action3); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene50::Object3::doAction(int action) { - Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(50, 11); - break; - case OBJECT_SCANNER: - SceneItem::display2(50, 10); - break; - case CURSOR_LOOK: - SceneItem::display2(50, 1); - break; - case OBJECT_INFODISK: - case CURSOR_USE: - SceneItem::display2(50, 8); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - scene->_sceneMode = 52; - scene->setAction(&scene->_sequenceManager, scene, 52, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene50::Object4::doAction(int action) { - Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(50, 11); - break; - case OBJECT_SCANNER: - SceneItem::display2(50, 10); - break; - case CURSOR_LOOK: - SceneItem::display2(50, 1); - break; - case OBJECT_INFODISK: - case CURSOR_USE: - _globals->_player.disableControl(); - _globals->_stripNum = 0; - scene->_sceneMode = 51; - scene->setAction(&scene->_sequenceManager, scene, 51, &_globals->_player, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene50::Scene50() : - _item0(0, CURSOR_LOOK, 50, 3, LIST_END), - _item1(0, OBJECT_SCANNER, 50, 15, CURSOR_USE, 50, 16, CURSOR_LOOK, 50, 3, LIST_END), - _item2(0, CURSOR_LOOK, 50, 7, LIST_END), - _item3(8, OBJECT_STUNNER, 50, 14, OBJECT_SCANNER, 50, 13, CURSOR_LOOK, 50, 3, LIST_END), - _item4(9, OBJECT_SCANNER, 40, 39, OBJECT_STUNNER, 40, 40, CURSOR_USE, 40, 41, CURSOR_LOOK, 50, 5, LIST_END), - _item5(10, OBJECT_SCANNER, 50, 17, OBJECT_STUNNER, 50, 18, CURSOR_LOOK, 50, 6, CURSOR_USE, 30, 8, LIST_END) { - - _doorwayRect = Rect(80, 108, 160, 112); -} - -void Scene50::postInit(SceneObjectList *OwnerList) { - loadScene(50); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSText); - - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player._canWalk = false; - _globals->_player.changeZoom(75); - _globals->_player._moveDiff.y = 3; - - if (_globals->_sceneManager._previousScene == 40) { - _globals->_player.setPosition(Common::Point(128, 123)); - } else if (_globals->_stripNum == 50) { - _globals->_player.setPosition(Common::Point(136, 185)); - } else { - _globals->_player.setPosition(Common::Point(270, 143)); - } - - _object2.postInit(); - _object2.setVisage(2331); - _object2.setStrip(6); - _object2.setPosition(Common::Point(136, 192)); - _object2.fixPriority(200); - - _object3.postInit(); - _object3.setVisage(2337); - _object3.setStrip(6); - _object3.setPosition(Common::Point(260, 180)); - _object3.fixPriority(200); - - _object4.postInit(); - _object4.setVisage(2331); - _object4.setStrip(6); - _object4.setPosition(Common::Point(295, 144)); - _object4.fixPriority(178); - - _globals->_sceneItems.addItems(&_object2, &_object3, &_object4, NULL); - - if (!_globals->getFlag(101)) { - _globals->_player.disableControl(); - _globals->setFlag(101); - setAction(&_action1); - } else { - _globals->_player.enableControl(); - - if (_globals->_sceneManager._previousScene == 40) { - _globals->_player.disableControl(); - _sceneMode = 54; - setAction(&_sequenceManager, this, 54, &_globals->_player, NULL); - } - } - - _item0.setBounds(Rect(200, 0, 320, 200)); - _globals->_sceneItems.addItems(&_item3, &_item4, &_item5, &_item0, NULL); -} - -void Scene50::signal() { - switch (_sceneMode) { - case 51: - _globals->_sceneManager.changeScene(60); - break; - case 55: - _globals->_sceneManager.changeScene(40); - break; - case 52: - case 54: - _globals->_player.enableControl(); - break; - } -} - -void Scene50::dispatch() { - Scene::dispatch(); - - if ((_sceneMode != 55) && _doorwayRect.contains(_globals->_player._position)) { - // Player in house doorway, start player moving to within - _globals->_player.disableControl(); - _sceneMode = 55; - Common::Point pt(89, 111); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - } -} - -/*-------------------------------------------------------------------------- - * Scene 60 - Flycycle controls - * - *--------------------------------------------------------------------------*/ - -void Scene60::Action1::signal() { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(3); - break; - case 1: - scene->_floppyDrive.postInit(); - scene->_floppyDrive.setVisage(60); - scene->_floppyDrive.setStrip(7); - scene->_floppyDrive.setPosition(Common::Point(136, 65)); - scene->_floppyDrive.animate(ANIM_MODE_5, this); - - scene->_soundHandler1.play(35); - break; - case 2: - scene->_redLights.postInit(); - scene->_redLights.setVisage(60); - scene->_redLights.setPosition(Common::Point(199, 186)); - scene->_redLights.animate(ANIM_MODE_8, 0, NULL); - scene->_redLights._numFrames = 5; - - scene->_controlButton.animate(ANIM_MODE_2, NULL); - - if (!_globals->getFlag(83)) { - scene->_message.postInit(); - scene->_message.setVisage(60); - scene->_message.setStrip2(3); - scene->_message.setFrame(2); - scene->_message.setPosition(Common::Point(148, 85)); - scene->_message.animate(ANIM_MODE_2, NULL); - scene->_message._numFrames = 5; - - _globals->_sceneItems.push_front(&scene->_message); - scene->_soundHandler2.play(38); - } - - _globals->_events.setCursor(CURSOR_USE); - break; - case 3: - scene->_soundHandler2.play(37); - scene->loadScene(65); - scene->_message.remove(); - - if (_globals->_sceneObjects->contains(&scene->_redLights)) - scene->_redLights.remove(); - - scene->_controlButton.remove(); - scene->_slaveButton.remove(); - scene->_masterButton.remove(); - scene->_item1.remove(); - scene->_item2.remove(); - - scene->_nextButton.postInit(); - scene->_nextButton.setVisage(65); - scene->_nextButton.setPosition(Common::Point(118, 197)); - - scene->_prevButton.postInit(); - scene->_prevButton.setVisage(65); - scene->_prevButton.setStrip(2); - scene->_prevButton.setPosition(Common::Point(160, 197)); - - scene->_exitButton.postInit(); - scene->_exitButton.setVisage(65); - scene->_exitButton.setStrip(3); - scene->_exitButton.setPosition(Common::Point(202, 197)); - - scene->_rose.postInit(); - scene->_rose.setVisage(65); - scene->_rose.setStrip(4); - scene->_rose.setFrame(1); - scene->_rose.setPosition(Common::Point(145, 165)); - - _globals->_sceneItems.push_front(&scene->_nextButton); - _globals->_sceneItems.push_front(&scene->_prevButton); - _globals->_sceneItems.push_front(&scene->_exitButton); - setDelay(10); - - _globals->_events.setCursor(CURSOR_USE); - break; - case 4: - _globals->setFlag(90); - // Deliberate fall-through - case 5: - case 6: - case 7: - SceneItem::display(60, _actionIndex - 4, SET_Y, 40, SET_X, 25, SET_FONT, 75, - SET_EXT_BGCOLOR, -1, SET_FG_COLOR, 34, SET_POS_MODE, 0, - SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END); - _globals->_events.setCursor(CURSOR_USE); - break; - case 9: - _globals->_player._uiEnabled = false; - RING_INVENTORY._infoDisk._sceneNumber = 1; - - if (_globals->_sceneObjects->contains(&scene->_message)) - scene->_message.remove(); - - scene->_controlButton.animate(ANIM_MODE_NONE); - scene->_controlButton.setFrame(1); - scene->_redLights.remove(); - - scene->_floppyDrive.postInit(); - scene->_floppyDrive.setVisage(60); - scene->_floppyDrive.setStrip(7); - scene->_floppyDrive.setPosition(Common::Point(136, 65)); - scene->_floppyDrive.setFrame(scene->_floppyDrive.getFrameCount()); - scene->_floppyDrive.animate(ANIM_MODE_6, this); - - scene->_soundHandler1.play(35); - scene->_soundHandler3.stop(); - - scene->_masterButton.setFrame(1); - scene->_masterButton._state = 0; - - _globals->clearFlag(103); - _globals->clearFlag(!_globals->_stripNum ? 116 : 119); - break; - case 10: - setDelay(60); - break; - case 11: - _globals->_player._uiEnabled = true; - scene->_floppyDrive.remove(); - remove(); - break; - case 8: - default: - break; - } -} - -void Scene60::Action2::signal() { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - case 2: - setDelay(3); - break; - case 1: - scene->_stripManager.start(66, this); - break; - case 3: - _globals->_sceneManager.changeScene(50); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene60::PrevObject::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(60, 16); - } else if (action == CURSOR_USE) { - animate(ANIM_MODE_8, 1, NULL); - - if (scene->_action1.getActionIndex() > 5) { - scene->_soundHandler3.play(36); - scene->_action1.setActionIndex(scene->_action1.getActionIndex() - 2); - scene->_action1.setDelay(1); - } - } else { - SceneHotspot::doAction(action); - } -} - -void Scene60::NextObject::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(60, 17); - } else if (action == CURSOR_USE) { - animate(ANIM_MODE_8, 1, NULL); - - if (scene->_action1.getActionIndex() < 8) { - scene->_soundHandler3.play(36); - scene->_action1.setDelay(1); - } - } else { - SceneHotspot::doAction(action); - } -} - -void Scene60::ExitObject::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(60, 18); - } else if (action == CURSOR_USE) { - scene->_soundHandler3.play(36); - animate(ANIM_MODE_8, 1, NULL); - scene->_nextButton.remove(); - scene->_prevButton.remove(); - scene->_exitButton.remove(); - scene->_rose.remove(); - - SceneItem::display(0, 0); - scene->loadScene(60); - - scene->_controlButton.postInit(); - scene->_controlButton.setVisage(60); - scene->_controlButton.setStrip(5); - scene->_controlButton.setPosition(Common::Point(233, 143)); - scene->_controlButton.animate(ANIM_MODE_2, NULL); - - scene->_slaveButton.postInit(); - scene->_slaveButton.setVisage(60); - scene->_slaveButton.setStrip(8); - scene->_slaveButton.setPosition(Common::Point(143, 125)); - - scene->_masterButton.postInit(); - scene->_masterButton.setVisage(60); - scene->_masterButton.setStrip(8); - scene->_masterButton.setPosition(Common::Point(143, 105)); - - _globals->_sceneItems.push_front(&scene->_masterButton); - _globals->_sceneItems.push_front(&scene->_slaveButton); - - scene->_redLights.postInit(); - scene->_redLights.setVisage(60); - scene->_redLights.setPosition(Common::Point(199, 186)); - scene->_redLights.animate(ANIM_MODE_8, 0, NULL); - scene->_redLights._numFrames = 5; - scene->_redLights.setAction(&scene->_sequenceManager, scene, 61, NULL); - - if (scene->_slaveButton._state) - scene->_slaveButton.setFrame(2); - if (scene->_masterButton._state) - scene->_masterButton.setFrame(2); - - _globals->_sceneItems.push_front(&scene->_item1); - _globals->_sceneItems.push_front(&scene->_controlButton); - _globals->_sceneItems.push_front(&scene->_slaveButton); - _globals->_sceneItems.push_front(&scene->_masterButton); - _globals->_sceneItems.push_back(&scene->_item2); - - _globals->gfxManager()._font.setFontNumber(2); - _globals->_sceneText._fontNumber = 2; - - scene->_action1.setActionIndex(2); - scene->_action1.setDelay(1); - scene->_sceneMode = 9999; - scene->signal(); - } else { - SceneHotspot::doAction(action); - } -} - -void Scene60::MessageObject::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(60, 9); - } else if (action == CURSOR_USE) { - scene->_action1.setDelay(1); - _globals->setFlag(83); - } else { - SceneHotspot::doAction(action); - } -} - -void Scene60::ControlObject::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(60, 11); - } else if (action == CURSOR_USE) { - if (_animateMode == ANIM_MODE_NONE) - SceneItem::display2(60, 14); - else if (!scene->_slaveButton._state) { - _globals->_soundHandler.play(40); - _globals->_soundHandler.holdAt(true); - _globals->_sceneManager.changeScene(20); - } else { - scene->_sceneMode = 15; - setAction(&scene->_sequenceManager, scene, 62, NULL); - } - } else { - SceneHotspot::doAction(action); - } -} - -void Scene60::SlaveObject::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(60, 8); - } else if (action == CURSOR_USE) { - if (scene->_masterButton._state) - scene->_sceneMode = 19; - else if (_state) { - scene->_soundHandler3.stop(); - animate(ANIM_MODE_6, NULL); - _globals->clearFlag(102); - _globals->clearFlag(!_globals->_stripNum ? 117 : 120); - _state = 0; - scene->_sceneMode = 9998; - } else { - scene->_soundHandler3.play(39); - _globals->setFlag(102); - _globals->setFlag(!_globals->_stripNum ? 117 : 120); - animate(ANIM_MODE_5, NULL); - _state = 1; - scene->_sceneMode = 9998; - } - - setAction(&scene->_sequenceManager, scene, 62, NULL); - } else { - SceneHotspot::doAction(action); - } -} - -void Scene60::MasterObject::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(60, 7); - } else if (action == CURSOR_USE) { - if (!scene->_controlButton._animateMode) - scene->_sceneMode = 14; - else if (scene->_slaveButton._state) - scene->_sceneMode = 20; - else if (_state) { - scene->_soundHandler3.stop(); - animate(ANIM_MODE_6, NULL); - _state = 0; - _globals->clearFlag(103); - _globals->clearFlag(!_globals->_stripNum ? 116 : 119); - scene->_sceneMode = 9998; - } else { - scene->_soundHandler3.play(39); - animate(ANIM_MODE_5, NULL); - _state = 1; - _globals->setFlag(103); - _globals->setFlag(!_globals->_stripNum ? 116 : 119); - scene->_sceneMode = 9998; - } - - setAction(&scene->_sequenceManager, scene, 62, NULL); - } else { - SceneHotspot::doAction(action); - } -} - -void Scene60::FloppyDrive::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(60, 13); - } else if (action == CURSOR_USE) { - _globals->setFlag(!_globals->_stripNum ? 118 : 121); - scene->setAction(&scene->_action1); - } else { - SceneHotspot::doAction(action); - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene60::Item1::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_INFODISK: - RING_INVENTORY._infoDisk._sceneNumber = 60; - _globals->setFlag(!_globals->_stripNum ? 118 : 121); - scene->_sceneMode = 0; - scene->setAction(&scene->_action1); - break; - case CURSOR_LOOK: - SceneItem::display2(60, 10); - break; - case CURSOR_USE: - if (RING_INVENTORY._infoDisk._sceneNumber == 60) { - if (_globals->getFlag(118) && !_globals->_stripNum) { - _globals->clearFlag(118); - scene->setAction(&scene->_action1); - scene->_action1.setActionIndex(9); - scene->_action1.setDelay(1); - } - if (_globals->getFlag(121) && !_globals->_stripNum) { - _globals->clearFlag(121); - scene->setAction(&scene->_action1); - scene->_action1.setActionIndex(9); - scene->_action1.setDelay(1); - } - } else if (RING_INVENTORY._infoDisk._sceneNumber == 1) { - scene->_sceneMode = 0; - setAction(&scene->_sequenceManager, scene, 62, NULL); - } else { - scene->setAction(&scene->_action2); - } - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene60::Item::doAction(int action) { - Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(60, _messageNum); - break; - case CURSOR_USE: - scene->_sceneMode = _sceneMode; - setAction(&scene->_sequenceManager, this, 62, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene60::Scene60() : - _item2(0, 12, 12), - _item3(8, 22, 23), - _item4(9, 24, 25), - _item5(10, 26, 27), - _item6(11, 28, 29) { -} - -void Scene60::postInit(SceneObjectList *OwnerList) { - loadScene(60); - Scene::postInit(); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSText); - - _globals->_player._uiEnabled = true; - _globals->_events.setCursor(CURSOR_USE); - - _slaveButton.postInit(); - _slaveButton.setVisage(60); - _slaveButton.setStrip(8); - _slaveButton.setPosition(Common::Point(143, 125)); - _slaveButton._state = 0; - - _masterButton.postInit(); - _masterButton.setVisage(60); - _masterButton.setStrip(8); - _masterButton.setPosition(Common::Point(143, 105)); - _masterButton._state = 0; - - _globals->_sceneItems.push_back(&_masterButton); - _globals->_sceneItems.push_back(&_slaveButton); - - _controlButton.postInit(); - _controlButton.setVisage(60); - _controlButton.setStrip(5); - _controlButton.setPosition(Common::Point(233, 143)); - _globals->_sceneItems.push_back(&_controlButton); - - if (_globals->_stripNum == -1) { - _globals->_stripNum = 0; - } else { - _globals->_player.disableControl(); - _sceneMode = 9999; - setAction(&_sequenceManager, this, 61, NULL); - } - - _item1.setBounds(Rect(130, 55, 174, 70)); - _item2.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - - if (_globals->_stripNum == 0) { - if (_globals->getFlag(117)) { - _slaveButton._state = 1; - _slaveButton.setFrame(2); - } - - if (_globals->getFlag(116)) { - _masterButton._state = 1; - _masterButton.setFrame(2); - } - - if (_globals->getFlag(118)) { - _controlButton.animate(ANIM_MODE_2, NULL); - - _redLights.postInit(); - _redLights.setVisage(60); - _redLights.setPosition(Common::Point(199, 186)); - _redLights.animate(ANIM_MODE_8, 0, NULL); - - _soundHandler1.play(35); - - if (!_globals->getFlag(83)) { - _message.postInit(); - _message.setVisage(60); - _message.setStrip2(3); - _message.setFrame(2); - _message.setPosition(Common::Point(148, 85)); - _message.animate(ANIM_MODE_2, NULL); - _message._numFrames = 5; - _globals->_sceneItems.push_front(&_message); - - _soundHandler2.play(38); - } - } - } else { - if (_globals->getFlag(120)) { - _slaveButton._state = 1; - _slaveButton.setFrame(2); - } - - if (_globals->getFlag(119)) { - _masterButton._state = 1; - _masterButton.setFrame(2); - } - - if (_globals->getFlag(121)) { - _controlButton.animate(ANIM_MODE_2, NULL); - - _redLights.postInit(); - _redLights.setVisage(60); - _redLights.setPosition(Common::Point(199, 186)); - _redLights.animate(ANIM_MODE_8, 0, NULL); - _redLights._numFrames = 5; - - _soundHandler1.play(35); - - if (!_globals->getFlag(83)) { - _message.postInit(); - _message.setVisage(60); - _message.setStrip2(3); - _message.setFrame(2); - _message.setPosition(Common::Point(148, 85)); - _message.animate(ANIM_MODE_2, NULL); - _message._numFrames = 5; - _globals->_sceneItems.push_front(&_message); - - _soundHandler2.play(38); - } - } - } - - _globals->_sceneItems.addItems(&_item3, &_item4, &_item5, &_item6, - &_item1, &_item2, NULL); -} - -void Scene60::signal() { - if (_sceneMode != 0) { - if (_sceneMode == 9998) { - _globals->_events.setCursor(CURSOR_USE); - } else if (_sceneMode == 9999) { - _globals->_player._uiEnabled = true; - _globals->_events.setCursor(CURSOR_USE); - - _gfxButton.setText(EXIT_MSG); - _gfxButton._bounds.center(160, 193); - _gfxButton.draw(); - _gfxButton._bounds.expandPanes(); - } else { - SceneItem::display2(60, _sceneMode); - _globals->_events.setCursor(CURSOR_USE); - } - } -} - -void Scene60::process(Event &event) { - Scene::process(event); - - if (_screenNumber == 60) { - if (_gfxButton.process(event)) - _globals->_sceneManager.changeScene(50); - } -} - -/*-------------------------------------------------------------------------- - * Scene 90 - Shipyard Entrance - * - *--------------------------------------------------------------------------*/ - -void Scene90::Action1::signal() { - Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - _globals->_scenePalette.addRotation(64, 72, -1); - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(90, this); - break; - case 2: - setDelay(2); - break; - case 3: { - Common::Point pt(278, 191); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 4: - scene->_object2.setStrip(3); - setDelay(2); - break; - case 5: - scene->_soundHandler2.play(58); - - if (scene->_stripManager._field2E8 == 220) - scene->_stripManager.start(91, this, scene); - else { - scene->_stripManager.start(_globals->getFlag(104) ? 93 : 92, this, scene); - _actionIndex = 7; - } - break; - case 6: - scene->_object2.animate(ANIM_MODE_NONE); - _globals->_player._uiEnabled = true; - break; - case 7: - scene->_object2.animate(ANIM_MODE_NONE); - _globals->_soundHandler.play(56); - scene->_object3.animate(ANIM_MODE_5, this); - break; - case 8: { - Common::Point pt(215, 127); - PlayerMover *mover = new PlayerMover(); - scene->_object5.addMover(mover, &pt, this); - break; - } - case 9: { - Common::Point pt1(215, 127); - PlayerMover *mover1 = new PlayerMover(); - scene->_object1.addMover(mover1, &pt1, this); - Common::Point pt2(86, 62); - PlayerMover *mover2 = new PlayerMover(); - scene->_object5.addMover(mover2, &pt2, this); - break; - } - case 10: { - PlayerMover2 *mover = new PlayerMover2(); - scene->_object1.addMover(mover, 10, 15, &scene->_object5); - - if (!_globals->getFlag(104)) { - mover = new PlayerMover2(); - scene->_object4.addMover(mover, 10, 15, &scene->_object1); - } - setDelay(60); - break; - } - case 11: - _globals->_soundHandler.play(57); - _globals->_soundHandler.play(68); - scene->_object3.animate(ANIM_MODE_6, NULL); - - SceneItem::display(90, _globals->getFlag(104) ? 15 : 14, - SET_EXT_BGCOLOR, 13, SET_KEEP_ONSCREEN, -1, SET_X, 120, SET_Y, 20, LIST_END); - break; - case 12: - SceneItem::display(0, 0); - _globals->_scenePalette.clearListeners(); - _globals->_sceneManager.changeScene(95); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene90::Object1::doAction(int action) { - Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(90, 7); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->_sceneMode = 97; - setAction(&scene->_sequenceManager, scene, 97, this, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene90::Object2::doAction(int action) { - Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - case CURSOR_USE: - _globals->_player.disableControl(); - scene->_object6.postInit(); - scene->_object6.setVisage(90); - scene->_object6.setStrip(6); - scene->_object6.setPosition(Common::Point(184, 210)); - scene->_object6.hide(); - - scene->_sceneMode = 91; - scene->_soundHandler1.play(59); - scene->_soundHandler1.holdAt(true); - scene->setAction(&scene->_sequenceManager, scene, 91, this, &scene->_object6, NULL); - break; - case CURSOR_LOOK: - SceneItem::display2(90, 8); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - setAction(&scene->_sequenceManager, scene, 96, this, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene90::Scene90() : - _item1(0, CURSOR_LOOK, 90, 9, LIST_END), - _item2(0, CURSOR_LOOK, 90, 10, LIST_END), - _item3(0, CURSOR_LOOK, 90, 11, LIST_END), - _object3(OBJECT_STUNNER, 90, 13, CURSOR_LOOK, 90, 12, CURSOR_USE, 90, 16, LIST_END), - _object4(CURSOR_LOOK, 90, 17, LIST_END), - _object5(CURSOR_LOOK, 90, 18, CURSOR_USE, 90, 19, LIST_END) { -} - -void Scene90::stripCallback(int v) { - Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene; - - if (v == 1) - scene->_object2.animate(ANIM_MODE_7, NULL); - else if (v == 2) - scene->_object2.animate(ANIM_MODE_NONE); -} - -void Scene90::postInit(SceneObjectList *OwnerList) { - loadScene(90); - Scene::postInit(); - - setZoomPercents(70, 10, 180, 100); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerSR); - - _speakerMText._npc = &_object2; - _speakerQText._textWidth = 160; - _speakerQText._npc = &_object5; - _speakerSText._npc = &_object1; - - _object5.postInit(); - _object5.setVisage(2333); - _object5.setObjectWrapper(new SceneObjectWrapper()); - _object5._strip = 7; - _object5._moveDiff = Common::Point(22, 22); - _object5.setPosition(Common::Point(151, 177)); - _object5.changeZoom(-1); - _globals->_sceneItems.push_back(&_object5); - - _object1.postInit(); - _object1.setVisage(2337); - _object1.setObjectWrapper(new SceneObjectWrapper()); - _object1._strip = 4; - _object1._moveDiff = Common::Point(20, 20); - _object1.setPosition(Common::Point(212, 183)); - _object1.changeZoom(-1); - _globals->_sceneItems.push_back(&_object1); - - if (!_globals->getFlag(104)) { - _object4.postInit(); - _object4.setVisage(2331); - _object4.setObjectWrapper(new SceneObjectWrapper()); - _object4._strip = 4; - _object4._moveDiff = Common::Point(20, 20); - _object4.setPosition(Common::Point(251, 207)); - _object4.changeZoom(-1); - _globals->_sceneItems.push_back(&_object4); - } - - _object2.postInit(); - _object2.setVisage(90); - _object2.animate(ANIM_MODE_1, NULL); - _object2.setPosition(Common::Point(315, 185)); - _object2._strip = 2; - _globals->_sceneItems.push_back(&_object2); - - _object3.postInit(); - _object3.setVisage(90); - _object3.animate(ANIM_MODE_1, NULL); - _object3.setPosition(Common::Point(196, 181)); - _object3.fixPriority(175); - _globals->_sceneItems.push_back(&_object3); - - _globals->_player.disableControl(); - _globals->_soundHandler.play(55); - _soundHandler1.play(52); - _soundHandler1.holdAt(true); - - setAction(&_action1); - - _item3.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _item1.setBounds(Rect(271, 65, 271, 186)); - _item2.setBounds(Rect(0, 17, 124, 77)); - - _globals->_sceneItems.addItems(&_item1, &_item2, &_item3, NULL); -} - -void Scene90::signal() { - switch (_sceneMode) { - case 91: - _sceneMode = 92; - _globals->_soundHandler.play(77, this); - break; - case 92: - _globals->_scenePalette.clearListeners(); - _globals->_game->endGame(90, 6); - break; - case 96: - _globals->_player.enableControl(); - break; - case 97: - _stripManager._field2E8 = 0; - _action1.setActionIndex(5); - _action1.setDelay(1); - break; - default: - break; - } -} - -/*-------------------------------------------------------------------------- - * Scene 95 - Ship Close-up - * - *--------------------------------------------------------------------------*/ - -void Scene95::Action1::signal() { - Scene95 *scene = (Scene95 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _state = 6; - setDelay(60); - break; - case 1: - if (_state) { - SceneItem::display(95, _state % 2, SET_FONT, 2, - SET_EXT_BGCOLOR, -1, SET_EXT_BGCOLOR, 20, - SET_WIDTH, 200, SET_KEEP_ONSCREEN, 1, SET_TEXT_MODE, 1, LIST_END); - --_state; - _actionIndex = 1; - } - setDelay(60); - break; - case 2: { - scene->_soundHandler.play(66); - scene->_object3._numFrames = 5; - scene->_object3.animate(ANIM_MODE_5, NULL); - SceneItem::display(0, 0); - - Common::Point pt1(5, 198); - NpcMover *mover1 = new NpcMover(); - _globals->_player.addMover(mover1, &pt1, this); - - Common::Point pt2(9, 190); - NpcMover *mover2 = new NpcMover(); - scene->_object1.addMover(mover2, &pt2, NULL); - break; - } - case 3: { - scene->_soundHandler.play(21); - - Common::Point pt1(235, 72); - PlayerMover *mover1 = new PlayerMover(); - _globals->_player.addMover(mover1, &pt1, NULL); - - Common::Point pt2(235, 72); - PlayerMover *mover2 = new PlayerMover(); - scene->_object1.addMover(mover2, &pt2, NULL); - - SceneItem::display(95, 2, SET_Y, 45, SET_FONT, 2, - SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 13, SET_WIDTH, 200, - SET_KEEP_ONSCREEN, 1, LIST_END); - setDelay(240); - break; - } - case 4: - scene->_object3.remove(); - - SceneItem::display(95, 3, SET_Y, 45, SET_FONT, 2, - SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 35, SET_WIDTH, 200, - SET_KEEP_ONSCREEN, 1, LIST_END); - setDelay(240); - break; - case 5: - SceneItem::display(95, 4, SET_Y, 45, SET_FONT, 2, - SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 35, SET_WIDTH, 200, - SET_KEEP_ONSCREEN, 1, LIST_END); - setDelay(240); - break; - case 6: - setDelay(20); - break; - case 7: { - SceneItem::display(0, 0); - _globals->_player.setVisage(92); - _globals->_player.setPosition(Common::Point(-25, 200)); - scene->_object1.setVisage(91); - scene->_object1.setPosition(Common::Point(-22, 220)); - - scene->_soundHandler.play(21); - - Common::Point pt1(5, 198); - NpcMover *mover1 = new NpcMover(); - _globals->_player.addMover(mover1, &pt1, this); - - Common::Point pt2(9, 190); - NpcMover *mover2 = new NpcMover(); - scene->_object1.addMover(mover2, &pt2, NULL); - break; - } - case 8: { - Common::Point pt1(108, 112); - PlayerMover *mover1 = new PlayerMover(); - _globals->_player.addMover(mover1, &pt1, this); - - Common::Point pt2(108, 112); - PlayerMover *mover2 = new PlayerMover(); - scene->_object1.addMover(mover2, &pt2, NULL); - break; - } - case 9: - _globals->_sceneManager.changeScene(2300); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene95::Scene95() { -} - -void Scene95::postInit(SceneObjectList *OwnerList) { - loadScene(95); - Scene::postInit(); - setZoomPercents(100, 10, 200, 100); - - _globals->_player.postInit(); - _globals->_player.setVisage(2337); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player._strip = 4; - _globals->_player._moveDiff = Common::Point(30, 30); - _globals->_player.setPosition(Common::Point(-35, 200)); - _globals->_player.changeZoom(-1); - _globals->_player.disableControl(); - - _object1.postInit(); - _object1.setVisage(2333); - _object1.setPosition(Common::Point(-22, 220)); - _object1.animate(ANIM_MODE_1, NULL); - _object1.setObjectWrapper(new SceneObjectWrapper()); - _object1._moveDiff = Common::Point(30, 30); - _object1.changeZoom(-1); - - _object3.postInit(); - _object3.setVisage(96); - _object3.setPosition(Common::Point(29, 198)); - - _soundHandler.play(67); - setAction(&_action1); -} - -/*-------------------------------------------------------------------------- - * Scene 6100 - Sunflower navigation sequence - * - *--------------------------------------------------------------------------*/ - -void Scene6100::Action1::signal() { - Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->showMessage(SCENE6100_CAREFUL, 13, this); - break; - case 1: - scene->showMessage(SCENE6100_TOUGHER, 35, this); - break; - case 2: - scene->showMessage(NULL, 0, NULL); - remove(); - break; - } -} - -void Scene6100::Action2::signal() { - Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->showMessage(SCENE6100_ONE_MORE_HIT, 13, this); - break; - case 1: - scene->showMessage(SCENE6100_DOING_BEST, 35, this); - break; - case 2: - scene->showMessage(NULL, 0, NULL); - remove(); - break; - } -} - -void Scene6100::Action3::signal() { - Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_speed = 0; - setDelay(60); - break; - case 1: - _globals->_scenePalette.clearListeners(); - scene->_fadePercent = 100; - _globals->_scenePalette.refresh(); - scene->loadScene(9997); - scene->_object1.hide(); - scene->_object2.hide(); - scene->_object3.hide(); - scene->_sunflower1.hide(); - scene->_sunflower2.hide(); - scene->_sunflower3.hide(); - scene->_rocks.hide(); - scene->_sceneText.hide(); - - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(8120, this); - break; - case 2: - scene->showMessage(SCENE6100_REPAIR, 7, this); - break; - case 3: - scene->showMessage(NULL, 0, NULL); - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(8130, this); - break; - case 4: - _globals->setFlag(76); - _globals->_sceneManager.changeScene( - (scene->_stripManager._field2E8 == 135) ? 6100 : 2320); - remove(); - break; - } -} - -void Scene6100::Action4::signal() { - Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->showMessage(SCENE6100_ROCKY_AREA, 13, this); - break; - case 1: - scene->showMessage(SCENE6100_REPLY, 35, this); - break; - case 2: - scene->showMessage(NULL, 0, NULL); - remove(); - break; - } -} - -void Scene6100::Action5::dispatch() { - Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; - FloatSet zeroSet; - const double MULTIPLY_FACTOR = 0.01744; // 2 * pi / 360 - - if (scene->_turnAmount) { - scene->_angle = (scene->_turnAmount + scene->_angle) % 360; - - for (int objIndex = 1; objIndex <= 3; ++objIndex) { - SceneObject *obj = &scene->_object1; - if (objIndex == 2) obj = &scene->_object2; - if (objIndex == 3) obj = &scene->_object3; - - obj->_position.x += scene->_turnAmount * 2; - if (obj->_position.x >= 320) - obj->_position.x -= 480; - if (obj->_position.x < -160) - obj->_position.x += 480; - } - } - - scene->_object1._flags |= OBJFLAG_PANES; - scene->_object2._flags |= OBJFLAG_PANES; - scene->_object3._flags |= OBJFLAG_PANES; - - double distance = scene->_speed; - double angle = (double)scene->_angle * MULTIPLY_FACTOR; - scene->_probe._floats._float1 += sin(angle) * distance; - scene->_probe._floats._float2 += cos(angle) * distance; - - for (int idx = 0; idx < 4; ++idx) { - FloatSet tempSet = scene->_objList[idx]->_floats; - tempSet.add(-scene->_probe._floats._float1, -scene->_probe._floats._float2, - -scene->_probe._floats._float3); - - tempSet.proc1(scene->_angle * MULTIPLY_FACTOR); - - double sqrtVal = tempSet.sqrt(zeroSet); - if (sqrtVal != 0.0) { - scene->_objList[idx]->_position.y = static_cast(13800.0 / sqrtVal + 62.0); - } - - scene->_objList[idx]->_position.x = static_cast( - 160.0 - (330.0 / (tempSet._float2 + 330.0) * tempSet._float1)); - scene->_objList[idx]->dispatch(); - - if (tempSet._float2 < 0) { - scene->_objList[idx]->_position.y = 300; - - if (idx != 3) { - scene->_objList[idx]->_floats._float1 = - _globals->_randomSource.getRandomNumber(199); - scene->_objList[idx]->_floats._float2 = - _globals->_randomSource.getRandomNumber(999) + 750.0; - - scene->_objList[idx]->_floats.proc1( - -(scene->_turnAmount * 10 + scene->_angle) * MULTIPLY_FACTOR); - scene->_objList[idx]->_floats.add(scene->_probe._floats._float1, - scene->_probe._floats._float2, scene->_probe._floats._float3); - } - } - - if (idx == 3) { - scene->_rocksCheck = (ABS((int)tempSet._float1) < 100) && (tempSet._float2 > 0); - } - - scene->_objList[idx]->_flags |= OBJFLAG_PANES; - - if ((idx != 3) && (scene->_fadePercent == 100) && - (tempSet.sqrt(zeroSet) < 150.0)) { - switch (scene->_hitCount++) { - case 0: - scene->_soundHandler.play(233); - scene->showMessage(NULL, 0, NULL); - - if (!_globals->getFlag(76)) - scene->_probe.setAction(&scene->_action1); - break; - case 1: - scene->_soundHandler.play(233); - scene->showMessage(NULL, 0, NULL); - - if (!_globals->getFlag(76)) - scene->_probe.setAction(&scene->_action2); - break; - case 2: - scene->_soundHandler.play(234); - scene->showMessage(NULL, 0, NULL); - - if (!_globals->getFlag(76)) - scene->_probe.setAction(NULL); - scene->setAction(&scene->_action3); - break; - } - - _globals->_scenePalette.clearListeners(); - scene->_fadePercent = 0; - } - } -} - -void Scene6100::GetBoxAction::signal() { - Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - scene->_turnAmount = 0; - Common::Point pt(scene->_rocks._position.x, scene->_rocks._position.y + 10); - ProbeMover *mover = new ProbeMover(); - scene->_probe.addMover(mover, &pt, NULL); - scene->_probe.show(); - break; - } - case 1: { - scene->showMessage(SCENE6100_TAKE_CONTROLS, 35, this); - _globals->_scenePalette.clearListeners(); - - Common::Point pt(scene->_rocks._position.x, scene->_rocks._position.y - 10); - NpcMover *mover = new NpcMover(); - scene->_probe.addMover(mover, &pt, NULL); - break; - } - case 2: - scene->_probe._percent = 4; - scene->showMessage(SCENE6100_SURPRISE, 13, this); - break; - case 3: - scene->showMessage(SCENE6100_SWEAT, 35, this); - break; - case 4: - scene->showMessage(SCENE6100_VERY_WELL, 13, this); - break; - case 5: - scene->showMessage(NULL, 0, NULL); - _globals->_sceneManager.changeScene(2320); - remove(); - } -} - -void Scene6100::GetBoxAction::dispatch() { - Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; - - if (!scene->_probe._mover && (scene->_getBoxAction._actionIndex >= 1)) { - if (scene->_getBoxAction._actionIndex == 1) { - scene->_speed = 0; - scene->_getBoxAction.signal(); - } - - if (scene->_probe._percent > 4) - // Handle the probe disappearing into the rocks - scene->_probe._percent = scene->_probe._percent * 7 / 8; - scene->_probe._flags |= OBJFLAG_PANES; - } - - Action::dispatch(); -} - -void Scene6100::Action7::signal() { - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - setDelay(90); - break; - case 2: - _globals->_sceneManager.changeScene(2100); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene6100::Object::synchronize(Serializer &s) { - SceneObject::synchronize(s); - - // Save the double fields of the FloatSet - s.syncAsDouble(_floats._float1); - s.syncAsDouble(_floats._float2); - s.syncAsDouble(_floats._float3); - s.syncAsDouble(_floats._float4); -} - -/*--------------------------------------------------------------------------*/ - -void Scene6100::ProbeMover::dispatch() { - Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; - - if (!dontMove()) { - if (scene->_speed > 0) { - scene->_action5.dispatch(); - scene->_speed = (scene->_speed * 4) / 5; - } - } - - NpcMover::dispatch(); -} - -/*--------------------------------------------------------------------------*/ - -void Scene6100::Item1::doAction(int action) { - SceneItem::display2(4000, 0); -} - -/*--------------------------------------------------------------------------*/ - -Scene6100::Scene6100(): Scene() { - _objList[0] = &_sunflower1; - _objList[1] = &_sunflower2; - _objList[2] = &_sunflower3; - _objList[3] = &_rocks; - - _speed = 30; - _fadePercent = 100; - _rocksCheck = false; - _hitCount = 0; - _turnAmount = 0; - _angle = 0; - _msgActive = false; - - _globals->_sceneHandler._delayTicks = 8; - - _globals->_player.disableControl(); - _globals->_events.setCursor(CURSOR_WALK); -} - -void Scene6100::synchronize(Serializer &s) { - Scene::synchronize(s); - - s.syncAsSint16LE(_speed); - s.syncAsSint16LE(_fadePercent); - s.syncAsByte(_rocksCheck); - s.syncAsByte(_msgActive); - s.syncAsSint16LE(_hitCount); - s.syncAsSint16LE(_turnAmount); - s.syncAsSint16LE(_angle); -} - -void Scene6100::postInit(SceneObjectList *OwnerList) { - loadScene(6100); - Scene::postInit(); - setZoomPercents(62, 2, 200, 425); - - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerSL); - - _object1.postInit(); - _object1.setVisage(6100); - _object1._frame = 1; - _object1._strip = 4; - _object1.setPosition(Common::Point(0, 60)); - _object1.fixPriority(1); - - _object2.postInit(); - _object2.setVisage(6100); - _object2._frame = 1; - _object2._strip = 4; - _object2.setPosition(Common::Point(160, 60)); - _object2.fixPriority(1); - - _object3.postInit(); - _object3.setVisage(6100); - _object3._frame = 1; - _object3._strip = 4; - _object3.setPosition(Common::Point(320, 60)); - _object3.fixPriority(1); - - _rocks.postInit(); - _rocks.setVisage(6100); - _rocks._frame = 1; - _rocks._strip = 3; - _rocks.setPosition(Common::Point(320, 0)); - _rocks.fixPriority(2); - _rocks.changeZoom(-1); - _rocks._floats._float1 = 320.0; - _rocks._floats._float2 = 25000.0; - _rocks._floats._float3 = 0.0; - - _probe.postInit(); - _probe._moveDiff = Common::Point(15, 15); - _probe.setVisage(6100); - _probe._frame = 1; - _probe._strip = 5; - _probe.setPosition(Common::Point(160, 260)); - _probe.fixPriority(3); - _probe._floats._float1 = 320.0; - _probe._floats._float2 = 0.0; - _probe._floats._float3 = 0.0; - _probe.hide(); - - int baseVal = 2000; - for (int idx = 0; idx < 3; ++idx) { - _objList[idx]->_floats._float1 = _globals->_randomSource.getRandomNumber(999); - _objList[idx]->_floats._float2 = baseVal; - _objList[idx]->_floats._float3 = 0.0; - baseVal += _globals->_randomSource.getRandomNumber(499); - - _objList[idx]->postInit(); - _objList[idx]->setVisage(6100); - _objList[idx]->_frame = 1; - _objList[idx]->_strip = 2; - - _objList[idx]->setPosition(Common::Point( - _globals->_randomSource.getRandomNumber(319), 60)); - _objList[idx]->fixPriority(1); - _objList[idx]->changeZoom(-1); - } - - setAction(&_action5); - _globals->_scenePalette.addRotation(96, 143, -1); - - if (!_globals->getFlag(76)) - _probe.setAction(&_action4); - - _globals->_soundHandler.play(231); -} - -void Scene6100::remove() { - _globals->_player.disableControl(); - _globals->_scenePalette.clearListeners(); - Scene::remove(); -} - -void Scene6100::process(Event &event) { - Scene::process(event); - - if (event.eventType == EVENT_KEYPRESS) { - // Handle incremental turning speeds with arrow keys - if ((event.kbd.keycode == Common::KEYCODE_LEFT) || (event.kbd.keycode == Common::KEYCODE_KP4)) { - _turnAmount = MIN(_turnAmount + 1, 8); - } else if ((event.kbd.keycode == Common::KEYCODE_RIGHT) || (event.kbd.keycode == Common::KEYCODE_KP6)) { - _turnAmount = MAX(_turnAmount - 1, -8); - } - } - - if (_probe._action) - _probe._action->process(event); -} - -void Scene6100::dispatch() { - Scene::dispatch(); - - if (_probe._action) - _probe._action->dispatch(); - - // Handle mouse controlling the turning - int changeAmount = (_globals->_events._mousePos.x - 160) / -20; - _turnAmount += (changeAmount - _turnAmount) / 2; - - if (_fadePercent < 100) { - _fadePercent += 10; - if (_fadePercent >= 100) { - _globals->_scenePalette.addRotation(96, 143, -1); - _fadePercent = 100; - } - - byte adjustData[] = {0xff, 0xff, 0xff, 0}; - _globals->_scenePalette.fade(adjustData, false, _fadePercent); - } - - if (_action != &_action3) { - // Display the distance remaining to the target - int distance = (int)_probe._floats.sqrt(_rocks._floats); - Common::String s = Common::String::format("%06d", distance); - - _sceneText.setPosition(Common::Point(24, 160)); - _sceneText._fontNumber = 0; - _sceneText._color1 = 35; - _sceneText.setup(s); - } - - if (_rocksCheck && (_action == &_action5)) { - // Check whether the probe is close enough to the rocks - double distance = _probe._floats.sqrt(_rocks._floats); - - if ((distance >= 300.0) && (distance <= 500.0)) - setAction(&_getBoxAction); - } -} - -void Scene6100::showMessage(const Common::String &msg, int color, Action *action) { - if (_msgActive) { - _msgActive = false; - _speaker1.removeText(); - } - - if (!msg.empty()) { - _msgActive = true; - _speaker1._textPos.x = 20; - _speaker1._textWidth = 280; - _speaker1._color1 = color; - _speaker1._action = action; - _speaker1.setText(msg); - } -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes1.h b/engines/tsage/ringworld_scenes1.h deleted file mode 100644 index 0f9bf61117..0000000000 --- a/engines/tsage/ringworld_scenes1.h +++ /dev/null @@ -1,538 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_SCENES1_H -#define TSAGE_RINGWORLD_SCENES1_H - -#include "common/scummsys.h" -#include "tsage/ringworld_logic.h" -#include "tsage/converse.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" -#include "tsage/sound.h" - -namespace tSage { - -class Scene10 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; -public: - Speaker _speakerSText; - Speaker _speakerQText; - Action1 _action1; - Action2 _action2; - SceneObject _object1, _object2, _object3; - SceneObject _object4, _object5, _object6; - - virtual void stripCallback(int v); - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene15 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - virtual void dispatch(); - }; -public: - Action1 _action1; - SceneObject _object1; - ASound _soundHandler; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene20 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; -public: - SequenceManager _sequenceManager; - SpeakerQText _speakerQText; - SpeakerGameText _speakerGameText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - SceneObject _sceneObject1, _SceneObjectExt, _sceneObject3, _sceneObject4, _sceneObject5; - ASound _sound; -public: - Scene20(); - virtual ~Scene20() {} - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); -}; - -class Scene30 : public Scene { - /* Scene objects */ - // Doorway beam sensor - class BeamObject : public SceneObject { - public: - virtual void doAction(int action); - }; - // Doorway object - class DoorObject : public SceneObject { - public: - virtual void doAction(int action); - }; - // Kzin object - class KzinObject : public SceneObject { - public: - virtual void doAction(int action); - }; - - /* Actions */ - class BeamAction : public Action { - public: - virtual void signal(); - }; - class KzinAction : public Action { - public: - virtual void signal(); - }; - class RingAction : public Action { - public: - virtual void signal(); - }; - class TalkAction : public Action { - public: - virtual void signal(); - }; - -public: - ASound _sound; - DisplayHotspot _groundHotspot, _wallsHotspot, _courtyardHotspot, _treeHotspot; - BeamObject _beam; - DoorObject _door; - KzinObject _kzin; - - BeamAction _beamAction; - KzinAction _kzinAction; - RingAction _ringAction; - TalkAction _talkAction; - SequenceManager _sequenceManager; - - SpeakerSR _speakerSR; - SpeakerQL _speakerQL; - SpeakerSText _speakerSText; - SpeakerQText _speakerQText; -public: - Scene30(); - virtual ~Scene30() {} - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); -}; - -class Scene40 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - class Action8 : public Action { - public: - virtual void signal(); - virtual void dispatch(); - }; - - /* Objects */ - class DyingKzin : public SceneObject { - public: - virtual void doAction(int action); - }; - class Assassin : public SceneObject { - public: - virtual void doAction(int action); - }; - - /* Items */ - class Item2 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class Item6 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class Item8 : public SceneHotspot { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - SpeakerSL _speakerSL; - SpeakerQR _speakerQR; - SpeakerQText _speakerQText; - SpeakerSText _speakerSText; - SpeakerGameText _speakerGameText; - ASound _soundHandler; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Action7 _action7; - Action8 _action8; - SceneObject _object1, _object2, _object3; - DyingKzin _dyingKzin; - Assassin _assassin; - SceneObject _doorway, _object7, _object8; - DisplayHotspot _item1; - Item2 _item2; - DisplayHotspot _item3, _item4, _item5; - Item6 _item6; - DisplayHotspot _item7, _item8; - - Scene40(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene50 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - - /* Objects */ - class Object1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object3 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object4 : public SceneObject { - public: - virtual void doAction(int action); - }; - -public: - SequenceManager _sequenceManager; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Object1 _object1; - Object2 _object2; - Object3 _object3; - Object4 _object4; - Rect _doorwayRect; - SpeakerSText _speakerSText; - SpeakerQText _speakerQText; - DisplayHotspot _item0, _item1, _item2; - DisplayHotspot _item3, _item4, _item5; - - Scene50(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene60 : public Scene { - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class PrevObject : public SceneObject { - public: - virtual void doAction(int action); - }; - class NextObject : public SceneObject { - public: - virtual void doAction(int action); - }; - class ExitObject : public SceneObject { - public: - virtual void doAction(int action); - }; - class MessageObject : public SceneObject { - public: - virtual void doAction(int action); - }; - class ControlObject : public SceneObject { - public: - virtual void doAction(int action); - }; - class SlaveObject : public SceneObjectExt { - public: - virtual void doAction(int action); - }; - class MasterObject : public SceneObjectExt { - public: - virtual void doAction(int action); - }; - class FloppyDrive : public SceneObject { - public: - virtual void doAction(int action); - }; - class Item1 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class Item : public SceneHotspot { - public: - int _messageNum, _sceneMode; - - Item(int sceneRegionId, int messageNum, int sceneMode) { - _sceneRegionId = sceneRegionId; - _messageNum = messageNum; - _sceneMode = sceneMode; - } - virtual void doAction(int action); - }; - -public: - GfxButton _gfxButton; - SequenceManager _sequenceManager; - SpeakerQText _speakerQText; - SpeakerSText _speakerSText; - Action1 _action1; - Action2 _action2; - SceneObject _rose; - PrevObject _prevButton; - NextObject _nextButton; - ExitObject _exitButton; - MessageObject _message; - ControlObject _controlButton; - SlaveObject _slaveButton; - MasterObject _masterButton; - FloppyDrive _floppyDrive; - SceneObject _redLights; - Item1 _item1; - Item _item2, _item3, _item4, _item5, _item6; - ASound _soundHandler1; - ASound _soundHandler2; - ASound _soundHandler3; - - Scene60(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void process(Event &event); -}; - -class Scene90 : public Scene { - class Action1 : public Action { - public: - virtual void signal(); - }; - class Object1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object2 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - SpeakerSText _speakerSText; - SpeakerQText _speakerQText; - SpeakerQL _speakerQL; - SpeakerSR _speakerSR; - SpeakerMText _speakerMText; - Action1 _action1; - Object1 _object1; - Object2 _object2; - DisplayObject _object3, _object4, _object5; - SceneObject _object6; - DisplayHotspot _item1, _item2, _item3; - ASound _soundHandler1, _soundHandler2; - - Scene90(); - - virtual void stripCallback(int v); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); -}; - -class Scene95 : public Scene { - class Action1 : public ActionExt { - public: - virtual void signal(); - }; - -public: - Action1 _action1; - SceneObject _object1, _object2, _object3; - ASound _soundHandler; - - Scene95(); - virtual void postInit(SceneObjectList *OwnerList); -}; - -class Scene6100 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void dispatch(); - }; - class GetBoxAction : public Action { - public: - virtual void signal(); - virtual void dispatch(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - - /* Objects */ - class Object : public SceneObject { - public: - FloatSet _floats; - - virtual void synchronize(Serializer &s); - }; - class ProbeMover : public NpcMover { - public: - virtual void dispatch(); - }; - - /* Items */ - class Item1 : public SceneItem { - public: - virtual void doAction(int action); - }; - -public: - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - GetBoxAction _getBoxAction; - Action7 _action7; - ASound _soundHandler; - Speaker _speaker1; - SpeakerQR _speakerQR; - SpeakerSL _speakerSL; - SceneObject _object1, _object2, _object3; - Object _rocks, _probe; - Object _sunflower1, _sunflower2, _sunflower3; - SceneText _sceneText; - SceneItem _item1; - - int _turnAmount, _angle, _speed, _fadePercent; - int _hitCount; - bool _rocksCheck; - Object *_objList[4]; - bool _msgActive; - - Scene6100(); - virtual void synchronize(Serializer &s); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void remove(); - virtual void process(Event &event); - virtual void dispatch(); - void showMessage(const Common::String &msg, int color, Action *action); - -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp deleted file mode 100644 index 839fa0f008..0000000000 --- a/engines/tsage/ringworld_scenes10.cpp +++ /dev/null @@ -1,2089 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "graphics/cursorman.h" -#include "tsage/ringworld_scenes10.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -Scene2::Scene2() : Scene() { - _sceneState = 0; -} - -/*--------------------------------------------------------------------------*/ - -void Object9350::postInit(SceneObjectList *OwnerList) { - //SceneObject::postInit(&_globals->_sceneManager._altSceneObjects); - SceneObject::postInit(OwnerList); -} - -void Object9350::draw() { - reposition(); - Rect destRect = _bounds; - destRect.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y); - Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(_globals->_sceneManager._scene->_stripManager._stripNum); - GfxSurface frame = getFrame(); - _globals->gfxManager().copyFrom(frame, destRect, priorityRegion); -} - -/*-------------------------------------------------------------------------- - * Scene 9100 - Near beach: Slave washing clothes - * - *--------------------------------------------------------------------------*/ -void Scene9100::SceneHotspot1::doAction(int action) { - Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; - - if (action == CURSOR_TALK) { - if (_globals->getFlag(23)) { - _globals->_player.disableControl(); - scene->_sceneMode = 9104; - } else { - _globals->setFlag(23); - _globals->_player.disableControl(); - scene->_sceneMode = 9105; - } - scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &_globals->_player, &scene->_object5, &scene->_object6, NULL); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9100::dispatch() { - Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; - - if (!_action) { - if (_globals->_player._position.x < 25) { - _globals->_player.disableControl(); - if (!_globals->getFlag(23) || _globals->getFlag(11)) - _sceneMode = 9106; - else { - _sceneMode = 9108; - _globals->setFlag(11); - } - - scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &_globals->_player, NULL); - } - } else { - Scene::dispatch(); - } -} - -void Scene9100::signal() { - Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; - - switch (scene->_sceneMode) { - case 9102: - case 9106: - case 9108: - _globals->_sceneManager.changeScene(9150); - break; - case 9105: - _sceneHotspot3.remove(); - // No break on purpose - case 9103: - case 9104: - case 9107: - case 9109: - default: - _globals->_player.enableControl(); - break; - } -} - -void Scene9100::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - _object1.postInit(); - _object1.setVisage(9100); - _object1._strip = 1; - _object1._numFrames = 6; - _object1.setPosition(Common::Point(279, 132)); - _object1.animate(ANIM_MODE_2, NULL); - _object1.fixPriority(10); - - _globals->_player.postInit(); - - _object2.postInit(); - _object2.hide(); - - _object3.postInit(); - _object3.hide(); - - _object4.postInit(); - _object4.hide(); - - _object5.postInit(); - _object5.hide(); - - if (!_globals->getFlag(23)) { - _object6.postInit(); - _object6.setVisage(9111); - _object6.setStrip(6); - _object6.setFrame(1); - _object6.setPosition(Common::Point(138, 166)); - _sceneHotspot3.setup(145, 125, 166, 156, 9100, 40, 43); - } - _sceneHotspot1.setup(140, 176, 185, 215, 9100, 36, 37); - _sceneHotspot2.setup(161, 138, 182, 175, 9100, 38, 39); - _sceneHotspot4.setup(37, 196, 47, 320, 9100, 44, -1); - _sceneHotspot5.setup(69, 36, 121, 272, 9100, 45, 46); - _sceneHotspot6.setup(127, 0, 200, 52, 9100, 47, 48); - - _globals->_soundHandler.play(251); - if (_globals->_sceneManager._previousScene == 9150) { - if (_globals->getFlag(20)) { - _globals->_player.disableControl(); - if (_globals->getFlag(11)) - _sceneMode = 9107; - else - _sceneMode = 9109; - setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object5, NULL); - } else { - _sceneMode = 9103; - _globals->_player.disableControl(); - setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object2, &_object3, &_object4, &_object5, NULL); - _globals->setFlag(20); - } - } else { - _sceneMode = 9102; - _globals->_player.disableControl(); - setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object2, &_object3, &_object4, &_object5, NULL); - } -} - -/*-------------------------------------------------------------------------- - * Scene 9150 - Castle: Outside the bulwarks - * - *--------------------------------------------------------------------------*/ -void Scene9150::Object3::signal() { - switch (_signalFlag++) { - case 0: - _timer = 10 + _globals->_randomSource.getRandomNumber(90); - break; - default: - animate(ANIM_MODE_5, this); - _signalFlag = 0; - break; - } -} - -void Scene9150::Object3::dispatch() { - SceneObject::dispatch(); - if ((_timer != 0) && (--_timer == 0)) - signal(); -} - -void Scene9150::signal() { - switch (_sceneMode) { - case 9151: - case 9157: - _globals->_sceneManager.changeScene(9100); - break; - case 9153: - _globals->_sceneManager.changeScene(9300); - break; - case 9152: - case 9155: - case 9156: - _globals->_player.enableControl(); - break; - case 9154: - default: - break; - } -} - -void Scene9150::dispatch() { - - if ((_sceneState != 0) && (_sceneBounds.left == 0)) { - _object3._timer = 0; - _sceneState = 0; - _object3.setAction(&_sequenceManager2, NULL, 9154, &_object3, NULL); - _sceneHotspot10.remove(); - } - - if (_action) { - _action->dispatch(); - } else { - if (_globals->_player._position.x >= 160) { - if (_globals->_player._position.x > 630) { - _globals->_player.disableControl(); - _sceneMode = 9157; - setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL); - } - } else { - _globals->_player.disableControl(); - if (_globals->getFlag(11)) { - _globals->_soundHandler.play(286); - _sceneMode = 9153; - } else { - _sceneMode = 9156; - } - setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL); - } - } -} - -void Scene9150::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - _globals->_player.postInit(); - - _object3.postInit(); - _sceneState = 1; - _object3.setVisage(9151); - _object3._strip = 1; - _object3._frame = 1; - _object3.setPosition(Common::Point(312, 95)); - _object3.signal(); - - _sceneHotspot1.setup(0, 0, 200, 94, 9150, 46, -1); - _sceneHotspot2.setup(51, 90, 118, 230, 9150, 47, -1); - _sceneHotspot3.setup(182, 104, 200, 320, 9150, 48, 49); - _sceneHotspot4.setup(103, 292, 152, 314, 9150, 50, 51); - _sceneHotspot5.setup(115, 350, 160, 374, 9150, 52, 53); - _sceneHotspot6.setup(0, 471, 200, 531, 9150, 54, 55); - _sceneHotspot7.setup(170, 320, 185, 640, 9150, 56, -1); - _sceneHotspot9.setup(157, 107, 186, 320, 9150, 56, -1); - _sceneHotspot8.setup(133, 584, 142, 640, 9150, 57, -1); - _sceneHotspot10.setup(83, 304, 103, 323, 9150, 58, 59); - - _globals->_soundHandler.play(285); - _globals->_player.disableControl(); - - if (_globals->getFlag(20)) { - // Walking alone - _globals->_scrollFollower = &_globals->_player; - if (_globals->getFlag(11)) - // Hero wearing peasan suit - _sceneMode = 9155; - else - // Hero wearing Purple suit - _sceneMode = 9152; - setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL); - } else { - // Walking with the tiger - _sceneMode = 9151; - _object2.postInit(); - _object2.hide(); - _object1.postInit(); - setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, &_object1, &_object2, NULL); - } -} - -/*-------------------------------------------------------------------------- - * Scene 9200 - Castle: Near the fountain - * - *--------------------------------------------------------------------------*/ -void Scene9200::SceneHotspot1::doAction(int action) { - Scene9200 *scene = (Scene9200 *)_globals->_sceneManager._scene; - - if (action == OBJECT_TUNIC) { - _globals->_player.disableControl(); - if (_globals->getFlag(93)) { - scene->_sceneState = 9214; - scene->setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, NULL); - } else { - _globals->setFlag(93); - scene->_sceneState = 9213; - scene->setAction(&scene->_sequenceManager, scene, 9213, &_globals->_player, &scene->_object2, NULL); - } - } else if (action <= 100) { - _globals->_player.disableControl(); - scene->_sceneState = 9214; - scene->setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, NULL); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9200::signal() { - switch (_sceneState++) { - case 9207: - _globals->_sceneManager.changeScene(9700); - break; - case 9208: - case 9211: - case 9212: - _globals->_sceneManager.changeScene(9500); - break; - case 9209: - _globals->_sceneManager.changeScene(9360); - break; - case 9210: - _hotspot1.remove(); - // No break on purpose - case 9201: - case 9202: - case 9203: - case 9204: - case 9205: - case 9206: - default: - _globals->_player.enableControl(); - break; - } -} - -void Scene9200::process(Event &event) { - Scene::process(event); -} - -void Scene9200::dispatch() { -// Rect rect9200 = Rect(320, 175, 250, 154); - Rect rect9200 = Rect(250, 154, 320, 175); - - if (_action) { - _action->dispatch(); - } else { - if ( (_globals->_player._position.x <= 0) || ((_globals->_player._position.x < 100) && (_globals->_player._position.y > 199))) { - _globals->_player.disableControl(); - _sceneState = 9209; - setAction(&_sequenceManager, this, 9209, &_globals->_player, &_object2, &_object3, NULL); - } else { - if (rect9200.contains(_globals->_player._position)) { - if (_globals->getFlag(93)) { - if (_globals->getFlag(86)) { - _sceneState = 9215; - setAction(&_sequenceManager, this, 9215, &_globals->_player, &_object2, &_object3, NULL); - } else { - _sceneState = 9208; - setAction(&_sequenceManager, this, 9208, &_globals->_player, &_object2, &_object3, NULL); - } - } else { - _globals->_player.disableControl(); - _sceneState = 9204; - setAction(&_sequenceManager, this, 9204, &_globals->_player, &_object2, &_object3, NULL); - } - } else { - if (_globals->_player._position.y < 140) { - _globals->_player.disableControl(); - _sceneState = 9207; - setAction(&_sequenceManager, this, 9207, &_globals->_player, &_object2, &_object3, NULL); - } - } - } - } -} - -void Scene9200::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(130, 50, 200, 150); - - _globals->_player.postInit(); - _object3.postInit(); - _object3.hide(); - _object1.postInit(); - // Water animation - _object1.setVisage(9200); - _object1._strip = 3; - _object1.animate(ANIM_MODE_2, NULL); - _object1.setPosition(Common::Point(132, 114)); - _object1.fixPriority(140); - _soundHandler.play(297); - - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerGR); - _stripManager.addSpeaker(&_speakerGText); - - if (!_globals->getFlag(86)) { - _object2.postInit(); - _hotspot1.setup(96, 194, 160, 234, 9200, 29, 31); - } - _hotspot2.setup(164, 0, 200, 282, 9200, 0, 1); - _hotspot3.setup(140, 39, 165, 153, 9200, 2, 3); - _hotspot4.setup(92, 122, 139, 152, 9200, 4, 5); - _hotspot5.setup(33, 20, 142, 115, 9200, 6, 7); - _hotspot6.setup(104, 235, 153, 265, 9200, 8, 9); - _hotspot7.setup(107, 262, 153, 286, 9200, 10, 11); - _hotspot8.setup(69, 276, 164, 320, 9200, 12, 13); - - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player.disableControl(); - - switch (_globals->_sceneManager._previousScene) { - case 9500: - if (_globals->getFlag(85)) { - if (RING_INVENTORY._helmet._sceneNumber == 1) { - _globals->setFlag(86); - _globals->_player.disableControl(); - _sceneState = 9210; - setAction(&_sequenceManager, this, 9210, &_globals->_player, &_object2, &_object3, NULL); - } else { - _globals->_player.disableControl(); - _sceneState = 9212; - setAction(&_sequenceManager, this, 9212, &_globals->_player, &_object2, &_object3, NULL); - } - } else { - if (RING_INVENTORY._helmet._sceneNumber == 1) { - _globals->_player.disableControl(); - _sceneState = 9211; - setAction(&_sequenceManager, this, 9211, &_globals->_player, &_object2, &_object3, NULL); - } else { - _globals->_player.disableControl(); - _sceneState = 9202; - setAction(&_sequenceManager, this, 9202, &_globals->_player, &_object2, &_object3, NULL); - } - } - break; - case 9700: - if (_globals->getFlag(86)) { - _sceneState = 9206; - setAction(&_sequenceManager, this, 9206, &_globals->_player, &_object2, &_object3, NULL); - } else { - _sceneState = 9203; - setAction(&_sequenceManager, this, 9203, &_globals->_player, &_object2, &_object3, NULL); - } - break; - case 9360: - default: - if (_globals->getFlag(86)) { - _sceneState = 9205; - setAction(&_sequenceManager, this, 9205, &_globals->_player, &_object2, &_object3, NULL); - } else { - _sceneState = 9201; - setAction(&_sequenceManager, this, 9201, &_globals->_player, &_object2, &_object3, NULL); - } - break; - } -} - -/*-------------------------------------------------------------------------- - * Scene 9300 - Castle: In front of a large guarded door - * - *--------------------------------------------------------------------------*/ -void Scene9300::signal() { - switch (_sceneMode++) { - case 9301: - _globals->setFlag(84); - // No break on purpose - case 9303: - _globals->_soundHandler.play(295); - _globals->_sceneManager.changeScene(9350); - break; - case 9302: - _globals->_player.enableControl(); - break; - default: - break; - } -} - -void Scene9300::dispatch() { - if (_action) { - _action->dispatch(); - } else if (_globals->_player._position.y < 145) { - _globals->_player.disableControl(); - _sceneMode = 9303; - setAction(&_sequenceManager, this, 9303, &_globals->_player, &_object1, &_object2, NULL); - } -} - -void Scene9300::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(130, 75, 230, 150); - - _sceneMode = 0; - _globals->_player.postInit(); - _globals->_player.changeZoom(-1); - _object1.postInit(); - _object2.postInit(); - _globals->_soundHandler.play(289); - - _hotspot1.setup(35, 142, 76, 212, 9300, 0, 1); - _hotspot2.setup(28, 90, 81, 143, 9300, 2, 3); - _hotspot3.setup(78, 142, 146, 216, 9300, 4, 5); - _hotspot4.setup(3, 43, 91, 74, 9300, 6, 7); - _hotspot5.setup(82, 19, 157, 65, 9300, 8, 9); - _hotspot6.setup(5, 218, 84, 274, 9300, 10, 11); - _hotspot7.setup(86, 233, 168, 293, 9300, 12, 13); - _hotspot8.setup(157, 0, 200, 230, 9300, 14, 15); - _hotspot9.setup(169, 227, 200, 320, 9300, 16, 17); - _hotspot10.setup(145, 97, 166, 225, 9300, 18, 19); - _hotspot11.setup(81, 75, 145, 145, 9300, 20, 21); - _hotspot12.setup(0, 0, 94, 35, 9300, 22, 23); - _hotspot13.setup(12, 268, 149, 320, 9300, 24, 25); - - if (_globals->_sceneManager._previousScene == 9350) { - _globals->_player.disableControl(); - _sceneMode = 9302; - setAction(&_sequenceManager, this, 9302, &_globals->_player, &_object1, &_object2, NULL); - } else { - _globals->_player.disableControl(); - _sceneMode = 9301; - setAction(&_sequenceManager, this, 9301, &_globals->_player, &_object1, &_object2, NULL); - } -} - -/*-------------------------------------------------------------------------- - * Scene 9350 - Castle: In a hallway - * - *--------------------------------------------------------------------------*/ - -void Scene9350::signal() { - switch (_sceneState ++) { - case 0: - case 9352: - case 9353: - case 9354: - _globals->_player.enableControl(); - break; - case 9355: - _globals->_sceneManager.changeScene(9300); - break; - case 9356: - _globals->_sceneManager.changeScene(9360); - break; - case 9357: - case 9359: - _globals->_sceneManager.changeScene(9400); - break; - default: - break; - } -} - -void Scene9350::dispatch() { - if (_action == 0) { - if ((_globals->_player._position.x > 300) && (_globals->_player._position.y < 160)) { - _globals->_player.disableControl(); - _sceneState = 9356; - setAction(&_sequenceManager, this, 9356, &_globals->_player, &_object2, NULL); - } else if ((_globals->_player._position.x > 110) && (_globals->_player._position.y >= 195)) { - _globals->_player.disableControl(); - _sceneState = 9357; - setAction(&_sequenceManager, this, 9357, &_globals->_player, &_object2, NULL); - } else if ((_globals->_player._position.x < 10) || ((_globals->_player._position.x <= 110) && (_globals->_player._position.y >= 195))) { - _globals->_player.disableControl(); - _sceneState = 9355; - setAction(&_sequenceManager, this, 9355, &_globals->_player, &_object2, NULL); - } - } else { - Scene::dispatch(); - } -} - -void Scene9350::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(95, 80, 200, 100); - _globals->_player.postInit(); - - _object1.setup(9351, 1, 3, 139, 97, 0); - _sceneHotspot1.setup(42, 0, 97, 60, 9350, 0, -1); - _sceneHotspot2.setup(37, 205, 82, 256, 9350, 0, -1); - _sceneHotspot3.setup(29, 93, 92, 174, 9350, 1, -1); - _sceneHotspot4.setup(0, 308, 109, 320, 9350, 2, -1); - _sceneHotspot5.setup(0, 0, 200, 320, 9350, 3, -1); - - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player.disableControl(); - - if (_globals->_sceneManager._previousScene == 9360) { - _globals->_player.disableControl(); - _sceneState = 9352; - setAction(&_sequenceManager, this, 9352, &_globals->_player, &_object2, NULL); - } else if (_globals->_sceneManager._previousScene == 9400) { - _globals->_player.disableControl(); - _sceneState = 9353; - setAction(&_sequenceManager, this, 9353, &_globals->_player, &_object2, NULL); - } else { - if (_globals->getFlag(84)) { - _globals->clearFlag(84); - _object2.postInit(); - _globals->_player.disableControl(); - _sceneState = 9359; - setAction(&_sequenceManager, this, 9359, &_globals->_player, &_object2, NULL); - } else { - _globals->_player.disableControl(); - _sceneState = 9354; - setAction(&_sequenceManager, this, 9354, &_globals->_player, &_object2, NULL); - } - } -} - -/*-------------------------------------------------------------------------- - * Scene 9360 - Castle: In a hallway - * - *--------------------------------------------------------------------------*/ - -void Scene9360::signal() { - switch (_sceneState ++) { - case 0: - case 9362: - case 9363: - case 9364: - _globals->_player.enableControl(); - break; - case 9365: - _globals->_sceneManager.changeScene(9350); - break; - case 9366: - _globals->_sceneManager.changeScene(9200); - break; - case 9367: - _globals->_sceneManager.changeScene(9450); - break; - default: - break; - } -} - -void Scene9360::dispatch() { - if (_action == 0) { - if ((_globals->_player._position.x > 300) && (_globals->_player._position.y < 160)) { - _globals->_player.disableControl(); - _sceneState = 9366; - setAction(&_sequenceManager, this, 9366, &_globals->_player, NULL); - } else if ((_globals->_player._position.x > 110) && (_globals->_player._position.y >= 195)) { - _globals->_player.disableControl(); - _sceneState = 9367; - setAction(&_sequenceManager, this, 9367, &_globals->_player, NULL); - } else if ((_globals->_player._position.x < 10) || ((_globals->_player._position.x <= 110) && (_globals->_player._position.y >= 195))) { - _globals->_player.disableControl(); - _sceneState = 9365; - setAction(&_sequenceManager, this, 9365, &_globals->_player, NULL); - } - } else { - Scene::dispatch(); - } -} - -void Scene9360::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(95, 80, 200, 100); - _globals->_player.postInit(); - - _hotspot1.setup(37, 92, 93, 173, 9360, 0, 1); - _hotspot2.setup(42, 0, 100, 63, 9360, 2, -1); - _hotspot3.setup(36, 205, 82, 260, 9360, 3, -1); - _hotspot4.setup(103, 2, 200, 320, 9360, 4, -1); - _hotspot5.setup(0, 0, 37, 320, 9360, 4, -1); - _hotspot6.setup(35, 61, 103, 92, 9360, 4, -1); - _hotspot7.setup(33, 174, 93, 207, 9360, 4, -1); - _hotspot8.setup(28, 257, 149, 320, 9360, 4, -1); - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player.disableControl(); - if (_globals->_sceneManager._previousScene == 9350) { - _globals->_player.disableControl(); - _sceneState = 9364; - setAction(&_sequenceManager, this, 9364, &_globals->_player, NULL); - } else if (_globals->_sceneManager._previousScene == 9450) { - _globals->_player.disableControl(); - _sceneState = 9363; - setAction(&_sequenceManager, this, 9363, &_globals->_player, NULL); - } else { - _globals->_player.disableControl(); - _sceneState = 9362; - setAction(&_sequenceManager, this, 9362, &_globals->_player, NULL); - } - _object1.setup(9351, 1, 1, 131, 90, 0); -} - -/*-------------------------------------------------------------------------- - * Scene 9400 - Castle: Black-Smith room - * - *--------------------------------------------------------------------------*/ -Scene9400::Scene9400() { - _field1032 = 0; -} - -void Scene9400::SceneHotspot7::doAction(int action) { - Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene; - - if ((action == CURSOR_USE) && (RING_INVENTORY._straw._sceneNumber != 1)) { - scene->_sceneState = 1; - RING_INVENTORY._straw._sceneNumber = 1; - scene->setAction(&scene->_sequenceManager, scene, 9408, &_globals->_player, NULL); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9400::SceneHotspot8::doAction(int action) { - Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene; - - if (action == CURSOR_TALK) { - _globals->_player.disableControl(); - scene->_sceneState = 2; - scene->signal(); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9400::signal() { - switch (_sceneState ++) { - case 0: - _object1._numFrames = 6; - _stripManager.start(9400, this); - break; - case 1: - _object1._numFrames = 6; - _object1.animate(ANIM_MODE_2, NULL); - _globals->_player.enableControl(); - break; - case 2: - _object1.animate(ANIM_MODE_5, this); - break; - case 3: - _stripManager.start(9405, this); - break; - case 4: - _object1.animate(ANIM_MODE_2, this); - _globals->_player.enableControl(); - break; - case 9350: - _globals->_sceneManager.changeScene(9350); - break; - default: - break; - } -} - -void Scene9400::dispatch() { - if ((_object1._animateMode == 2) && (_object1._strip == 1) && (_object1._frame == 4)){ - if (_field1032 == 0) { - _soundHandler.play(296); - _field1032 = 1; - } - } else { - _field1032 = 0; - } - if (_action == 0) { - if (_globals->_player._position.y < 120) { - _sceneState = 9350; - _globals->_player.disableControl(); - setAction(&_action1); - Common::Point pt(-45, 88); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - } - } else { - Scene::dispatch(); - } -} - -void Scene9400::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - _screenNumber = 9400; - setZoomPercents(0, 100, 200, 100); - _globals->_player.postInit(); - _object1.postInit(); - _object3.postInit(); - _speakerQText._textPos.x = 20; - - _hotspot7.setup(157, 66, 180, 110, 9400, 21, 23); - _hotspot5.setup(130, 133, 152, 198, 9400, 22, -1); - _hotspot1.setup(33, 280, 69, 297, 9400, 1, 2); - _hotspot2.setup(73, 96, 87, 159, 9400, 3, 4); - _hotspot3.setup(89, 253, 111, 305, 9400, 5, 6); - _hotspot4.setup(46, 0, 116, 35, 9400, 7, 8); - _hotspot8.setup(58, 169, 122, 200, 9400, 9, 10); - _hotspot6.setup(0, 0, 199, 319, 9400, 16, 0); - - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerOR); - _stripManager.addSpeaker(&_speakerOText); - - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player.disableControl(); - - // Useless check (skipped) : if (_globals->_sceneManager._previousScene == 9350) - _sceneState = 2; - if (!_globals->getFlag(89)) { - _globals->setFlag(89); - _sceneState = 0; - } - - setAction(&_sequenceManager, this, 9400, &_globals->_player, &_object1, &_object3, NULL); -} - -void Scene9400::synchronize(Serializer &s) { - Scene::synchronize(s); - if (s.getVersion() >= 3) - s.syncAsSint16LE(_field1032); -} - -/*-------------------------------------------------------------------------- - * Scene 9450 - Castle: Dining room - * - *--------------------------------------------------------------------------*/ -void Scene9450::Object2::signal() { - Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene; - - this->setAction(&scene->_sequenceManager3, this, 9458, this, &scene->_object1, NULL); -} - -void Scene9450::Object3::dispatch() { - SceneObject::dispatch(); - _percent = (_percent * 20) / 30; -} - -void Scene9450::Hotspot1::doAction(int action) { - Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene; - - if (action == CURSOR_USE) { - if (scene->_object2._action) - scene->_object2._action->remove(); - scene->_sceneMode = 9459; - _globals->_player.disableControl(); - scene->setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &_globals->_player, NULL); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9450::Hotspot3::doAction(int action) { - Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_CLOAK: - case OBJECT_JACKET: - case OBJECT_TUNIC2: - scene->_sceneMode = 9460; - _globals->_player.disableControl(); - scene->setAction(&scene->_sequenceManager1, scene, 9460, &_globals->_player, &scene->_object2, &scene->_object1, NULL); - break; - case OBJECT_TUNIC: - SceneItem::display(9450, 49, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - break; - case CURSOR_WALK: - // nothing - break; - case CURSOR_LOOK: - SceneItem::display(9450, 41, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - break; - case CURSOR_USE: - case CURSOR_TALK: - if (RING_INVENTORY._tunic._sceneNumber == 9450) { - if (scene->_object2._action) - scene->_object2._action->remove(); - scene->_sceneMode = 9459; - _globals->_player.disableControl(); - scene->setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &_globals->_player, NULL); - } else if ((RING_INVENTORY._cloak._sceneNumber != 1) && (RING_INVENTORY._jacket._sceneNumber != 1) && (RING_INVENTORY._tunic2._sceneNumber != 1)) { - SceneItem::display(9450, 38, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } else { - scene->_sceneMode = 9460; - _globals->_player.disableControl(); - scene->setAction(&scene->_sequenceManager1, scene, 9460, &_globals->_player, &scene->_object2, &scene->_object1, NULL); - } - break; - default: - SceneItem::display(9450, 45, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - break; - } -} - -void Scene9450::signal() { - switch (_sceneMode++) { - case 1002: - case 1004: - // Drink - setAction(&_sequenceManager1, this, 9456, &_object2, &_object1, &_object3, NULL); - break; - case 1005: - // Bring me more wine - setAction(&_sequenceManager1, this, 9457, &_object2, &_object1, &_object3, NULL); - break; - case 9451: - if (_globals->getFlag(87)) { - _globals->_player.enableControl(); - } else { - _sceneMode = 1001; - if (_object2._action) - _object2._action->remove(); - // Eat - setAction(&_sequenceManager1, this, 9455, &_object2, &_object1, &_object3, NULL); - } - break; - case 1001: - case 1003: - // Eat - setAction(&_sequenceManager1, this, 9455, &_object2, &_object1, &_object3, NULL); - break; - case 9453: - _globals->_sceneManager.changeScene(9360); - break; - case 9459: - RING_INVENTORY._tunic._sceneNumber = 1; - _object2.signal(); - _globals->_player.enableControl(); - _globals->_events.setCursor(CURSOR_WALK); - _hotspot1.remove(); - break; - case 1006: - _globals->setFlag(87); - // No break on purpose - default: - _globals->_player.enableControl(); - break; - } -} - -void Scene9450::dispatch() { - if (_action) { - _action->dispatch(); - } else { - if ((_globals->_player._position.y < 98) && (_globals->_player._position.x > 241) && (_globals->_player._position.x < 282)) { - _globals->_player.disableControl(); - _sceneMode = 9452; - setAction(&_sequenceManager1, this, 9452, &_globals->_player, NULL); - } else if ((_globals->_player._position.y < 99) && (_globals->_player._position.x > 68) && (_globals->_player._position.x < 103)) { - _globals->_player.disableControl(); - _sceneMode = 9453; - setAction(&_sequenceManager1, this, 9453, &_globals->_player, NULL); - } - } -} - -void Scene9450::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(84, 75, 167, 150); - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player.postInit(); - - _object2.postInit(); - _object1.postInit(); - _object1.hide(); - - _globals->_player.disableControl(); - _sceneMode = 9451; - setAction(&_sequenceManager1, this, 9451, &_globals->_player, NULL); - - if (_globals->getFlag(87)) { - if (RING_INVENTORY._tunic._sceneNumber == 1) { - _object2.signal(); - } else { - _object2.setPosition(Common::Point(184, 144)); - _object2.setVisage(9451); - _object2.fixPriority(250); - _object2._strip = 5; - _object2._frame = 10; - } - } else { - _object3.postInit(); - _object3.hide(); - _object3.setAction(&_sequenceManager2, NULL, 9455, &_object2, &_object1, NULL); - } - - if (RING_INVENTORY._tunic._sceneNumber != 1) - _hotspot1.setup(123, 139, 138, 170, 9450, 37, -1); - - _hotspot2.setup(153, 102, 176, 141, 9450, 39, 40); - _hotspot3.setup(97, 198, 130, 229, 9450, 41, 42); - _hotspot15.setup(131, 190, 145, 212, 9450, 43, 44); - _hotspot4.setup(33, 144, 105, 192, 9450, 0, 1); - _hotspot5.setup(20, 236, 106, 287, 9450, 2, 3); - _hotspot6.setup(137, 119, 195, 320, 9450, 4, 5); - _hotspot7.setup(20, 59, 99, 111, 9450, 6, -1); - _hotspot8.setup(110, 0, 199, 117, 9450, 7, 8); - _hotspot9.setup(101, 104, 130, 174, 9450, 9, 10); - _hotspot10.setup(110, 246, 149, 319, 9450, 11, 12); - _hotspot11.setup(16, 34, 74, 62, 6450, 13, 14); - _hotspot12.setup(19, 108, 72, 134, 9450, 15, 16); - _hotspot13.setup(18, 215, 71, 237, 9450, 17, 18); - _hotspot14.setup(15, 288, 76, 314, 9450, 19, 20); - _hotspot16.setup(0, 0, 200, 320, 9450, 46, -1); -} - -/*-------------------------------------------------------------------------- - * Scene 9500 - Castle: Bedroom - * - *--------------------------------------------------------------------------*/ -void Scene9500::Hotspot1::doAction(int action) { - Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene; - - if (action == OBJECT_SWORD) { - scene->_sceneMode = 9510; - _globals->setFlag(92); - RING_INVENTORY._sword._sceneNumber = 9500; - _globals->_player.disableControl(); - _globals->_sceneItems.remove(this); - scene->_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); - scene->setAction(&scene->_sequenceManager, scene, 9510, &_globals->_player, &scene->_object2, NULL); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9500::Hotspot2::doAction(int action) { - Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene; - - if (action == CURSOR_USE) { - scene->_sceneMode = 9511; - _globals->_player.disableControl(); - _globals->_sceneItems.remove(this); - scene->setAction(&scene->_sequenceManager, scene, 9511, &_globals->_player, &scene->_object2, NULL); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9500::Hotspot3::doAction(int action) { - Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene; - - if ((action == CURSOR_USE) && (RING_INVENTORY._candle._sceneNumber != 1)){ - scene->_sceneMode = 9505; - _globals->_player.disableControl(); - _globals->_sceneItems.remove(this); - scene->setAction(&scene->_sequenceManager, scene, 9505, &_globals->_player, &scene->_candle, NULL); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9500::Hotspot4::doAction(int action) { - Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene; - - if (action == OBJECT_CANDLE) { - _globals->_player.disableControl(); - if (RING_INVENTORY._straw._sceneNumber == 9500) { - scene->_sceneMode = 9506; - _globals->_sceneItems.remove(&scene->_hotspot5); - _globals->_sceneItems.remove(this); - scene->setAction(&scene->_sequenceManager, scene, 9506, &_globals->_player, &scene->_object3, NULL); - RING_INVENTORY._candle._sceneNumber = 9850; - } else { - scene->_sceneMode = 9507; - scene->setAction(&scene->_sequenceManager, scene, 9507, &_globals->_player, &scene->_object3, NULL); - } - } else if (action == OBJECT_STRAW) { - scene->_sceneMode = 9512; - _globals->_player.disableControl(); - RING_INVENTORY._straw._sceneNumber = 9500; - scene->setAction(&scene->_sequenceManager, scene, 9512, &_globals->_player, &scene->_object3, NULL); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9500::signal() { - switch (_sceneMode) { - case 9503: - _globals->_sceneManager.changeScene(9200); - _globals->_soundHandler.play(295); - break; - case 9504: - _globals->_sceneManager.changeScene(9850); - break; - case 9505: - _candle.setStrip(2); - RING_INVENTORY._candle._sceneNumber = 1; - _globals->_player.enableControl(); - break; - case 9506: - _globals->setFlag(85); - _globals->_player.enableControl(); - break; - case 9511: - RING_INVENTORY._helmet._sceneNumber = 1; - _globals->_player.enableControl(); - if (!_globals->getFlag(51)) { - _globals->setFlag(51); - _globals->_player.disableControl(); - _sceneMode = 9514; - setAction(&_sequenceManager, this, 9514, &_globals->_player, NULL, NULL, NULL, NULL); - } - break; - case 0: - case 9514: - default: - _globals->_player.enableControl(); - break; - } -} - -void Scene9500::dispatch() { - if (_action) { - _action->dispatch(); - } else { - if (_globals->_player._position.y >= 199) { - _globals->_player.disableControl(); - _sceneMode = 9503; - setAction(&_sequenceManager, this, 9503, &_globals->_player, NULL, NULL, NULL, NULL); - } else if (_globals->_player._position.y < 127) { - _globals->_player.disableControl(); - _sceneMode = 9504; - setAction(&_sequenceManager, this, 9504, &_globals->_player, NULL, NULL, NULL, NULL); - } - } - -} - -void Scene9500::process(Event &event) { - Scene::process(event); -} - -void Scene9500::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(110, 75, 200, 150); - - _globals->_player.postInit(); - _globals->_soundHandler.play(305); - - _candle.postInit(); - _candle.setVisage(9500); - _candle.setStrip(1); - _candle.animate(ANIM_MODE_2); - _candle.setPosition(Common::Point(30, 105)); - if (RING_INVENTORY._candle._sceneNumber != 9500) - _candle.setStrip(2); - - _object3.postInit(); - _object3.hide(); - _object3.fixPriority(150); - _object3.setPosition(Common::Point(166, 133)); - if (RING_INVENTORY._straw._sceneNumber == 9500) { - _object3.show(); - _object3.setVisage(5); - _object3._strip = 2; - _object3._frame = 9; - _object3.setPosition(Common::Point(168, 128)); - if (_globals->getFlag(85)) { - _object3.setVisage(9500); - _object3.setStrip(4); - _object3.animate(ANIM_MODE_8, 0, NULL); - _object3.setPosition(Common::Point(166, 133)); - } - } - - _object2.postInit(); - _object2.hide(); - if (_globals->getFlag(92)) { - _object2.show(); - _object2.setVisage(9501); - _object2.setStrip(1); - _object2.setFrame(_object2.getFrameCount()); - _object2.setPosition(Common::Point(303, 130)); - _object2.fixPriority(132); - if (RING_INVENTORY._helmet._sceneNumber == 1) { - _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); - } else { - _object2.setStrip(2); - _object2.setFrame(1); - } - } else { - _hotspot1.setup(105, 295, 134, 313, 9500, 9, 10); - } - - _hotspot17.setup(101, 293, 135, 315, 9500, 9, 10); - _hotspot3.setup(84, 12, 107, 47, 9500, 15, 15); - _hotspot6.setup(93, 11, 167, 46, 9500, 0, 1); - _hotspot7.setup(100, 70, 125, 139, 9500, 2, 3); - - if (!_globals->getFlag(85)) { - _hotspot5.setup(111, 68, 155, 244, 9500, 17, -1); - _hotspot4.setup(57, 71, 120, 126, 9500, 16, -1); - } - - _hotspot8.setup(60, 24, 90, 53, 9500, 4, 5); - _hotspot9.setup(72, 143, 93, 163, 9500, 4, 5); - _hotspot10.setup(70, 205, 92, 228, 9500, 4, 5); - _hotspot11.setup(66, 291, 90, 317, 9500, 4, 5); - _hotspot12.setup(22, 58, 101, 145, 9500, 6, 7); - _hotspot13.setup(121, 57, 163, 249, 9500, 6, 7); - _hotspot14.setup(115, 133, 135, 252, 9500, 6, 7); - _hotspot15.setup(55, 240, 125, 254, 9500, 6, 7); - _hotspot16.setup(53, 251, 132, 288, 9500, 8, -1); - _hotspot19.setup(101, 207, 120, 225, 9500, 9, 10); - _hotspot18.setup(98, 144, 117, 162, 9500, 9, 10); - _hotspot20.setup(102, 27, 132, 50, 9500, 9, 10); - - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player.disableControl(); - - if ((_globals->_sceneManager._previousScene == 9200) || (_globals->_sceneManager._previousScene != 9850)) { - _sceneMode = 0; - if (RING_INVENTORY._helmet._sceneNumber != 1) { - setAction(&_sequenceManager, this, 9501, &_globals->_player, &_candle, NULL); - } else { - RING_INVENTORY._helmet._sceneNumber = 9500; - _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1); - setAction(&_sequenceManager, this, 9513, &_globals->_player, &_object2, NULL); - } - } else { - _sceneMode = 0; - setAction(&_sequenceManager, this, 9502, &_globals->_player, &_candle, NULL); - } -} - -/*-------------------------------------------------------------------------- - * Scene 9700 - Castle: Balcony - * - *--------------------------------------------------------------------------*/ -void Scene9700::signal() { - switch (_sceneMode ++) { - case 9703: - _globals->setFlag(88); - // No break on purpose - case 9701: - case 9702: - _gfxButton1.setText(EXIT_MSG); - _gfxButton1._bounds.center(50, 190); - _gfxButton1.draw(); - _gfxButton1._bounds.expandPanes(); - _globals->_player.enableControl(); - _globals->_player._canWalk = false; - _globals->_events.setCursor(CURSOR_USE); - break; - case 9704: - _globals->_soundHandler.play(323); - _globals->_sceneManager.changeScene(9750); - break; - } -} - -void Scene9700::process(Event &event) { - Scene::process(event); - if ((event.eventType == EVENT_BUTTON_DOWN) && !_action) { - if (_gfxButton1.process(event)) { - _globals->_sceneManager.changeScene(9200); - } else if (_globals->_events._currentCursor == OBJECT_SCANNER) { - event.handled = true; - if (RING_INVENTORY._helmet._sceneNumber == 1) { - _globals->_player.disableControl(); - _sceneMode = 9704; - setAction(&_sequenceManager, this, 9704, &_globals->_player, &_object1, NULL); - } else { - _globals->_player.disableControl(); - _sceneMode = 9703; - setAction(&_sequenceManager, this, 9703, &_globals->_player, &_object1, NULL); - } - } - } -} - -void Scene9700::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _sceneHotspot1.setup(84, 218, 151, 278, 9700, 14, -1); - _sceneHotspot2.setup(89, 11, 151, 121, 9700, 14, -1); - _sceneHotspot3.setup(69, 119, 138, 216, 9700, 15, 16); - _sceneHotspot4.setup(34, 13, 88, 116, 9700, 17, -1); - _sceneHotspot5.setup(52, 119, 68, 204, 9700, 17, -1); - _sceneHotspot6.setup(0, 22, 56, 275, 9700, 18, -1); - - _object1.postInit(); - _object1.hide(); - _globals->_player.postInit(); - if (!_globals->getFlag(97)) { - _globals->_player.disableControl(); - _sceneMode = 9701; - setAction(&_sequenceManager, this, 9701, &_globals->_player, &_object1, NULL); - _globals->setFlag(97); - } else { - _globals->_player.disableControl(); - _sceneMode = 9702; - setAction(&_sequenceManager, this, 9702, &_globals->_player, &_object1, NULL); - } -} - -/*-------------------------------------------------------------------------- - * Scene 9750 - Castle: In the garden - * - *--------------------------------------------------------------------------*/ -void Scene9750::signal() { - switch (_sceneMode ++) { - case 9751: - _globals->_soundHandler.fadeOut(this); - break; - case 9752: - _globals->_sceneManager.changeScene(2100); - default: - break; - } -} - -void Scene9750::dispatch() { - Scene::dispatch(); -} - -void Scene9750::postInit(SceneObjectList *OwnerList) { - loadScene(9750); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _globals->_player.postInit(); - _object1.postInit(); - _object1.hide(); - _object2.postInit(); - _object2.hide(); - _globals->_player.disableControl(); - _sceneMode = 9751; - setAction(&_sequenceManager, this, 9751, &_globals->_player, &_object1, &_object2, NULL); -} - - -/*-------------------------------------------------------------------------- - * Scene 9850 - Castle: Dressing room - * - *--------------------------------------------------------------------------*/ -void Scene9850::Object6::doAction(int action) { - if ((_flags & OBJFLAG_HIDE) == 0) { - if (action == CURSOR_LOOK) { - SceneItem::display(9850, 27, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } else if (action == CURSOR_USE) { - RING_INVENTORY._scimitar._sceneNumber = 1; - hide(); - } else { - SceneHotspot::doAction(action); - } - } -} -void Scene9850::Object7::doAction(int action) { - if ((_flags & OBJFLAG_HIDE) == 0) { - if (action == CURSOR_LOOK) { - SceneItem::display(9850, 28, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } else if (action == CURSOR_USE) { - RING_INVENTORY._sword._sceneNumber = 1; - hide(); - } else { - SceneHotspot::doAction(action); - } - } -} - -// Hair covered tunic -void Scene9850::Hotspot12::doAction(int action) { - Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; - - if (action == CURSOR_USE) { - if (RING_INVENTORY._tunic2._sceneNumber != 1) { - RING_INVENTORY._tunic2._sceneNumber = 1; - _globals->_player.disableControl(); - scene->_sceneMode = 9858; - scene->setAction(&scene->_sequenceManager, scene, 9858, &_globals->_player, &scene->_objTunic2, NULL); - } else { - RING_INVENTORY._tunic2._sceneNumber = 9850; - _globals->_player.disableControl(); - scene->_sceneMode = 9861; - scene->setAction(&scene->_sequenceManager, scene, 9861, &_globals->_player, &scene->_objTunic2, NULL); - } - } else if ((action != CURSOR_LOOK) || (RING_INVENTORY._tunic2._sceneNumber != 1)) { - NamedHotspot::doAction(action); - } else { - SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } -} - -void Scene9850::Hotspot14::doAction(int action) { - Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; - - if (action == CURSOR_USE) { - if (RING_INVENTORY._jacket._sceneNumber != 1) { - RING_INVENTORY._jacket._sceneNumber = 1; - _globals->_player.disableControl(); - scene->_sceneMode = 9857; - scene->setAction(&scene->_sequenceManager, scene, 9857, &_globals->_player, &scene->_objJacket, NULL); - } else { - RING_INVENTORY._jacket._sceneNumber = 9850; - _globals->_player.disableControl(); - scene->_sceneMode = 9860; - scene->setAction(&scene->_sequenceManager, scene, 9860, &_globals->_player, &scene->_objJacket, NULL); - } - } else if ((action != CURSOR_LOOK) || (RING_INVENTORY._jacket._sceneNumber != 1)) { - NamedHotspot::doAction(action); - } else { - SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } -} - -void Scene9850::Hotspot16::doAction(int action) { - Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; - - if (action == CURSOR_USE) { - if (RING_INVENTORY._cloak._sceneNumber != 1) { - RING_INVENTORY._cloak._sceneNumber = 1; - _globals->_player.disableControl(); - scene->_sceneMode = 9862; - scene->setAction(&scene->_sequenceManager, scene, 9862, &_globals->_player, &scene->_objCloak, NULL); - } else { - RING_INVENTORY._cloak._sceneNumber = 9850; - _globals->_player.disableControl(); - scene->_sceneMode = 9859; - scene->setAction(&scene->_sequenceManager, scene, 9859, &_globals->_player, &scene->_objCloak, NULL); - } - } else if ((action != CURSOR_LOOK) || (RING_INVENTORY._cloak._sceneNumber != 1)) { - NamedHotspot::doAction(action); - } else { - SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } -} - -void Scene9850::Hotspot17::doAction(int action) { - Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; - - if (action == OBJECT_SCANNER) { - SceneItem::display(9850, 32, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } else { - if (action == CURSOR_USE) - scene->_soundHandler.play(306); - NamedHotspot::doAction(action); - } -} - -void Scene9850::Hotspot18::doAction(int action) { - Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; - - if (action == OBJECT_SCANNER) { - SceneItem::display(9850, 32, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } else { - if (action == CURSOR_USE) - scene->_soundHandler.play(306); - NamedHotspot::doAction(action); - } -} - -void Scene9850::Hotspot19::doAction(int action) { - Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; - - if (action == OBJECT_SCANNER) { - SceneItem::display(9850, 31, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); - } else { - if (action == CURSOR_USE) - scene->_soundHandler.play(313); - NamedHotspot::doAction(action); - } -} - -// Arrow on Statue -void Scene9850::Hotspot20::doAction(int action) { - Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene; - - if (action == CURSOR_USE) { - _globals->_player.disableControl(); - if (scene->_objSword._state == 0) { - if (RING_INVENTORY._scimitar._sceneNumber == 9850) - scene->_objScimitar.show(); - if (RING_INVENTORY._sword._sceneNumber == 9850) - scene->_objSword.show(); - scene->_sceneMode = 11; - setAction(&scene->_sequenceManager, scene, 9853, &_globals->_player, &scene->_objDoor, &scene->_objLever, NULL); - } else { - scene->_sceneMode = 10; - setAction(&scene->_sequenceManager, scene, 9854, &_globals->_player, &scene->_objDoor, &scene->_objLever, NULL); - } - scene->_objSword._state ^= 1; - } else { - NamedHotspot::doAction(action); - } -} - -void Scene9850::signal() { - switch (_sceneMode ++) { - case 10: - // Hidden closet closed - if (RING_INVENTORY._scimitar._sceneNumber == 9850) - _objScimitar.hide(); - if (RING_INVENTORY._sword._sceneNumber == 9850) - _objSword.hide(); - _globals->_sceneItems.remove(&_objScimitar); - _globals->_sceneItems.remove(&_objSword); - _globals->_sceneItems.addItems(&_hotspot19, NULL); - _globals->_player.enableControl(); - break; - case 11: - // Hidden closet opened - if (RING_INVENTORY._scimitar._sceneNumber == 9850) - _globals->_sceneItems.addItems(&_objScimitar, NULL); - if (RING_INVENTORY._sword._sceneNumber == 9850) - _globals->_sceneItems.addItems(&_objSword, NULL); - _globals->_sceneItems.remove(&_hotspot19); - _globals->_player.enableControl(); - break; - case 9500: - _globals->_sceneManager.changeScene(_sceneMode - 1); - break; - case 0: - default: - _globals->_player.enableControl(); - break; - } -} - -void Scene9850::process(Event &event) { - Scene::process(event); - if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_4)) { - event.handled = true; - _globals->_player.disableControl(); - if (_objSword._state == 0) { - _sceneMode = 0; - setAction(&_sequenceManager, this, 9853, &_objLever, &_objDoor, &_objScimitar, &_objSword, NULL); - } else { - _sceneMode = 10; - setAction(&_sequenceManager, this, 9854, &_objLever, &_objDoor, &_objScimitar, &_objSword, NULL); - } - _objSword._state ^= 1; - } -} - -void Scene9850::dispatch() { - if (_action) { - _action->dispatch(); - } else if (_globals->_player._position.y >= 198) { - _globals->_player.disableControl(); - _sceneMode = 9500; - setAction(&_sequenceManager, this, 9852, &_globals->_player, NULL); - } -} - -void Scene9850::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - _objSword._state = 0; - - _objDoor.postInit(); - _objDoor.setVisage(9850); - _objDoor.setStrip(1); - _objDoor.setFrame(1); - _objDoor.setPosition(Common::Point(28, 118)); - _objDoor.fixPriority(90); - - _objLever.postInit(); - _objLever.setVisage(9850); - _objLever.setStrip(4); - _objLever.setFrame(1); - _objLever.setPosition(Common::Point(256, 35)); - - _objCloak.postInit(); - _objCloak.setVisage(9850); - _objCloak.setStrip(5); - _objCloak.setFrame(1); - _objCloak.fixPriority(90); - _objCloak.setPosition(Common::Point(157, 81)); - if (RING_INVENTORY._cloak._sceneNumber != 9850) - _objCloak.hide(); - - _objJacket.postInit(); - _objJacket.setVisage(9850); - _objJacket.setStrip(5); - _objJacket.setFrame(2); - _objJacket.fixPriority(90); - _objJacket.setPosition(Common::Point(201, 84)); - if (RING_INVENTORY._jacket._sceneNumber != 9850) - _objJacket.hide(); - - _objTunic2.postInit(); - _objTunic2.setVisage(9850); - _objTunic2.setStrip(5); - _objTunic2.setFrame(3); - _objTunic2.fixPriority(90); - _objTunic2.setPosition(Common::Point(295, 90)); - if (RING_INVENTORY._tunic2._sceneNumber != 9850) - _objTunic2.hide(); - - if (RING_INVENTORY._scimitar._sceneNumber == 9850) { - _objScimitar.postInit(); - _objScimitar.setVisage(9850); - _objScimitar.setStrip(2); - _objScimitar.setFrame(1); - _objScimitar.setPosition(Common::Point(55, 83)); - _objScimitar.fixPriority(80); - _objScimitar.hide(); - } - - if (RING_INVENTORY._sword._sceneNumber == 9850) { - _objSword.postInit(); - _objSword.setVisage(9850); - _objSword.setStrip(3); - _objSword.setFrame(1); - _objSword.setPosition(Common::Point(56, 101)); - _objSword.fixPriority(80); - _objSword.hide(); - } - - _spotLever.setup(30, 251, 45, 270, 9850, 26, -1); - _hotspot1.setup(123, 0, 200, 320, 9850, 0, 1); - _hotspot2.setup(107, 87, 133, 308, 9850, 0, 1); - _hotspot3.setup(2, 28, 53, 80, 9850, 2, 3); - _hotspot4.setup(13, 0, 55, 27, 9850, 2, 3); - _hotspot5.setup(8, 74, 27, 91, 9850, 4, 5); - _hotspot17.setup(61, 0, 125, 28, 9850, 6, 7); - _hotspot18.setup(51, 95, 105, 145, 9850, 6, 7); - _hotspot19.setup(56, 28, 115, 97, 9850, 6, 8); - _hotspot6.setup(0, 223, 115, 257, 9850, 9, 10); - _hotspot7.setup(15, 254, 33, 268, 9850, 9, -1); - _hotspot8.setup(17, 218, 37, 233, 9850, 9, 10); - _hotspot9.setup(8, 113, 26, 221, 9850, 11, 12); - _hotspot10.setup(14, 94, 53, 112, 9850, 13, 14); - _hotspot11.setup(5, 269, 29, 303, 9850, 15, 16); - _hotspot12.setup(43, 278, 91, 317, 9850, 17, 18); - _hotspot13.setup(47, 263, 112, 282, 9850, 19, 20); - _hotspot14.setup(43, 188, 86, 224, 9850, 21, 22); - _hotspot15.setup(43, 162, 92, 191, 9850, 23, 24); - _hotspot16.setup(40, 146, 90, 169, 9850, 25, -1); - - _globals->_player.postInit(); - _globals->_player.disableControl(); - _sceneMode = 0; - setAction(&_sequenceManager, this, 9851, &_globals->_player, NULL); -} - -/*-------------------------------------------------------------------------- - * Scene 9900 - Ending - * - *--------------------------------------------------------------------------*/ -void Scene9900::strAction1::signal() { - const byte mask1[3] = {0xff, 0xff, 0xff}; - const byte mask2[3] = {0, 0, 0}; - - Scene9900 *scene = (Scene9900 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_soundHandler.play(351); - _object9.postInit(); - _object9.setVisage(18); - _object9._frame = 1; - _object9._strip = 6; - _object9.fixPriority(250); - _object9.setPosition(Common::Point(171, 59)); - _object9.animate(ANIM_MODE_5, NULL); - _globals->_scenePalette.addRotation(67, 111, 1, 1, this); - scene->_object2.hide(); - break; - case 1: - _palette1.getPalette(); - _globals->_scenePalette.addFader(&mask1[0], 1, 10, this); - break; - case 2: - _object9.remove(); - _globals->_scenePalette.addFader(&mask2[0], 1, 5, this); - break; - case 3: - _globals->_soundHandler.play(377); - setDelay(120); - break; - case 4: - _globals->_scenePalette.addFader(_palette1._palette, 256, 1, this); - break; - case 5: - remove(); - break; - default: - break; - } -} - -void Scene9900::strAction2::signal() { - switch (_actionIndex++) { - case 0: - _lineNum = 0; - _txtArray1Index = 0; - _txtArray1[0]._position.y = 200; - _txtArray1[1]._position.y = 300; - _txtArray2[0]._position.y = 400; - _txtArray2[1]._position.y = 500; - _var3 = 0; - // No break on purpose - case 1: { - Common::String msg = _resourceManager->getMessage(8030, _lineNum++); - if (msg.compareTo("LASTCREDIT")) { - if (_var3) { - // Not used? - // int x = _txtArray1[_txtArray1Index].getFrame().getBounds().height(); - _txtArray1[_txtArray1Index]._moveDiff.y = 10; - - NpcMover *mover = new NpcMover(); - Common::Point pt(_txtArray1[_txtArray1Index]._position.x, -100); - _txtArray1[_txtArray1Index].addMover(mover, &pt, NULL); - - // Not used? - // int x = _txtArray2[_txtArray1Index].getFrame().getBounds().height(); - _txtArray2[_txtArray1Index]._moveDiff.y = 10; - _txtArray1Index = (_txtArray1Index + 1) % 2; - } - _var3 = 1; - _txtArray1[_txtArray1Index]._textMode = ALIGN_CENTER; - _txtArray1[_txtArray1Index]._width = 240; - _txtArray1[_txtArray1Index]._fontNumber = 2; - _txtArray1[_txtArray1Index]._color1 = 7; - _txtArray1[_txtArray1Index].setup(msg); - _txtArray1[_txtArray1Index]._moveRate = 20; - _txtArray1[_txtArray1Index]._moveDiff.y = 2; - _txtArray1[_txtArray1Index].fixPriority(255); - int frameWidth = _txtArray1[_txtArray1Index].getFrame().getBounds().width(); - int frameHeight = _txtArray1[_txtArray1Index].getFrame().getBounds().height(); - _txtArray1[_txtArray1Index].setPosition(Common::Point((320 - frameWidth) / 2, 200)); - - NpcMover *mover2 = new NpcMover(); - Common::Point pt2(_txtArray1[_txtArray1Index]._position.x, 100); - _txtArray1[_txtArray1Index].addMover(mover2, &pt2, this); - - _txtArray2[_txtArray1Index]._textMode = ALIGN_CENTER; - _txtArray2[_txtArray1Index]._width = 240; - _txtArray2[_txtArray1Index]._fontNumber = 2; - _txtArray2[_txtArray1Index]._color1 = 23; - - msg = _resourceManager->getMessage(8030, _lineNum++); - _txtArray2[_txtArray1Index].setup(msg); - _txtArray2[_txtArray1Index]._moveRate = 20; - _txtArray2[_txtArray1Index]._moveDiff.y = 2; - _txtArray2[_txtArray1Index].fixPriority(255); - frameWidth = _txtArray2[_txtArray1Index].getFrame().getBounds().width(); - _txtArray2[_txtArray1Index].setPosition(Common::Point((320 - frameWidth) / 2, 200 + frameHeight)); - } else { - // WORKAROUND: Fix inventory becoming available at end of credits - _globals->_events.setCursor(CURSOR_WALK); - _actionIndex = 3; - signal(); - } - break; - } - case 2: - setDelay(60); - _actionIndex = 1; - break; - case 3: - setDelay(7200); - break; - case 4: - _txtArray1[0].remove(); - _txtArray1[1].remove(); - _txtArray2[0].remove(); - _txtArray2[1].remove(); - remove(); - break; - default: - break; - } -} -void Scene9900::strAction2::dispatch() { -// if (this->_txtArray1[0]._textSurface != 0) { - int frameHeight = _txtArray1[0].getFrame().getBounds().height(); - _txtArray2[0]._position.y = frameHeight + _txtArray1[0]._position.y; - _txtArray2[0]._flags |= OBJFLAG_PANES; -// } -// if (this->_txtArray1[1]._textSurface != 0) { - frameHeight = _txtArray1[1].getFrame().getBounds().height(); - _txtArray2[1]._position.y = frameHeight + _txtArray1[1]._position.y; - _txtArray2[1]._flags |= OBJFLAG_PANES; -// } - Action::dispatch(); -} - -void Scene9900::strAction2::synchronize(Serializer &s) { - Action::synchronize(s); - if (s.getVersion() >= 3) { - s.syncAsSint16LE(_lineNum); - s.syncAsSint16LE(_txtArray1Index); - s.syncAsSint16LE(_var3); - } -} - -void Scene9900::strAction3::signal() { - const byte mask3[3] = {0xff, 0, 0}; - const byte mask4[3] = {0, 0, 0}; - - switch (_actionIndex++) { - case 0: - _palette2.getPalette(); - _palette3.loadPalette(2003); - _globals->_scenePalette.addFader(_palette3._palette, 256, 5, this); - break; - case 1: - _globals->_scenePalette.addFader(&mask3[0], 1, 10, this); - break; - case 2: - _globals->_scenePalette.addFader(&mask4[0], 1, 1, this); - break; - case 3: - _palette2.loadPalette(17); - _globals->_sceneManager._scene->loadScene(17); - _globals->_scenePalette.addFader(_palette2._palette, 256, 5, this); - break; - case 4: - _globals->_game->endGame(9900, 61); - remove(); - default: - break; - } -} - -void Scene9900::signal() { - if ((_sceneMode != 9913) && (_sceneMode != 9905) && (_sceneMode != 9904) && (_sceneMode != 9912)) { - _object1.hide(); - _object2.hide(); - _object3.hide(); - _object4.hide(); - _object5.hide(); - _object6.hide(); - } - - _object1.animate(ANIM_MODE_NONE, NULL); - _object2.animate(ANIM_MODE_NONE, NULL); - _object3.animate(ANIM_MODE_NONE, NULL); - _object4.animate(ANIM_MODE_NONE, NULL); - _object5.animate(ANIM_MODE_NONE, NULL); - _object6.animate(ANIM_MODE_NONE, NULL); - - _object1.setObjectWrapper(NULL); - _object2.setObjectWrapper(NULL); - _object3.setObjectWrapper(NULL); - _object4.setObjectWrapper(NULL); - _object5.setObjectWrapper(NULL); - _object6.setObjectWrapper(NULL); - - _object1.addMover(NULL); - _object2.addMover(NULL); - _object3.addMover(NULL); - _object4.addMover(NULL); - _object5.addMover(NULL); - _object6.addMover(NULL); - - switch (_sceneMode){ - case 150: - _globals->_soundHandler.play(380); - _object8.postInit(); - _object8.setVisage(2002); - _object8.setStrip(1); - _object8.setFrame(1); - _object8.fixPriority(200); - _object8.setPosition(Common::Point(64, 199)); - _globals->_player.disableControl(); - _sceneMode = 9908; - setAction(&_sequenceManager, this, 9908, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - break; - case 162: - warning("TBC: shutdown();"); - _globals->_game->quitGame(); - break; - case 9901: - _globals->_player.disableControl(); - _sceneMode = 9906; - setAction(&_sequenceManager, this, 9906, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - _globals->_player._uiEnabled = true; - _globals->_events.setCursor(CURSOR_USE); - break; - case 9902: - _globals->_player.disableControl(); - _sceneMode = 9901; - setAction(&_sequenceManager, this, 9901, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - break; - case 9903: - _globals->_player.disableControl(); - _sceneMode = 9902; - setAction(&_sequenceManager, this, 9902, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - break; - case 9904: - _globals->_soundHandler.play(390); - _sceneMode = 9912; - setAction(&_strAction2, this); - break; - case 9905: - _sceneMode = 150; - setAction(&_strAction1, this); - break; - case 9906: - if (_object8._state == 0) { - _globals->_player.disableControl(); - _sceneMode = 9913; - setAction(&_sequenceManager, this, 9913, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - } else { - _globals->_player.disableControl(); - _sceneMode = 9905; - setAction(&_sequenceManager, this, 9905, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - } - break; - case 9907: - _globals->_player.disableControl(); - _sceneMode = 9903; - setAction(&_sequenceManager, this, 9903, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - break; - case 9908: - _object8.remove(); - _globals->_player.disableControl(); - _sceneMode = 9904; - setAction(&_sequenceManager, this, 9904, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - break; - case 9909: - _globals->_soundHandler.play(375); - _globals->_player.disableControl(); - _sceneMode = 9907; - setAction(&_sequenceManager, this, 9907, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - break; - case 9910: - _globals->_player.disableControl(); - _sceneMode = 9911; - setAction(&_sequenceManager, this, 9911, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - break; - case 9911: - _globals->_soundHandler.play(367); - _globals->_player.disableControl(); - _sceneMode = 9909; - setAction(&_sequenceManager, this, 9909, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - break; - case 9912: - _globals->_player.disableControl(); - _sceneMode = 9912; - setAction(&_sequenceManager, this, 9912, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); - _sceneMode = 162; - _globals->_player.enableControl(); - _globals->_player._canWalk = false; - break; - case 9913: - _sceneMode = 200; - setAction(&_strAction3, this); - break; - default: - break; - } -} - -void Scene9900::process(Event &event) { - if (event.handled) - return; - Scene::process(event); - if (_sceneMode == 9906) { - if ((event.eventType == EVENT_BUTTON_DOWN) && (_globals->_events.getCursor() == OBJECT_ITEMS)) { - _object8._state = 1; - RING_INVENTORY._items._sceneNumber = 9900; - _globals->_events.setCursor(CURSOR_USE); - } - } -} - -void Scene9900::dispatch() { - if (_action) - _action->dispatch(); -} - -void Scene9900::postInit(SceneObjectList *OwnerList) { - _object1.postInit(); - _object1.hide(); - _object2.postInit(); - _object2.hide(); - _object3.postInit(); - _object3.hide(); - _object4.postInit(); - _object4.hide(); - _object5.postInit(); - _object5.hide(); - _object6.postInit(); - _object6.hide(); - - _object8._state = 0; - - RING_INVENTORY._concentrator._sceneNumber = 9900; - RING_INVENTORY._items._rlbNum = 3; - RING_INVENTORY._items._cursorNum = 6; - RING_INVENTORY._items._description = Common::String("One of the items from the stasis ship. The other is on the Lance's bridge."); - - _stripManager.addSpeaker(&_speakerMR); - _globals->_player.disableControl(); - _sceneMode = 9910; - setAction(&_sequenceManager, this, 9910, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6); -} - -/*-------------------------------------------------------------------------- - * Scene 9999 - Space travel - * - *--------------------------------------------------------------------------*/ - -void Scene9999::Action1::signal() { - switch (_actionIndex++) { - case 0: - setDelay(600); - break; - case 1: - _globals->_sceneManager.changeScene(3500); - break; - default: - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene9999::Action2::signal() { - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - SceneItem::display(9999, 0, SET_Y, 10, SET_X, 30, SET_FONT, 2, SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 23, SET_WIDTH, 260, SET_KEEP_ONSCREEN, 1, LIST_END); - setDelay(300); - break; - case 2: - _globals->_stripNum = 3600; - _globals->_sceneManager.changeScene(3600); - default: - break; - } -} - -void Scene9999::postInit(SceneObjectList *OwnerList) { - loadScene(9998); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _object1.postInit(); - _object1.setVisage(1303); - _object1.setStrip2(3); - _object1.setPosition(Common::Point(160, 152)); - - _globals->_player.postInit(); - _globals->_player.setVisage(1303); - _globals->_player.setStrip2(1); - _globals->_player.fixPriority(250); - _globals->_player.animate(ANIM_MODE_2, NULL); - _globals->_player.setPosition(Common::Point(194, 98)); - _globals->_player._numFrames = 20; - _globals->_player.disableControl(); - - _object2.postInit(); - _object2.setVisage(1303); - _object2.setStrip2(2); - _object2.fixPriority(2); - _object2.setPosition(Common::Point(164, 149)); - - _object3.postInit(); - _object3.setVisage(1303); - _object3.setStrip2(2); - _object3.fixPriority(2); - _object3.setFrame(2); - _object3.setPosition(Common::Point(292, 149)); - _object3.setAction(&_action3); - - if (_globals->_sceneManager._previousScene == 3500) - setAction(&_action2); - else - setAction(&_action1); - - _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y); - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; - - if (_globals->_sceneManager._previousScene == 3500) - _globals->_stripNum = 2222; - else - _globals->_stripNum = 2121; - - _globals->_soundHandler.play(118); - -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h deleted file mode 100644 index 33b16d0014..0000000000 --- a/engines/tsage/ringworld_scenes10.h +++ /dev/null @@ -1,532 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_SCENES10_H -#define TSAGE_RINGWORLD_SCENES10_H - -#include "common/scummsys.h" -#include "tsage/ringworld_logic.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" - -namespace tSage { - -class SceneObject9150 : public SceneObject { -public: - int _timer, _signalFlag; - - virtual void synchronize(Serializer &s) { - SceneObject::synchronize(s); - s.syncAsSint16LE(_timer); - s.syncAsSint16LE(_signalFlag); - } - virtual Common::String getClassName() { return "SceneObject9150"; } -}; - -class Scene2 : public Scene { -public : - int _sceneState; - - Scene2(); - virtual void synchronize(Serializer &s) { - Scene::synchronize(s); - s.syncAsSint16LE(_sceneState); - } -}; - -class Object9350 : public SceneObject { -public: - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void draw(); -}; - -class Scene9100 : public Scene { - /* Items */ - class SceneHotspot1 : public NamedHotspot { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - SceneObject _object1; - SceneObject _object2; - SceneObject _object3; - SceneObject _object4; - SceneObject _object5; - SceneObject _object6; - SceneHotspot1 _sceneHotspot1; - NamedHotspot _sceneHotspot2; - NamedHotspot _sceneHotspot3; - NamedHotspot _sceneHotspot4; - NamedHotspot _sceneHotspot5; - NamedHotspot _sceneHotspot6; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene9150 : public Scene2 { - class Object3 : public SceneObject9150 { - public: - virtual void signal(); - virtual void dispatch(); - }; -public: - SequenceManager _sequenceManager1; - SequenceManager _sequenceManager2; - SceneObject _object1; - SceneObject _object2; - Object3 _object3; - NamedHotspot _sceneHotspot1; - NamedHotspot _sceneHotspot2; - NamedHotspot _sceneHotspot3; - NamedHotspot _sceneHotspot4; - NamedHotspot _sceneHotspot5; - NamedHotspot _sceneHotspot6; - NamedHotspot _sceneHotspot7; - NamedHotspot _sceneHotspot8; - NamedHotspot _sceneHotspot9; - NamedHotspot _sceneHotspot10; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene9200 : public Scene2 { - class SceneHotspot1 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - SceneObject _object1; - SceneObject _object2; - SceneObject _object3; - Action _action1; - SpeakerGText _speakerGText; - SpeakerGR _speakerGR; - SpeakerQText _speakerQText; - ASound _soundHandler; - SceneHotspot1 _hotspot1; - NamedHotspot _hotspot2; - NamedHotspot _hotspot3; - NamedHotspot _hotspot4; - NamedHotspot _hotspot5; - NamedHotspot _hotspot6; - NamedHotspot _hotspot7; - NamedHotspot _hotspot8; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); - virtual void process(Event &event); -}; - -class Scene9300 : public Scene { -public: - SequenceManager _sequenceManager; - SceneObject _object1; - SceneObject _object2; - NamedHotspot _hotspot1; - NamedHotspot _hotspot2; - NamedHotspot _hotspot3; - NamedHotspot _hotspot4; - NamedHotspot _hotspot5; - NamedHotspot _hotspot6; - NamedHotspot _hotspot7; - NamedHotspot _hotspot8; - NamedHotspot _hotspot9; - NamedHotspot _hotspot10; - NamedHotspot _hotspot11; - NamedHotspot _hotspot12; - NamedHotspot _hotspot13; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene9350 : public Scene2 { -public: - SequenceManager _sequenceManager; - Object9350 _object1; - SceneObject _object2; - NamedHotspot _sceneHotspot1; - NamedHotspot _sceneHotspot2; - NamedHotspot _sceneHotspot3; - NamedHotspot _sceneHotspot4; - NamedHotspot _sceneHotspot5; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene9360 : public Scene2 { -public: - SequenceManager _sequenceManager; - Action _action1; - Object9350 _object1; - NamedHotspot _hotspot1; - NamedHotspot _hotspot2; - NamedHotspot _hotspot3; - NamedHotspot _hotspot4; - NamedHotspot _hotspot5; - NamedHotspot _hotspot6; - NamedHotspot _hotspot7; - NamedHotspot _hotspot8; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene9400 : public Scene2 { - class SceneHotspot7 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class SceneHotspot8 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; -public: - Scene9400(); - SequenceManager _sequenceManager; - Action _action1; - SceneObject _object1; - SceneObject _object2; - SceneObject _object3; - SpeakerOText _speakerOText; - SpeakerOR _speakerOR; - SpeakerQText _speakerQText; - NamedHotspot _hotspot1; - NamedHotspot _hotspot2; - NamedHotspot _hotspot3; - NamedHotspot _hotspot4; - NamedHotspot _hotspot5; - NamedHotspot _hotspot6; - ASound _soundHandler; - int _field1032; - SceneHotspot7 _hotspot7; - SceneHotspot8 _hotspot8; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); - virtual void synchronize(Serializer &s); -}; - -class Scene9450 : public Scene2 { - class Object2 : public SceneObject { - public: - virtual void signal(); - }; - - class Object3 : public SceneObject9150 { - public: - virtual void dispatch(); - }; - - class Hotspot1 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot3 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; -public: - SceneObject _object1; - SequenceManager _sequenceManager1; - SequenceManager _sequenceManager2; - Object2 _object2; - SequenceManager _sequenceManager3; - Object3 _object3; - Hotspot1 _hotspot1; - NamedHotspot _hotspot2; - Hotspot3 _hotspot3; - NamedHotspot _hotspot4; - NamedHotspot _hotspot5; - NamedHotspot _hotspot6; - NamedHotspot _hotspot7; - NamedHotspot _hotspot8; - NamedHotspot _hotspot9; - NamedHotspot _hotspot10; - NamedHotspot _hotspot11; - NamedHotspot _hotspot12; - NamedHotspot _hotspot13; - NamedHotspot _hotspot14; - NamedHotspot _hotspot15; - NamedHotspot _hotspot16; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene9500 : public Scene2 { - class Hotspot1 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot2 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot3 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot4 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - -public: - SequenceManager _sequenceManager; - SceneObject _candle; - SceneObject _object2; - SceneObject _object3; - Hotspot1 _hotspot1; - Hotspot2 _hotspot2; - Hotspot3 _hotspot3; - Hotspot4 _hotspot4; - Hotspot4 _hotspot5; - NamedHotspot _hotspot6; - NamedHotspot _hotspot7; - NamedHotspot _hotspot8; - NamedHotspot _hotspot9; - NamedHotspot _hotspot10; - NamedHotspot _hotspot11; - NamedHotspot _hotspot12; - NamedHotspot _hotspot13; - NamedHotspot _hotspot14; - NamedHotspot _hotspot15; - NamedHotspot _hotspot16; - NamedHotspot _hotspot17; - NamedHotspot _hotspot18; - NamedHotspot _hotspot19; - NamedHotspot _hotspot20; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); - virtual void process(Event &event); -}; - -class Scene9700 : public Scene2 { - SequenceManager _sequenceManager; - SceneObject _object1; - NamedHotspot _sceneHotspot1; - NamedHotspot _sceneHotspot2; - NamedHotspot _sceneHotspot3; - NamedHotspot _sceneHotspot4; - NamedHotspot _sceneHotspot5; - NamedHotspot _sceneHotspot6; - GfxButton _gfxButton1; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void process(Event &event); -}; - -class Scene9750 : public Scene { -public: - SequenceManager _sequenceManager; - SceneObject _object1; - SceneObject _object2; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene9850 : public Scene { - class Object6 : public SceneObject{ - public: - virtual void doAction(int action); - }; - - class Object7 : public SceneObjectExt{ - public: - virtual void doAction(int action); - }; - - class Hotspot12 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot14 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot16 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot17 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot18 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot19 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; - - class Hotspot20 : public NamedHotspot{ - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - SceneObject _objDoor; - SceneObject _objCloak; - SceneObject _objJacket; - SceneObject _objTunic2; - SceneObject _objLever; - Object6 _objScimitar; - Object7 _objSword; - ASound _soundHandler; - NamedHotspot _hotspot1; - NamedHotspot _hotspot2; - NamedHotspot _hotspot3; - NamedHotspot _hotspot4; - NamedHotspot _hotspot5; - NamedHotspot _hotspot6; - NamedHotspot _hotspot7; - NamedHotspot _hotspot8; - NamedHotspot _hotspot9; - NamedHotspot _hotspot10; - NamedHotspot _hotspot11; - Hotspot12 _hotspot12; - NamedHotspot _hotspot13; - Hotspot14 _hotspot14; - NamedHotspot _hotspot15; - Hotspot16 _hotspot16; - Hotspot17 _hotspot17; - Hotspot18 _hotspot18; - Hotspot19 _hotspot19; - Hotspot20 _spotLever; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void process(Event &event); - virtual void dispatch(); -}; - -class Scene9900 : public Scene { - class strAction1 : public Action { - public: - SceneObject _object9; - ScenePalette _palette1; - - virtual void signal(); - }; - - class strAction2 : public Action { - public: - SceneText _txtArray1[2]; - SceneText _txtArray2[2]; - int _lineNum, _txtArray1Index, _var3; - - virtual void signal(); - virtual void dispatch(); - virtual void synchronize(Serializer &s); - }; - - class strAction3 : public Action { - public: - SceneObject _object10; - ScenePalette _palette2; - ScenePalette _palette3; - - virtual void signal(); - }; - -public: - ASound _soundHandler; - SequenceManager _sequenceManager; - SceneObject _object1; - SceneObject _object2; - SceneObject _object3; - SceneObject _object4; - SceneObject _object5; - SceneObject _object6; - SceneObject _object7; - SceneObjectExt _object8; - strAction1 _strAction1; - strAction2 _strAction2; - strAction3 _strAction3; - SpeakerMR _speakerMR; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); - virtual void process(Event &event); -}; - -class Scene9999 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - -public: - - Action1 _action1; - Action2 _action2; - Action _action3; - SceneObject _object1; - SceneObject _object2; - SceneObject _object3; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_scenes2.cpp b/engines/tsage/ringworld_scenes2.cpp deleted file mode 100644 index 0154123c3d..0000000000 --- a/engines/tsage/ringworld_scenes2.cpp +++ /dev/null @@ -1,928 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/config-manager.h" -#include "tsage/ringworld_scenes2.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -/*-------------------------------------------------------------------------- - * Scene 1000 - Title Screen - * - *--------------------------------------------------------------------------*/ - -void Scene1000::Action1::signal() { - Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(10); - break; - case 1: - scene->_object4.postInit(); - scene->_object4.setVisage(1001); - scene->_object4._frame = 1; - scene->_object4.setStrip2(5); - scene->_object4.changeZoom(100); - scene->_object4.animate(ANIM_MODE_2, NULL); - scene->_object4.setPosition(Common::Point(403, 163)); - setDelay(90); - break; - case 2: { - SceneItem::display(0, 0); - scene->_object4.remove(); - scene->_object1.changeZoom(-1); - NpcMover *mover = new NpcMover(); - Common::Point pt(180, 100); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 3: - _globals->_sceneManager.changeScene(1400); - break; - } - -} - -void Scene1000::Action2::signal() { - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(10); - break; - case 1: - SceneItem::display(1000, 0, SET_Y, 20, SET_FONT, 2, SET_BG_COLOR, -1, - SET_EXT_BGCOLOR, 35, SET_WIDTH, 200, SET_KEEP_ONSCREEN, 1, LIST_END); - setDelay(180); - break; - case 2: - SceneItem::display(0, 0); - _globals->_sceneManager.changeScene(2000); - break; - default: - break; - } -} - -void Scene1000::Action3::signal() { - Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_sceneManager._scene->loadBackground(0, 0); - setDelay(60); - break; - case 1: { - NpcMover *mover = new NpcMover(); - Common::Point pt(158, 31); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 2: - case 3: - setDelay(60); - break; - case 4: - _globals->_player.show(); - setDelay(240); - break; - case 5: { - _globals->_player.enableControl(); - - const char *SEEN_INTRO = "seen_intro"; - if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) { - // First time being played, so show the introduction - ConfMan.setBool(SEEN_INTRO, true); - ConfMan.flushToDisk(); - - setDelay(1); - } else { - // Prompt user for whether to start play or watch introduction - _globals->_player.enableControl(); - - if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) { - _actionIndex = 20; - _globals->_soundHandler.fadeOut(this); - } else { - setDelay(1); - } - } - - _globals->_player.disableControl(); - break; - } - case 6: { - scene->_object3.remove(); - _globals->_player.setStrip2(2); - NpcMover *mover = new NpcMover(); - Common::Point pt(480, 100); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 7: - _globals->_scenePalette.loadPalette(1002); - _globals->_scenePalette.refresh(); - _globals->_scenePalette.addRotation(80, 95, -1); - scene->_object3.postInit(); - scene->_object3.setVisage(1002); - scene->_object3.setStrip(1); - scene->_object3.setPosition(Common::Point(284, 122)); - scene->_object3.changeZoom(1); - - zoom(true); - setDelay(200); - break; - case 8: - zoom(false); - setDelay(10); - break; - case 9: - scene->_object3.setStrip(2); - scene->_object3.setPosition(Common::Point(285, 155)); - - zoom(true); - setDelay(400); - break; - case 10: - zoom(false); - setDelay(10); - break; - case 11: - scene->_object3.setStrip(3); - scene->_object3.setPosition(Common::Point(279, 172)); - - zoom(true); - setDelay(240); - break; - case 12: - zoom(false); - setDelay(10); - break; - case 13: - scene->_object3.setStrip(4); - scene->_object3.setPosition(Common::Point(270, 128)); - - zoom(true); - setDelay(300); - break; - case 14: - zoom(false); - setDelay(10); - break; - case 15: - scene->_object3.setStrip(1); - scene->_object3.setFrame(2); - scene->_object3.setPosition(Common::Point(283, 137)); - - zoom(true); - setDelay(300); - break; - case 16: - zoom(false); - setDelay(10); - break; - case 17: - scene->_object3.setStrip(5); - scene->_object3.setFrame(1); - scene->_object3.setPosition(Common::Point(292, 192)); - - zoom(true); - setDelay(300); - break; - case 18: - zoom(false); - _globals->_scenePalette.clearListeners(); - _globals->_soundHandler.fadeOut(this); - break; - case 19: - _globals->_sceneManager.changeScene(10); - break; - case 20: - _globals->_sceneManager.changeScene(30); - break; - default: - break; - } -} - -void Scene1000::Action3::zoom(bool up) { - Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene; - - if (up) { - while ((scene->_object3._percent < 100) && !_vm->shouldQuit()) { - scene->_object3.changeZoom(MIN(scene->_object3._percent + 5, 100)); - _globals->_sceneObjects->draw(); - _globals->_events.delay(1); - } - } else { - while ((scene->_object3._percent > 0) && !_vm->shouldQuit()) { - scene->_object3.changeZoom(MAX(scene->_object3._percent - 5, 0)); - _globals->_sceneObjects->draw(); - _globals->_events.delay(1); - } - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene1000::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - loadScene(1000); - - if (_globals->_sceneManager._previousScene == 2000) { - setZoomPercents(150, 10, 180, 100); - _object1.postInit(); - _object1.setVisage(1001); - _object1._strip = 7; - _object1.animate(ANIM_MODE_2, 0); - _object1._moveDiff = Common::Point(1, 1); - _object1.setPosition(Common::Point(120, 180)); - - setAction(&_action2); - - _globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y); - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; - _globals->_soundHandler.play(114); - } else if (_globals->_sceneManager._previousScene == 2222) { - setZoomPercents(150, 10, 180, 100); - _object1.postInit(); - _object1.setVisage(1001); - _object1._strip = 7; - _object1.animate(ANIM_MODE_2, 0); - _object1._moveDiff = Common::Point(2, 2); - _object1.setPosition(Common::Point(120, 180)); - - _globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y); - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; - - setAction(&_action1); - } else { - _globals->_soundHandler.play(4); - setZoomPercents(0, 10, 30, 100); - _object3.postInit(); - _object3.setVisage(1050); - _object3.changeZoom(-1); - _object3.setPosition(Common::Point(158, 0)); - - _globals->_player.postInit(); - _globals->_player.setVisage(1050); - _globals->_player.setStrip(3); - _globals->_player.setPosition(Common::Point(160, 191)); - _globals->_player._moveDiff.x = 12; - _globals->_player.hide(); - _globals->_player.disableControl(); - - _globals->_sceneManager._scene->_sceneBounds.center(_object3._position.x, _object3._position.y); - - setAction(&_action3); - } -} - -/*-------------------------------------------------------------------------- - * Scene 1001 - Fleeing planet cutscene - * - *--------------------------------------------------------------------------*/ - -void Scene1001::Action1::signal() { - Scene1001 *scene = (Scene1001 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - scene->_object3.animate(ANIM_MODE_5, this); - break; - case 2: { - Common::Point pt(108, 171); - NpcMover *mover = new NpcMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 3: { - Common::Point pt(170, 159); - NpcMover *mover = new NpcMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 4: { - scene->_object2.postInit(); - scene->_object2.setVisage(16); - scene->_object2.setStrip2(4); - scene->_object2.setPosition(Common::Point(61, 177)); - scene->_object2.animate(ANIM_MODE_5, this); - - Common::Point pt(320, 100); - NpcMover *mover = new NpcMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 5: { - Common::Point pt(82, 166); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 6: { - Common::Point pt(64, 149); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 7: { - Common::Point pt(15, 136); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 8: { - Common::Point pt(-5, 120); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 9: { - scene->_object1.postInit(); - scene->_object1.setVisage(16); - scene->_object1.setStrip2(1); - scene->_object1.setFrame(1); - scene->_object1.setPosition(Common::Point(-75, 87)); - scene->_object1.animate(ANIM_MODE_2, NULL); - - Common::Point pt(0, 100); - NpcMover *mover = new NpcMover(); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 10: { - Common::Point pt1(107, 115); - NpcMover *mover1 = new NpcMover(); - scene->_object1.addMover(mover1, &pt1, NULL); - - scene->_object3.setVisage(16); - scene->_object3.setStrip2(5); - scene->_object3.setFrame2(2); - scene->_object3.setPosition(Common::Point(220, 200)); - - Common::Point pt2(187, 181); - NpcMover *mover2 = new NpcMover(); - scene->_object3.addMover(mover2, &pt2, this); - break; - } - case 11: { - scene->_object2.setVisage(16); - scene->_object2.setStrip2(5); - scene->_object2.setFrame2(1); - scene->_object2.setPosition(Common::Point(211, 0)); - - Common::Point pt(189, 30); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 12: - scene->_stripManager.start(100, this); - break; - case 13: { - scene->_object4.postInit(); - scene->_object4.setVisage(16); - scene->_object4.setStrip2(2); - scene->_object4.setFrame(4); - scene->_object4.setPosition(Common::Point(360, 80)); - scene->_object4.animate(ANIM_MODE_2, NULL); - - Common::Point pt(303, 97); - NpcMover *mover = new NpcMover(); - scene->_object4.addMover(mover, &pt, this); - break; - } - case 14: - scene->_stripManager.start(110, this); - break; - case 15: - setDelay(10); - break; - case 16: { - scene->_soundHandler1.play(90); - - scene->_object6.postInit(); - scene->_object6.setVisage(16); - scene->_object6.setStrip2(6); - scene->_object6.setFrame2(2); - scene->_object6._moveDiff = Common::Point(20, 20); - scene->_object6.fixPriority(20); - scene->_object6.setPosition(Common::Point(scene->_object2._position.x - 6, scene->_object2._position.y + 7)); - scene->_object6.animate(ANIM_MODE_5, NULL); - - Common::Point pt(scene->_object6._position.x - 70, scene->_object6._position.y + 70); - NpcMover *mover = new NpcMover(); - scene->_object6.addMover(mover, &pt, this); - break; - } - case 17: { - scene->_soundHandler1.play(90); - scene->_object6.remove(); - - scene->_object7.postInit(); - scene->_object7.setVisage(16); - scene->_object7.setStrip2(6); - scene->_object7.setFrame2(1); - scene->_object7._moveDiff = Common::Point(20, 20); - scene->_object7.setPosition(Common::Point(scene->_object3._position.x - 28, scene->_object3._position.y - 11)); - scene->_object7.fixPriority(200); - scene->_object7.animate(ANIM_MODE_5, NULL); - - Common::Point pt(scene->_object7._position.x - 70, scene->_object7._position.y - 70); - NpcMover *mover = new NpcMover(); - scene->_object7.addMover(mover, &pt, this); - break; - } - case 18: - scene->_object7.remove(); - - scene->_object5.postInit(); - scene->_object5.setVisage(16); - scene->_object5.setPosition(Common::Point(306, 93)); - scene->_object5._strip = 3; - scene->_object5.fixPriority(200); - scene->_object5.animate(ANIM_MODE_2, NULL); - setDelay(30); - break; - case 19: { - _globals->_soundHandler.play(91); - byte adjustData[4] = {0xff, 0xff, 0xff, 0}; - _globals->_scenePalette.fade(adjustData, false, 0); - - scene->_object1._strip = 7; - scene->_object1._frame = 1; - scene->_object1.setPosition(Common::Point(314, 112)); - scene->_object1.addMover(NULL); - setDelay(2); - break; - } - case 20: - _globals->_scenePalette.loadPalette(16); - _globals->_scenePalette.refresh(); - setDelay(6); - break; - case 21: - scene->_object1._numFrames = 15; - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 22: - _globals->_soundHandler.play(92); - scene->_stripManager.start(111, this); - break; - case 23: - setDelay(60); - break; - case 24: - _globals->_sceneManager.changeScene(2000); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene1001::postInit(SceneObjectList *OwnerList) { - loadScene(16); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerCText); - _stripManager.addSpeaker(&_speakerCR); - _stripManager.addSpeaker(&_speakerSL); - _speakerQText._color1 = 11; - - _object3.postInit(); - _object3.setVisage(16); - _object3.setStrip2(4); - _object3.setPosition(Common::Point(61, 177)); - - _globals->_soundHandler.play(85); - setAction(&_action1); -} - - -/*-------------------------------------------------------------------------- - * Scene 1250 - - * - *--------------------------------------------------------------------------*/ - -void Scene1250::Action1::signal() { - Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(120) + 60); - break; - case 1: - scene->_object1.animate(ANIM_MODE_5, this); - _actionIndex = 0; - break; - } -} - -void Scene1250::Action2::signal() { - Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - switch (_globals->_randomSource.getRandomNumber(2)) { - case 0: - scene->_object2.setPosition(Common::Point(163, 75)); - break; - case 1: - scene->_object2.setPosition(Common::Point(109, 65)); - break; - case 2: - scene->_object2.setPosition(Common::Point(267, 20)); - break; - } - - setDelay(30); - break; - case 1: - scene->_object2.animate(ANIM_MODE_5, this); - _actionIndex = 0; - break; - } -} - -void Scene1250::Action3::signal() { - Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - scene->_stripManager.start(1251, this); - break; - case 2: - setDelay(6); - break; - case 3: - _globals->_sceneManager.changeScene(1000); - break; - } -} - -void Scene1250::Action4::signal() { - Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(3); - break; - case 1: - scene->_stripManager.start(1250, this); - break; - case 2: - setDelay(6); - break; - case 3: - _globals->_sceneManager.changeScene(2000); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene1250::postInit(SceneObjectList *OwnerList) { - loadScene(1250); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerQText); - _speakerQText._textPos = Common::Point(120, 120); - _speakerQText._textWidth = 180; - - _object1.postInit(); - _object1.setVisage(1250); - _object1.setPosition(Common::Point(126, 69)); - _object1.setStrip2(1); - _object1._frame = 1; - _object1.setAction(&_action1); - - _object2.postInit(); - _object2.setVisage(1250); - _object2.setPosition(Common::Point(126, 69)); - _object2.setStrip2(2); - _object2.fixPriority(255); - _object2._frame = 1; - _object2.setAction(&_action2); - - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; - - if ((_globals->_sceneManager._previousScene != 2000) || (_globals->_stripNum != 1250)) { - setAction(&_action4); - } else { - setAction(&_action3); - _globals->_soundHandler.play(114); - } -} - -/*-------------------------------------------------------------------------- - * Scene 1400 - Ringworld Wall - * - *--------------------------------------------------------------------------*/ - -void Scene1400::Action1::signal() { - Scene1400 *scene = (Scene1400 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: { - SceneItem::display(1400, 0, SET_X, 120, SET_Y, 610, SET_FONT, 2, SET_EXT_BGCOLOR, 23, SET_KEEP_ONSCREEN, -1, LIST_END); - - Common::Point pt(160, 700); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: { - _globals->_player.setStrip2(3); - _globals->_player.changeZoom(100); - - Common::Point pt(160, 100); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - - SceneItem::display(0, 0); - setDelay(360); - break; - } - case 3: - SceneItem::display(1400, 2, SET_X, 60, SET_Y, _globals->_sceneManager._scene->_sceneBounds.bottom - 80, - SET_FONT, 2, SET_FG_COLOR, 13, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END); - setDelay(420); - break; - case 4: - SceneItem::display(0, 0); - setDelay(360); - break; - case 5: - SceneItem::display(1400, 3, SET_X, 60, SET_Y, _globals->_sceneManager._scene->_sceneBounds.bottom - 80, - SET_FONT, 2, SET_FG_COLOR, 23, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END); - setDelay(360); - break; - case 6: - SceneItem::display(0, 0); - break; - case 7: { - _globals->_player._frame = 1; - _globals->_player.setStrip2(1); - _globals->_player._numFrames = 5; - _globals->_player.animate(ANIM_MODE_5, this); - - Common::Point pt(205, 70); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, NULL); - _globals->_sceneManager._fadeMode = FADEMODE_NONE; - - scene->loadScene(1402); - break; - } - case 8: - _globals->_player.setStrip2(2); - _globals->_player._numFrames = 10; - _globals->_player.animate(ANIM_MODE_2, NULL); - - SceneItem::display(1400, 4, SET_X, 30, SET_Y, _globals->_player._position.y + 10, SET_FONT, 2, - SET_FG_COLOR, 13, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END); - setDelay(300); - break; - case 9: { - SceneItem::display(0, 0); - Common::Point pt(450, 45); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 10: - _globals->_sceneManager._scrollerRect = Rect(40, 20, 280, 180); - _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; - _globals->_stripNum = 1500; - _globals->_soundHandler.stop(); - - _globals->_sceneManager.changeScene(1500); - break; - } -} - -void Scene1400::Action1::dispatch() { - Action::dispatch(); - - if ((_actionIndex > 3) && (_actionIndex < 9)) - _globals->_sceneText.setPosition(Common::Point(60, _globals->_sceneManager._scene->_sceneBounds.bottom - 80)); - - if ((_actionIndex <= 2) && (_globals->_player._percent > 22)) - _globals->_player.changeZoom(100 - (800 - _globals->_player._position.y)); - - if ((_actionIndex >= 9) && (_globals->_player._percent > 22)) - _globals->_player.changeZoom(100 - (_globals->_player._position.x - 205)); -} - -/*--------------------------------------------------------------------------*/ - -void Scene1400::postInit(SceneObjectList *OwnerList) { - if (_globals->_stripNum != 1400) { - loadScene(1401); - } else { - loadScene(1402); - } - Scene::postInit(); - - _globals->_sceneManager._scrollerRect = Rect(40, 90, 280, 180); - _globals->_player.postInit(); - _globals->_player.setVisage(1401); - _globals->_player.animate(ANIM_MODE_2, 0); - _globals->_player.setStrip2(4); - _globals->_player.fixPriority(4); - _globals->_player.disableControl(); - - _globals->_player._moveDiff = Common::Point(4, 2); - _globals->_player.setPosition(Common::Point(160, 800)); - _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position); - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.y = (_globals->_sceneManager._scene->_sceneBounds.top / 100) * 100; - - setAction(&_action1); - _globals->_soundHandler.play(118); -} - -/*-------------------------------------------------------------------------- - * Scene 1500 - Ringworld Space-port - * - *--------------------------------------------------------------------------*/ - -void Scene1500::Action1::signal() { - Scene1500 *scene = (Scene1500 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - scene->_object1.postInit(); - scene->_object1.setVisage(1501); - scene->_object1._moveDiff = Common::Point(2, 1); - scene->_object1.setPosition(Common::Point(204, 85)); - scene->_object1.animate(ANIM_MODE_2, NULL); - scene->_object1._numFrames = 3; - scene->_object1.changeZoom(-1); - - Common::Point pt(238, 121); - PlayerMover *mover = new PlayerMover(); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 1: { - Common::Point pt(312, 145); - PlayerMover *mover = new PlayerMover(); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 2: { - scene->_object1.setStrip(2); - scene->_object1.setFrame(1); - scene->_object1._moveDiff.y = 2; - scene->_object1._numFrames = 5; - - Common::Point pt(310, 150); - PlayerMover *mover = new PlayerMover(); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 3: { - Common::Point pt(304, 165); - PlayerMover *mover = new PlayerMover(); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 4: { - scene->_object1._numFrames = 3; - scene->_object1.setStrip2(3); - scene->_object1.animate(ANIM_MODE_2, this); - - Common::Point pt(94, 175); - PlayerMover *mover = new PlayerMover(); - scene->_object1.addMover(mover, &pt, this); - break; - } - case 5: - setDelay(30); - break; - case 6: - scene->_soundHandler.play(123); - scene->_object1.setStrip2(4); - scene->_object1.setFrame(1); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 7: - scene->_object1.setStrip2(5); - scene->_object1.animate(ANIM_MODE_2, NULL); - scene->_soundHandler.play(124, this); - break; - case 8: - _globals->_soundHandler.play(126, this); - break; - case 9: - _globals->_soundHandler.play(127); - _globals->_sceneManager.changeScene(2000); - break; - } -} - -void Scene1500::Action2::signal() { - Scene1500 *scene = (Scene1500 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(6); - break; - case 1: { - scene->_object2.postInit(); - scene->_object2.setVisage(1502); - scene->_object2.fixPriority(255); - scene->_object2.changeZoom(5); - scene->_object2._frame = 1; - scene->_object2._moveDiff = Common::Point(1, 1); - scene->_object2.setPosition(Common::Point(104, 184)); - scene->_object2.animate(ANIM_MODE_2, NULL); - - Common::Point pt(118, 147); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 2: { - scene->_object2._moveDiff.x = 5; - scene->_object2.changeZoom(-1); - Common::Point pt(-55, 200); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 3: - scene->_soundHandler.release(); - _globals->_stripNum = 1505; - _globals->_sceneManager.changeScene(2400); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene1500::postInit(SceneObjectList *OwnerList) { - loadScene(1500); - Scene::postInit(); - - if ((_globals->_stripNum == 1500) || ((_globals->_stripNum != 1504) && (_globals->_stripNum != 2751))) { - _globals->_soundHandler.play(120); - setZoomPercents(105, 20, 145, 100); - - setAction(&_action1); - } else { - setZoomPercents(150, 5, 200, 100); - - _object1.postInit(); - _object1.setVisage(1501); - _object1.setStrip2(5); - _object1.setPosition(Common::Point(94, 175)); - _object1.animate(ANIM_MODE_2, NULL); - - setAction(&_action2); - } -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes2.h b/engines/tsage/ringworld_scenes2.h deleted file mode 100644 index 93a8f04fd4..0000000000 --- a/engines/tsage/ringworld_scenes2.h +++ /dev/null @@ -1,149 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_SCENES2_H -#define TSAGE_RINGWORLD_SCENES2_H - -#include "common/scummsys.h" -#include "tsage/ringworld_logic.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" - -namespace tSage { - -class Scene1000 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - private: - void zoom(bool up); - public: - virtual void signal(); - }; - -public: - SceneObject _object1, _object2, _object3, _object4; - Action1 _action1; - Action2 _action2; - Action3 _action3; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene1001 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; -public: - SpeakerQText _speakerQText; - SpeakerSL _speakerSL; - SpeakerCText _speakerCText; - SpeakerCR _speakerCR; - Action1 _action1; - SceneObject _object1, _object2, _object3, _object4; - SceneObject _object5, _object6, _object7; - ASound _soundHandler1, _soundHandler2; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene1250 : public Scene { -public: - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; -public: - SpeakerQText _speakerQText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - SceneObject _object1, _object2; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene1400 : public Scene { -public: - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - virtual void dispatch(); - }; -public: - Action1 _action1; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - -}; - -class Scene1500 : public Scene { -public: - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; -public: - ASound _soundHandler; - Action1 _action1; - Action2 _action2; - SceneObject _object1, _object2, _object3; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - - - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp deleted file mode 100644 index 209144766a..0000000000 --- a/engines/tsage/ringworld_scenes3.cpp +++ /dev/null @@ -1,6133 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/config-manager.h" -#include "tsage/ringworld_scenes3.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -/*-------------------------------------------------------------------------- - * Scene 2000 - Cockpit cutscenes - * - *--------------------------------------------------------------------------*/ - -void Scene2000::Action1::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - error("Old stuff"); - break; - case 1: - scene->_stripManager.start(2075, this); - break; - case 2: - setDelay(4); - break; - case 3: - _globals->_stripNum = 0; - _globals->_sceneManager.changeScene(1250); - break; - } -} - -void Scene2000::Action2::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_object2.animate(ANIM_MODE_6, NULL); - setDelay(_globals->_randomSource.getRandomNumber(179) + 60); - break; - case 1: - setDelay(_globals->_randomSource.getRandomNumber(179) + 60); - if (_globals->_randomSource.getRandomNumber(4) >= 2) - _actionIndex = 0; - break; - case 2: - setDelay(_globals->_randomSource.getRandomNumber(179) + 60); - _actionIndex = _globals->_randomSource.getRandomNumber(1); - break; - } -} - -void Scene2000::Action3::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_object6.animate(ANIM_MODE_5, NULL); - setDelay(_globals->_randomSource.getRandomNumber(179) + 60); - break; - case 1: - scene->_object6.animate(ANIM_MODE_6, NULL); - setDelay(_globals->_randomSource.getRandomNumber(179) + 60); - _actionIndex = 0; - break; - } -} - -void Scene2000::Action4::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_object4.animate(ANIM_MODE_5, NULL); - setDelay(_globals->_randomSource.getRandomNumber(179) + 60); - break; - case 1: - scene->_object4.animate(ANIM_MODE_6, NULL); - setDelay(_globals->_randomSource.getRandomNumber(179) + 60); - _actionIndex = 0; - break; - } -} - -void Scene2000::Action5::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_object3.animate(ANIM_MODE_5, NULL); - setDelay(_globals->_randomSource.getRandomNumber(125) + 300); - break; - case 1: - scene->_object3.animate(ANIM_MODE_6, NULL); - setDelay(_globals->_randomSource.getRandomNumber(125) + 300); - _actionIndex = 0; - break; - } -} - -void Scene2000::Action6::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(130); - break; - case 1: - scene->_soundHandler2.play(79); - scene->_stripManager.start(2000, this); - break; - case 2: - _globals->_soundHandler.play(81); - scene->_object6.postInit(); - scene->_object6.setVisage(2003); - scene->_object6.setAction(NULL); - scene->_object6.setStrip2(2); - scene->_object6.setPosition(Common::Point(184, 137)); - scene->_object6.animate(ANIM_MODE_5, this); - break; - case 3: - scene->_stripManager.start(95, this); - break; - case 4: - scene->_object6.animate(ANIM_MODE_6, this); - break; - case 5: - _globals->_soundHandler.play(80); - scene->_object6.remove(); - _globals->_sceneManager.changeScene(1001); - break; - } -} - -void Scene2000::Action7::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - scene->_stripManager.start(2072, this); - break; - case 2: - setDelay(3); - break; - case 3: - _globals->_sceneManager.changeScene(2222); - break; - } -} - -void Scene2000::Action8::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - error("Old stuff"); - break; - case 1: - scene->_stripManager.start(2073, this); - break; - case 2: - setDelay(10); - break; - case 3: - _globals->_stripNum = 2005; - _globals->_sceneManager.changeScene(1000); - break; - } -} - -void Scene2000::Action9::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - error("Old stuff"); - break; - case 1: - scene->_stripManager.start(2074, this); - break; - case 2: - setDelay(3); - break; - case 3: - _globals->_stripNum = 2008; - _globals->_sceneManager.changeScene(9999); - break; - } -} - -void Scene2000::Action10::signal() { - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - error("Old stuff"); - break; - case 2: - SceneItem::display(2000, 17, SET_Y, 20, SET_X, 110, SET_FONT, 2, SET_BG_COLOR, -1, - SET_FG_COLOR, 17, SET_WIDTH, 200, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, 1, LIST_END); - break; - case 3: - SceneItem::display(0, 0); - _globals->_stripNum = 0; - _globals->_sceneManager.changeScene(9999); - break; - } -} - -void Scene2000::Action11::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - error("Old stuff"); - break; - case 1: - scene->_stripManager.start(2076, this); - break; - case 2: - scene->_stripManager.start(2077, this); - break; - case 3: - _globals->_stripNum = 0; - _globals->_sceneManager.changeScene(1400); - break; - } -} - -void Scene2000::Action12::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(2020, this); - break; - case 2: - _globals->_player.disableControl(); - setDelay(10); - break; - case 3: - _globals->_sceneManager.changeScene(2300); - break; - } -} - -void Scene2000::Action13::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - scene->_stripManager.start(2078, this); - break; - case 2: - SceneItem::display(0, 0); - _globals->_stripNum = 2751; - _globals->_sceneManager.changeScene(1500); - break; - } -} - -void Scene2000::Action14::signal() { - Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(30); - break; - case 1: - scene->_stripManager.start(2070, this); - break; - case 2: - setDelay(60); - break; - case 3: - _globals->_soundHandler.play(99); - scene->_object8.show(); - scene->_object8.animate(ANIM_MODE_5, this); - break; - case 4: - _globals->_soundHandler.play(12); - scene->_object8.setStrip(2); - scene->_object8.setFrame(1); - scene->_object9.show(); - scene->_object10.show(); - setDelay(60); - break; - case 5: - scene->_stripManager.start(2001, this, scene); - break; - case 6: - _globals->_soundHandler.fadeOut(NULL); - scene->_object8.setStrip(1); - scene->_object8.setFrame(scene->_object8.getFrameCount()); - scene->_object8.animate(ANIM_MODE_6, this); - - scene->_object9.remove(); - scene->_object10.remove(); - break; - case 7: - _globals->_soundHandler.play(111); - scene->_object8.remove(); - setDelay(5); - break; - case 8: - scene->_stripManager.start(2071, this); - break; - case 9: - _globals->_stripNum = 1250; - _globals->_sceneManager.changeScene(1000); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene2000::postInit(SceneObjectList *OwnerList) { - loadScene(2000); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerSL); - _stripManager.addSpeaker(&_speakerMR); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerGameText); - _stripManager.addSpeaker(&_speakerHText); - - _speakerQText._npc = &_object2; - _speakerSText._npc = &_object3; - _speakerMText._npc = &_object6; - _speakerHText._npc = &_object6; - _stripManager.setCallback(this); - - _object3.postInit(); - _object3.setVisage(2002); - _object3.setPosition(Common::Point(65, 199)); - - _object4.postInit(); - _object4.setVisage(2002); - _object4.setStrip(2); - _object4.setPosition(Common::Point(125, 199)); - _object4.setAction(&_action4); - - _object2.postInit(); - _object2.setVisage(2001); - _object2.setPosition(Common::Point(43, 115)); - _object2.setAction(&_action2); - - _globals->_player.disableControl(); - - _object6.postInit(); - _object6.setVisage(2003); - _object6.setPosition(Common::Point(267, 170)); - _object6.setAction(&_action3); - - _object8.postInit(); - _object8.setVisage(2005); - _object8.setPosition(Common::Point(169, 133)); - _object8.setPriority(133); - _object8.hide(); - - _object9.postInit(); - _object9.setVisage(2005); - _object9.setStrip2(3); - _object9.setFrame(4); - _object9.setPosition(Common::Point(136, 86)); - _object9.fixPriority(190); - _object9.hide(); - - _object10.postInit(); - _object10.setVisage(2005); - _object10.setStrip2(5); - _object10.setFrame(4); - _object10.setPosition(Common::Point(202, 86)); - _object10.fixPriority(195); - _object10.hide(); - - switch (_globals->_sceneManager._previousScene) { - case 1000: - setAction(&_action7); - break; - case 1001: - _object6.remove(); - setAction(&_action12); - break; - case 1500: - setAction(&_action13); - break; - case 2200: - _globals->_soundHandler.play(111); - setAction(&_action14); - break; - case 2222: - _globals->_soundHandler.play(115); - setAction(&_action8); - break; - case 3500: - setAction(&_action11); - break; - default: - _object6.remove(); - _globals->_soundHandler.play(80); - setAction(&_action6); - break; - } - - _soundHandler1.play(78); - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; -} - -void Scene2000::stripCallback(int v) { - switch (v) { - case 0: - _object9.setStrip(3); - _object9.animate(ANIM_MODE_7, NULL); - _object10.setStrip(6); - _object10.setFrame(1); - _object10.animate(ANIM_MODE_5, NULL); - break; - case 1: - _object10.setStrip(5); - _object10.animate(ANIM_MODE_7, NULL); - _object9.setStrip(4); - _object9.setFrame(1); - _object9.animate(ANIM_MODE_5, NULL); - break; - case 2: - _object9.animate(ANIM_MODE_NONE, NULL); - break; - case 3: - _object10.setStrip(6); - _object10.setFrame(1); - _object10.animate(ANIM_MODE_5, NULL); - _object9.setStrip(4); - _object9.setFrame(1); - _object9.animate(ANIM_MODE_5, NULL); - break; - } -} - -/*-------------------------------------------------------------------------- - * Scene 2100 - Starcraft Cockpit - * - *--------------------------------------------------------------------------*/ - -void Scene2100::Action1::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - if (!scene->_sitFl) - setDelay(1); - else { - setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); - scene->_sitFl = 0; - } - break; - case 1: { - Common::Point pt(157, 62); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 3: { - Common::Point pt(157, 56); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 4: - _globals->_player._strip = 3; - setDelay(3); - break; - case 5: - _globals->_player.fixPriority(1); - scene->_area1.display(); - scene->_area2.display(); - scene->_area3.display(); - scene->_area4.display(); - - scene->_area1.draw(true); - _state = 0; - _globals->_events.setCursor(CURSOR_USE); - - while (!_state && !_vm->shouldQuit()) { - // Wait for an event - Event event; - if (!_globals->_events.getEvent(event)) { - g_system->updateScreen(); - g_system->delayMillis(10); - continue; - } - - if (scene->_area1._bounds.contains(event.mousePos)) { - scene->_area1.draw(true); - _state = scene->_area1._actionId; - } - if (scene->_area2._bounds.contains(event.mousePos)) { - scene->_area1.draw(false); - scene->_area2.draw(true); - _state = scene->_area2._actionId; - } - if (scene->_area3._bounds.contains(event.mousePos)) { - scene->_area1.draw(false); - scene->_area3.draw(true); - _state = scene->_area3._actionId; - } - } - - scene->_soundHandler.play(161); - scene->_area1.restore(); - scene->_area2.restore(); - scene->_area3.restore(); - scene->_area4.restore(); - - if (_state == 2100) { - setDelay(1); - } else { - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_6, this); - } - break; - case 6: - if (_state == 2100) { - Common::Point pt(157, 65); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } else { - _globals->_sceneManager.changeScene(_state); - } - break; - case 7: - _globals->_player.fixPriority(-1); - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_6, this); - break; - case 8: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene2100::Action2::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_object3._numFrames = 5; - setDelay(_globals->_randomSource.getRandomNumber(59)); - break; - case 1: - scene->_object3.animate(ANIM_MODE_5, this); - break; - case 2: - setDelay(_globals->_randomSource.getRandomNumber(59)); - break; - case 3: - scene->_object3.animate(ANIM_MODE_6, this); - _actionIndex = 0; - break; - } -} - -void Scene2100::Action3::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - case 2: - setDelay(_globals->_randomSource.getRandomNumber(119)); - break; - case 1: - scene->_object2.animate(ANIM_MODE_5, this); - break; - case 3: - scene->_object2.animate(ANIM_MODE_6, this); - _actionIndex = 0; - break; - } -} - -void Scene2100::Action4::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - if (!scene->_sitFl) - setDelay(1); - else - setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); - break; - case 1: { - Common::Point pt(80, 66); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - _globals->_player.setVisage(2109); - _globals->_player._frame = 1; - _globals->_player._strip = 2; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 3: - _globals->_sceneManager.changeScene(2120); - break; - } -} - -void Scene2100::Action5::signal() { - // Quinn enters the cokpit after Seeker decided to enter the cave alone - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); - break; - case 2: { - Common::Point pt(272, 127); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: - _globals->_player.checkAngle(&scene->_object3); - setDelay(30); - break; - case 4: - _globals->_sceneManager.changeScene(3700); - break; - } -} - -void Scene2100::Action6::signal() { - // Seeker stands up and walks to the elevator - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - scene->_object2.setVisage(2806); - scene->_object2.setStrip(1); - scene->_object2.setStrip2(-1); - scene->_object2.changeZoom(-1); - scene->_object2.setPosition(Common::Point(155, 116)); - scene->_object2.setObjectWrapper(new SceneObjectWrapper()); - scene->_object2.setAction(NULL); - scene->_object2.animate(ANIM_MODE_1, NULL); - - Common::Point pt(130, 116); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 1: { - scene->_object2.fixPriority(-1); - Common::Point pt(153, 67); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 2: - remove(); - break; - } -} - -void Scene2100::Action7::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); - break; - case 2: - setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, NULL); - break; - case 3: - _globals->_sceneManager.changeScene(8100); - break; - } -} - -void Scene2100::Action8::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); - break; - case 2: { - Common::Point pt(200, 174); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: - _globals->_player.checkAngle(&scene->_object3); - scene->_stripManager.start((RING_INVENTORY._translator._sceneNumber == 1) ? 7720 : 7710, this); - break; - case 4: - if (RING_INVENTORY._translator._sceneNumber != 1) - _globals->_sceneManager.changeScene(7600); - else { - _globals->setFlag(24); - _globals->_player.enableControl(); - remove(); - } - break; - } -} - -void Scene2100::Action9::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - scene->_stripManager.start(6050, this); - break; - case 2: - scene->_soundHandler.play(99); - scene->_object4.show(); - scene->_object4.animate(ANIM_MODE_5, this); - break; - case 3: - scene->_soundHandler.play(12); - scene->_object4.setStrip(2); - scene->_stripManager.start(6051, this, scene); - break; - case 4: - scene->_soundHandler.fadeOut(NULL); - scene->_object4.setStrip(1); - scene->_object4.setFrame(scene->_object4.getFrameCount()); - scene->_object4.animate(ANIM_MODE_6, this); - break; - case 5: - scene->_object4.hide(); - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(6010, this); - break; - case 6: - if (scene->_stripManager._field2E8 != 165) - setAction(&scene->_action10); - else - setAction(&scene->_action11); - break; - } -} - -void Scene2100::Action10::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); - break; - case 2: { - _globals->_player.disableControl(); - Common::Point pt(155, 64); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: - scene->_object3.setVisage(2105); - scene->_object3.setStrip(2); - scene->_object3.setFrame(1); - scene->_object3._numFrames = 10; - scene->_object3.setAction(NULL); - scene->_object3.animate(ANIM_MODE_5, this); - break; - case 4: { - scene->_object3.setVisage(2705); - scene->_object3.setStrip2(-1); - scene->_object3.changeZoom(-1); - scene->_object3.fixPriority(-1); - scene->_object3.setPosition(Common::Point(260, 156)); - scene->_object3.setObjectWrapper(new SceneObjectWrapper()); - scene->_object3.animate(ANIM_MODE_1, NULL); - - Common::Point pt(166, 64); - PlayerMover *mover = new PlayerMover(); - scene->_object3.addMover(mover, &pt, this); - - setAction(&scene->_action6, NULL); - break; - } - case 5: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 6: { - _globals->_player.fixPriority(1); - Common::Point pt(144, 54); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 7: { - scene->_object3.fixPriority(2); - Common::Point pt1(163, 55); - NpcMover *mover1 = new NpcMover(); - scene->_object3.addMover(mover1, &pt1, NULL); - - scene->_object2.fixPriority(2); - Common::Point pt2(158, 55); - NpcMover *mover2 = new NpcMover(); - scene->_object2.addMover(mover2, &pt2, this); - break; - } - case 8: - _globals->_player.fixPriority(1); - _globals->_player.setStrip(1); - scene->_object3.fixPriority(1); - scene->_object3.setStrip(2); - scene->_object2.fixPriority(2); - scene->_object2.setStrip(3); - - setDelay(45); - break; - case 9: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_6, this); - break; - case 10: - _globals->setFlag(70); - _globals->_stripNum = 2101; - _globals->_sceneManager.changeScene(2320); - break; - } -} - -void Scene2100::Action11::signal() { - // Miranda stands up and walks to the elevator - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - scene->_object3._numFrames = 10; - scene->_object3.setAction(NULL); - scene->_object3.setVisage(2105); - scene->_object3.setStrip(2); - scene->_object3.setFrame(1); - scene->_object3.animate(ANIM_MODE_5, this); - break; - case 2: { - scene->_object3.setVisage(2705); - scene->_object3.setStrip2(-1); - scene->_object3.changeZoom(-1); - scene->_object3.fixPriority(-1); - scene->_object3.setPosition(Common::Point(260, 156)); - scene->_object3.setObjectWrapper(new SceneObjectWrapper()); - scene->_object3.animate(ANIM_MODE_1, NULL); - - Common::Point pt(158, 62); - PlayerMover *mover = new PlayerMover(); - scene->_object3.addMover(mover, &pt, this); - - setAction(&scene->_action6, NULL); - break; - } - case 3: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 4: { - scene->_object3.fixPriority(1); - Common::Point pt1(163, 55); - NpcMover *mover1 = new NpcMover(); - scene->_object3.addMover(mover1, &pt1, NULL); - - scene->_object2.fixPriority(1); - Common::Point pt2(158, 55); - NpcMover *mover2 = new NpcMover(); - scene->_object2.addMover(mover2, &pt2, this); - break; - } - case 5: - scene->_object3.setStrip(2); - scene->_object2.setStrip(3); - setDelay(45); - break; - case 6: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_6, this); - break; - case 7: - scene->_object3.remove(); - scene->_object2.remove(); - _globals->setFlag(70); - _globals->_stripNum = 2102; - _globals->_player.enableControl(); - _globals->_player._canWalk = false; - break; - } -} - -void Scene2100::Action12::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - scene->_stripManager.start(6000, this); - break; - case 2: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 3: { - Common::Point pt1(158, 74); - NpcMover *mover1 = new NpcMover(); - _globals->_player.addMover(mover1, &pt1, this); - - Common::Point pt2(158, 68); - NpcMover *mover2 = new NpcMover(); - scene->_object2.addMover(mover2, &pt2, NULL); - break; - } - case 4: { - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_6, NULL); - - _globals->_player.fixPriority(-1); - Common::Point pt1(277, 84); - PlayerMover *mover1 = new PlayerMover(); - _globals->_player.addMover(mover1, &pt1, this); - - scene->_object2.fixPriority(-1); - Common::Point pt2(255, 76); - PlayerMover *mover2 = new PlayerMover(); - scene->_object2.addMover(mover2, &pt2, this); - break; - } - case 6: - _globals->_player.setStrip(4); - scene->_object2.setStrip(4); - setDelay(60); - break; - case 7: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(6052, this); - break; - case 8: - if (scene->_stripManager._field2E8 == 320) - _globals->setFlag(74); - setDelay(30); - break; - case 9: - _globals->_events.setCursor(OBJECT_STUNNER); - scene->_object2.setAction(&scene->_action13); - setDelay(60); - break; - case 10: - if (_globals->getFlag(74)) - setDelay(1); - else - setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL); - break; - case 11: - scene->_stripManager.start(2170, this); - break; - case 12: - setDelay(5); - break; - case 13: - scene->_stripManager.start(_globals->getFlag(74) ? 2172 : 2174, this); - break; - case 14: - if (_globals->getFlag(74)) { - _globals->_stripNum = 6100; - _globals->_sceneManager.changeScene(2320); - } else { - _globals->_sceneManager.changeScene(6100); - } - remove(); - break; - } -} - -void Scene2100::Action13::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(6); - break; - case 1: { - scene->_object2.fixPriority(113); - Common::Point pt(178, 116); - PlayerMover *mover = new PlayerMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 2: { - Common::Point pt(150, 116); - NpcMover *mover = new NpcMover(); - scene->_object2.addMover(mover, &pt, this); - break; - } - case 3: - scene->_object2.setVisage(2108); - scene->_object2._strip = 3; - scene->_object2.setPosition(Common::Point(150, 100)); - scene->_object2.animate(ANIM_MODE_NONE, NULL); - scene->_object2.changeZoom(100); - scene->_object2.setAction(&scene->_action3); - setDelay(15); - break; - case 4: - remove(); - break; - } -} - -void Scene2100::Action14::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(6); - break; - case 1: - setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); - break; - case 2: - setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL); - break; - case 3: - scene->_stripManager.start(6008, this); - break; - case 4: - scene->_soundHandler.play(99); - scene->_object4.show(); - scene->_object4.animate(ANIM_MODE_5, this); - break; - case 5: - scene->_object4.setStrip(2); - scene->_stripManager.start(6009, this, scene); - break; - case 6: - scene->_soundHandler.fadeOut(NULL); - scene->_object4.setStrip(1); - scene->_object4.setFrame(scene->_object4.getFrameCount()); - scene->_object4.animate(ANIM_MODE_6, this); - break; - case 7: - scene->_stripManager.start(6060, this); - break; - case 8: - scene->_object3._numFrames = 10; - scene->_object3.setAction(NULL); - scene->_object3.setVisage(2105); - scene->_object3.setStrip(2); - scene->_object3.setFrame(1); - scene->_object3.animate(ANIM_MODE_5, this); - break; - case 9: { - scene->_object3.setVisage(2705); - scene->_object3.setStrip2(-1); - scene->_object3.changeZoom(-1); - scene->_object3.fixPriority(-1); - scene->_object3.setPosition(Common::Point(260, 156)); - scene->_object3.setObjectWrapper(new SceneObjectWrapper()); - scene->_object3.animate(ANIM_MODE_1, NULL); - - Common::Point pt(157, 65); - PlayerMover *mover = new PlayerMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 10: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 11: { - Common::Point pt(159, 51); - NpcMover *mover = new NpcMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 12: - scene->_object3.setStrip(2); - setDelay(30); - break; - case 13: - scene->_object3.fixPriority(1); - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_6, this); - break; - case 14: - setDelay(90); - break; - case 15: - _globals->_sceneManager.changeScene(7000); - remove(); - break; - } -} - -void Scene2100::Action15::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(6); - break; - case 1: - scene->_object3.postInit(); - scene->_object3.setVisage(2705); - scene->_object3.animate(ANIM_MODE_1, NULL); - scene->_object3.setObjectWrapper(new SceneObjectWrapper()); - scene->_object3.setPosition(Common::Point(157, 56)); - scene->_object3.fixPriority(1); - scene->_object3.changeZoom(-1); - - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 2: { - scene->_object3.fixPriority(-1); - Common::Point pt(177, 68); - NpcMover *mover = new NpcMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 3: { - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_6, this); - - Common::Point pt(272, 140); - NpcMover *mover = new NpcMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 4: { - Common::Point pt(266, 150); - NpcMover *mover = new NpcMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 5: { - scene->_object3.fixPriority(156); - - Common::Point pt(260, 156); - NpcMover *mover = new NpcMover(); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 6: - scene->_object3.setVisage(2105); - scene->_object3._strip = 1; - scene->_object3._frame = 1; - scene->_object3.setPosition(Common::Point(256, 156)); - scene->_object3.animate(ANIM_MODE_5, this); - scene->_object3.changeZoom(100); - - scene->_object3.animate(ANIM_MODE_NONE, NULL); - break; - case 7: - remove(); - break; - } -} - -void Scene2100::Action16::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - case 4: - setDelay(3); - break; - case 1: - scene->_stripManager.start(7001, this); - break; - case 2: - setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); - break; - case 3: { - _globals->_player.disableControl(); - Common::Point pt(155, 63); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 5: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 6: { - Common::Point pt(160, 54); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 7: - _globals->_player.fixPriority(1); - _globals->_player.setStrip(3); - setDelay(45); - break; - case 8: - scene->_soundHandler.play(162); - scene->_object1.animate(ANIM_MODE_6, this); - break; - case 9: - _globals->setFlag(15); - _globals->setFlag(36); - _globals->_sceneManager.changeScene(7000); - remove(); - break; - } -} - -void Scene2100::Action17::signal() { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL); - break; - case 2: - setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL); - break; - case 3: - scene->_stripManager.start(7070, this); - break; - case 4: - scene->_soundHandler.play(99); - scene->_object4.show(); - scene->_object4.animate(ANIM_MODE_5, this); - break; - case 5: - scene->_soundHandler.play(12); - scene->_object4.setStrip(2); - scene->_stripManager.start(7071, this, scene); - break; - case 6: - scene->_soundHandler.fadeOut(NULL); - scene->_object4.setStrip(1); - scene->_object4.setFrame(scene->_object4.getFrameCount()); - scene->_object4.animate(ANIM_MODE_6, this); - break; - case 7: - scene->_stripManager.start(7072, this); - break; - case 8: - RING_INVENTORY._stasisNegator._sceneNumber = 1; - _globals->_sceneManager.changeScene(9100); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene2100::Hotspot2::doAction(int action) { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2100, 3); - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2100, 29); - else { - _globals->_player.disableControl(); - scene->setAction(&scene->_action4); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2100::Hotspot3::doAction(int action) { - // Computer, on the left - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2100, 4); - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2100, 29); - else { - _globals->_player.disableControl(); - scene->setAction(&scene->_action4); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2100::Hotspot4::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2100, 5); - break; - case CURSOR_USE: - SceneItem::display2(2100, 6); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2100::Hotspot8::doAction(int action) { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2100, 12); - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2100, 29); - else { - _globals->_player.disableControl(); - scene->setAction(&scene->_action4); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2100::Hotspot10::doAction(int action) { - // Quinn's Console - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2100, 13); - break; - case CURSOR_USE: - if (scene->_sitFl) { - _globals->_player.disableControl(); - scene->_sceneMode = 2102; - scene->setAction(&scene->_sequenceManager, scene, 2102, &_globals->_player, NULL); - } else if (_globals->getFlag(13)) { - SceneItem::display2(2100, 28); - } else { - _globals->_player.disableControl(); - scene->_sceneMode = 2101; - scene->setAction(&scene->_sequenceManager, scene, 2101, &_globals->_player, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2100::Hotspot14::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(0)) - SceneItem::display2(2100, 19); - else - SceneItem::display2(2100, 18); - break; - case CURSOR_USE: - if (_globals->getFlag(1)) - SceneItem::display2(2100, 21); - else - SceneItem::display2(2100, 20); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2100::Object1::doAction(int action) { - // Elevator - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2100, 1); - break; - case CURSOR_USE: - scene->setAction(&scene->_action1); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2100::Object2::doAction(int action) { - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2100, 30); - break; - case CURSOR_TALK: - if (_globals->getFlag(72)) { - _globals->_player.disableControl(); - if (!_globals->getFlag(52)) { - scene->_sceneMode = 2111; - scene->setAction(&scene->_sequenceManager, scene, 2111, NULL); - } else { - scene->_sceneMode = _globals->getFlag(53) ? 2112 : 2110; - scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, NULL); - } - } else if (_globals->getFlag(13)) { - SceneItem::display2(2100, 31); - } else if (_globals->getFlag(14)) { - SceneItem::display2(2100, 32); - } else { - _globals->setFlag(14); - _globals->_player.disableControl(); - scene->_sceneMode = 2108; - scene->setAction(&scene->_sequenceManager, scene, 2109, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2100::Object3::doAction(int action) { - // Miranda - Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(59)) - SceneItem::display2(2100, 34); - else - error("***I have no response."); - break; - - case CURSOR_TALK: - if (_globals->getFlag(59)) { - _globals->_player.disableControl(); - scene->_sceneMode = 2108; - scene->setAction(&scene->_sequenceManager, scene, 2108, NULL); - } else { - error("***I have no response."); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene2100::Scene2100() : - _hotspot1(0, CURSOR_LOOK, 2100, 2, LIST_END), - _hotspot5(0, CURSOR_LOOK, 2100, 9, LIST_END), - _hotspot6(0, CURSOR_LOOK, 2100, 7, CURSOR_USE, 2100, 8, LIST_END), - _hotspot7(0, CURSOR_LOOK, 2100, 7, CURSOR_USE, 2100, 11, LIST_END), - _hotspot9(0, CURSOR_LOOK, 2100, 14, LIST_END), - _hotspot11(0, CURSOR_LOOK, 2100, 15, CURSOR_USE, 2100, 16, LIST_END), - _hotspot12(0, CURSOR_LOOK, 2100, 24, CURSOR_USE, 2100, 25, LIST_END), - _hotspot13(0, CURSOR_LOOK, 2100, 17, LIST_END), - _hotspot15(0, CURSOR_LOOK, 2100, 22, CURSOR_USE, 2100, 23, LIST_END) { - _area1.setup(2153, 2, 1, 2100); - _area1._pt = Common::Point(200, 31); - _area2.setup(2153, 3, 1, 2150); - _area2._pt = Common::Point(200, 50); - _area3.setup(2153, 4, 1, 2320); - _area3._pt = Common::Point(200, 75); - _area4.setup(2153, 1, 1, OBJECT_TRANSLATOR); - _area4._pt = Common::Point(237, 77); -} - -void Scene2100::postInit(SceneObjectList *OwnerList) { - loadScene(2100); - Scene::postInit(); - setZoomPercents(60, 80, 200, 100); - - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerMR); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerSL); - _stripManager.addSpeaker(&_speakerSAL); - _stripManager.addSpeaker(&_speakerHText); - _stripManager.addSpeaker(&_speakerGameText); - _speakerMText._npc = &_object3; - _speakerQText._npc = &_globals->_player; - _speakerSText._npc = &_object2; - - _object1.postInit(); - _object1.setVisage(2100); - _object1.animate(ANIM_MODE_NONE, NULL); - _object1.setPosition(Common::Point(157, 57)); - _object1.fixPriority(5); - - _hotspot3.postInit(); - _hotspot3.setVisage(2101); - _hotspot3._frame = 1; - _hotspot3.animate(ANIM_MODE_2, NULL); - _hotspot3.setPosition(Common::Point(53, 44)); - _hotspot3.changeZoom(100); - _hotspot3.fixPriority(1); - - _hotspot4.postInit(); - _hotspot4.setVisage(2101); - _hotspot4._frame = 1; - _hotspot4._strip = 3; - _hotspot4.animate(ANIM_MODE_8, 0, NULL); - _hotspot4.setPosition(Common::Point(274, 52)); - _hotspot4.changeZoom(100); - _hotspot4.fixPriority(1); - - _hotspot5.postInit(); - _hotspot5.setVisage(2101); - _hotspot5._frame = 1; - _hotspot5._strip = 4; - _hotspot5.animate(ANIM_MODE_8, 0, NULL); - _hotspot5.setPosition(Common::Point(219, 141)); - _hotspot5.changeZoom(100); - _hotspot5.fixPriority(160); - - _hotspot6.postInit(); - _hotspot6.setVisage(2101); - _hotspot6._frame = 1; - _hotspot6._strip = 5; - _hotspot6.fixPriority(175); - _hotspot6.animate(ANIM_MODE_8, 0, NULL); - _hotspot6.setPosition(Common::Point(97, 142)); - _hotspot6.changeZoom(100); - - _hotspot7.postInit(); - _hotspot7.setVisage(2101); - _hotspot7._frame = 1; - _hotspot7._strip = 6; - _hotspot7.animate(ANIM_MODE_NONE, NULL); - _hotspot7.setPosition(Common::Point(133, 46)); - _hotspot7.changeZoom(100); - _hotspot7.fixPriority(1); - - _hotspot8.postInit(); - _hotspot8.setVisage(2101); - _hotspot8._frame = 1; - _hotspot8._strip = 7; - _hotspot8.animate(ANIM_MODE_8, 0, NULL); - _hotspot8.setPosition(Common::Point(20, 45)); - _hotspot8.changeZoom(100); - _hotspot8.fixPriority(1); - - _hotspot2.postInit(); - _hotspot2.setVisage(2101); - _hotspot2._frame = 1; - _hotspot2._strip = 8; - _hotspot2.animate(ANIM_MODE_8, 0, NULL); - _hotspot2.setPosition(Common::Point(88, 41)); - _hotspot2.changeZoom(100); - _hotspot2.fixPriority(1); - - _hotspot11.setBounds(Rect(139, 74, 173, 96)); - _hotspot10.setBounds(Rect(71, 100, 91, 135)); - _hotspot9.setBounds(Rect(225, 110, 251, 136)); - _hotspot14.setBounds(Rect(100, 97, 216, 130)); - _hotspot13.setBounds(Rect(13, 124, 94, 168)); - _hotspot12.setBounds(Rect(217, 141, 307, 155)); - _hotspot15.setBounds(Rect(14, 90, 46, 107)); - _hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - - if (!_globals->getFlag(36) && !_globals->getFlag(70) && !_globals->getFlag(43)) { - _object3.postInit(); - _object3.setPosition(Common::Point(246, 156)); - _object3.animate(ANIM_MODE_NONE, NULL); - _object3.changeZoom(100); - _object3.fixPriority(156); - _object3.setVisage(2107); - _object3.setStrip(1); - _object3.setAction(&_action2); - _globals->_sceneItems.push_back(&_object3); - } - - if (!_globals->getFlag(59) && !_globals->getFlag(70) && !_globals->getFlag(37) && !_globals->getFlag(114)) { - _object2.postInit(); - _object2.setVisage(2108); - _object2._strip = 3; - _object2.setPosition(Common::Point(150, 100)); - _object2.animate(ANIM_MODE_NONE, NULL); - _object2.changeZoom(100); - _object2.fixPriority(113); - _object2.setAction(&_action3); - _globals->_sceneItems.push_back(&_object2); - } - - _globals->_sceneItems.addItems(&_hotspot15, &_hotspot11, &_hotspot10, &_hotspot9, &_hotspot14, - &_hotspot13, &_hotspot12, &_hotspot8, &_object1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, - &_hotspot6, &_hotspot7, &_hotspot1, NULL); - - _globals->_player.postInit(); - if (_globals->getFlag(13)) { - _globals->_player.setVisage(2170); - _globals->_player._moveDiff.y = 1; - } else { - _globals->_player.setVisage(0); - _globals->_player._moveDiff.y = 3; - } - - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player._moveDiff.x = 4; - _globals->_player.changeZoom(-1); - _globals->_player.disableControl(); - _sitFl = 0; - - switch (_globals->_sceneManager._previousScene) { - case 2120: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - _object1.fixPriority(-1); - _globals->_player.fixPriority(-1); - _globals->_player.setPosition(Common::Point(80, 66)); - _globals->_player.enableControl(); - break; - case 2150: - _globals->_player.fixPriority(1); - _globals->_player.setPosition(Common::Point(157, 56)); - _sceneMode = 2104; - setAction(&_sequenceManager, this, 2104, &_globals->_player, &_object1, NULL); - break; - case 2222: - if (_globals->_sceneObjects->contains(&_object3)) - _object3.remove(); - - _globals->_player.fixPriority(1); - _globals->_player.setPosition(Common::Point(144, 55)); - - _object2.setVisage(2806); - _object2.changeZoom(-1); - _object2.setPosition(Common::Point(158, 55)); - _object2.fixPriority(1); - _object2.setAction(NULL); - _object2.setObjectWrapper(new SceneObjectWrapper()); - _object2.animate(ANIM_MODE_1, NULL); - _object2.setStrip(3); - setAction(&_action12); - break; - case 2320: - if (_globals->_stripNum == 2321) { - if (_globals->_sceneObjects->contains(&_object3)) - _object3.remove(); - - _globals->_player.fixPriority(1); - _globals->_player.setPosition(Common::Point(144, 55)); - - _object2.postInit(); - _object2.setVisage(2806); - _object2.setStrip(1); - _object2.changeZoom(-1); - _object2.setPosition(Common::Point(158, 55)); - _object2.fixPriority(1); - _object2.setAction(NULL); - _object2.setObjectWrapper(new SceneObjectWrapper()); - _object2.animate(ANIM_MODE_1, NULL); - - setAction(&_action12); - } else if (_globals->_stripNum == 6100) { - _globals->_player.setPosition(Common::Point(157, 56)); - _globals->_player.fixPriority(1); - - _object4.postInit(); - _object4.setVisage(2102); - _object4.setPosition(Common::Point(160, 199)); - _object4.hide(); - - setAction(&_action14); - } else { - _globals->_player.disableControl(); - _globals->_player.fixPriority(1); - _globals->_player.setPosition(Common::Point(157, 56)); - _sceneMode = 2104; - - setAction(&_sequenceManager, this, 2104, &_globals->_player, &_object1, NULL); - } - break; - case 3700: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - Scene::setZoomPercents(80, 75, 100, 90); - - if (_globals->_sceneObjects->contains(&_object2)) - _object2.remove(); - - _globals->_player._angle = 225; - _globals->_player.setStrip(6); - _globals->_player.setFrame(1); - _globals->_player.fixPriority(-1); - _globals->_player.setPosition(Common::Point(272, 127)); - - _object3.setPosition(Common::Point(246, 156)); - _object3.fixPriority(156); - _sceneMode = 2105; - setAction(&_sequenceManager, this, 2105, &_object3, NULL); - break; - case 4250: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - _globals->clearFlag(43); - - _globals->_player.setVisage(2104); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(65, 149)); - _globals->_player.fixPriority(152); - _globals->_player.setStrip(2); - - _object4.postInit(); - _object4.setVisage(2102); - _object4.setPosition(Common::Point(160, 199)); - _object4.hide(); - - _sceneMode = 2107; - setAction(&_sequenceManager, this, 2107, &_object4, NULL); - break; - case 5000: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - - if (_globals->_sceneObjects->contains(&_object2)) - _object2.remove(); - - _globals->_player.setStrip(3); - _globals->_player.setFrame(1); - _globals->_player.fixPriority(1); - _globals->_player.setPosition(Common::Point(157, 56)); - - _object3.setPosition(Common::Point(246, 156)); - _object3.fixPriority(156); - - setAction(&_action5); - break; - case 5100: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - _globals->_player.setVisage(2104); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(65, 149)); - _globals->_player.fixPriority(152); - _globals->_player.setStrip(2); - - _sitFl = 1; - - _object4.postInit(); - _object4.setVisage(2102); - _object4.setPosition(Common::Point(160, 199)); - _object4.hide(); - - RING_INVENTORY._stasisBox._sceneNumber = 0; - setAction(&_action9); - break; - case 7000: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - - if (RING_INVENTORY._stasisBox2._sceneNumber == 1) { - _globals->_player.fixPriority(1); - _globals->_player.setPosition(Common::Point(157, 56)); - - _object4.postInit(); - _object4.setVisage(2102); - _object4.setPosition(Common::Point(160, 199)); - _object4.hide(); - _globals->clearFlag(15); - _globals->clearFlag(109); - _globals->clearFlag(72); - - setAction(&_action17); - } else { - _globals->_player.setVisage(2104); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(65, 149)); - _globals->_player.fixPriority(152); - _globals->_player.setStrip(2); - - _sitFl = 1; - setAction(&_action16); - } - break; - case 7600: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - - if (_globals->_sceneObjects->contains(&_object2)) - _object2.remove(); - - _globals->_player.fixPriority(1); - _globals->_player.setPosition(Common::Point(157, 56)); - - setAction(&_action8); - break; - case 8100: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - - _globals->_player.setVisage(2104); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(65, 149)); - _globals->_player.fixPriority(152); - _globals->_player.setStrip(2); - - _sceneMode = 2106; - setAction(&_sequenceManager, this, 2106, NULL); - break; - case 9750: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - - _globals->_player.setVisage(2104); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(65, 149)); - _globals->_player.fixPriority(152); - _globals->_player.setStrip(2); - - _object4.postInit(); - _object4.setVisage(2102); - _object4.setPosition(Common::Point(160, 199)); - _object4.hide(); - - _sceneMode = 2103; - setAction(&_sequenceManager, this, 2103, &_object4, NULL); - break; - default: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - - _globals->_player._uiEnabled = true; - break; - } - - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; -} - -void Scene2100::stripCallback(int v) { - switch (v) { - case 1: - _object4._numFrames = 4; - _object4.animate(ANIM_MODE_7, NULL); - break; - case 2: - _object4.animate(ANIM_MODE_NONE, NULL); - break; - } -} - -void Scene2100::signal() { - switch (_sceneMode) { - case 2101: - _sitFl = 1; - _globals->_player._uiEnabled = true; - _globals->_events.setCursor(CURSOR_USE); - break; - case 2102: - _sitFl = 0; - _globals->_player.enableControl(); - break; - case 2103: - _globals->_stripNum = 9000; - _globals->_sceneManager.changeScene(4000); - break; - case 2106: - _globals->_sceneManager.changeScene(7000); - break; - case 2107: - _globals->_sceneManager.changeScene(5000); - break; - case 2104: - case 2105: - case 2108: - case 2110: - case 2111: - case 2112: - _globals->_player.enableControl(); - break; - } -} - -void Scene2100::synchronize(Serializer &s) { - Scene::synchronize(s); - if (s.getVersion() >= 3) - s.syncAsSint16LE(_sitFl); -} - -/*-------------------------------------------------------------------------- - * Scene 2120 - Encyclopedia - * - *--------------------------------------------------------------------------*/ - -Scene2120::Action1::Action1() { - _entries.push_back(Entry(0, 0, 0)); - _entries.push_back(Entry(0, 0, 0)); - _entries.push_back(Entry(4, 1, 2123)); - _entries.push_back(Entry(1, 6, 0)); - _entries.push_back(Entry(2, 8, 0)); - _entries.push_back(Entry(1, 11, 0)); - _entries.push_back(Entry(4, 13, 2131)); - _entries.push_back(Entry(2, 18, 0)); - _entries.push_back(Entry(4, 21, 0)); - _entries.push_back(Entry(7, 26, 2128)); - _entries.push_back(Entry(3, 34, 0)); - _entries.push_back(Entry(0, 38, 0)); - _entries.push_back(Entry(3, 39, 2126)); - _entries.push_back(Entry(3, 43, 0)); - _entries.push_back(Entry(4, 47, 2125)); - _entries.push_back(Entry(3, 52, 0)); - _entries.push_back(Entry(4, 56, 2129)); - _entries.push_back(Entry(7, 61, 0)); - _entries.push_back(Entry(2, 69, 2127)); - _entries.push_back(Entry(7, 72, 2122)); - _entries.push_back(Entry(0, 80, 2124)); - _entries.push_back(Entry(0, 81, 0)); - _entries.push_back(Entry(0, 82, 0)); - _entries.push_back(Entry(1, 83, 0)); - _entries.push_back(Entry(2, 85, 2132)); - _entries.push_back(Entry(1, 88, 2133)); - _entries.push_back(Entry(2, 90, 2136)); - _entries.push_back(Entry(1, 93, 0)); - _entries.push_back(Entry(10, 95, 2135)); - _entries.push_back(Entry(5, 106, 0)); - _entries.push_back(Entry(2, 112, 2134)); - _entries.push_back(Entry(1, 115, 2130)); - _entries.push_back(Entry(0, 117, 0)); -} - -void Scene2120::Action1::signal() { - Scene2120 *scene = (Scene2120 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - _globals->_events.setCursor(CURSOR_WALK); - break; - case 1: - // First page of index - SceneItem::display(2120, 0, SET_X, 120, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1, - SET_WIDTH, 200, SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END); - break; - case 2: - // Second page of index - SceneItem::display(2120, 1, SET_X, 120, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1, - SET_WIDTH, 200, SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END); - break; - case 3: - // Display an image associated with the encyclopedia entry - SceneItem::display(0, 0); - - scene->_visageHotspot.postInit(); - scene->_visageHotspot.setVisage(_entries[scene->_subjectIndex]._visage); - scene->_visageHotspot.setPosition(Common::Point(129, 180)); - scene->_visageHotspot.animate(ANIM_MODE_NONE, NULL); - scene->_visageVisable = true; - break; - case 4: - // Display page of text - SceneItem::display(2121, _entries[scene->_subjectIndex]._lineNum + scene->_lineOffset, - SET_X, 130, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1, SET_WIDTH, 200, - SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END); - _actionIndex = 4; - break; - } -} - -void Scene2120::Action1::dispatch() { - Scene2120 *scene = (Scene2120 *)_globals->_sceneManager._scene; - - Event event; - if (_globals->_events.getEvent(event) && (event.eventType == EVENT_BUTTON_DOWN)) { - if (scene->_listRect.contains(event.mousePos) && (scene->_dbMode != 2)) { - scene->_topicArrowHotspot.setPosition(Common::Point(scene->_topicArrowHotspot._position.x, event.mousePos.y)); - } - - // Subject button handling - if (scene->_subjectButton._bounds.contains(event.mousePos) && (scene->_dbMode != 2)) { - scene->_arrowHotspot.setPosition(Common::Point(291, 34)); - scene->_arrowHotspot._strip = 1; - scene->_arrowHotspot.animate(ANIM_MODE_5, NULL); - - if (scene->_dbMode == 0) - scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 48) / 8; - else - scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 44) / 8 + 16; - - if ((scene->_subjectIndex == 27) && _globals->getFlag(70)) - _globals->setFlag(75); - - scene->_topicArrowHotspot.hide(); - scene->_prevDbMode = scene->_dbMode; - scene->_dbMode = 2; - scene->_lineOffset = 0; - - _actionIndex = !_entries[scene->_subjectIndex]._visage ? 4 : 3; - setDelay(30); - scene->_soundHandler.play(159); - } - - // Next Page button handling - if (scene->_nextPageButton._bounds.contains(event.mousePos)) { - if (!scene->_dbMode) { - scene->_arrowHotspot._strip = 2; - scene->_arrowHotspot.setPosition(Common::Point(291, 76)); - scene->_arrowHotspot.animate(ANIM_MODE_5, NULL); - scene->_dbMode = 1; - - _actionIndex = 2; - setDelay(30); - } - - if ((scene->_dbMode == 2) && (scene->_lineOffset < _entries[scene->_subjectIndex]._size)) { - if (!scene->_visageVisable) { - ++scene->_lineOffset; - } else { - scene->_visageVisable = false; - scene->_visageHotspot.remove(); - } - setDelay(30); - } - - if ((scene->_subjectIndex == 20) && scene->_visageVisable) { - scene->_visageVisable = false; - scene->_visageHotspot.remove(); - setDelay(30); - } - - scene->_soundHandler.play(159); - } - - // Previous Page button handling - if (scene->_previousPageButton._bounds.contains(event.mousePos)) { - switch (scene->_dbMode) { - case 1: - scene->_arrowHotspot._strip = 3; - scene->_arrowHotspot.setPosition(Common::Point(291, 117)); - scene->_arrowHotspot.animate(ANIM_MODE_5, NULL); - - scene->_dbMode = 0; - _actionIndex = 1; - setDelay(30); - break; - case 2: - if (scene->_lineOffset > 0) { - --scene->_lineOffset; - setDelay(20); - } - if ((_entries[scene->_subjectIndex]._visage != 0) && (scene->_lineOffset == 0)) { - _actionIndex = 3; - setDelay(30); - } - break; - } - - scene->_soundHandler.play(159); - } - - // Exit button handling - if (scene->_exitButton._bounds.contains(event.mousePos)) { - if (scene->_dbMode != 2) { - // In the index, so return to the previous scene - setAction(NULL); - SceneItem::display(0, 0); - - _globals->_gfxManagerInstance._font.setFontNumber(2); - _globals->_sceneText._fontNumber = 2; - _globals->_sceneManager.changeScene(_globals->_sceneManager._previousScene); - } else { - // Exit out of topic display to index - SceneItem::display(0, 0); - - if (_entries[scene->_subjectIndex]._visage) - scene->_visageHotspot.remove(); - - scene->_arrowHotspot._strip = 4; - scene->_arrowHotspot.setPosition(Common::Point(291, 159)); - scene->_arrowHotspot.animate(ANIM_MODE_5, NULL); - scene->_dbMode = scene->_prevDbMode; - _actionIndex = scene->_prevDbMode + 1; - - scene->_topicArrowHotspot.show(); - setDelay(1); - } - - scene->_soundHandler.play(159); - } - } - - Action::dispatch(); -} - -/*--------------------------------------------------------------------------*/ - -Scene2120::Scene2120(): Scene() { - _listRect = Rect(18, 48, 260, 177); - _dbMode = 0; - _prevDbMode = 0; - _visageVisable = false; - _subjectIndex = 0; -} - -void Scene2120::postInit(SceneObjectList *OwnerList) { - loadScene(2120); - setZoomPercents(0, 100, 200, 100); - _globals->_player.disableControl(); - - _subjectButton.setBounds(Rect(266, 13, 320, 56)); - _nextPageButton.setBounds(Rect(266, 56, 320, 98)); - _previousPageButton.setBounds(Rect(266, 98, 320, 140)); - _exitButton.setBounds(Rect(266, 140, 320, 182)); - - _topicArrowHotspot.postInit(); - _topicArrowHotspot.setVisage(2120); - _topicArrowHotspot.animate(ANIM_MODE_NONE, NULL); - _topicArrowHotspot.setPosition(Common::Point(240, 55)); - - _arrowHotspot.postInit(); - _arrowHotspot.setVisage(2121); - _arrowHotspot.animate(ANIM_MODE_NONE, NULL); - _arrowHotspot._frame = 1; - _arrowHotspot.setPosition(Common::Point(400, 200)); - - setAction(&_action1); - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; -} - -void Scene2120::synchronize(Serializer &s) { - Scene::synchronize(s); - - s.syncAsSint16LE(_dbMode); - s.syncAsSint16LE(_prevDbMode); - s.syncAsSint16LE(_visageVisable); - s.syncAsSint16LE(_subjectIndex); - s.syncAsSint16LE(_lineOffset); -} - -/*-------------------------------------------------------------------------- - * Scene 2150 - Starcraft Level 2 - * - *--------------------------------------------------------------------------*/ - -void Scene2150::Action1::signal() { - Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - Common::Point pt(158, 103); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - scene->_soundHandler.play(162); - scene->_hotspot1.animate(ANIM_MODE_5, this); - break; - case 2: { - _globals->_player.setStrip2(4); - Common::Point pt(158, 95); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: - _globals->_player.setStrip2(-1); - _globals->_player._strip = 3; - setDelay(10); - break; - case 4: - scene->_area1.display(); - scene->_area2.display(); - scene->_area3.display(); - scene->_area4.display(); - - scene->_area2.draw(true); - _state = 0; - _globals->_events.setCursor(CURSOR_USE); - - while (!_state && !_vm->shouldQuit()) { - // Wait for an event - Event event; - if (!_globals->_events.getEvent(event)) { - g_system->updateScreen(); - g_system->delayMillis(10); - continue; - } - - if (scene->_area1._bounds.contains(event.mousePos)) { - scene->_area2.draw(false); - scene->_area1.draw(true); - _state = scene->_area1._actionId; - } - if (scene->_area2._bounds.contains(event.mousePos)) { - scene->_area2.draw(true); - _state = scene->_area2._actionId; - } - if (scene->_area3._bounds.contains(event.mousePos)) { - scene->_area2.draw(false); - scene->_area3.draw(true); - _state = scene->_area3._actionId; - } - } - - scene->_soundHandler.play(161); - scene->_area1.restore(); - scene->_area2.restore(); - scene->_area3.restore(); - scene->_area4.restore(); - - if (_state == 2150) { - setDelay(1); - } else { - scene->_soundHandler.play(162); - scene->_hotspot1.animate(ANIM_MODE_6, this); - } - break; - case 5: - if (_state == 2150) { - Common::Point pt(158, 103); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } else { - _globals->_sceneManager.changeScene(_state); - } - break; - case 6: - scene->_soundHandler.play(162); - scene->_hotspot1.animate(ANIM_MODE_6, this); - break; - case 7: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene2150::Action2::signal() { - Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - Common::Point pt(47, 85); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - _globals->_player.setVisage(2152); - _globals->_player.setFrame(1); - _globals->_player.setStrip(8); - _globals->_player.animate(ANIM_MODE_8, 1, this); - - scene->_soundHandler.play(163); - break; - case 2: - scene->_soundHandler.play(164); - scene->_hotspot10.animate(ANIM_MODE_5, this); - break; - case 3: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start((RING_INVENTORY._ale._sceneNumber == 2150) ? 2151 : 2152, this); - break; - case 4: - scene->_hotspot14.postInit(); - scene->_hotspot14.setVisage(2152); - scene->_hotspot14.setStrip(6); - scene->_hotspot14.setPosition(Common::Point(59, 54)); - - if (scene->_stripManager._field2E8 == 15) { - scene->_hotspot14.setFrame(5); - RING_INVENTORY._ale._sceneNumber = 1; - } else { - scene->_hotspot14.setFrame(scene->_stripManager._field2E8 - 5); - } - - _globals->_player.setFrame(1); - _globals->_player.setStrip(7); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 5: - scene->_soundHandler.play(164); - scene->_hotspot10.animate(ANIM_MODE_6, NULL); - scene->_hotspot14.remove(); - - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 6: - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.enableControl(); - - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene2150::Hotspot1::doAction(int action) { - Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2150, 0); - break; - case CURSOR_USE: - scene->setAction(&scene->_action1); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2150::Hotspot2::doAction(int action) { - Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2150, 1); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->_sceneMode = 2156; - scene->setAction(&scene->_sequenceManager, scene, 2156, &_globals->_player, this, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2150::Hotspot4::doAction(int action) { - Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2150, 3); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->_sceneMode = 2155; - scene->setAction(&scene->_sequenceManager, scene, 2155, &_globals->_player, &scene->_hotspot4, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2150::Hotspot7::doAction(int action) { - Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2150, 7); - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2150, 19); - else { - _globals->_player.disableControl(); - scene->_sceneMode = 2154; - scene->setAction(&scene->_sequenceManager, scene, 2154, &_globals->_player, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2150::Hotspot10::doAction(int action) { - Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2150, 10); - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2150, 19); - else - scene->setAction(&scene->_action2); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene2150::Scene2150() : - _hotspot3(18, CURSOR_LOOK, 2150, 2, CURSOR_USE, 2150, 18, LIST_END), - _hotspot5(17, CURSOR_LOOK, 2150, 4, CURSOR_USE, 2150, 18, LIST_END), - _hotspot6(0, CURSOR_LOOK, 2150, 5, CURSOR_USE, 2150, 18, LIST_END), - _hotspot8(16, CURSOR_LOOK, 2150, 8, LIST_END), - _hotspot9(0, CURSOR_LOOK, 2150, 9, CURSOR_USE, 2150, 13, LIST_END), - _hotspot11(0, CURSOR_LOOK, 2150, 12, LIST_END) { - _rect1 = Rect(260, 70, 270, 77); - _rect2 = Rect(222, 142, 252, 150); - _area1.setup(2153, 2, 1, 2100); - _area1._pt = Common::Point(200, 31); - _area2.setup(2153, 3, 1, 2150); - _area2._pt = Common::Point(200, 50); - _area3.setup(2153, 4, 1, 2320); - _area3._pt = Common::Point(200, 75); - _area4.setup(2153, 1, 1, 10); - _area4._pt = Common::Point(237, 77); - -} - -void Scene2150::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(55, 85, 200, 100); - loadScene(2150); - - _stripManager.addSpeaker(&_speakerGameText); - - _hotspot7.postInit(); - _hotspot7.setVisage(2152); - _hotspot7._frame = 1; - _hotspot7._strip = 2; - _hotspot7.animate(ANIM_MODE_8, 0, NULL); - _hotspot7.setPosition(Common::Point(122, 62)); - _hotspot7.changeZoom(100); - _hotspot7.fixPriority(76); - - _hotspot2.postInit(); - _hotspot2.setVisage(2151); - _hotspot2._frame = 1; - _hotspot2._strip = 3; - _hotspot2.animate(ANIM_MODE_NONE, NULL); - _hotspot2.setPosition(Common::Point(257, 67)); - _hotspot2.changeZoom(100); - _hotspot2.fixPriority(60); - - _hotspot1.postInit(); - _hotspot1.setVisage(2151); - _hotspot1._frame = 1; - _hotspot1._strip = 2; - _hotspot1.animate(ANIM_MODE_NONE, NULL); - _hotspot1.setPosition(Common::Point(158, 99)); - _hotspot1.changeZoom(100); - _hotspot1.fixPriority(99); - - _hotspot4.postInit(); - _hotspot4.setVisage(2150); - _hotspot4._frame = 1; - _hotspot4._strip = 2; - _hotspot4.animate(ANIM_MODE_NONE, NULL); - _hotspot4.setPosition(Common::Point(218, 200)); - _hotspot4.changeZoom(100); - _hotspot4.fixPriority(200); - - _hotspot10.postInit(); - _hotspot10.setVisage(2152); - _hotspot10.setStrip(5); - _hotspot10.setPosition(Common::Point(59, 56)); - - _globals->_player.postInit(); - _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.fixPriority(-1); - _globals->_player.changeZoom(-1); - _globals->_player._moveDiff.y = 3; - - _hotspot8.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot9.setBounds(Rect(133, 0, 198, 91)); - _hotspot11.setBounds(Rect(142, 119, 176, 158)); - - _globals->_sceneItems.addItems(&_hotspot1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, - &_hotspot6, &_hotspot7, &_hotspot10, &_hotspot9, &_hotspot11, &_hotspot8, NULL); - - switch (_globals->_sceneManager._previousScene) { - case 2120: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - _globals->_player.setPosition(Common::Point(108, 99)); - break; - case 2200: - _globals->_player.disableControl(); - _globals->_player.setPosition(Common::Point(159, 240)); - _sceneMode = 2152; - setAction(&_sequenceManager, this, 2152, &_globals->_player, NULL); - break; - case 2280: - _globals->_player.disableControl(); - _globals->_player._angle = 180; - _globals->_player.setPosition(Common::Point(265, 80)); - - _hotspot2._frame = _hotspot2.getFrameCount(); - _sceneMode = 2157; - setAction(&_sequenceManager, this, 2157, &_hotspot2, NULL); - break; - case 2230: - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player._strip = 4; - _globals->_player.setPosition(Common::Point(229, 139)); - break; - case 2100: - default: - _globals->_player.disableControl(); - _globals->_player.setPosition(Common::Point(158, 95)); - _globals->_player.setStrip(3); - _sceneMode = 2151; - - setAction(&_sequenceManager, this, 2151, &_globals->_player, &_hotspot1, NULL); - break; - } - - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; -} - -void Scene2150::synchronize(Serializer &s) { - Scene::synchronize(s); - _rect1.synchronize(s); - _rect2.synchronize(s); -} - -void Scene2150::signal() { - switch (_sceneMode) { - case 2151: - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.enableControl(); - break; - case 2152: - case 2153: - case 2157: - _globals->_player.enableControl(); - break; - case 2154: - _globals->_sceneManager.changeScene(2120); - break; - case 2155: - _globals->_sceneManager.changeScene(2230); - break; - case 2156: - _globals->_sceneManager.changeScene(2280); - break; - } -} - -void Scene2150::dispatch() { - Scene::dispatch(); - - if (!_action) { - if (_rect1.contains(_globals->_player._position)) { - _globals->_player.disableControl(); - _sceneMode = 2156; - setAction(&_sequenceManager, this, 2156, &_globals->_player, &_hotspot2, NULL); - } - if (_rect2.contains(_globals->_player._position)) { - _globals->_player.disableControl(); - _sceneMode = 2155; - setAction(&_sequenceManager, this, 2155, &_globals->_player, &_hotspot4, NULL); - } - if (_globals->_player._position.y >= 196) { - _globals->_player.disableControl(); - SceneItem::display2(2150, 20); - - _sceneMode = 2153; - setAction(&_sequenceManager, this, 2153, &_globals->_player, NULL); - } - } -} - -/*-------------------------------------------------------------------------- - * Scene 2200 - Starcraft - AutoDoc - * - *--------------------------------------------------------------------------*/ - -void Scene2200::Action1::signal() { - Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(6); - break; - case 1: - scene->_hotspot4.animate(ANIM_MODE_5, this); - break; - case 2: - SceneItem::display2(2200, 7); - _globals->_sceneManager.changeScene(2150); - remove(); - break; - } -} - -void Scene2200::Action2::signal() { - Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(3); - break; - case 1: - setDelay(30); - break; - case 2: - scene->_hotspot4.animate(ANIM_MODE_5, this); - break; - case 3: - scene->_hotspot4.setStrip(4); - setDelay(30); - break; - case 4: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(2040, this, scene); - break; - case 5: - scene->_hotspot4.setStrip(4); - scene->_hotspot4.animate(ANIM_MODE_NONE, NULL); - _globals->_player._uiEnabled = true; - remove(); - break; - } -} - -void Scene2200::Action3::signal() { - Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - scene->_soundHandler2.play(103); - - scene->_hotspot4.setStrip(4); - scene->_hotspot4.animate(ANIM_MODE_NONE, NULL); - _globals->_player.disableControl(); - - scene->_hotspot2.postInit(); - scene->_hotspot2.setVisage(2201); - scene->_hotspot2._strip = 2; - scene->_hotspot2.setPosition(Common::Point(218, 0)); - - Common::Point pt(218, 63); - NpcMover *mover = new NpcMover(); - scene->_hotspot2.addMover(mover, &pt, this); - break; - } - case 1: - scene->_soundHandler2.play(104); - scene->_hotspot4.setStrip(2); - scene->_hotspot4.setFrame(2); - setDelay(120); - break; - case 2: - if (_globals->getFlag(83)) { - _actionIndex = 8; - setDelay(5); - } else { - for (SynchronizedList::iterator i = _globals->_sceneObjects->begin(); - i != _globals->_sceneObjects->end(); ++i) { - (*i)->hide(); - } - - _globals->_sceneManager._scene->loadScene(66); - - scene->_hotspot6.postInit(); - scene->_hotspot6.setVisage(66); - scene->_hotspot6.setPosition(Common::Point(160, 197)); - - scene->_hotspot7.postInit(); - scene->_hotspot7.setVisage(65); - scene->_hotspot7.setStrip(4); - scene->_hotspot7.setFrame(1); - scene->_hotspot7.setPosition(Common::Point(145, 165)); - - SceneItem::display(60, 1, SET_Y, 40, SET_X, 25, SET_FONT, 75, SET_BG_COLOR, -1, SET_FG_COLOR, 34, - SET_POS_MODE, 0, SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END); - _state = 1; - setDelay(1800); - } - break; - case 3: - case 4: - case 5: - SceneItem::display(60, _actionIndex - 2, SET_Y, 40, SET_X, 25, SET_FONT, 75, SET_BG_COLOR, -1, SET_FG_COLOR, 34, - SET_POS_MODE, 0, SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END); - setDelay(1800); - break; - case 6: - scene->_hotspot7.remove(); - SceneItem::display(0, 0); - _state = 0; - setDelay(5); - break; - case 7: - for (SynchronizedList::iterator i = _globals->_sceneObjects->begin(); - i != _globals->_sceneObjects->end(); ++i) - (*i)->show(); - - scene->_hotspot6.remove(); - _globals->_sceneManager._scene->loadScene(2200); - setDelay(5); - break; - case 8: - scene->_stripManager.start(2060, this, scene); - break; - case 9: - scene->_hotspot4.setStrip(4); - scene->_hotspot4.animate(ANIM_MODE_NONE, NULL); - break; - case 10: - _globals->_sceneManager.changeScene(2000); - remove(); - break; - } -} - -void Scene2200::Action3::process(Event &event) { - if (!event.handled && ((event.eventType == EVENT_KEYPRESS) || (event.eventType == EVENT_BUTTON_DOWN))) { - _state = 0; - event.handled = true; - setDelay(1); - } - - Action::process(event); -} - -void Scene2200::Action4::signal() { - Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: - scene->_stripManager.start(2202, this, scene); - break; - case 2: - scene->_hotspot4.setStrip(4); - scene->_hotspot4.animate(ANIM_MODE_NONE, NULL); - setDelay(10); - break; - case 3: - _globals->_player._uiEnabled = true; - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene2200::Hotspot3::doAction(int action) { - Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2200, 10); - break; - case CURSOR_USE: - SceneItem::display2(2200, 11); - break; - case CURSOR_TALK: - _globals->_player._uiEnabled = false; - scene->setAction(&scene->_action4); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2200::Hotspot5::doAction(int action) { - Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2200, 8); - break; - case CURSOR_USE: - SceneItem::display2(2200, 9); - break; - case CURSOR_TALK: - scene->_sceneMode = 2201; - _globals->_player._uiEnabled = false; - scene->setAction(&scene->_sequenceManager, scene, 2201, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2200::Hotspot9::doAction(int action) { - Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2200, _globals->getFlag(8) ? 1 : 0); - break; - case CURSOR_USE: - SceneItem::display2(2200, 3); - break; - case OBJECT_INFODISK: - if (_globals->_sceneManager._previousScene == 2310) { - scene->_soundHandler2.play(35); - _globals->_player.disableControl(); - scene->setAction(&scene->_action3); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - - -Scene2200::Scene2200() : - _hotspot1(0, CURSOR_LOOK, 2200, 5, CURSOR_USE, 2200, 6, LIST_END), - _hotspot10(0, CURSOR_LOOK, 2200, 4, LIST_END) { -} - -void Scene2200::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(0, 200, 200, 200); - loadScene(2200); - - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSL); - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerMR); - _stripManager.addSpeaker(&_speakerGameText); - - _speakerQText._npc = &_globals->_player; - _speakerSText._npc = &_hotspot5; - _speakerMText._npc = &_hotspot3; - - _stripManager.setCallback(this); - - _hotspot5.postInit(); - _hotspot5.setVisage(2840); - _hotspot5.setPosition(Common::Point(50, 235)); - - _hotspot8.postInit(); - _hotspot8.setVisage(2840); - _hotspot8.setStrip(2); - _hotspot8.setPosition(Common::Point(96, 184)); - _hotspot8.fixPriority(236); - - _globals->_player.postInit(); - _globals->_player.setVisage(2640); - _globals->_player.setFrame2(3); - _globals->_player.setPosition(Common::Point(110, 233)); - _globals->_player.disableControl(); - - switch (_globals->_sceneManager._previousScene) { - case 2150: - _hotspot5.remove(); - _hotspot8.remove(); - break; - case 4000: - _globals->_soundHandler.play(100); - _globals->_soundHandler.holdAt(true); - _globals->_player.remove(); - _hotspot5.remove(); - _hotspot8.remove(); - - _hotspot1.postInit(); - _hotspot1.setVisage(2202); - _hotspot1.setPosition(Common::Point(175, 173)); - _hotspot1.fixPriority(99); - - _hotspot3.postInit(); - _hotspot3.setVisage(2202); - _hotspot3._strip = 2; - _hotspot3.setPosition(Common::Point(152, 76)); - _hotspot3.fixPriority(100); - - _hotspot4.postInit(); - _hotspot4.setVisage(2202); - _hotspot4._strip = 3; - _hotspot4.setPosition(Common::Point(115, 76)); - _hotspot4.fixPriority(200); - - setAction(&_action1); - break; - case 2310: - default: - RING_INVENTORY._infoDisk._sceneNumber = 1; - - _hotspot3.postInit(); - _hotspot3.setVisage(2215); - _hotspot3.setPosition(Common::Point(144, 132)); - _globals->_sceneItems.push_back(&_hotspot3); - - _hotspot4.postInit(); - _hotspot4.setVisage(2215); - _hotspot4._strip = 2; - _hotspot4.setPosition(Common::Point(120, 78)); - _hotspot4.fixPriority(255); - _globals->_sceneItems.push_back(&_hotspot4); - - _soundHandler1.play(101); - _soundHandler2.play(100); - _globals->_soundHandler.holdAt(true); - - _globals->_sceneItems.push_back(&_hotspot5); - setAction(&_action2); - break; - } - - _exitRect = Rect(0, 0, 35, SCREEN_HEIGHT); - _hotspot9.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot10.setBounds(Rect(87, 43, 149, 109)); - - _globals->_sceneItems.addItems(&_hotspot10, &_hotspot9, NULL); - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; -} - -void Scene2200::stripCallback(int v) { - switch (v) { - case 1: - _hotspot4.setStrip(3); - _hotspot4.animate(ANIM_MODE_7, 0, NULL); - break; - case 2: - _hotspot4.setStrip(4); - _hotspot4.animate(ANIM_MODE_NONE, NULL); - break; - } -} - -void Scene2200::synchronize(Serializer &s) { - Scene::synchronize(s); - _exitRect.synchronize(s); -} - -void Scene2200::signal() { - if ((_sceneMode == 2201) || (_sceneMode == 2202)) - _globals->_player._uiEnabled = true; -} - -void Scene2200::dispatch() { - Scene::dispatch(); - - if (!_action) { - if (_exitRect.contains(_globals->_player._position)) - _globals->_sceneManager.changeScene(2150); - } -} - -/*-------------------------------------------------------------------------- - * Scene 2222 - Stasis Field Map - * - *--------------------------------------------------------------------------*/ - -void Scene2222::Action1::signal() { - Scene2222 *scene = (Scene2222 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: - scene->_stripManager.start(2222, this); - break; - case 2: - setDelay(30); - break; - case 3: - _globals->_sceneManager.changeScene(1000); - break; - } -} - -void Scene2222::Action2::signal() { - Scene2222 *scene = (Scene2222 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - scene->_stripManager.start(5700, this); - break; - case 2: - setDelay(120); - break; - case 3: - _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; - _globals->_sceneManager.changeScene(2100); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene2222::postInit(SceneObjectList *OwnerList) { - loadScene((_globals->_sceneManager._previousScene == 2000) ? 3400 : 3450); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSR); - _stripManager.addSpeaker(&_speakerML); - - _hotspot1.postInit(); - _hotspot1.setVisage(3401); - _hotspot1.setStrip2(1); - _hotspot1._frame = 1; - _hotspot1.animate(ANIM_MODE_2, 0); - - _hotspot2.postInit(); - _hotspot2.setVisage(3401); - _hotspot2.setStrip2(2); - _hotspot2._frame = 2; - _hotspot2.animate(ANIM_MODE_2, 0); - - _hotspot3.postInit(); - _hotspot3.setVisage(3401); - _hotspot3.setStrip2(2); - _hotspot3._frame = 3; - _hotspot3.animate(ANIM_MODE_2, 0); - - _hotspot4.postInit(); - _hotspot4.setVisage(3401); - _hotspot4.setStrip2(2); - _hotspot4._frame = 4; - _hotspot4.animate(ANIM_MODE_2, 0); - - _hotspot5.postInit(); - _hotspot5.setVisage(3401); - _hotspot5.setStrip2(2); - _hotspot5.setFrame(5); - _hotspot5.animate(ANIM_MODE_2, 0); - - if (_globals->_sceneManager._previousScene == 2100) { - _hotspot1.setPosition(Common::Point(61, 101)); - _hotspot2.setPosition(Common::Point(239, 149)); - _hotspot3.setPosition(Common::Point(184, 85)); - _hotspot4.setPosition(Common::Point(105, 165)); - _hotspot5.remove(); - - setAction(&_action2); - } else { - _hotspot1.setPosition(Common::Point(110, 108)); - _hotspot2.setPosition(Common::Point(175, 136)); - _hotspot3.setPosition(Common::Point(162, 96)); - _hotspot4.setPosition(Common::Point(118, 141)); - _hotspot5.setPosition(Common::Point(124, 107)); - - setAction(&_action1); - } - - _soundHandler.play(116); - _globals->_sceneManager._scene->_sceneBounds.center(_hotspot1._position); - - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; -} - - -/*-------------------------------------------------------------------------- - * Scene 2230 - Starcraft - Quinn's Room - * - *--------------------------------------------------------------------------*/ - -void Scene2230::Action1::signal() { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - switch (scene->_field30A) { - case 1: - scene->setAction(&scene->_action3); - break; - case 2: - scene->setAction(&scene->_action6); - break; - default: - setDelay(10); - break; - } - break; - case 1: { - Common::Point pt(84, 74); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - scene->_hotspot1.animate(ANIM_MODE_5, this); - break; - case 3: { - Common::Point pt(63, 60); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 4: - scene->_hotspot1.animate(ANIM_MODE_6, this); - break; - case 5: - _globals->_sceneManager.changeScene(2150); - break; - } -} - -void Scene2230::Action2::signal() { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - switch (scene->_field30A) { - case 2: - scene->setAction(&scene->_action6, this); - break; - default: - setDelay(10); - break; - } - break; - case 1: { - _globals->_player.disableControl(); - scene->_field30A = 1; - _globals->_player._regionBitList |= ~0x80; - Common::Point pt(160, 96); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - _globals->_player.setVisage(2235); - _globals->_player.setStrip2(1); - _globals->_player.fixPriority(100); - _globals->_player._frame = 1; - _globals->_player.setPosition(Common::Point(200, 68)); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 3: - scene->_soundHandler.play(157); - _globals->_player._moveDiff = Common::Point(1, 1); - _globals->_player.setAction(&scene->_action4); - _globals->_player._uiEnabled = true; - - _globals->_events.setCursor(CURSOR_USE); - remove(); - break; - } -} - -void Scene2230::Action3::signal() { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.setAction(NULL); - _globals->_player._moveDiff = Common::Point(5, 3); - _globals->_player.setStrip2(_globals->_player._strip); - - Common::Point pt(190, 74); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - - scene->_soundHandler.stop(); - break; - } - case 1: - _globals->_player._strip = 3; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - _globals->_player._regionBitList |= 0x80; - scene->_field30A = 0; - - _globals->_player.setVisage(0); - _globals->_player.setStrip2(-1); - _globals->_player.fixPriority(-1); - _globals->_player.setPosition(Common::Point(164, 96)); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player._canWalk = true; - - _globals->_events.setCursor(CURSOR_USE); - remove(); - } -} - -void Scene2230::Action4::signal() { - switch (_actionIndex++) { - case 0: - Common::Point pt(190 + _globals->_randomSource.getRandomNumber(9), 68); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - _actionIndex = 0; - break; - } -} - -void Scene2230::Action5::signal() { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - switch (scene->_field30A) { - case 2: - scene->setAction(&scene->_action3, this); - break; - default: - setDelay(10); - break; - } - break; - case 1: { - _globals->_player.disableControl(); - Common::Point pt(209, 124); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - _globals->_player.fixPriority(1430); - _globals->_player.setVisage(2232); - _globals->_player._strip = 1; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 3: - _globals->_events.setCursor(CURSOR_USE); - _globals->_player._uiEnabled = true; - scene->_field30A = 2; - remove(); - break; - } -} - -void Scene2230::Action6::signal() { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player._strip = 2; - _globals->_player._frame = 1; - _globals->_player.fixPriority(-1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 1: - scene->_field30A = 0; - _globals->_player.setVisage(0); - _globals->_player._strip = 1; - _globals->_player._canWalk = true; - _globals->_player.animate(ANIM_MODE_1, NULL); - remove(); - break; - } -} - -void Scene2230::Action7::signal() { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - - switch (scene->_field30A) { - case 1: - scene->setAction(&scene->_action3, this); - break; - case 2: - scene->setAction(&scene->_action6, this); - break; - default: - setDelay(10); - break; - } - break; - case 1: { - Common::Point pt(140, 119); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: { - scene->_soundHandler.play(158); - scene->_hotspot8.setStrip2(2); - - Common::Point pt(scene->_hotspot8._position.x, 97); - NpcMover *mover = new NpcMover(); - scene->_hotspot8.addMover(mover, &pt, this); - break; - } - case 3: - scene->_hotspot2.postInit(); - scene->_hotspot2.setVisage(2231); - scene->_hotspot2._strip = 3; - scene->_hotspot2.setPosition(Common::Point(166, 116)); - scene->_hotspot2.fixPriority(131); - scene->_hotspot2.animate(ANIM_MODE_5, this); - - scene->_hotspot8._frame = 2; - break; - case 4: - _globals->_sceneItems.push_front(&scene->_hotspot10); - _globals->_sceneItems.push_front(&scene->_hotspot11); - _globals->_sceneItems.push_front(&scene->_hotspot12); - - scene->_hotspot2.remove(); - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene2230::Action8::signal() { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - - switch (scene->_field30A) { - case 1: - scene->setAction(&scene->_action3, this); - break; - case 2: - scene->setAction(&scene->_action6, this); - break; - default: - setDelay(10); - break; - } - break; - case 1: { - Common::Point pt(140, 119); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: { - _globals->_sceneItems.remove(&scene->_hotspot10); - _globals->_sceneItems.remove(&scene->_hotspot11); - _globals->_sceneItems.remove(&scene->_hotspot12); - - switch (scene->_field30A) { - case 1: - scene->setAction(&scene->_action3, this); - break; - case 2: - scene->setAction(&scene->_action6, this); - break; - default: - setDelay(10); - break; - } - break; - } - case 3: - scene->_hotspot2.postInit(); - scene->_hotspot2.setVisage(2231); - scene->_hotspot2._strip = 3; - scene->_hotspot2._frame = scene->_hotspot2.getFrameCount(); - scene->_hotspot2.setPosition(Common::Point(166, 116)); - scene->_hotspot2.fixPriority(131); - scene->_hotspot2.animate(ANIM_MODE_6, this); - break; - case 4: { - scene->_soundHandler.play(158); - scene->_hotspot2.remove(); - scene->_hotspot8._frame = 1; - - Common::Point pt(scene->_hotspot8._position.x, 133); - NpcMover *mover = new NpcMover(); - scene->_hotspot8.addMover(mover, &pt, this); - break; - } - case 5: - scene->_hotspot8.setStrip2(1); - _globals->_player.enableControl(); - - remove(); - break; - } -} - - -/*--------------------------------------------------------------------------*/ - -void Scene2230::Hotspot1::doAction(int action) { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2230, 0); - break; - case CURSOR_USE: - scene->setAction(&scene->_action1); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot3::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(4)) - SceneItem::display2(2230, 1); - else { - SceneItem::display2(2230, 1); - SceneItem::display2(2230, 2); - SceneItem::display2(2230, 3); - _globals->setFlag(4); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot4::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(30)) - SceneItem::display2(2230, 6); - else if (_globals->getFlag(29)) { - SceneItem::display2(2230, 5); - _globals->setFlag(30); - } else { - SceneItem::display2(2230, 4); - _globals->setFlag(29); - } - break; - case CURSOR_USE: - SceneItem::display2(2230, 7); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot5::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(5)) - SceneItem::display2(2230, 9); - else { - _globals->setFlag(5); - SceneItem::display2(2230, 8); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot6::doAction(int action) { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(6)) - SceneItem::display2(2230, 11); - else { - _globals->setFlag(6); - SceneItem::display2(2230, 10); - } - break; - case CURSOR_USE: - if (scene->_field30A == 1) - scene->setAction(&scene->_action3); - else if (_globals->getFlag(13)) - SceneItem::display2(2230, 28); - else - scene->setAction(&scene->_action2); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot7::doAction(int action) { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(7)) - SceneItem::display2(2230, 13); - else { - _globals->setFlag(6); - SceneItem::display2(2230, 12); - } - break; - case CURSOR_USE: - if (scene->_field30A == 2) - scene->setAction(&scene->_action6); - else if (_globals->getFlag(13)) - SceneItem::display2(2230, 29); - else - scene->setAction(&scene->_action5); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot8::doAction(int action) { - Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (scene->_hotspot8._strip == 1) { - if (_globals->getFlag(22)) - SceneItem::display2(2230, 19); - else { - _globals->setFlag(22); - SceneItem::display2(2230, 14); - } - } else { - if (_globals->getFlag(25)) - SceneItem::display2(2230, 21); - else { - _globals->setFlag(25); - SceneItem::display2(2230, 20); - } - } - break; - case CURSOR_USE: - if (scene->_hotspot8._strip == 1) - scene->setAction(&scene->_action7); - else - scene->setAction(&scene->_action8); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot10::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(26)) - SceneItem::display2(2230, 25); - else { - _globals->setFlag(26); - SceneItem::display2(2230, 24); - } - break; - case CURSOR_USE: - SceneItem::display2(2230, 28); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot11::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(27)) - SceneItem::display2(2230, 23); - else { - _globals->setFlag(27); - SceneItem::display2(2230, 22); - } - break; - case CURSOR_USE: - SceneItem::display2(2230, 28); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2230::Hotspot12::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(28)) - SceneItem::display2(2230, 27); - else { - _globals->setFlag(28); - SceneItem::display2(2230, 26); - } - break; - case CURSOR_USE: - SceneItem::display2(2230, 28); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene2230::Scene2230() : - _hotspot9(0, CURSOR_LOOK, 2230, 16, CURSOR_USE, 2230, 18, LIST_END) { -} - -void Scene2230::postInit(SceneObjectList *OwnerList) { - loadScene(2230); - Scene::postInit(); - setZoomPercents(75, 80, 120, 100); - - _hotspot1.postInit(); - _hotspot1.setVisage(2230); - _hotspot1._frame = 1; - _hotspot1.animate(ANIM_MODE_NONE, 0); - _hotspot1.setPosition(Common::Point(72, 69)); - _hotspot1.changeZoom(100); - - _hotspot8.postInit(); - _hotspot8.setVisage(2231); - _hotspot8._frame = 1; - _hotspot8.animate(ANIM_MODE_NONE, 0); - _hotspot8.setPosition(Common::Point(164, 133)); - _hotspot8.changeZoom(100); - _hotspot8.fixPriority(129); - - _rect1 = Rect(59, 64, 89, 74); - - _globals->_player.postInit(); - _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0); - _globals->_player.animate(ANIM_MODE_1, 0); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(80, 80)); - _globals->_player._moveDiff.y = 3; - _globals->_player._regionBitList |= 0x80; - _globals->_player.changeZoom(-1); - - _field30A = 0; - _globals->_player.enableControl(); - - _hotspot5.setBounds(Rect(108, 34, 142, 76)); - _hotspot4.setBounds(Rect(92, 14, 106, 57)); - _hotspot6.setBounds(Rect(169, 58, 261, 95)); - _hotspot7.setBounds(Rect(111, 117, 222, 158)); - _hotspot3.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot10.setBounds(Rect(170, 96, 176, 106)); - _hotspot11.setBounds(Rect(158, 109, 164, 115)); - _hotspot12.setBounds(Rect(170, 109, 177, 115)); - - _globals->_sceneItems.addItems(&_hotspot8, &_hotspot5, &_hotspot4, &_hotspot6, &_hotspot7, - &_hotspot1, &_hotspot3, NULL); - - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; -} - -void Scene2230::synchronize(Serializer &s) { - Scene::synchronize(s); - _rect1.synchronize(s); - s.syncAsSint16LE(_field30A); -} - -void Scene2230::dispatch() { - Scene::dispatch(); - - if (!_action) { - if (_rect1.contains(_globals->_player._position)) - setAction(&_action1); - } -} - -/*-------------------------------------------------------------------------- - * Scene 2280 - Starcraft - Storage Room - * - *--------------------------------------------------------------------------*/ - -void Scene2280::Action1::signal() { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - Common::Point pt(192, 97); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - scene->_soundHandler.play(162); - scene->_hotspot16.animate(ANIM_MODE_5, this); - break; - case 2: { - Common::Point pt(218, 87); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: - _globals->_player.setStrip(3); - setDelay(10); - break; - case 4: - _globals->_player.fixPriority(1); - scene->_soundHandler.play(162); - scene->_hotspot16.animate(ANIM_MODE_6, this); - break; - case 5: - _globals->_sceneManager.changeScene(7000); - break; - } -} - -void Scene2280::Action2::signal() { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - Common::Point pt(94, 117); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - scene->_soundHandler.play(265); - - _globals->_player.setVisage(2162); - _globals->_player._frame = 1; - _globals->_player._strip = 1; - _globals->_player.animate(ANIM_MODE_5, this); - - scene->_hotspot8.remove(); - scene->_hotspot10.remove(); - break; - case 2: - _globals->_player._frame = 1; - _globals->_player._strip = 2; - _globals->_player.animate(ANIM_MODE_4, 3, 1, this); - break; - case 3: - _globals->_player.animate(ANIM_MODE_5, this); - scene->_hotspot12.remove(); - break; - case 4: - scene->_soundHandler.play(266); - _globals->_player.setVisage(2170); - _globals->_player._frame = 1; - _globals->_player._strip = 4; - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player._moveDiff = Common::Point(4, 1); - - _globals->setFlag(13); - SceneItem::display2(2280, 37); - - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene2280::Action3::signal() { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - Common::Point pt(94, 117); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - scene->_soundHandler.play(265); - - _globals->_player.setVisage(2162); - _globals->_player._frame = 6; - _globals->_player._strip = 2; - _globals->_player.animate(ANIM_MODE_4, 3, -1, this); - break; - case 2: - scene->_hotspot12.postInit(); - scene->_hotspot12.setVisage(2280); - scene->_hotspot12._strip = 2; - scene->_hotspot12._frame = 3; - scene->_hotspot12.setPosition(Common::Point(88, 76)); - scene->_hotspot12.fixPriority(1); - - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 3: - _globals->_player._strip = 1; - _globals->_player._frame = 12; - - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 4: - scene->_hotspot8.postInit(); - scene->_hotspot8.setVisage(2280); - scene->_hotspot8._strip = 2; - scene->_hotspot8._frame = 1; - scene->_hotspot8.animate(ANIM_MODE_NONE, NULL); - scene->_hotspot8.setPosition(Common::Point(79, 108)); - scene->_hotspot8.changeZoom(100); - scene->_hotspot8.fixPriority(1); - - scene->_hotspot10.postInit(); - scene->_hotspot10.setVisage(2280); - scene->_hotspot10._strip = 2; - scene->_hotspot10._frame = 2; - scene->_hotspot10.animate(ANIM_MODE_NONE, NULL); - scene->_hotspot10.setPosition(Common::Point(79, 104)); - scene->_hotspot10.changeZoom(100); - scene->_hotspot10.fixPriority(1); - - _globals->clearFlag(13); - - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player._strip = 4; - _globals->_player._moveDiff = Common::Point(3, 5); - - SceneItem::display2(2280, 38); - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene2280::Action4::signal() { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - switch (_state) { - case 1: - case 51: { - Common::Point pt(163, 67); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 6: - case 50: { - Common::Point pt(173, 63); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - } - break; - } - case 1: - _globals->_player.setVisage(2161); - _globals->_player._strip = 1; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - switch (_state) { - case 1: - scene->_hotspot18.remove(); - RING_INVENTORY._scanner._sceneNumber = 1; - break; - case 6: - scene->_hotspot17.remove(); - RING_INVENTORY._medkit._sceneNumber = 1; - break; - case 50: - scene->_hotspot17.postInit(); - scene->_hotspot17.setVisage(2161); - scene->_hotspot17._strip = 2; - scene->_hotspot17._frame = 1; - scene->_hotspot17.animate(ANIM_MODE_NONE, NULL); - scene->_hotspot17.setPosition(Common::Point(162, 39)); - scene->_hotspot17.changeZoom(100); - scene->_hotspot17.fixPriority(1); - - RING_INVENTORY._medkit._sceneNumber = 2280; - _globals->_sceneItems.push_front(&scene->_hotspot17); - break; - case 51: - scene->_hotspot18.postInit(); - scene->_hotspot18.setVisage(2161); - scene->_hotspot18._strip = 2; - scene->_hotspot18._frame = 2; - scene->_hotspot18.animate(ANIM_MODE_NONE, NULL); - scene->_hotspot18.setPosition(Common::Point(152, 43)); - scene->_hotspot18.changeZoom(100); - scene->_hotspot18.fixPriority(1); - - RING_INVENTORY._scanner._sceneNumber = 2280; - _globals->_sceneItems.push_front(&scene->_hotspot18); - break; - } - - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 3: - _globals->_player.enableControl(); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player._strip = 2; - - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene2280::Hotspot1::doAction(int action) { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(16)) - SceneItem::display2(2280, 22); - else { - _globals->setFlag(16); - SceneItem::display2(2230, 21); - } - break; - case CURSOR_USE: - if (!_globals->getFlag(15)) - SceneItem::display2(2280, 23); - else if (!_globals->getFlag(13)) - SceneItem::display2(2280, 46); - else { - _globals->_player.disableControl(); - scene->setAction(&scene->_action1); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot2::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(2)) - SceneItem::display2(2280, 1); - else { - _globals->setFlag(2); - SceneItem::display2(2280, 0); - } - break; - case CURSOR_USE: - SceneItem::display2(2280, 2); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot4::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(21)) - SceneItem::display2(2280, 33); - else { - _globals->setFlag(21); - SceneItem::display2(2280, 32); - } - break; - case CURSOR_USE: - SceneItem::display2(2280, 34); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot7::doAction(int action) { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2280, 24); - break; - case OBJECT_SCANNER: - if (_globals->getFlag(13)) - SceneItem::display2(2280, 43); - else { - _globals->_player.disableControl(); - scene->_action4._state = 51; - _globals->_events.setCursor(CURSOR_WALK); - _globals->_events._currentCursor = CURSOR_700; - scene->setAction(&scene->_action4); - } - break; - case OBJECT_MEDKIT: - if (_globals->getFlag(13)) - SceneItem::display2(2280, 43); - else { - _globals->_player.disableControl(); - scene->_action4._state = 50; - _globals->_events.setCursor(CURSOR_WALK); - _globals->_events._currentCursor = CURSOR_700; - scene->setAction(&scene->_action4); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot8::doAction(int action) { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2280, 3); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->setAction(&scene->_action2); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot10::doAction(int action) { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2280, 4); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->setAction(&scene->_action2); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot12::doAction(int action) { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2280, 11); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->setAction(&scene->_action2); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot14::doAction(int action) { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2280, 3); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - if (_globals->getFlag(13)) - scene->setAction(&scene->_action3); - else - scene->setAction(&scene->_action2); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot17::doAction(int action) { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(18)) - SceneItem::display2(2280, 26); - else { - _globals->setFlag(18); - SceneItem::display2(2280, 25); - } - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2280, 29); - else { - _globals->_player.disableControl(); - scene->_action4._state = 6; - scene->setAction(&scene->_action4); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2280::Hotspot18::doAction(int action) { - Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(19)) - SceneItem::display2(2280, 28); - else { - _globals->setFlag(19); - SceneItem::display2(2280, 27); - } - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2280, 29); - else { - _globals->_player.disableControl(); - scene->_action4._state = 1; - scene->setAction(&scene->_action4); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene2280::Scene2280() : - _hotspot3(0, CURSOR_LOOK, 2280, 30, CURSOR_USE, 2280, 31, LIST_END), - _hotspot5(0, CURSOR_LOOK, 2280, 35, CURSOR_USE, 2280, 36, LIST_END), - _hotspot6(0, CURSOR_LOOK, 2280, 19, CURSOR_USE, 2280, 20, LIST_END), - _hotspot9(0, CURSOR_LOOK, 2280, 5, CURSOR_USE, 2280, 6, LIST_END), - _hotspot11(0, CURSOR_LOOK, 2280, 7, CURSOR_USE, 2280, 8, LIST_END), - _hotspot13(0, CURSOR_LOOK, 2280, 9, CURSOR_USE, 2280, 10, LIST_END), - _hotspot15(0, CURSOR_LOOK, 2280, 45, LIST_END), - _hotspot16(0, CURSOR_LOOK, 2280, 16, CURSOR_USE, 2280, 42, LIST_END) { -} - -void Scene2280::postInit(SceneObjectList *OwnerList) { - loadScene(2280); - Scene::postInit(); - setZoomPercents(0, 70, 200, 100); - - _hotspot16.postInit(); - _hotspot16.setVisage(2281); - _hotspot16.setPosition(Common::Point(208, 90)); - _hotspot16.fixPriority(80); - - if (RING_INVENTORY._medkit._sceneNumber == 2280) { - _hotspot17.postInit(); - _hotspot17.setVisage(2161); - _hotspot17._strip = 2; - _hotspot17.setPosition(Common::Point(162, 39)); - _hotspot17.fixPriority(1); - - _globals->_sceneItems.push_back(&_hotspot17); - } - - if (RING_INVENTORY._scanner._sceneNumber == 2280) { - _hotspot18.postInit(); - _hotspot18.setVisage(2161); - _hotspot18._strip = 2; - _hotspot18._frame = 2; - _hotspot17.setPosition(Common::Point(152, 43)); - _hotspot17.fixPriority(1); - - _globals->_sceneItems.push_back(&_hotspot17); - } - - if (!_globals->getFlag(13)) { - _hotspot8.postInit(); - _hotspot8.setVisage(2280); - _hotspot8._strip = 2; - _hotspot8.setPosition(Common::Point(79, 108)); - _hotspot8.fixPriority(1); - - _hotspot10.postInit(); - _hotspot10.setVisage(2280); - _hotspot10._strip = 2; - _hotspot10._frame = 2; - _hotspot10.setPosition(Common::Point(79, 104)); - _hotspot10.fixPriority(2); - - _hotspot12.postInit(); - _hotspot12.setVisage(2280); - _hotspot12._strip = 2; - _hotspot12._frame = 3; - _hotspot12.setPosition(Common::Point(88, 76)); - _hotspot12.fixPriority(1); - - _globals->_sceneItems.addItems(&_hotspot8, &_hotspot10, &_hotspot12, NULL); - } - - _hotspot14.setBounds(Rect(70, 50, 90, 104)); - - _hotspot9.postInit(); - _hotspot9.setVisage(2280); - _hotspot9.setPosition(Common::Point(104, 96)); - _hotspot9.fixPriority(1); - - _hotspot11.postInit(); - _hotspot11.setVisage(2280); - _hotspot11._frame = 2; - _hotspot11.setPosition(Common::Point(130, 79)); - _hotspot11.fixPriority(1); - - _hotspot13.postInit(); - _hotspot13.setVisage(2280); - _hotspot13._frame = 3; - _hotspot13.setPosition(Common::Point(113, 63)); - _hotspot13.fixPriority(1); - - _hotspot1.setBounds(Rect(225, 70, 234, 80)); - _hotspot2.setBounds(Rect(44, 78, 56, 105)); - _hotspot3.setBounds(Rect(47, 108, 56, 117)); - _hotspot4.setBounds(Rect(56, 78, 69, 101)); - _hotspot5.setBounds(Rect(56, 108, 66, 113)); - _hotspot6.setBounds(Rect(261, 39, 276, 90)); - _hotspot7.setBounds(Rect(142, 19, 174, 38)); - _hotspot15.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - - _exitRect = Rect(145, 180, 195, 195); - - _globals->_player.postInit(); - _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(146, 161)); - _globals->_player.changeZoom(-1); - _globals->_player._moveDiff = Common::Point(4, 3); - - if ((_globals->_sceneManager._previousScene != 7300) && (_globals->_sceneManager._previousScene != 7000)) { - _globals->_player.enableControl(); - } else { - _globals->setFlag(109); - _globals->_player.fixPriority(76); - _globals->_player.disableControl(); - - _sceneMode = 2281; - setAction(&_sequenceManager, this, 2281, &_globals->_player, &_hotspot16, NULL); - - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - } - - _globals->_sceneItems.addItems(&_hotspot13, &_hotspot11, &_hotspot9, &_hotspot14, &_hotspot7, - &_hotspot6, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot1, &_hotspot16, &_hotspot15, NULL); - - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; -} - -void Scene2280::signal() { - if (_sceneMode == 2281) { - _globals->_player.fixPriority(-1); - _globals->_player.enableControl(); - } -} - -void Scene2280::dispatch() { - Scene::dispatch(); - if (!_action) { - if (_exitRect.contains(_globals->_player._position)) - _globals->_sceneManager.changeScene(2150); - } -} - -void Scene2280::synchronize(Serializer &s) { - Scene::synchronize(s); - _exitRect.synchronize(s); -} - -/*-------------------------------------------------------------------------- - * Scene 2300 - Starcraft - Hanger Bay - * - *--------------------------------------------------------------------------*/ - -void Scene2300::Action1::signal() { - // Quinn and Seeker - Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: { - Common::Point pt(SCREEN_WIDTH, SCREEN_HEIGHT); - NpcMover *mover = new NpcMover(); - scene->_hotspot2.addMover(mover, &pt, this); - break; - } - case 2: { - scene->_hotspot8.setAction(&scene->_action4); - scene->_soundHandler2.play(21); - - Common::Point pt1(95, scene->_hotspot5._position.y); - NpcMover *mover1 = new NpcMover(); - scene->_hotspot5.addMover(mover1, &pt1, this); - - Common::Point pt2(99, scene->_hotspot6._position.y); - NpcMover *mover2 = new NpcMover(); - scene->_hotspot6.addMover(mover2, &pt2, NULL); - break; - } - case 3: - setDelay(2); - _globals->_player._uiEnabled = true; - _globals->_events.setCursor(CURSOR_WALK); - break; - case 4: { - scene->_hotspot5.setVisage(93); - scene->_hotspot6.setVisage(94); - scene->_hotspot5.setStrip(1); - scene->_hotspot6.setStrip(1); - scene->_hotspot5.changeZoom(50); - scene->_hotspot6.changeZoom(50); - scene->_hotspot5._moveDiff.x = 5; - scene->_hotspot6._moveDiff.x = 5; - scene->_hotspot5.animate(ANIM_MODE_1, NULL); - scene->_hotspot6.animate(ANIM_MODE_1, NULL); - - Common::Point pt1(178, 147); - NpcMover *mover1 = new NpcMover(); - scene->_hotspot5.addMover(mover1, &pt1, this); - - Common::Point pt2(170, 145); - NpcMover *mover2 = new NpcMover(); - scene->_hotspot6.addMover(mover2, &pt2, this); - break; - } - case 6: - scene->_soundHandler1.play(28); - _globals->_player.disableControl(); - - scene->_hotspot2.setVisage(40); - scene->_hotspot2.setStrip(4); - scene->_hotspot2.setFrame(1); - scene->_hotspot2.animate(ANIM_MODE_5, NULL); - - _globals->_player.setVisage(40); - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 7: - _globals->_soundHandler.play(77, this); - break; - case 8: - _globals->_game->endGame(2300, 0); - remove(); - break; - case 9: - if (scene->_hotspot5._mover) - scene->_hotspot5.addMover(NULL); - if (scene->_hotspot6._mover) - scene->_hotspot6.addMover(NULL); - - scene->_hotspot5.animate(ANIM_MODE_NONE, NULL); - scene->_hotspot6.animate(ANIM_MODE_NONE, NULL); - - _globals->_player.disableControl(); - _globals->_player.setVisage(2672); - _globals->_player._strip = 5; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 10: - _globals->_player.setVisage(2674); - _globals->_player._strip = 5; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 11: - scene->_soundHandler1.play(28); - - scene->_hotspot5._strip = 2; - scene->_hotspot6._strip = 2; - scene->_hotspot5._frame = 1; - scene->_hotspot6._frame = 1; - scene->_hotspot5.animate(ANIM_MODE_5, NULL); - scene->_hotspot6.animate(ANIM_MODE_5, NULL); - scene->_hotspot5.fixPriority(20); - scene->_hotspot6.fixPriority(20); - - _globals->_player.setVisage(2672); - _globals->_player._strip = 5; - _globals->_player._frame = _globals->_player.getFrameCount(); - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 12: - scene->_soundHandler1.play(77); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip(4); - _globals->_player._uiEnabled = false; - setDelay(60); - break; - case 13: - scene->_stripManager.start(2300, this); - break; - case 14: - setDelay(5); - _actionIndex = 16; - break; - case 15: { - Common::Point pt1(101, 148); - PlayerMover *mover1 = new PlayerMover(); - _globals->_player.addMover(mover1, &pt1, this); - - Common::Point pt2(scene->_hotspot5._position.x + 5, scene->_hotspot5._position.y + 5); - NpcMover *mover2 = new NpcMover(); - scene->_hotspot2.addMover(mover2, &pt2, NULL); - break; - } - case 16: - _globals->_sceneManager.changeScene(2000); - remove(); - break; - } -} - -void Scene2300::Action2::signal() { - // Miranda tearing cables - Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(30); - break; - case 1: { - Common::Point pt(153, 135); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(2030, this); - break; - case 3: - _globals->_player.enableControl(); - setDelay(600); - break; - case 4: { - _globals->_player.disableControl(); - - scene->_hotspot2.postInit(); - scene->_hotspot2.setVisage(2801); - scene->_hotspot2.setPosition(Common::Point(109, 145)); - scene->_hotspot2.changeZoom(50); - scene->_hotspot2.animate(ANIM_MODE_1, NULL); - scene->_hotspot2.setObjectWrapper(new SceneObjectWrapper()); - - Common::Point pt(160, 145); - NpcMover *mover = new NpcMover(); - scene->_hotspot2.addMover(mover, &pt, this); - break; - } - case 5: - scene->_stripManager.start(2032, this); - break; - case 6: - scene->_hotspot2.setVisage(93); - scene->_hotspot2.setStrip(3); - scene->_hotspot2.setFrame(1); - scene->_hotspot2.animate(ANIM_MODE_5, this); - - scene->_soundHandler1.play(28); - scene->_soundHandler2.play(97); - break; - case 7: - scene->_hotspot7._strip = 2; - scene->_hotspot7._frame = 1; - scene->_hotspot7.animate(ANIM_MODE_5, this); - break; - case 8: - scene->_hotspot2.animate(ANIM_MODE_6, this); - break; - case 9: - scene->_stripManager.start(2035, this); - break; - case 10: - _globals->_sceneManager.changeScene(2310); - break; - } -} - -void Scene2300::Action3::signal() { - // Stunned Miranda - Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - Common::Point pt(153, 135); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - _globals->_player.disableControl(); - _globals->_player.setVisage(2672); - _globals->_player._strip = 2; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - _globals->_player.setVisage(2674); - _globals->_player._strip = 2; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 3: - scene->_soundHandler1.play(97); - scene->_soundHandler2.play(28); - - scene->_hotspot7._strip = 2; - scene->_hotspot7._frame = 1; - scene->_hotspot7.animate(ANIM_MODE_5, this); - - _globals->_player.setVisage(2672); - _globals->_player._strip = 2; - _globals->_player._frame = _globals->_player.getFrameCount(); - _globals->_player.animate(ANIM_MODE_6, NULL); - break; - case 4: - scene->_soundHandler2.play(97); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip(1); - scene->_stripManager.start(2034, this); - break; - case 5: - setDelay(10); - break; - case 6: - _globals->_sceneManager.changeScene(2310); - break; - } -} - -void Scene2300::Action4::signal() { - // Ennemies coming - Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_hotspot8.animate(ANIM_MODE_5, this); - scene->_soundHandler1.play(11); - break; - case 1: - scene->_hotspot9.postInit(); - scene->_hotspot9.setVisage(2301); - scene->_hotspot9.setStrip2(2); - scene->_hotspot9.setFrame(3); - scene->_hotspot9.setPosition(Common::Point(273, 199)); - scene->_hotspot9.fixPriority(19); - scene->_hotspot9.animate(ANIM_MODE_5, this); - scene->_soundHandler1.play(11); - break; - case 2: - scene->_hotspot8.remove(); - - scene->_hotspot10.postInit(); - scene->_hotspot10.setVisage(2301); - scene->_hotspot10.setStrip(3); - scene->_hotspot10.setFrame(4); - scene->_hotspot10.setPosition(Common::Point(292, 113)); - scene->_hotspot10.animate(ANIM_MODE_5, this); - scene->_soundHandler1.play(11); - break; - case 3: - scene->_soundHandler1.play(13); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene2300::Hotspot5::doAction(int action) { - // Ennemies - Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - _globals->_player.disableControl(); - _globals->_player.addMover(NULL); - scene->_action1.setActionIndex(9); - scene->_action1.setDelay(1); - break; - case CURSOR_LOOK: - SceneItem::display2(2300, 3); - break; - case CURSOR_USE: - SceneItem::display2(2300, 4); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2300::Hotspot7::doAction(int action) { - // Miranda - Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - scene->setAction(&scene->_action3); - break; - case CURSOR_LOOK: - SceneItem::display2(2300, 2); - break; - case CURSOR_USE: - SceneItem::display2(2300, 21); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene2300::Scene2300() : - _hotspot11(0, CURSOR_LOOK, 2300, 6, CURSOR_USE, 2300, 14, LIST_END), - _hotspot12(0, CURSOR_LOOK, 2300, 5, CURSOR_USE, 2300, 13, LIST_END), - _hotspot13(0, CURSOR_LOOK, 2300, 9, CURSOR_USE, 2300, 20, LIST_END), - _hotspot14(0, CURSOR_LOOK, 2300, 7, CURSOR_USE, 2300, 15, LIST_END), - _hotspot15(0, CURSOR_LOOK, 2300, 1, LIST_END) { -} - -void Scene2300::postInit(SceneObjectList *OwnerList) { - loadScene(2300); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerSL); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSText); - - RING_INVENTORY._stunner._sceneNumber = 1; - RING_INVENTORY._infoDisk._sceneNumber = 1; - - _hotspot8.postInit(); - _hotspot8.setVisage(2301); - _hotspot8.setPosition(Common::Point(288, 74)); - - _globals->_soundHandler.play(96); - if (_globals->_sceneManager._previousScene == 2000) { - _hotspot8.remove(); - - _hotspot9.postInit(); - _hotspot9.setVisage(2301); - _hotspot9.setStrip2(2); - _hotspot9._frame = _hotspot9.getFrameCount(); - _hotspot9.setPosition(Common::Point(273, 199)); - _hotspot9.fixPriority(1); - - _hotspot10.postInit(); - _hotspot10.setVisage(2301); - _hotspot10.setStrip(3); - _hotspot10._frame = _hotspot10.getFrameCount(); - _hotspot10.setPosition(Common::Point(292, 113)); - - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.setPosition(Common::Point(109, 139)); - _globals->_player.changeZoom(40); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.disableControl(); - - _hotspot7.postInit(); - _hotspot7.setVisage(2302); - _hotspot7.animate(ANIM_MODE_2, NULL); - _hotspot7.setPosition(Common::Point(229, 125)); - _hotspot7._numFrames = 5; - - _soundHandler1.play(95); - _soundHandler2.play(96); - _globals->_sceneItems.push_back(&_hotspot7); - - setAction(&_action2); - } else { - _hotspot8._numFrames = 3; - - _hotspot3.postInit(); - _hotspot3.setVisage(2331); - _hotspot3.setStrip(7); - _hotspot3.setPosition(Common::Point(231, 190)); - _hotspot3.changeZoom(40); - - _hotspot2.postInit(); - _hotspot2.setVisage(2801); - _hotspot2.setPosition(Common::Point(269, 195)); - _hotspot2.changeZoom(50); - _hotspot2.animate(ANIM_MODE_1, NULL); - _hotspot2.setObjectWrapper(new SceneObjectWrapper()); - - _hotspot1.postInit(); - _hotspot1.setVisage(2331); - _hotspot1.setStrip(7); - _hotspot1.setPosition(Common::Point(255, 190)); - _hotspot1.changeZoom(40); - - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.setPosition(Common::Point(203, 191)); - _globals->_player.changeZoom(40); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.disableControl(); - - _hotspot5.postInit(); - _hotspot5.setVisage(91); - _hotspot5.setPosition(Common::Point(343, 145)); - _hotspot5._moveDiff = Common::Point(35, 35); - _hotspot5.changeZoom(40); - _hotspot5.setObjectWrapper(new SceneObjectWrapper()); - - _hotspot6.postInit(); - _hotspot6.setVisage(92); - _hotspot6.setPosition(Common::Point(343, 130)); - _hotspot6._moveDiff = Common::Point(35, 35); - _hotspot6.changeZoom(40); - _hotspot6.setObjectWrapper(new SceneObjectWrapper()); - - _globals->_sceneItems.push_back(&_hotspot5); - setAction(&_action1); - } - - _hotspot12._sceneRegionId = 8; - _hotspot11._sceneRegionId = 9; - _hotspot13._sceneRegionId = 10; - _hotspot14._sceneRegionId = 11; - - _hotspot15.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _globals->_sceneItems.addItems(&_hotspot12, &_hotspot11, &_hotspot13, &_hotspot14, &_hotspot15, NULL); -} - -/*-------------------------------------------------------------------------- - * Scene 2310 - Starcraft - Copy Protection Screen - * - *--------------------------------------------------------------------------*/ - -Scene2310::Scene2310() { - _pageList[0].set(0, 0, 0, 0, 0, 0); - _pageList[1].set(1, 0, 3, 2, 1, 4); - _pageList[2].set(2, 1, 4, 3, 2, 0); - _pageList[3].set(3, 2, 0, 4, 3, 1); - _pageList[4].set(4, 3, 1, 0, 2, 4); - _pageList[5].set(5, 4, 2, 1, 3, 0); - _pageList[6].set(6, 0, 4, 2, 3, 1); - _pageList[7].set(7, 1, 0, 2, 4, 3); - _pageList[8].set(8, 2, 1, 3, 0, 4); - _pageList[9].set(9, 3, 2, 4, 1, 0); - _pageList[10].set(10, 4, 1, 2, 0, 3); - _pageList[11].set(11, 0, 2, 3, 4, 1); - _pageList[12].set(12, 1, 2, 0, 4, 3); - _pageList[13].set(13, 2, 4, 0, 3, 1); - _pageList[14].set(14, 3, 4, 1, 0, 2); - _pageList[15].set(15, 4, 3, 1, 2, 0); - _pageList[16].set(16, 0, 1, 4, 2, 3); - _pageList[17].set(17, 1, 3, 4, 0, 2); - _pageList[18].set(18, 2, 3, 0, 1, 4); - _pageList[19].set(19, 3, 0, 1, 4, 2); - _pageList[20].set(20, 4, 0, 3, 1, 2); - - _rectList[0].set(135, 70, 151, 140); - _rectList[1].set(151, 70, 167, 140); - _rectList[2].set(167, 70, 183, 140); - _rectList[3].set(183, 70, 199, 140); - _rectList[4].set(199, 70, 215, 140); - - _wireIndex = 5; -} - -void Scene2310::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - loadScene(2301); - Common::Point pointList[5] = { Common::Point(142, 82), Common::Point(158, 82), Common::Point(174, 82), - Common::Point(190, 82), Common::Point(205, 82) }; - - for (int idx = 0; idx < 5; ++idx) { - _wireList[idx].postInit(); - _wireList[idx].setVisage(2300); - _wireList[idx]._strip = idx + 1; - _wireList[idx]._frame = 1; - _wireList[idx].setPosition(pointList[idx]); - } - - _globals->_player.disableControl(); - _globals->_events.setCursor(CURSOR_WALK); - - if (_vm->getFeatures() & GF_CD) - _pageIndex = _globals->_randomSource.getRandomNumber(14) + 2; - else - _pageIndex = _globals->_randomSource.getRandomNumber(19) + 1; - signal(); -} - -void Scene2310::signal() { - switch (_sceneMode++) { - case 0: { - Common::String fmtString = _resourceManager->getMessage(2300, 22); - Common::String msg = Common::String::format(fmtString.c_str(), _pageList[_pageIndex]._pageNumber); - - _sceneText._width = 280; - _sceneText._textMode = ALIGN_CENTER; - _sceneText._color1 = 35; - _sceneText._fontNumber = 2; - _sceneText.setup(msg); - _sceneText.fixPriority(255); - _sceneText.setPosition(Common::Point(30, 20)); - break; - } - case 1: { - Common::String msg = _resourceManager->getMessage(2300, 23); - _sceneText.setup(msg); - _sceneText.fixPriority(255); - _sceneText.setPosition(Common::Point(30, 170)); - - _globals->_sceneObjects->draw(); - _globals->_events.waitForPress(); - - _sceneText.hide(); - _globals->_sceneObjects->draw(); - - _globals->_sceneManager.changeScene(2200); - break; - } - } -} - -void Scene2310::synchronize(Serializer &s) { - Scene::synchronize(s); - - s.syncAsSint16LE(_wireIndex); - s.syncAsSint16LE(_pageIndex); -} - -void Scene2310::process(Event &event) { - int frameNum = 0; - - if (!event.handled && (event.eventType == EVENT_BUTTON_DOWN)) { - int idx = 0; - while (idx < 5) { - if (_rectList[idx].contains(event.mousePos)) - break; - ++idx; - } - - if (idx < 5) { - // In handled rectangle area - if (_wireIndex == 5) { - // No wire is currently active, so start moving designated wire - _wireIndex = idx; - frameNum = idx + 2; - - if (event.mousePos.y > 105) - idx = findObject(idx); - - if (idx != 5) { - _wireList[idx].hide(); - _globals->_sceneObjects->draw(); - _wireList[idx].setFrame(frameNum); - - _wireList[idx].show(); - _globals->_sceneObjects->draw(); - } - } else { - // End the moving of the currently active wire - _wireList[_wireIndex].setFrame(idx + 2); - _wireIndex = 5; - - // Check if solution has been reached - int idx2 = 0; - do { - int objIndex = findObject(idx2); - if (_pageList[_pageIndex]._connectionList[idx2] != objIndex) - // Mismatch - break; - } while (++idx2 < 5); - - if (idx2 == 5) - // All the entries are correct - signal(); - } - - event.handled = true; - } else if (_wireIndex != 5) { - // Reset the active wire back to unplugged - _wireList[_wireIndex].setFrame(1); - _wireIndex = 5; - } - } -} - -void Scene2310::dispatch() { - if (_wireIndex != 5) { - for (int idx = 0; idx < 5; ++idx) { - if (_rectList[idx].contains(_globals->_events._mousePos)) { - _wireList[_wireIndex].setFrame(idx + 2); - return; - } - } - - _wireList[_wireIndex].setFrame(1); - } -} - -int Scene2310::findObject(int objIndex) { - for (int idx = 0; idx < 5; ++idx) { - if (_wireList[idx]._frame == (objIndex + 2)) - return idx; - } - - return 5; -} - -/*-------------------------------------------------------------------------- - * Scene 2320 - Starcraft - Lander Bay - * - *--------------------------------------------------------------------------*/ - -void Scene2320::Action1::signal() { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - if (_globals->_sceneManager._previousScene == 2120) - _actionIndex = 3; - break; - case 1: { - Common::Point pt(513, 144); - NpcMover *mover = new NpcMover(); - scene->_hotspot11.addMover(mover, &pt, this); - break; - } - case 2: { - Common::Point pt(510, 164); - NpcMover *mover = new NpcMover(); - scene->_hotspot11.addMover(mover, &pt, this); - break; - } - case 3: - setAction(&scene->_sequenceManager2, this, 2328, &scene->_hotspot11, NULL); - break; - case 4: - scene->_hotspot11.animate(ANIM_MODE_NONE); - setDelay(120); - _actionIndex = 3; - break; - } -} - -void Scene2320::Action2::signal() { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - scene->_soundHandler.play(253); - scene->_hotspot13.fixPriority(99); - - Common::Point pt(scene->_hotspot13._position.x, 200); - NpcMover *mover = new NpcMover(); - scene->_hotspot13.addMover(mover, &pt, this); - break; - } - case 1: - scene->_hotspot13.hide(); - remove(); - break; - } -} - -void Scene2320::Action3::signal() { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - Common::Point pt(320, 86); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 1: - scene->_soundHandler.play(162); - scene->_hotspot6.animate(ANIM_MODE_5, this); - break; - case 2: { - Common::Point pt(320, 79); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: - _globals->_player.fixPriority(scene->_hotspot6._priority - 1); - _globals->_player._strip = 3; - setDelay(10); - break; - case 4: - scene->_area1.display(); - scene->_area2.display(); - scene->_area3.display(); - scene->_area4.display(); - - scene->_area3.draw(true); - _state = 0; - _globals->_events.setCursor(CURSOR_USE); - - while (!_state && !_vm->shouldQuit()) { - // Wait for an event - Event event; - if (!_globals->_events.getEvent(event)) { - g_system->updateScreen(); - g_system->delayMillis(10); - continue; - } - - if (scene->_area1._bounds.contains(event.mousePos)) { - scene->_area1.draw(true); - scene->_area3.draw(false); - _state = scene->_area1._actionId; - } - if (scene->_area2._bounds.contains(event.mousePos)) { - scene->_area3.draw(false); - scene->_area2.draw(true); - _state = scene->_area2._actionId; - } - if (scene->_area3._bounds.contains(event.mousePos)) { - scene->_area3.draw(true); - _state = scene->_area3._actionId; - } - } - - scene->_soundHandler.play(161); - scene->_area1.restore(); - scene->_area2.restore(); - scene->_area3.restore(); - scene->_area4.restore(); - - if (_state == 2320) { - setDelay(10); - } else { - scene->_soundHandler.play(162); - scene->_hotspot6.animate(ANIM_MODE_6, this); - } - break; - case 5: { - if (_state == 2320) - _globals->_player.fixPriority(-1); - else - _globals->_sceneManager.changeScene(_state); - - Common::Point pt(320, 86); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 6: - scene->_soundHandler.play(162); - scene->_hotspot6.animate(ANIM_MODE_6, this); - break; - case 7: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene2320::Action4::signal() { - // Fly Cycle actions - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: { - Common::Point pt(213, 84); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - case 16: - _globals->_player.setVisage(2109); - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 3: - _globals->_player.animate(ANIM_MODE_6, NULL); - setAction(&scene->_action2, this); - break; - case 4: { - scene->_hotspot16.postInit(); - scene->_hotspot16.setVisage(2331); - scene->_hotspot16.setStrip(3); - scene->_hotspot16.fixPriority(149); - scene->_hotspot16.setPosition(Common::Point(320, 202)); - scene->_hotspot16.show(); - - Common::Point pt(320, 121); - NpcMover *mover = new NpcMover(); - scene->_hotspot16.addMover(mover, &pt, this); - break; - } - case 5: { - scene->_hotspot16.fixPriority(200); - Common::Point pt(320, 180); - NpcMover *mover = new NpcMover(); - scene->_hotspot16.addMover(mover, &pt, this); - break; - } - case 6: { - scene->_hotspot16.fixPriority(-1); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - - Common::Point pt(233, 176); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 7: { - Common::Point pt(291, 194); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 8: - _globals->_player.setStrip(5); - _globals->_player.setFrame(1); - setDelay(13); - break; - case 9: - // Quinn sits in the flycycle - scene->_hotspot16.hide(); - _globals->_player.setVisage(2323); - _globals->_player.setPosition(Common::Point(303, 176)); - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 10: - if (_globals->getFlag(109)) { - _globals->_soundHandler.play(40); - _globals->_soundHandler.holdAt(true); - - Common::Point pt(303, 240); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - } else { - setDelay(3); - } - break; - case 11: - if (_globals->getFlag(109)) { - _globals->_sceneManager.changeScene(7600); - } else { - SceneItem::display2(2320, 19); - setDelay(3); - } - break; - case 12: - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 13: - _globals->_player.setVisage(0); - _globals->_player.setPosition(Common::Point(291, 194)); - _globals->_player.setStrip(5); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_1, NULL); - - scene->_hotspot16.show(); - setDelay(3); - break; - case 14: { - Common::Point pt(233, 176); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 15: { - Common::Point pt(213, 85); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 17: { - _globals->_player.animate(ANIM_MODE_6, NULL); - scene->_hotspot16.fixPriority(160); - - Common::Point pt(320, 121); - NpcMover *mover = new NpcMover(); - scene->_hotspot16.addMover(mover, &pt, this); - break; - } - case 18: { - scene->_hotspot16.fixPriority(149); - Common::Point pt(320, 202); - PlayerMover *mover = new PlayerMover(); - scene->_hotspot16.addMover(mover, &pt, this); - break; - } - case 19: { - scene->_hotspot16.remove(); - scene->_soundHandler.play(253); - - scene->_hotspot13.show(); - Common::Point pt(319, 157); - NpcMover *mover = new NpcMover(); - scene->_hotspot13.addMover(mover, &pt, this); - break; - } - case 20: - _globals->_player.enableControl(); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - - scene->_hotspot13.fixPriority(1); - remove(); - break; - } -} - -void Scene2320::Action5::signal() { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - ADD_PLAYER_MOVER(163, 126); - break; - case 1: - ADD_PLAYER_MOVER(165, 132); - break; - case 2: - setDelay(2); - break; - case 3: - if (!_globals->getFlag(59)) - setDelay(10); - else - scene->_stripManager.start(2323, this); - break; - case 4: - _globals->_player.setVisage(2347); - _globals->_player.setStrip(1); - _globals->_player.setFrame(1); - _globals->_player.fixPriority(137); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 5: - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 6: - if (_globals->getFlag(72)) - _globals->_sceneManager.changeScene(7000); - else if (_globals->getFlag(59)) - _globals->_sceneManager.changeScene(5000); - else if (!_globals->getFlag(43) || (RING_INVENTORY._ale._sceneNumber != 1)) - setDelay(10); - else { - scene->_hotspot11.setAction(NULL); - scene->_hotspot11.setVisage(2705); - scene->_hotspot11.animate(ANIM_MODE_1, NULL); - scene->_hotspot11.setObjectWrapper(new SceneObjectWrapper()); - - Common::Point pt(185, 135); - NpcMover *mover = new NpcMover(); - scene->_hotspot11.addMover(mover, &pt, NULL); - - _globals->clearFlag(43); - scene->_stripManager.start(2325, this); - } - break; - case 7: - setDelay(10); - break; - case 8: - _globals->_sceneManager.changeScene(4000); - break; - } -} - -void Scene2320::Action6::signal() { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 2: - _globals->_player.setStrip(1); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 3: - _globals->_player.setVisage(0); - _globals->_player.setStrip(3); - _globals->_player.fixPriority(-1); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.animate(ANIM_MODE_1, NULL); - - setDelay(60); - break; - case 4: - if ((_globals->_sceneManager._previousScene != 4000) || _globals->getFlag(43)) - setDelay(3); - else if (_globals->getFlag(35)) { - _globals->setFlag(43); - scene->_stripManager.start(4200, this); - _globals->setFlag(69); - } else if (_globals->getFlag(36)) { - setDelay(3); - } else { - _globals->setFlag(43); - scene->_stripManager.start(4210, this); - break; - } - break; - case 5: - if (_globals->_sceneObjects->contains(&scene->_hotspot11)) { - scene->_hotspot11.setAction(&scene->_action1); - - if (_globals->_sceneObjects->contains(&scene->_hotspot10)) { - ADD_MOVER(scene->_hotspot10, 491, 160); - } else { - setDelay(60); - } - - _globals->_sceneItems.push_front(&scene->_hotspot11); - } else { - setDelay(3); - } - break; - case 6: - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene2320::Action7::signal() { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - _globals->_soundHandler.play(162); - scene->_hotspot6.animate(ANIM_MODE_5, this); - break; - case 2: - scene->_hotspot10.fixPriority(-1); - ADD_MOVER_NULL(scene->_hotspot10, 321, 94); - scene->_hotspot11.fixPriority(-1); - ADD_MOVER_NULL(scene->_hotspot11, 346, 85); - - _globals->_player.fixPriority(-1); - ADD_MOVER(_globals->_player, 297, 89); - break; - case 3: - ADD_PLAYER_MOVER(462, 182); - break; - case 4: - ADD_MOVER(scene->_hotspot11, 391, 88); - break; - case 5: - ADD_MOVER(scene->_hotspot11, 500, 164); - ADD_MOVER(scene->_hotspot10, 382, 93); - _globals->_player.setStrip(3); - break; - case 6: - ADD_MOVER_NULL(scene->_hotspot10, 491, 160); - ADD_MOVER(_globals->_player, 391, 88); - break; - case 7: - ADD_PLAYER_MOVER(462, 182); - break; - case 8: - _globals->_player.setStrip(7); - setDelay(15); - break; - case 9: - scene->_stripManager.start(6020, this); - break; - case 10: - setDelay(6); - break; - case 11: - scene->_stripManager.start(6022, this); - break; - case 12: - _globals->_player.enableControl(); - RING_INVENTORY._stasisBox._sceneNumber = 2320; - break; - } -} - -void Scene2320::Action8::signal() { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: - ADD_PLAYER_MOVER(462, 182); - break; - case 2: - _globals->_player.setStrip(7); - setDelay(5); - break; - case 3: - scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10)); - scene->_stripManager.start(_globals->getFlag(75) ? 6030 : 2320, this); - break; - case 4: - if (_globals->getFlag(75)) - setDelay(3); - else - _globals->_player.enableControl(); - break; - case 5: - RING_INVENTORY._stasisBox._sceneNumber = 2320; - scene->_sceneMode = 2326; - scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10)); - scene->setAction(&scene->_sequenceManager1, scene, 2326, &_globals->_player, &scene->_hotspot11, NULL); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene2320::Hotspot5::doAction(int action) { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2320, 13); - break; - case CURSOR_USE: - if (_globals->getFlag(70)) - SceneItem::display2(2320, 33); - else if (_globals->getFlag(13)) - SceneItem::display2(2320, 18); - else - scene->setAction(&scene->_action5); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2320::Hotspot6::doAction(int action) { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2320, 2); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->setAction(&scene->_action3); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2320::Hotspot8::doAction(int action) { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2320, 23); - break; - case CURSOR_USE: - scene->_sceneMode = 2336; - scene->setAction(&scene->_sequenceManager1, scene, 2336, &_globals->_player, this, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2320::Hotspot10::doAction(int action) { - // Seeker - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2320, 26); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - scene->_sceneMode = 2329; - - if (_globals->getFlag(13)) { - scene->_stripManager.start(2337, scene); - } else if (_globals->getFlag(70)) { - scene->setAction(&scene->_action8); - } else if (_globals->getFlag(109)) { - scene->setAction(&scene->_sequenceManager1, scene, 2337, NULL); - } else if (!_state) { - ++_state; - scene->setAction(&scene->_sequenceManager1, scene, 2334, NULL); - } else { - scene->setAction(&scene->_sequenceManager1, scene, 2335, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2320::Hotspot11::doAction(int action) { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2320, 25); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - scene->_sceneMode = 2329; - - if (_globals->getFlag(13)) { - _globals->_player.disableControl(); - scene->_sceneMode = 5000; - scene->_stripManager.start(2336, scene); - } else if (_globals->getFlag(70)) { - scene->setAction(&scene->_action8); - } else { - scene->_sceneMode = 2329; - - if (RING_INVENTORY._ale._sceneNumber == 1) { - scene->setAction(&scene->_sequenceManager1, scene, 2329, NULL); - } else if (!_globals->getFlag(110)) { - _globals->setFlag(110); - scene->setAction(&scene->_sequenceManager1, scene, 2330, NULL); - } else if (RING_INVENTORY._peg._sceneNumber != 1) { - scene->setAction(&scene->_sequenceManager1, scene, 2331, NULL); - } else if (!_state) { - ++_state; - scene->setAction(&scene->_sequenceManager1, scene, 2332, NULL); - } else { - scene->setAction(&scene->_sequenceManager1, scene, 2333, NULL); - } - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2320::Hotspot12::doAction(int action) { - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2320, 5); - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2320, 24); - else { - _globals->_player.disableControl(); - scene->_sceneMode = 2322; - scene->setAction(&scene->_sequenceManager1, scene, 2322, &_globals->_player, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2320::Hotspot14::doAction(int action) { - // Right Console - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2320, 17); - break; - case CURSOR_USE: - if (_globals->getFlag(24)) { - _globals->clearFlag(24); - _globals->_player.disableControl(); - - scene->_hotspot8.postInit(); - scene->_hotspot8.setVisage(2345); - scene->_hotspot8.setPosition(Common::Point(634, 65)); - scene->_hotspot8.hide(); - - _globals->_sceneItems.push_front(&scene->_hotspot8); - RING_INVENTORY._waldos._sceneNumber = 2320; - - scene->_hotspot9.postInit(); - scene->_hotspot9.setVisage(2345); - scene->_hotspot9._strip = 6; - scene->_hotspot9.setPosition(Common::Point(536, 103)); - scene->_hotspot9.fixPriority(200); - scene->_hotspot9.hide(); - - scene->_hotspot16.postInit(); - scene->_hotspot16.setVisage(2345); - scene->_hotspot16.setStrip(8); - scene->_hotspot16.setPosition(Common::Point(536, 103)); - scene->_hotspot16.hide(); - - scene->_sceneMode = 2324; - scene->setAction(&scene->_sequenceManager1, scene, 2324, &_globals->_player, &scene->_hotspot7, - &scene->_hotspot8, &scene->_hotspot9, &scene->_hotspot16, NULL); - } else if (_globals->getFlag(13)) { - SceneItem::display2(2320, 24); - } else if (!_globals->getFlag(76)) { - SceneItem::display2(2320, 28); - } else if (!RING_INVENTORY._waldos._sceneNumber) { - SceneItem::display2(2320, 27); - } else { - SceneItem::display2(2320, 29); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene2320::Hotspot15::doAction(int action) { - // Left console (Flycycle console) - Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(2320, 16); - break; - case CURSOR_USE: - if (_globals->getFlag(13)) - SceneItem::display2(2320, 24); - else - scene->setAction(&scene->_action4); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - - -/*--------------------------------------------------------------------------*/ - -Scene2320::Scene2320() : - _hotspot1(0, CURSOR_LOOK, 2320, 0, LIST_END), - _hotspot2(0, CURSOR_LOOK, 2320, 1, LIST_END), - _hotspot3(0, CURSOR_LOOK, 2320, 11, LIST_END), - _hotspot4(0, CURSOR_LOOK, 2320, 14, LIST_END), - _hotspot13(0, CURSOR_LOOK, 2320, 12, LIST_END) -{ - _area1.setup(2153, 2, 1, 2100); - _area1._pt = Common::Point(200, 31); - _area2.setup(2153, 3, 1, 2150); - _area2._pt = Common::Point(200, 50); - _area3.setup(2153, 4, 1, 2320); - _area3._pt = Common::Point(200, 75); - _area4.setup(2153, 1, 1, 10); - _area4._pt = Common::Point(237, 77); -} - -void Scene2320::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(60, 75, 100, 100); - - _stripManager.addSpeaker(&_speakerMR); - _stripManager.addSpeaker(&_speakerML); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerSR); - _stripManager.addSpeaker(&_speakerSL); - _stripManager.addSpeaker(&_speakerSAL); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerGameText); - - _speakerMText._npc = &_hotspot11; - _speakerQText._npc = &_globals->_player; - _hotspotPtr = &_hotspot10; - - _hotspot6.postInit(); - _hotspot6.setVisage(2321); - _hotspot6.setPosition(Common::Point(320, 67)); - - _hotspot7.postInit(); - _hotspot7.setVisage(2344); - _hotspot7.setPosition(Common::Point(604, 92)); - - _hotspot13.postInit(); - _hotspot13.setVisage(2323); - _hotspot13.setPosition(Common::Point(319, 157)); - _hotspot13.fixPriority(1); - - _hotspot12.postInit(); - _hotspot12.setVisage(2321); - _hotspot12._strip = 4; - _hotspot12.animate(ANIM_MODE_8, 0, NULL); - _hotspot12.setPosition(Common::Point(412, 46)); - - if (RING_INVENTORY._waldos._sceneNumber == 2320) { - _hotspot8.postInit(); - _hotspot8.setVisage(2345); - _hotspot8.setStrip(5); - _hotspot8.setFrame(8); - _hotspot8.setPosition(Common::Point(541, 103)); - _hotspot8.fixPriority(201); - - _globals->_sceneItems.push_back(&_hotspot8); - } - - if (_globals->getFlag(43)) { - _hotspot11.postInit(); - _hotspot11.setVisage(2705); - _hotspot11._strip = 3; - _hotspot11.setPosition(Common::Point(510, 156)); - _globals->_sceneItems.push_back(&_hotspot11); - _hotspot11._state = 0; - _hotspot11.setAction(&_action1); - } - - _globals->_player.postInit(); - if (_globals->getFlag(13)) - _globals->_player.setVisage(2170); - else - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(320, 79)); - _globals->_player.fixPriority(10); - _globals->_player.changeZoom(-1); - _globals->_player._moveDiff.y = 3; - _globals->_player.disableControl(); - - if (_globals->getFlag(114)) { - _hotspot10.postInit(); - _hotspot10.setVisage(2806); - _hotspot10.setPosition(Common::Point(481, 162)); - _hotspot10.changeZoom(-1); - _hotspot10.setStrip(5); - _hotspot10._state = 0; - - _globals->_sceneItems.push_back(&_hotspot10); - } - - if (_globals->getFlag(70)) { - _hotspot11.postInit(); - _hotspot11.setVisage(2705); - _hotspot11.setPosition(Common::Point(500, 164)); - - _hotspot10.postInit(); - _hotspot10.setVisage(2806); - _hotspot10.setPosition(Common::Point(481, 162)); - _hotspot10.changeZoom(-1); - _hotspot10.setStrip(5); - - _globals->_sceneItems.addItems(&_hotspot11, &_hotspot10, NULL); - } - - switch (_globals->_sceneManager._previousScene) { - case 2120: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - - _globals->_player.fixPriority(-1); - _globals->_player.setPosition(Common::Point(389, 72)); - _globals->_player.enableControl(); - break; - case 4000: - if (!_globals->getFlag(36) && !_globals->getFlag(43)) { - _hotspot11.postInit(); - _hotspot11.setVisage(2705); - _hotspot11.setPosition(Common::Point(178, 118)); - _hotspot11.animate(ANIM_MODE_1, NULL); - } - // Deliberate fall-through - case 4250: - case 5000: - case 7000: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - if ((_globals->_sceneManager._previousScene == 7000) && !_globals->getFlag(80)) - _globals->setFlag(36); - - _globals->_player.disableControl(); - _globals->_player.animate(ANIM_MODE_NONE, NULL); - _globals->_player.setObjectWrapper(NULL); - _globals->_player.setVisage(2347); - _globals->_player.setStrip(2); - _globals->_player.setFrame(5); - _globals->_player.fixPriority(137); - _globals->_player.setPosition(Common::Point(165, 132)); - - setAction(&_action6); - break; - case 6100: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - - _hotspot8.postInit(); - _hotspot8.setVisage(2345); - _hotspot8.setPosition(Common::Point(634, 65)); - _hotspot8.hide(); - - _sceneMode = 2325; - setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL); - break; - case 7600: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - _soundHandler.play(21); - - _globals->_player.setVisage(2323); - _globals->_player.setStrip(2); - _globals->_player.setFrame(_globals->_player.getFrameCount()); - _globals->_player.setPosition(Common::Point(303, 176)); - _globals->_player.fixPriority(-1); - _globals->_player.disableControl(); - - _hotspot13.setPosition(Common::Point(319, 199)); - - _hotspot16.postInit(); - _hotspot16.setVisage(2331); - _hotspot16._strip = 3; - _hotspot16.fixPriority(160); - _hotspot16.setPosition(Common::Point(320, 202)); - _hotspot16.hide(); - - _sceneMode = 2338; - setAction(&_sequenceManager1, this, 2338, &_globals->_player, &_hotspot16, &_hotspot13, NULL); - break; - default: - switch (_globals->_stripNum) { - case 2101: - _globals->_player.disableControl(); - _globals->_player.setStrip(3); - _globals->_player.setPosition(Common::Point(307, 84)); - - _hotspot11.postInit(); - _hotspot11.setVisage(2705); - _hotspot11._strip = 2; - _hotspot11.fixPriority(10); - _hotspot11.setPosition(Common::Point(322, 80)); - _hotspot11.setObjectWrapper(new SceneObjectWrapper()); - _hotspot11.animate(ANIM_MODE_1, NULL); - - _hotspot10.postInit(); - _hotspot10.setVisage(2806); - _hotspot10.setObjectWrapper(new SceneObjectWrapper()); - _hotspot10.changeZoom(-1); - _hotspot10.fixPriority(10); - _hotspot10.setPosition(Common::Point(318, 89)); - _hotspot10._strip = 3; - _hotspot10.animate(ANIM_MODE_1, NULL); - - setAction(&_action7); - break; - case 6100: - _hotspot8.postInit(); - _hotspot8.setVisage(2345); - _hotspot8.setPosition(Common::Point(634, 65)); - _hotspot8.hide(); - - _sceneMode = 2325; - setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL); - break; - default: - _globals->_soundHandler.play(160); - _globals->_soundHandler.holdAt(true); - _sceneMode = 2321; - - _globals->_player.setStrip(3); - setAction(&_sequenceManager1, this, 2321, &_globals->_player, &_hotspot6, NULL); - break; - } - } - - _globals->_stripNum = 0; - _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position); - loadScene(2320); - - _hotspot14._sceneRegionId = 8; - _hotspot1.setBounds(Rect(0, 0, 640, 200)); - _hotspot2.setBounds(Rect(278, 0, 362, 61)); - _hotspot3.setBounds(Rect(282, 62, 367, 98)); - _hotspot4.setBounds(Rect(67, 38, 112, 113)); - _hotspot5.setBounds(Rect(104, 122, 174, 157)); - _hotspot15.setBounds(Rect(191, 53, 205, 63)); - - _globals->_sceneItems.addItems(&_hotspot14, &_hotspot15, &_hotspot5, &_hotspot6, &_hotspot12, - &_hotspot13, &_hotspot4, &_hotspot3, &_hotspot2, &_hotspot1, NULL); -} - -void Scene2320::synchronize(Serializer &s) { - Scene::synchronize(s); - SYNC_POINTER(_hotspotPtr); -} - -void Scene2320::signal() { - switch (_sceneMode) { - case 2321: - case 2327: - case 2329: - if (_globals->getFlag(43) && !_hotspot11._action) - _hotspot11.setAction(&_action1); - _globals->_player.enableControl(); - break; - case 2322: - _globals->_sceneManager.changeScene(2120); - break; - case 2323: - _globals->_player.disableControl(); - break; - case 2338: - case 2324: - _hotspot16.remove(); - _globals->_player.enableControl(); - break; - case 2325: - _globals->setFlag(76); - _globals->clearFlag(70); - _globals->_stripNum = 6100; - _globals->_sceneManager.changeScene(2100); - break; - case 2326: - _globals->clearFlag(70); - RING_INVENTORY._nullifier._sceneNumber = 1; - _globals->_stripNum = 2321; - _globals->_sceneManager.changeScene(2100); - break; - case 2336: - _globals->setFlag(77); - RING_INVENTORY._waldos._sceneNumber = 1; - _hotspot8.remove(); - break; - case 5000: - _globals->_player.enableControl(); - break; - } -} - -/*-------------------------------------------------------------------------- - * Scene 2400 - Descending in Lander - * - *--------------------------------------------------------------------------*/ - -void Scene2400::Action1::signal() { - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - ADD_MOVER(_globals->_player, 160, 71); - break; - case 2: - ADD_MOVER(_globals->_player, 160, 360); - break; - case 3: - _globals->_player._moveDiff = Common::Point(1, 1); - ADD_MOVER(_globals->_player, 140, 375); - break; - case 4: - ADD_MOVER(_globals->_player, 87, 338); - break; - case 5: - _globals->_player.hide(); - setDelay(60); - break; - case 6: - _globals->_sceneManager.changeScene(4000); - break; - } -} - -void Scene2400::Action1::dispatch() { - Action::dispatch(); - if ((_actionIndex == 4) && (_globals->_player._percent > 5)) - _globals->_player.changeZoom(_globals->_player._percent - 2); -} - -/*--------------------------------------------------------------------------*/ - -void Scene2400::postInit(SceneObjectList *OwnerList) { - loadScene(2400); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _globals->_player.postInit(); - _globals->_player.setVisage(2410); - _globals->_player.setPosition(Common::Point(340, -10)); - _globals->_player.animate(ANIM_MODE_2, NULL); - _globals->_player.disableControl(); - - setAction(&_action1); - - _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y); - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; - - _globals->_soundHandler.play(153); -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld_scenes3.h deleted file mode 100644 index 711360c190..0000000000 --- a/engines/tsage/ringworld_scenes3.h +++ /dev/null @@ -1,895 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_SCENES3_H -#define TSAGE_RINGWORLD_SCENES3_H - -#include "common/scummsys.h" -#include "tsage/core.h" -#include "tsage/converse.h" -#include "tsage/ringworld_logic.h" - -namespace tSage { - -class Scene2000 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - class Action8 : public Action { - public: - virtual void signal(); - }; - class Action9 : public Action { - public: - virtual void signal(); - }; - class Action10 : public Action { - public: - virtual void signal(); - }; - class Action11 : public Action { - public: - virtual void signal(); - }; - class Action12 : public Action { - public: - virtual void signal(); - }; - class Action13 : public Action { - public: - virtual void signal(); - }; - class Action14 : public Action { - public: - virtual void signal(); - }; - -public: - SpeakerSL _speakerSL; - SpeakerQR _speakerQR; - SpeakerMR _speakerMR; - SpeakerQText _speakerQText; - SpeakerMText _speakerMText; - SpeakerSText _speakerSText; - SpeakerHText _speakerHText; - SpeakerGameText _speakerGameText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Action7 _action7; - Action8 _action8; - Action9 _action9; - Action10 _action10; - Action11 _action11; - Action12 _action12; - Action13 _action13; - Action14 _action14; - SceneObject _object1, _object2, _object3, _object4, _object5; - SceneObject _object6, _object7, _object8, _object9, _object10; - ASound _soundHandler1, _soundHandler2; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void stripCallback(int v); -}; - -class Scene2100 : public Scene { - /* Actions */ - class Action1 : public ActionExt { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - class Action8 : public Action { - public: - virtual void signal(); - }; - class Action9 : public Action { - public: - virtual void signal(); - }; - class Action10 : public Action { - public: - virtual void signal(); - }; - class Action11 : public Action { - public: - virtual void signal(); - }; - class Action12 : public Action { - public: - virtual void signal(); - }; - class Action13 : public Action { - public: - virtual void signal(); - }; - class Action14 : public Action { - public: - virtual void signal(); - }; - class Action15 : public Action { - public: - virtual void signal(); - }; - class Action16 : public Action { - public: - virtual void signal(); - }; - class Action17 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot3 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot4 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot8 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot10 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot14 : public SceneObject { - public: - virtual void doAction(int action); - }; - - /* Objects */ - class Object1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object3 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - ASound _soundHandler; - SpeakerMText _speakerMText; - SpeakerMR _speakerMR; - SpeakerQL _speakerQL; - SpeakerQR _speakerQR; - SpeakerQText _speakerQText; - SpeakerGameText _speakerGameText; - SpeakerSText _speakerSText; - SpeakerSL _speakerSL; - SpeakerSAL _speakerSAL; - SpeakerHText _speakerHText; - - DisplayHotspot _hotspot1; - Hotspot2 _hotspot2; - Hotspot3 _hotspot3; - Hotspot4 _hotspot4; - DisplayHotspot _hotspot5, _hotspot6, _hotspot7; - Hotspot8 _hotspot8; - DisplayHotspot _hotspot9; - Hotspot10 _hotspot10; - DisplayHotspot _hotspot11, _hotspot12, _hotspot13; - Hotspot14 _hotspot14; - DisplayHotspot _hotspot15; - - Object1 _object1; - Object2 _object2; - Object3 _object3; - SceneObject _object4; - - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Action7 _action7; - Action8 _action8; - Action9 _action9; - Action10 _action10; - Action11 _action11; - Action12 _action12; - Action13 _action13; - Action14 _action14; - Action15 _action15; - Action16 _action16; - Action17 _action17; - int _sitFl; - SceneArea _area1, _area2, _area3, _area4; - - Scene2100(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void stripCallback(int v); - virtual void signal(); - virtual void synchronize(Serializer &s); -}; - -class Scene2120 : public Scene { - /* Actions */ - class Entry { - public: - int _size; - int _lineNum; - int _visage; - - Entry() { _size = 0; _lineNum = 0; _visage = 0; } - Entry(int size, int lineNum, int visage) { _size = size; _lineNum = lineNum; _visage = visage; } - }; - - class Action1 : public Action { - private: - Common::Array _entries; - public: - Action1(); - - virtual void signal(); - virtual void dispatch(); - }; - -public: - ASound _soundHandler; - SceneObject _topicArrowHotspot, _arrowHotspot, _visageHotspot; - SceneObject _subjectButton, _nextPageButton, _previousPageButton, _exitButton; - Action1 _action1; - Rect _listRect; - int _dbMode, _prevDbMode; - bool _visageVisable; - int _subjectIndex; - int _lineOffset; - - Scene2120(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void synchronize(Serializer &s); -}; - -class Scene2150 : public Scene { - /* Actions */ - class Action1 : public ActionExt { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot4 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot7 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot10 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - ASound _soundHandler; - SequenceManager _sequenceManager; - SpeakerGameText _speakerGameText; - - Rect _rect1, _rect2; - Hotspot1 _hotspot1; - Hotspot2 _hotspot2; - DisplayHotspot _hotspot3; - Hotspot4 _hotspot4; - DisplayHotspot _hotspot5, _hotspot6; - Hotspot7 _hotspot7; - DisplayHotspot _hotspot8, _hotspot9; - Hotspot10 _hotspot10; - DisplayHotspot _hotspot11; - SceneObject _hotspot12, _hotspot13, _hotspot14; - SceneArea _area1, _area2, _area3, _area4; - Action1 _action1; - Action2 _action2; - - Scene2150(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void synchronize(Serializer &s); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene2200 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public ActionExt { - public: - virtual void signal(); - virtual void process(Event &event); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot3 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot5 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot9 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - SpeakerMText _speakerMText; - SpeakerSText _speakerSText; - SpeakerQText _speakerQText; - SpeakerSL _speakerSL; - SpeakerQR _speakerQR; - SpeakerQL _speakerQL; - SpeakerMR _speakerMR; - SpeakerGameText _speakerGameText; - Rect _exitRect; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - DisplayHotspot _hotspot1; - Hotspot3 _hotspot3; - Hotspot5 _hotspot5; - Hotspot9 _hotspot9; - DisplayHotspot _hotspot10; - SceneObject _hotspot2, _hotspot4; - SceneObject _hotspot6, _hotspot7, _hotspot8; - ASound _soundHandler1, _soundHandler2; - - Scene2200(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void stripCallback(int v); - virtual void synchronize(Serializer &s); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene2222 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - -public: - ASound _soundHandler; - SpeakerSText _speakerSText; - SpeakerMText _speakerMText; - SpeakerQText _speakerQText; - SpeakerML _speakerML; - SpeakerSR _speakerSR; - Action1 _action1; - Action2 _action2; - SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene2230 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - class Action8 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot3 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot4 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot5 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot6 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot7 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot8 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot10 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot11 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot12 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - ASound _soundHandler; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Action7 _action7; - Action8 _action8; - Hotspot1 _hotspot1; - Hotspot3 _hotspot3; - Hotspot4 _hotspot4; - SceneObject _hotspot2; - Hotspot5 _hotspot5; - Hotspot6 _hotspot6; - Hotspot7 _hotspot7; - Hotspot8 _hotspot8; - DisplayHotspot _hotspot9; - Hotspot10 _hotspot10; - Hotspot11 _hotspot11; - Hotspot12 _hotspot12; - Rect _rect1; - int _field30A; - - Scene2230(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void synchronize(Serializer &s); - virtual void dispatch(); -}; - -class Scene2280 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public ActionExt { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot4 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot7 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot8 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot10 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot12 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot14 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot15 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot16 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot17 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot18 : public SceneObject { - public: - virtual void doAction(int action); - }; - -public: - ASound _soundHandler; - SequenceManager _sequenceManager; - Rect _exitRect; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Hotspot1 _hotspot1; - Hotspot2 _hotspot2; - DisplayHotspot _hotspot3; - Hotspot4 _hotspot4; - DisplayHotspot _hotspot5, _hotspot6; - Hotspot7 _hotspot7; - Hotspot8 _hotspot8; - DisplayHotspot _hotspot9; - Hotspot10 _hotspot10; - DisplayHotspot _hotspot11; - Hotspot12 _hotspot12; - DisplayHotspot _hotspot13; - Hotspot14 _hotspot14; - DisplayHotspot _hotspot15, _hotspot16; - Hotspot17 _hotspot17; - Hotspot18 _hotspot18; - - Scene2280(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void synchronize(Serializer &s); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene2300 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public ActionExt { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot5 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot7 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - ASound _soundHandler1, _soundHandler2; - SpeakerSL _speakerSL; - SpeakerMText _speakerMText; - SpeakerQText _speakerQText; - SpeakerSText _speakerSText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4; - Hotspot5 _hotspot5; - SceneObject _hotspot6; - Hotspot7 _hotspot7; - SceneObject _hotspot8, _hotspot9, _hotspot10; - DisplayHotspot _hotspot11, _hotspot12, _hotspot13, _hotspot14, _hotspot15; - - Scene2300(); - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene2310 : public Scene { -private: - int findObject(int objIndex); - - /* Custom classes */ - class ProtectionEntry { - public: - int _pageNumber; - int _connectionList[5]; - - void set(int pageNumber, int v1, int v2, int v3, int v4, int v5) { - _pageNumber = pageNumber; - _connectionList[0] = v1; _connectionList[1] = v2; _connectionList[2] = v3; - _connectionList[3] = v4; _connectionList[4] = v5; - } - }; - -public: - SequenceManager _sequenceManager; - int _wireIndex, _pageIndex; - SceneObject _wireList[5]; - Rect _rectList[5]; - SceneText _sceneText; - ProtectionEntry _pageList[21]; - - Scene2310(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void synchronize(Serializer &s); - virtual void signal(); - virtual void process(Event &event); - virtual void dispatch(); -}; - -class Scene2320 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public ActionExt { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - class Action8 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot5 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot6 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot8 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot10 : public SceneObjectExt { - public: - virtual void doAction(int action); - }; - class Hotspot11 : public SceneObjectExt { - public: - virtual void doAction(int action); - }; - class Hotspot12 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot14 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot15 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - ASound _soundHandler; - SequenceManager _sequenceManager1, _sequenceManager2; - SpeakerMText _speakerMText; - SpeakerMR _speakerMR; - SpeakerML _speakerML; - SpeakerQText _speakerQText; - SpeakerQL _speakerQL; - SpeakerQR _speakerQR; - SpeakerSAL _speakerSAL; - SpeakerSL _speakerSL; - SpeakerSR _speakerSR; - SpeakerSText _speakerSText; - SpeakerGameText _speakerGameText; - SceneArea _area1, _area2, _area3, _area4; - DisplayHotspot _hotspot1, _hotspot2, _hotspot3, _hotspot4; - Hotspot5 _hotspot5; - Hotspot6 _hotspot6; - SceneObject _hotspot7, _hotspot9; - Hotspot8 _hotspot8; - Hotspot10 _hotspot10; - Hotspot11 _hotspot11; - Hotspot12 _hotspot12; - DisplayHotspot _hotspot13; - Hotspot14 _hotspot14; - Hotspot15 _hotspot15; - SceneObject _hotspot16; - SceneItem *_hotspotPtr; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Action7 _action7; - Action8 _action8; - - Scene2320(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void synchronize(Serializer &s); - virtual void signal(); -}; - -class Scene2400 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - virtual void dispatch(); - }; -public: - Action1 _action1; - SceneObject _object; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_scenes4.cpp b/engines/tsage/ringworld_scenes4.cpp deleted file mode 100644 index 838769e4af..0000000000 --- a/engines/tsage/ringworld_scenes4.cpp +++ /dev/null @@ -1,250 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/config-manager.h" -#include "tsage/ringworld_scenes4.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -/*-------------------------------------------------------------------------- - * Scene 3500 - Ringworld Scan - * - *--------------------------------------------------------------------------*/ - -void Scene3500::Action1::signal() { - Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - scene->_stripManager.start(3500, this); - break; - case 2: - setDelay(3); - break; - case 3: - _globals->_sceneManager.changeScene(9999); - break; - } -} - -void Scene3500::Action2::signal() { - Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - scene->_stripManager.start(3501, this); - break; - case 2: - setDelay(3); - break; - case 3: - _globals->_sceneManager.changeScene(2012); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene3500::postInit(SceneObjectList *OwnerList) { - loadScene((_globals->_stripNum == 3600) ? 3600 : 3500); - Scene::postInit(); - - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerSText); - - _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); - _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.top / 160) * 160; - - setAction((_globals->_stripNum == 3600) ? (Action *)&_action2 : (Action *)&_action1); -} - -/*-------------------------------------------------------------------------- - * Scene 3700 - Remote Viewer - * - *--------------------------------------------------------------------------*/ - -#define VIEW_FRAME_DELAY 10 - -Scene3700::Viewer::Viewer() { - _images1.setVisage(3705, 1); - _images2.setVisage(3705, 2); - - _frameList[0] = 1; - for (int idx = 1; idx <= 3; ++idx) - _frameList[idx] = _globals->_randomSource.getRandomNumber(4) + 1; - - _active = true; - _countdownCtr = 0; - _percentList[0] = 120; - _percentList[1] = 50; - _percentList[2] = 75; - _percentList[3] = 114; -} - -void Scene3700::Viewer::synchronize(Serializer &s) { - SceneObject::synchronize(s); - s.syncAsByte(_active); - s.syncAsSint16LE(_countdownCtr); - for (int idx = 0; idx < 4; ++idx) { - s.syncAsSint16LE(_frameList[idx]); - s.syncAsSint16LE(_percentList[idx]); - } -} - -void Scene3700::Viewer::dispatch() { - if (_active) { - if (_countdownCtr-- <= 0) { - _countdownCtr = VIEW_FRAME_DELAY; - - for (int idx = 3; idx > 1; --idx) - _frameList[idx] = _frameList[idx - 1]; - - int newFrame; - do { - newFrame = _globals->_randomSource.getRandomNumber(4) + 1; - } while (newFrame == _frameList[2]); - - _frameList[1] = newFrame; - _flags |= OBJFLAG_PANES; - } - } -} - -void Scene3700::Viewer::reposition() { - _bounds = Rect(123, 40, 285, 123); -} - -void Scene3700::Viewer::draw() { - Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(1); - - for (int idx = 0; idx < 4; ++idx) { - Visage &v = (idx == 0) ? _images1 : _images2; - - GfxSurface img = v.getFrame(_frameList[idx]); - Rect destRect = img.getBounds(); - destRect.resize(img, (_position.x - _globals->_sceneOffset.x), - (_position.y - _globals->_sceneOffset.y - _yDiff), _percentList[idx]); - - destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left, - -_globals->_sceneManager._scene->_sceneBounds.top); - - _globals->gfxManager().copyFrom(img, destRect, priorityRegion); - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene3700::Action1::signal() { - Scene3700 *scene = (Scene3700 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - scene->_stripManager.start(2162, this); - break; - case 2: - scene->_viewer._active = false; - setDelay(90); - break; - case 3: - scene->_soundHandler.play(196); - scene->_viewer.hide(); - - scene->_hotspot1.postInit(); - scene->_hotspot1.setVisage(3710); - scene->_hotspot1.setStrip(1); - scene->_hotspot1.setFrame(1); - scene->_hotspot1.setPosition(Common::Point(204, 120)); - - setDelay(90); - break; - case 4: - scene->_soundHandler.play(197); - scene->_hotspot1.hide(); - - scene->_hotspot2.postInit(); - scene->_hotspot2.setVisage(3710); - scene->_hotspot2.setStrip(2); - scene->_hotspot2.setFrame(1); - scene->_hotspot2.setPosition(Common::Point(204, 120)); - - setDelay(30); - break; - case 5: - scene->_soundHandler.play(198); - scene->_hotspot2.hide(); - scene->_hotspot1.show(); - setDelay(90); - break; - case 6: - scene->_stripManager.start(2166, this); - break; - case 7: - setDelay(60); - break; - case 8: - scene->_hotspot1.remove(); - scene->_hotspot2.show(); - _globals->setFlag(59); - setDelay(30); - break; - case 9: - _globals->_sceneManager.changeScene(2100); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene3700::postInit(tSage::SceneObjectList *OwnerList) { - Scene::postInit(); - loadScene(3700); - - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerMR); - _speakerSText.setTextPos(Common::Point(20, 15)); - _speakerMText.setTextPos(Common::Point(20, 15)); - - _viewer.postInit(); - _viewer.setVisage(3705); - _viewer.setStrip(1); - _viewer.setFrame(2); - _viewer.setPosition(Common::Point(195, 83)); - - setAction(&_action1); - _globals->_soundHandler.play(195); -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes4.h b/engines/tsage/ringworld_scenes4.h deleted file mode 100644 index 0b575d02d3..0000000000 --- a/engines/tsage/ringworld_scenes4.h +++ /dev/null @@ -1,92 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_SCENES4_H -#define TSAGE_RINGWORLD_SCENES4_H - -#include "common/scummsys.h" -#include "tsage/core.h" -#include "tsage/converse.h" -#include "tsage/ringworld_logic.h" - -namespace tSage { - -class Scene3500 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; -public: - SpeakerSText _speakerSText; - SpeakerMText _speakerMText; - SpeakerQText _speakerQText; - Action1 _action1; - Action2 _action2; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene3700 : public Scene { - /* Custom classes */ - class Viewer : public SceneObject { - public: - Visage _images1; - Visage _images2; - - int _frameList[4]; - int _percentList[4]; - bool _active; - int _countdownCtr; - - Viewer(); - virtual Common::String getClassName() { return "Viewer"; } - virtual void synchronize(Serializer &s); - virtual void dispatch(); - virtual void reposition(); - virtual void draw(); - }; - - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; -public: - Viewer _viewer; - Action1 _action1; - SceneObject _hotspot1, _hotspot2; - SpeakerSText _speakerSText; - SpeakerMText _speakerMText; - SpeakerMR _speakerMR; - ASound _soundHandler; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_scenes5.cpp b/engines/tsage/ringworld_scenes5.cpp deleted file mode 100644 index fccc7e1b50..0000000000 --- a/engines/tsage/ringworld_scenes5.cpp +++ /dev/null @@ -1,4441 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "common/config-manager.h" -#include "tsage/ringworld_scenes5.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -/*-------------------------------------------------------------------------- - * Scene 4000 - Village - * - *--------------------------------------------------------------------------*/ - -void Scene4000::Action1::signal() { - // Quinn has the peg. Everybody enter the screen. - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - scene->_hotspot5.postInit(); - scene->_hotspot5.setVisage(2870); - scene->_hotspot5.setObjectWrapper(new SceneObjectWrapper()); - scene->_hotspot5.animate(ANIM_MODE_1, NULL); - scene->_hotspot5.setPosition(Common::Point(116, 160)); - - Common::Point pt(208, 169); - NpcMover *mover = new NpcMover(); - scene->_hotspot5.addMover(mover, &pt, this); - - RING_INVENTORY._ale._sceneNumber = 0; - _globals->clearFlag(42); - _globals->clearFlag(36); - _globals->clearFlag(43); - _globals->clearFlag(37); - break; - } - case 1: { - scene->_guardRock.postInit(); - scene->_guardRock.setVisage(4001); - scene->_guardRock.animate(ANIM_MODE_1, NULL); - scene->_guardRock.setObjectWrapper(new SceneObjectWrapper()); - scene->_guardRock.setPosition(Common::Point(314, 132)); - scene->_guardRock._moveDiff = Common::Point(4, 2); - - ADD_PLAYER_MOVER_NULL(scene->_guardRock, 288, 167); - - scene->_olo.postInit(); - scene->_olo.setVisage(4006); - scene->_olo.animate(ANIM_MODE_1, NULL); - scene->_olo.setStrip(1); - scene->_olo.setPosition(Common::Point(207, 136)); - - ADD_PLAYER_MOVER_NULL(scene->_olo, 220, 151); - - scene->_miranda.postInit(); - scene->_miranda.setVisage(2701); - scene->_miranda.animate(ANIM_MODE_1, NULL); - scene->_miranda.setObjectWrapper(new SceneObjectWrapper()); - scene->_miranda._moveDiff = Common::Point(4, 2); - scene->_miranda.setPosition(Common::Point(300, 135)); - - ADD_PLAYER_MOVER_THIS(scene->_miranda, 266, 169); - - ADD_PLAYER_MOVER_NULL(_globals->_player, 241, 155); - break; - } - case 2: - scene->_stripManager.start(4400, this); - break; - case 3: { - Common::Point pt1(30, 86); - PlayerMover *mover1 = new PlayerMover(); - scene->_miranda.addMover(mover1, &pt1, this); - - ADD_PLAYER_MOVER_NULL(scene->_hotspot5, 3, 86); - break; - } - case 4: - ADD_MOVER(scene->_miranda, -30, 86); - ADD_MOVER_NULL(scene->_hotspot5, -40, 86); - break; - case 5: - _globals->_soundHandler.play(155); - _globals->setFlag(43); - _globals->setFlag(114); - scene->_stripManager.start(4430, this); - break; - case 6: - ADD_PLAYER_MOVER_THIS(scene->_olo, 277, 175); - ADD_PLAYER_MOVER_NULL(_globals->_player, 258, 187); - break; - case 7: - scene->_stripManager.start(4440, this); - break; - case 8: - setDelay(30); - break; - case 9: - _globals->setFlag(96); - _globals->_sceneManager.changeScene(4025); - break; - } -} - -void Scene4000::Action2::signal() { - // Quinn, Seeker and Miranda walks down to the village - // Then, they talk to Rock, and enter the priest hut - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL); - - scene->_hotspot5.postInit(); - scene->_hotspot5.setVisage(2801); - scene->_hotspot5.animate(ANIM_MODE_1, NULL); - scene->_hotspot5.setObjectWrapper(new SceneObjectWrapper()); - scene->_hotspot5._moveDiff.x = 5; - scene->_hotspot5.setPosition(Common::Point(-8, 88)); - - scene->_lander.setAction(&scene->_sequenceManager3, NULL, 4003, &scene->_hotspot5, NULL); - scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL); - break; - case 1: - _globals->_player.disableControl(); - - scene->_lander.remove(); - ADD_MOVER(scene->_guardRock, scene->_hotspot5._position.x + 30, scene->_hotspot5._position.y - 10); - break; - case 2: - _globals->_player.checkAngle(&scene->_guardRock); - scene->_hotspot5.checkAngle(&scene->_guardRock); - scene->_miranda.checkAngle(&scene->_guardRock); - scene->_stripManager.start(4000, this); - break; - case 3: - scene->_hotspot2.setVisage(4017); - scene->_hotspot2.animate(ANIM_MODE_1, NULL); - scene->_hotspot2.setStrip(2); - - ADD_MOVER(scene->_hotspot2, 116, 160); - ADD_MOVER(scene->_hotspot5, 116, 160); - - _globals->setFlag(37); - break; - case 4: - break; - case 5: - scene->_stripManager.start(4010, this); - break; - case 6: - ADD_PLAYER_MOVER_NULL(scene->_guardRock, 230, 149); - ADD_PLAYER_MOVER(210, 136); - ADD_PLAYER_MOVER_NULL(scene->_miranda, 210, 133); - break; - case 7: - _globals->_sceneManager.changeScene(4045); - break; - } -} - -void Scene4000::Action3::signal() { - // The guard walks to the left and exits the screen - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_hotspot8.setVisage(4017); - scene->_hotspot8.setFrame2(-1); - scene->_hotspot8.animate(ANIM_MODE_1, NULL); - scene->_hotspot8.setObjectWrapper(new SceneObjectWrapper()); - ADD_MOVER(scene->_hotspot8, 118, 145); - break; - case 1: - scene->_hotspot8.remove(); - remove(); - break; - } -} - -void Scene4000::Action4::signal() { - // Quinn ties the rope to the rock - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player._uiEnabled = false; - ADD_MOVER(_globals->_player, 257, 57); - break; - case 1: - _globals->_player.setVisage(4008); - _globals->_player.setPosition(Common::Point(258, 83)); - _globals->_player._frame = 1; - _globals->_player._strip = 3; - _globals->_player.animate(ANIM_MODE_4, 2, 1, this); - break; - case 2: - scene->_rope.postInit(); - scene->_rope.setVisage(4000); - scene->_rope.setStrip(7); - scene->_rope.setFrame(3); - scene->_rope.setPosition(Common::Point(268, 44)); - - RING_INVENTORY._rope._sceneNumber = 4000; - _globals->_events.setCursor(CURSOR_USE); - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 3: - _globals->_player.setVisage(2602); - _globals->_player.setPosition(Common::Point(257, 57)); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player._uiEnabled = true; - - _globals->setFlag(41); - remove(); - break; - } -} - -void Scene4000::Action5::signal() { - // Chat with Miranda - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(15); - break; - case 1: - scene->_stripManager.start(_globals->_stripNum, this); - break; - case 2: - setDelay(10); - break; - case 3: - scene->_hotspot8.setVisage(4017); - scene->_hotspot8.animate(ANIM_MODE_1, NULL); - scene->_hotspot8.setFrame2(-1); - scene->_hotspot8.setAction(&scene->_action3); - - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4000::Action6::signal() { - // Quinn and Miranda enter the screen and walk to the village. - // Rock comes and notices the alcohol. They all enter his hut. - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(30); - break; - case 1: - setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL); - - if (!_globals->getFlag(36)) - scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL); - break; - case 2: - _globals->_player.disableControl(); - ADD_MOVER(scene->_guardRock, _globals->_player._position.x + 30, _globals->_player._position.y - 5); - break; - case 3: - scene->_stripManager.start(_globals->getFlag(35) ? 4500 : 4502, this); - break; - case 4: - _globals->clearFlag(35); - ADD_MOVER_NULL(scene->_guardRock, 292, 138); - ADD_PLAYER_MOVER(283, 147); - - if (!_globals->getFlag(36)) - ADD_PLAYER_MOVER_NULL(scene->_miranda, 280, 150); - RING_INVENTORY._ale._sceneNumber = 4100; - break; - case 5: - _globals->_sceneManager.changeScene(4100); - break; - } -} - -void Scene4000::Action7::signal() { - // Climb down left Chimney using a rope - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - - scene->_rope.setFrame(1); - ADD_MOVER(_globals->_player, 247, 53); - break; - case 1: - _globals->_player.setVisage(4008); - _globals->_player.setStrip(4); - _globals->_player.setFrame(1); - _globals->_player.fixPriority(16); - _globals->_player.setPosition(Common::Point(260, 55)); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - _globals->_sceneManager.changeScene(4050); - break; - } -} - -void Scene4000::Action8::signal() { - // Climb down right Chimney using a rope - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - if (_globals->getFlag(41)) - scene->_rope.setFrame(2); - - ADD_MOVER(_globals->_player, 289, 53); - break; - case 1: - _globals->_player.setVisage(4008); - _globals->_player.setStrip(5); - _globals->_player.fixPriority(16); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(283, 52)); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - _globals->_player.remove(); - setDelay(60); - break; - case 3: - _globals->_soundHandler.play(170); - scene->_smoke2.setVisage(4000); - scene->_smoke2.setStrip(6); - scene->_smoke2.animate(ANIM_MODE_2, NULL); - setDelay(60); - break; - case 4: - _globals->_soundHandler.play(77, this); - break; - case 5: - _globals->_game->endGame(4000, 15); - remove(); - break; - } -} - -void Scene4000::Action9::signal() { - // Villager animations - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(119) + 240); - break; - case 1: - static_cast(_owner)->animate(ANIM_MODE_8, 1, this); - _actionIndex = 0; - break; - } -} - -void Scene4000::Action10::signal() { - // Villager animations - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(119) + 240); - break; - case 1: - static_cast(_owner)->animate(ANIM_MODE_8, 1, this); - _actionIndex = 0; - break; - } -} - -void Scene4000::Action11::signal() { - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - ADD_MOVER(scene->_lander, -30, 70); - break; - case 1: - setDelay(60); - break; - case 2: - scene->_hotspot5.postInit(); - scene->_hotspot5.setVisage(2801); - scene->_hotspot5.animate(ANIM_MODE_1, NULL); - scene->_hotspot5.setObjectWrapper(new SceneObjectWrapper()); - scene->_hotspot5._moveDiff.x = 4; - scene->_hotspot5.setPosition(Common::Point(-8, 88)); - - setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL); - - scene->_miranda.setPosition(Common::Point(-210, 139)); - scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL); - scene->_lander.setAction(&scene->_sequenceManager3, NULL, 4003, &scene->_hotspot5, NULL); - break; - case 3: - scene->_stripManager.start(8000, this); - break; - case 4: - ADD_MOVER(scene->_olo, 263, 187); - scene->_olo.animate(ANIM_MODE_1, NULL); - break; - case 5: - scene->_soundHandler1.stop(); - scene->_forceField.remove(); - - ADD_MOVER(_globals->_player, 340, 163); - ADD_MOVER_NULL(scene->_miranda, 340, 169); - ADD_MOVER_NULL(scene->_hotspot5, 340, 165); - break; - case 6: - _globals->_sceneManager.changeScene(4250); - break; - } -} - -void Scene4000::Action12::signal() { - // Quinn enter Rock's hut - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(5); - break; - case 1: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(4015, this); - break; - case 2: - _globals->setFlag(32); - if (scene->_stripManager._field2E8 == 275) { - _globals->setFlag(82); - ADD_MOVER_NULL(scene->_guardRock, 292, 138); - ADD_PLAYER_MOVER(283, 147); - } else { - setDelay(30); - } - break; - case 3: - if (scene->_stripManager._field2E8 == 275) { - _globals->_sceneManager.changeScene(4100); - } else { - ADD_PLAYER_MOVER_THIS(scene->_guardRock, 300, 132); - } - break; - case 4: - scene->_guardRock.hide(); - scene->_stripManager.start(4020, this); - break; - case 5: - _globals->setFlag(35); - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4000::Action13::signal() { - // Lander is landing - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - scene->_soundHandler2.play(151); - scene->_soundHandler2.holdAt(true); - ADD_MOVER(scene->_lander, -30, 70); - break; - case 2: - scene->_soundHandler2.release(); - _globals->_sceneManager.changeScene(4010); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4000::Miranda::doAction(int action) { - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(4000, 31); - break; - case CURSOR_LOOK: - SceneItem::display2(4000, 29); - break; - case CURSOR_TALK: - if (_globals->getFlag(31)) { - if (!_globals->getFlag(111)) { - _globals->setFlag(111); - _globals->_stripNum = 4070; - } else if (!_globals->getFlag(33)) - _globals->_stripNum = 4094; - else if (!_globals->getFlag(112)) { - _globals->setFlag(112); - _globals->_stripNum = 4300; - } else if (!_globals->getFlag(113)) { - _globals->setFlag(113); - _globals->_stripNum = 4093; - } else - _globals->_stripNum = 4094; - } else { - if (!_globals->getFlag(33)) - _globals->_stripNum = 4094; - else if (!_globals->getFlag(112)) { - _globals->setFlag(112); - _globals->_stripNum = 4300; - } else - _globals->_stripNum = 4094; - } - - scene->setAction(&scene->_action5); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::Hotspot8::doAction(int action) { - // Guard - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(4000, 26); - break; - case CURSOR_LOOK: - SceneItem::display2(4000, 25); - break; - case CURSOR_TALK: - if (RING_INVENTORY._peg._sceneNumber == 1) - SceneItem::display2(4000, 34); - else { - switch (_ctr) { - case 0: - _globals->_stripNum = 4090; - break; - case 1: - _globals->_stripNum = 4091; - break; - case 2: - _globals->_stripNum = 4092; - break; - default: - SceneItem::display2(4000, 34); - break; - } - - if (_globals->_stripNum) { - setAction(NULL); - addMover(NULL); - ++_ctr; - scene->setAction(&scene->_action5); - } - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::GuardRock::doAction(int action) { - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(4000, 28); - break; - case CURSOR_LOOK: - SceneItem::display2(4000, 27); - break; - case CURSOR_TALK: - error("*** Do we need dialog."); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::Ladder::doAction(int action) { - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4000, 30); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - if (_globals->getFlag(40)) { - scene->_sceneMode = 4005; - scene->setAction(&scene->_sequenceManager1, scene, 4005, &_globals->_player, NULL); - } else { - scene->_sceneMode = 4004; - scene->setAction(&scene->_sequenceManager1, scene, 4004, &_globals->_player, &scene->_ladder, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::TheTech::doAction(int action) { - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4000, 13); - break; - case OBJECT_SCANNER: - SceneItem::display2(4000, 19); - break; - case OBJECT_STUNNER: - SceneItem::display2(4000, 20); - break; - case CURSOR_USE: - if (_globals->getFlag(40)) - SceneItem::display2(4000, 37); - else { - _globals->_player.disableControl(); - if (_globals->_sceneObjects->contains(&scene->_miranda)) - _globals->clearFlag(96); - - scene->_sceneMode = 4012; - scene->setAction(&scene->_sequenceManager1, scene, 4012, &_globals->_player, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::Hotspot13::doAction(int action) { - // Rock between the two chimneys - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4000, 21); - break; - case OBJECT_ROPE: - if (_globals->getFlag(40)) - scene->setAction(&scene->_action4); - else - SceneItem::display2(4000, 22); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::Hotspot::doAction(int action) { - // Wall between the two doors - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4000, 16); - break; - case OBJECT_SCANNER: - SceneItem::display2(4000, 17); - break; - case OBJECT_STUNNER: - SceneItem::display2(4000, 18); - break; - case OBJECT_LADDER: { - _globals->_player.disableControl(); - - scene->_ladder.postInit(); - scene->_ladder.setVisage(4000); - scene->_ladder.setStrip(5); - scene->_ladder.setPosition(Common::Point(245, 147)); - scene->_ladder.hide(); - _globals->_sceneItems.push_front(&scene->_ladder); - - if (_globals->_sceneObjects->contains(&scene->_hotspot8)) { - scene->_hotspot8.setAction(NULL); - Common::Point pt(118, 145); - NpcMover *mover = new NpcMover(); - scene->_hotspot18.addMover(mover, &pt, NULL); - } - - scene->_sceneMode = 4004; - scene->setAction(&scene->_sequenceManager1, scene, 4011, &_globals->_player, &scene->_ladder, NULL); - break; - } - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::Hotspot17::doAction(int action) { - // Left Chimney - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4000, 23); - break; - case CURSOR_USE: - if (_globals->getFlag(40)) - scene->setAction(&scene->_action7); - else - SceneItem::display2(4000, 24); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::Hotspot18::doAction(int action) { - // Right Chimney - Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4000, 36); - break; - case CURSOR_USE: - if (_globals->getFlag(40)) - scene->setAction(&scene->_action8); - else - SceneItem::display2(4000, 24); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4000::Hotspot23::doAction(int action) { - // Door of the temple - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4000, _globals->getFlag(31) ? 10 : 9); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene4000::Scene4000() : - _forceField(0, CURSOR_LOOK, 4000, 14, CURSOR_USE, 4000, 32, OBJECT_STUNNER, 4000, 33, - OBJECT_SCANNER, 4000, 19, LIST_END), - _hotspot19(0, CURSOR_LOOK, 4000, 7, LIST_END), - _hotspot20(0, CURSOR_LOOK, 4000, 3, LIST_END), - _hotspot21(0, CURSOR_LOOK, 4000, 1, LIST_END), - _hotspot22(0, CURSOR_LOOK, 4000, 8, LIST_END), - _hotspot24(0, CURSOR_LOOK, 4000, 11, LIST_END), - _hotspot25(0, CURSOR_LOOK, 4000, 4, LIST_END), - _hotspot26(0, CURSOR_LOOK, 4000, 0, LIST_END) { -} - -void Scene4000::postInit(SceneObjectList *OwnerList) { - loadScene(4000); - Scene::postInit(); - setZoomPercents(0, 20, 70, 50); - - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerML); - _stripManager.addSpeaker(&_speakerMR); - _stripManager.addSpeaker(&_speakerSR); - _stripManager.addSpeaker(&_speakerCHFL); - _stripManager.addSpeaker(&_speakerPL); - _stripManager.addSpeaker(&_speakerPText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerCHFR); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerCHFText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerMText); - - _speakerCHFText._npc = &_guardRock; - _speakerSText._npc = &_hotspot5; - _speakerMText._npc = &_miranda; - _speakerPText._npc = &_olo; - _speakerQText._npc = &_globals->_player; - - _hotspot13.setBounds(Rect(263, 41, 278, 55)); - _hotspot14.setBounds(Rect(96 /*140*/, 177, 140 /*96*/, 204)); - _hotspot15.setBounds(Rect(227, 101, 264, 143)); - _hotspot16.setBounds(Rect(306, 100, 319, 148)); - _hotspot17.setBounds(Rect(231, 53, 254, 60)); - _hotspot18.setBounds(Rect(285, 51, 310, 60)); - _hotspot26.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot21.setBounds(Rect(28, 7, 53, 64)); - _hotspot22.setBounds(Rect(125, 155, 140, 189)); - _hotspot23.setBounds(Rect(205, 102, 220, 142)); - _hotspot24.setBounds(Rect(270, 111, 297, 147)); - - _hotspot19._sceneRegionId = 16; - _hotspot20._sceneRegionId = 18; - _hotspot25._sceneRegionId = 17; - - _smoke1.postInit(); - _smoke1.setVisage(4000); - _smoke1.fixPriority(1); - _smoke1.setFrame(2); - _smoke1.setPosition(Common::Point(242, 59)); - _smoke1.animate(ANIM_MODE_2, NULL); - - _smoke2.postInit(); - _smoke2.setVisage(4000); - _smoke2.setStrip(2); - _smoke2.fixPriority(1); - _smoke2.setFrame(2); - _smoke2.setPosition(Common::Point(299, 59)); - _smoke2.animate(ANIM_MODE_2, NULL); - - if (RING_INVENTORY._ladder._sceneNumber != 4000) { - // if ladder is not in the scene, activate the hotspot on the wall - _hotspot8.postInit(); - _hotspot8.setVisage(4018); - _hotspot8.setObjectWrapper(new SceneObjectWrapper()); - _hotspot8._strip = 2; - _hotspot8._numFrames = 5; - _hotspot8.setPosition(Common::Point(306, 154)); - _hotspot8.setAction(&_action9); - } - - _theTech.postInit(); - _theTech.setVisage(4000); - _theTech.setStrip(3); - _theTech.setFrame(3); - _theTech.fixPriority(200); - _theTech.setPosition(Common::Point(281, 176)); - - if (_globals->getFlag(34)) { - _soundHandler1.play(156); - - _forceField.postInit(); - _forceField.setVisage(4000); - _forceField.setStrip(4); - _forceField.setPosition(Common::Point(312, 174)); - _forceField.fixPriority(200); - _forceField.animate(ANIM_MODE_8, 0, NULL); - - _globals->_sceneItems.push_back(&_forceField); - } - - _globals->_player.postInit(); - _globals->_player.setVisage(2602); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(-28, 86)); - - if (!_globals->getFlag(36) && !_globals->getFlag(43)) { - _miranda.postInit(); - _miranda.setVisage(2701); - _miranda.animate(ANIM_MODE_1, NULL); - _miranda.setObjectWrapper(new SceneObjectWrapper()); - _miranda._moveDiff = Common::Point(4, 2); - _miranda.setPosition(Common::Point(-210, 139)); - - _globals->_sceneItems.push_back(&_miranda); - } - - _globals->clearFlag(40); - - switch (_globals->_sceneManager._previousScene) { - case 2320: - _globals->_soundHandler.play(155); - - if (RING_INVENTORY._ale._sceneNumber == 1) { - _guardRock.postInit(); - _guardRock.setVisage(4001); - _guardRock.animate(ANIM_MODE_1, NULL); - _guardRock.setObjectWrapper(new SceneObjectWrapper()); - _guardRock.setPosition(Common::Point(314, 132)); - - setAction(&_action6); - } else { - _globals->_player.disableControl(); - _sceneMode = 4001; - setAction(&_sequenceManager1, this, 4001, &_globals->_player, NULL); - - if (!_globals->getFlag(36) && !_globals->getFlag(43)) - _miranda.setAction(&_sequenceManager2, NULL, 4002, &_miranda, NULL); - } - - if (_globals->getFlag(42)) - _hotspot8.setAction(&_action3); - else if (_globals->getFlag(91)) - _hotspot8.remove(); - break; - - case 4010: - _miranda.setPosition(Common::Point(-210, 139)); - - _guardRock.postInit(); - _guardRock.setVisage(4001); - _guardRock.animate(ANIM_MODE_1, NULL); - _guardRock.setObjectWrapper(new SceneObjectWrapper()); - _guardRock.setPosition(Common::Point(314, 132)); - - _hotspot2.postInit(); - _hotspot2.setVisage(4018); - _hotspot2._strip = 1; - _hotspot2._numFrames = 5; - _hotspot2.setPosition(Common::Point(182, 146)); - _hotspot2.setAction(&_action10); - - setAction(&_action2); - break; - - case 4025: - if (RING_INVENTORY._ladder._sceneNumber == 4000) - _hotspot8.remove(); - - _globals->_player.setPosition(Common::Point(260, 185)); - - if (!_globals->getFlag(36) && !_globals->getFlag(43)) - _miranda.setPosition(Common::Point(246, 146)); - - if (_globals->getFlag(96)) { - _olo.postInit(); - _olo.setVisage(4006); - _olo.animate(ANIM_MODE_1, NULL); - _olo.setObjectWrapper(new SceneObjectWrapper()); - _olo.setPosition(Common::Point(290, 163)); - } - - if (_globals->_stripNum == 4025) { - _soundHandler1.play(182); - _forceField.remove(); - - _hotspot5.postInit(); - _hotspot5.setVisage(2801); - _hotspot5.animate(ANIM_MODE_1, NULL); - _hotspot5.setObjectWrapper(new SceneObjectWrapper()); - _hotspot5._moveDiff.x = 4; - _hotspot5.setPosition(Common::Point(-18, 86)); - - _globals->_player.disableControl(); - - if (!_globals->getFlag(96)) { - _olo.postInit(); - _olo.setVisage(4006); - _olo.animate(ANIM_MODE_1, NULL); - _olo.setObjectWrapper(new SceneObjectWrapper()); - _olo.setPosition(Common::Point(195, 128)); - - Common::Point pt(268, 157); - PlayerMover *mover = new PlayerMover(); - _olo.addMover(mover, &pt, NULL); - } - - _sceneMode = 4003; - setAction(&_sequenceManager1, this, 4003, &_hotspot5, NULL); - } else if (_globals->getFlag(96)) { - _globals->_player.disableControl(); - _sceneMode = 4013; - setAction(&_sequenceManager1, this, 4013, &_olo, NULL); - } - - _globals->clearFlag(96); - break; - - case 4045: - _globals->_player.enableControl(); - - if (RING_INVENTORY._ladder._sceneNumber != 4000) { - _hotspot8.setVisage(4017); - _hotspot8.animate(ANIM_MODE_1, NULL); - _hotspot8.setPosition(Common::Point(199, 188)); - _hotspot8.setAction(&_action3); - } - - _globals->_player.setPosition(Common::Point(208, 153)); - if (!_globals->getFlag(36) && !_globals->getFlag(43)) - _miranda.setPosition(Common::Point(246, 146)); - - if (_globals->getFlag(39)) { - // Ollo follows Quinn and gives explanations on the Tech. - _globals->clearFlag(39); - - _olo.postInit(); - _olo.setVisage(4006); - _olo.animate(ANIM_MODE_1, NULL); - _olo.setObjectWrapper(new SceneObjectWrapper()); - _olo.setPosition(Common::Point(219, 150)); - - _sceneMode = 4010; - _globals->_player.disableControl(); - // This is the buggy animation where Miranda comments the Tech even - // if she's not in the room but in the lander. - setAction(&_sequenceManager1, this, 4010, &_globals->_player, &_olo, NULL); - } - - if (_globals->_stripNum == 4000) { - _globals->_stripNum = 0; - - _guardRock.postInit(); - _guardRock.setVisage(4001); - _guardRock.animate(ANIM_MODE_1, NULL); - _guardRock.setObjectWrapper(new SceneObjectWrapper()); - _guardRock.setPosition(Common::Point(231, 159)); - _guardRock.setStrip(4); - - setAction(&_action12); - } - break; - - case 4050: - _globals->_soundHandler.play(155); - _globals->_player.disableControl(); - - if (_globals->_stripNum == 4050) { - _globals->_player.setVisage(4008); - _globals->_player.setStrip(4); - _globals->_player.setFrame(_globals->_player.getFrameCount()); - _globals->_player.fixPriority(16); - _globals->_player.setPosition(Common::Point(260, 55)); - - _sceneMode = 4007; - setAction(&_sequenceManager1, this, 4007, &_globals->_player, NULL); - } else { - _globals->_player.setPosition(Common::Point(208, 153)); - _globals->_player.enableControl(); - } - - if (RING_INVENTORY._ladder._sceneNumber != 4000) - _hotspot8.remove(); - break; - - case 4100: - _globals->_player.enableControl(); - _globals->_player.setPosition(Common::Point(270, 155)); - - if (_globals->getFlag(42) && (RING_INVENTORY._ladder._sceneNumber != 4000)) { - _hotspot8.setVisage(4017); - _hotspot8.animate(ANIM_MODE_1, NULL); - _hotspot8.setPosition(Common::Point(244, 151)); - _hotspot8.setAction(&_action3); - } - - if (!_globals->getFlag(36) && !_globals->getFlag(43)) - _miranda.setPosition(Common::Point(246, 146)); - break; - - default: - _globals->_soundHandler.play(155); - - _lander.postInit(); - _lander.setVisage(4002); - _lander._moveDiff = Common::Point(10, 10); - _lander.setPosition(Common::Point(-100, 80)); - _lander.changeZoom(-1); - _lander.setPosition(Common::Point(130, -1)); - _lander.animate(ANIM_MODE_2, NULL); - - if (_globals->_stripNum == 9000) { - _olo.postInit(); - _olo.setVisage(4006); - _olo.setPosition(Common::Point(235, 153)); - - _guardRock.postInit(); - _guardRock.setVisage(4001); - _guardRock.setStrip(3); - _guardRock.setPosition(Common::Point(255, 153)); - - setAction(&_action11); - RING_INVENTORY._ladder._sceneNumber = 4100; - RING_INVENTORY._rope._sceneNumber = 4150; - - _soundHandler1.play(156); - - _forceField.postInit(); - _forceField.setVisage(4000); - _forceField.setStrip(4); - _forceField.setPosition(Common::Point(312, 174)); - _forceField.fixPriority(200); - _forceField.animate(ANIM_MODE_8, 0, NULL); - } else { - if (!_globals->getFlag(37)) { - _hotspot2.postInit(); - _hotspot2.setVisage(4018); - _hotspot2._strip = 1; - _hotspot2._numFrames = 5; - _hotspot2.setPosition(Common::Point(182, 146)); - _hotspot2.setAction(&_action10); - } - _miranda.setPosition(Common::Point(-210, 139)); - setAction(&_action13); - } - - break; - } - - if (RING_INVENTORY._ladder._sceneNumber == 4000) { - _ladder.postInit(); - _ladder.setVisage(4000); - _ladder.setStrip(5); - _ladder.setPosition(Common::Point(245, 147)); - - _globals->_sceneItems.push_back(&_ladder); - } - - if (RING_INVENTORY._rope._sceneNumber == 4000) { - _rope.postInit(); - _rope.setVisage(4000); - _rope.setStrip(7); - _rope.fixPriority(1); - _rope.setPosition(Common::Point(268, 44)); - } - - _globals->_sceneItems.addItems(&_hotspot8, &_hotspot17, &_hotspot18, &_hotspot14, &_hotspot15, - &_hotspot16, &_theTech, &_hotspot13, &_hotspot21, &_hotspot20, &_hotspot22, &_hotspot23, - &_hotspot24, &_hotspot25, &_hotspot19, &_hotspot26, NULL); -} - -void Scene4000::signal() { - switch (_sceneMode) { - case 4010: - _globals->setFlag(38); - _olo.remove(); - // Deliberate fall-through - case 4001: - _globals->_player.enableControl(); - break; - case 4002: - case 4011: - break; - case 4003: - _sceneMode = 4014; - setAction(&_sequenceManager1, this, 4014, &_globals->_player, &_hotspot5, NULL); - break; - case 4004: - RING_INVENTORY._ladder._sceneNumber = 4000; - // Deliberate fall-through - case 4007: - _globals->_player._uiEnabled = true; - _globals->_events.setCursor(CURSOR_USE); - _globals->setFlag(40); - break; - case 4005: - _globals->_player.enableControl(); - _globals->_events.setCursor(CURSOR_WALK); - _globals->clearFlag(40); - break; - case 4006: - _globals->_sceneManager.changeScene(4045); - break; - case 4008: - _globals->_sceneManager.changeScene(2320); - break; - case 4009: - _globals->_sceneManager.changeScene(2200); - break; - case 4012: - _globals->_player.checkAngle(&_theTech); - _globals->_sceneManager.changeScene(4025); - break; - case 4013: - _globals->_player.enableControl(); - _olo.remove(); - break; - case 4014: - _globals->_sceneManager.changeScene(4250); - break; - case 4015: - ADD_MOVER_NULL(_miranda, 0, _miranda._position.y - 5); - break; - } -} - -void Scene4000::dispatch() { - Scene::dispatch(); - - if ((_globals->_player.getRegionIndex() == 10) || (_globals->_player.getRegionIndex() == 6)) - _globals->_player.fixPriority(200); - if (_globals->_player.getRegionIndex() == 11) - _globals->_player.fixPriority(-1); - if (_globals->_player.getRegionIndex() == 5) - _globals->_player.fixPriority(94); - - if (_globals->_sceneObjects->contains(&_hotspot5)) { - if ((_hotspot5.getRegionIndex() == 10) || (_hotspot5.getRegionIndex() == 6)) - _hotspot5.fixPriority(200); - if (_hotspot5.getRegionIndex() == 11) - _hotspot5.fixPriority(-1); - if (_hotspot5.getRegionIndex() == 5) - _hotspot5.fixPriority(94); - } - - if (_globals->_sceneObjects->contains(&_miranda)) { - if (!_miranda._mover) - _miranda.checkAngle(&_globals->_player); - if (!_action && _globals->_player.getRegionIndex() == 23) { - ADD_MOVER_NULL(_miranda, 204, 186); - } - - if ((_miranda.getRegionIndex() == 10) || (_miranda.getRegionIndex() == 6)) - _miranda.fixPriority(200); - if (_miranda.getRegionIndex() == 11) - _miranda.fixPriority(-1); - if (_miranda.getRegionIndex() == 5) - _miranda.fixPriority(94); - } - - if (!_action) { - if ((RING_INVENTORY._peg._sceneNumber == 1) && _globals->getFlag(34) && - _globals->getFlag(37) && !_globals->getFlag(40)) { - _globals->_player.disableControl(); - _soundHandler1.play(177); - _globals->_soundHandler.play(178); - - setAction(&_action1); - } - - if (_globals->_player.getRegionIndex() == 2) - _globals->_sceneManager.changeScene(4045); - if (_globals->_player.getRegionIndex() == 15) - _globals->_sceneManager.changeScene(4100); - - if ((_globals->_player._position.x <= 5) && (_globals->_player._position.y < 100)) { - _globals->_player.disableControl(); - - if (!_globals->_sceneObjects->contains(&_miranda) || (_miranda._position.y <= 100)) { - _sceneMode = 4008; - setAction(&_sequenceManager1, this, 4008, &_globals->_player, NULL); - } else { - _sceneMode = 4015; - _globals->_player.addMover(NULL); - setAction(&_sequenceManager1, this, 4015, &_globals->_player, &_miranda, NULL); - } - } - } -} - -/*-------------------------------------------------------------------------- - * Scene 4010 - Village - Outside Lander - * - *--------------------------------------------------------------------------*/ - -void Scene4010::postInit(SceneObjectList *OwnerList) { - loadScene(4010); - Scene::postInit(); - setZoomPercents(0, 20, 70, 50); - - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerMText); - _speakerSText._npc = &_hotspot1; - _speakerMText._npc = &_hotspot2; - _speakerQText._npc = &_globals->_player; - - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(-38, 175)); - _globals->_player.changeZoom(75); - - _hotspot2.postInit(); - _hotspot2.setVisage(2705); - _hotspot2.animate(ANIM_MODE_1, NULL); - _hotspot2.setObjectWrapper(new SceneObjectWrapper()); - _hotspot2._moveDiff = Common::Point(4, 2); - _hotspot2.setPosition(Common::Point(-50, 185)); - _hotspot2.changeZoom(75); - - _hotspot1.postInit(); - _hotspot1.setVisage(2806); - _hotspot1.setPosition(Common::Point(-20, 175)); - _hotspot1.changeZoom(75); - _hotspot1.animate(ANIM_MODE_1, NULL); - _hotspot1.setObjectWrapper(new SceneObjectWrapper()); - - _globals->_player.disableControl(); - setAction(&_sequenceManager, this, 4017, &_globals->_player, &_hotspot1, &_hotspot2, NULL); -} - -void Scene4010::signal() { - _globals->_sceneManager.changeScene(4000); -} - -/*-------------------------------------------------------------------------- - * Scene 4025 - Village - Puzzle Board - * - *--------------------------------------------------------------------------*/ - -void Scene4025::Action1::signal() { - Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_armHotspot._strip = scene->_pegPtr->_armStrip; - scene->_armHotspot._frame = 4; - scene->_armHotspot.animate(ANIM_MODE_4, 2, -1, this); - - if (scene->_pegPtr->_armStrip > 3) { - if (scene->_hole1._armStrip == scene->_pegPtr->_armStrip) - scene->_hole1._pegPtr = NULL; - if (scene->_hole2._armStrip == scene->_pegPtr->_armStrip) - scene->_hole2._pegPtr = NULL; - if (scene->_hole3._armStrip == scene->_pegPtr->_armStrip) - scene->_hole3._pegPtr = NULL; - if (scene->_hole4._armStrip == scene->_pegPtr->_armStrip) - scene->_hole4._pegPtr = NULL; - if (scene->_hole5._armStrip == scene->_pegPtr->_armStrip) - scene->_hole5._pegPtr = NULL; - } - break; - case 1: - scene->_pegPtr->hide(); - - if (scene->_pegPtr2) { - if (scene->_pegPtr->_armStrip == 3) - scene->_pegPtr2->_strip = 2; - - scene->_pegPtr2->setPosition(scene->_pegPtr->_position); - scene->_pegPtr2->show(); - scene->_pegPtr2->_armStrip = scene->_pegPtr->_armStrip; - } - - scene->_pegPtr->_armStrip = 0; - scene->_pegPtr->setPosition(Common::Point(-10, -10)); - scene->_pegPtr2 = scene->_pegPtr; - scene->_armHotspot.animate(ANIM_MODE_5, this); - break; - - case 2: - _globals->_player._uiEnabled = true; - _globals->_events.setCursor(CURSOR_USE); - remove(); - break; - } -} - -void Scene4025::Action2::signal() { - Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_armHotspot._strip = scene->_holePtr->_armStrip; - scene->_armHotspot.animate(ANIM_MODE_4, 2, -1, this); - break; - case 1: - if (!scene->_pegPtr2) { - // Getting a peg from a hole - scene->_holePtr->_pegPtr->hide(); - scene->_pegPtr = scene->_holePtr->_pegPtr; - scene->_pegPtr->_armStrip = 0; - scene->_pegPtr->setPosition(Common::Point(-10, -10)); - scene->_pegPtr2 = scene->_holePtr->_pegPtr; - scene->_holePtr->_pegPtr = NULL; - } else { - // Placing a peg into a hole - scene->_pegPtr2 = NULL; - if (scene->_holePtr->_pegPtr) { - scene->_holePtr->_pegPtr->hide(); - scene->_pegPtr2 = scene->_holePtr->_pegPtr; - } - - assert(scene->_pegPtr); - scene->_pegPtr->setPosition(scene->_holePtr->_newPosition); - scene->_pegPtr->setStrip(1); - scene->_pegPtr->show(); - scene->_pegPtr->_armStrip = scene->_holePtr->_armStrip; - - scene->_holePtr->_pegPtr = scene->_pegPtr; - scene->_pegPtr = scene->_pegPtr2; - } - scene->_armHotspot.animate(ANIM_MODE_5, this); - break; - case 2: - _globals->_player._uiEnabled = true; - _globals->_events.setCursor(CURSOR_USE); - remove(); - break; - } -} - -void Scene4025::Action3::signal() { - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - _globals->_scenePalette.addRotation(64, 111, -1); - setDelay(120); - break; - case 1: - _globals->clearFlag(34); - _globals->_stripNum = 4025; - _globals->_sceneManager.changeScene(4000); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4025::Hole::synchronize(Serializer &s) { - SceneObject::synchronize(s); - SYNC_POINTER(_pegPtr); - s.syncAsSint16LE(_armStrip); - s.syncAsSint16LE(_newPosition.x); - s.syncAsSint16LE(_newPosition.y); -} - -void Scene4025::Hole::doAction(int action) { - Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4025, 3); - break; - case CURSOR_USE: - if (!scene->_pegPtr && !_pegPtr) { - setAction(&scene->_sequenceManager, scene, 4028, NULL); - } else { - _globals->_player.disableControl(); - scene->_holePtr = this; - scene->setAction(&scene->_action2); - } - break; - case OBJECT_PEG: - if (!scene->_pegPtr2) { - _globals->_player.disableControl(); - _globals->_events.setCursor(CURSOR_USE); - RING_INVENTORY._peg._sceneNumber = 4025; - - scene->_pegPtr = &scene->_peg5; - scene->_holePtr = this; - scene->_pegPtr->_armStrip = 0; - scene->_pegPtr2 = scene->_pegPtr; - - scene->setAction(&scene->_action2); - } else { - scene->_sceneMode = 4027; - scene->setAction(&scene->_sequenceManager, scene, 4027, NULL); - } - break; - } -} - -void Scene4025::Peg::synchronize(Serializer &s) { - SceneObject::synchronize(s); - s.syncAsSint16LE(_field88); - s.syncAsSint16LE(_armStrip); -} - -void Scene4025::Peg::doAction(int action) { - Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4025, 1); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->_pegPtr = this; - scene->setAction(&scene->_action1); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene4025::Scene4025() : Scene() { - _holePtr = NULL; - _pegPtr = _pegPtr2 = NULL; -} - -void Scene4025::postInit(SceneObjectList *OwnerList) { - loadScene(4025); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _globals->_events.setCursor(CURSOR_USE); - _pegPtr = _pegPtr2 = NULL; - - _peg1.postInit(); - _peg1._field88 = 1; - _peg1.setVisage(4025); - _peg1.setStrip(2); - _peg1.setFrame(1); - _peg1.setPosition(Common::Point(203, 61)); - - _peg2.postInit(); - _peg2._field88 = 4; - _peg2.setVisage(4025); - _peg2.setStrip(2); - _peg2.setFrame(2); - _peg2.setPosition(Common::Point(195, 57)); - - _peg3.postInit(); - _peg3._field88 = 0; - _peg3.setVisage(4025); - _peg3.setStrip(2); - _peg3.setFrame(3); - _peg3.setPosition(Common::Point(202, 66)); - - _peg4.postInit(); - _peg4._field88 = 3; - _peg4.setVisage(4025); - _peg4.setStrip(2); - _peg4.setFrame(4); - _peg4.setPosition(Common::Point(194, 68)); - - _peg5.postInit(); - _peg5._field88 = 2; - _peg5.setVisage(4025); - _peg5.setStrip(1); - _peg5.setFrame(5); - _peg5.hide(); - - // Hole N-W - _hole1.postInit(); - _hole1.setVisage(4025); - _hole1.setStrip(1); - _hole1.setFrame2(6); - _hole1.setPosition(Common::Point(123, 51)); - _hole1._pegPtr = NULL; - _hole1._newPosition = Common::Point(123, 44); - _hole1._armStrip = 8; - - // Hole N-E - _hole2.postInit(); - _hole2.setVisage(4025); - _hole2.setStrip(1); - _hole2.setFrame2(7); - _hole2.setPosition(Common::Point(167, 51)); - _hole2._pegPtr = NULL; - _hole2._newPosition = Common::Point(166, 44); - _hole2._armStrip = 7; - - // Hole Center - _hole3.postInit(); - _hole3.setVisage(4025); - _hole3.setStrip(1); - _hole3.setFrame2(8); - _hole3.setPosition(Common::Point(145, 69)); - _hole3._pegPtr = NULL; - _hole3._newPosition = Common::Point(145, 60); - _hole3._armStrip = 6; - - // Hole S-W - _hole4.postInit(); - _hole4.setVisage(4025); - _hole4.setStrip(1); - _hole4.setFrame2(9); - _hole4.setPosition(Common::Point(123, 87)); - _hole4._pegPtr = NULL; - _hole4._newPosition = Common::Point(123, 80); - _hole4._armStrip = 5; - - // Hole S-E - _hole5.postInit(); - _hole5.setVisage(4025); - _hole5.setStrip(1); - _hole5.setFrame2(10); - _hole5.setPosition(Common::Point(167, 87)); - _hole5._pegPtr = NULL; - _hole5._newPosition = Common::Point(166, 80); - _hole5._armStrip = 4; - - _hole1.fixPriority(1); - _hole2.fixPriority(1); - _hole3.fixPriority(1); - _hole4.fixPriority(1); - _hole5.fixPriority(1); - - _armHotspot.postInit(); - _armHotspot.setVisage(4025); - _armHotspot.setPosition(Common::Point(190, 161)); - _armHotspot.setStrip(3); - _armHotspot.setFrame(4); - - _globals->_sceneItems.addItems(&_hole1, &_hole2, &_hole3, &_hole4, &_hole5, - &_peg1, &_peg2, &_peg3, &_peg4, &_peg5, NULL); - - _globals->_player._uiEnabled = true; - _globals->_player.disableControl(); - setAction(&_sequenceManager, this, 4026, NULL); -} - -void Scene4025::synchronize(Serializer &s) { - Scene::synchronize(s); - SYNC_POINTER(_pegPtr); - SYNC_POINTER(_pegPtr2); - SYNC_POINTER(_holePtr); -} - -void Scene4025::remove() { - _globals->_scenePalette.clearListeners(); - Scene::remove(); -} - -void Scene4025::signal() { - if (_sceneMode != 4027) { - if (_sceneMode != 4028) { - _gfxButton.setText(EXIT_MSG); - _gfxButton._bounds.center(144, 107); - _gfxButton.draw(); - _gfxButton._bounds.expandPanes(); - } - - _globals->_player._uiEnabled = true; - } - - _globals->_events.setCursor(CURSOR_USE); -} - -void Scene4025::process(Event &event) { - Scene::process(event); - - if (_gfxButton.process(event)) { - if (RING_INVENTORY._peg._sceneNumber == 4025) - RING_INVENTORY._peg._sceneNumber = 1; - - _globals->_sceneManager.changeScene(4000); - } -} - -void Scene4025::dispatch() { - if (!_action && (_peg1._armStrip == 7) && (_peg2._armStrip == 4) && (_peg3._armStrip == 8) && - (_peg4._armStrip == 5) && (_peg5._armStrip == 6)) - setAction(&_action3); - - Scene::dispatch(); -} - -/*-------------------------------------------------------------------------- - * Scene 4045 - Village - Temple Antechamber - * - *--------------------------------------------------------------------------*/ - -void Scene4045::Action1::signal() { - Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(60); - break; - case 1: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(4040, this, scene); - break; - case 2: - scene->_olloFace.animate(ANIM_MODE_NONE, NULL); - scene->_hotspot4.animate(ANIM_MODE_5, this); - break; - case 3: - setDelay(60); - break; - case 4: - scene->_hotspot4.animate(ANIM_MODE_6, this); - break; - case 5: - ADD_MOVER(_globals->_player, 150, 300); - break; - case 6: - _globals->_stripNum = 4000; - _globals->_sceneManager.changeScene(4000); - remove(); - break; - } -} - -void Scene4045::Action2::signal() { - Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(15); - break; - case 1: - scene->_stripManager.start(_globals->_stripNum, this, scene); - break; - case 2: - scene->_olloFace.animate(ANIM_MODE_NONE, NULL); - setDelay(10); - break; - case 3: - if (_globals->getFlag(38)) { - _globals->_player.enableControl(); - remove(); - } else { - ADD_MOVER(_globals->_player, 150, 300); - } - break; - case 4: - _globals->setFlag(39); - _globals->_sceneManager.changeScene(4000); - break; - } -} - -void Scene4045::Action3::signal() { - Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - scene->_hotspot4.animate(ANIM_MODE_5, this); - break; - case 1: - scene->_stripManager.start(4504, this, scene); - break; - case 2: - scene->_hotspot4.animate(ANIM_MODE_6, NULL); - scene->_olloFace.animate(ANIM_MODE_NONE, NULL); - ADD_MOVER(_globals->_player, 91, 1264); - break; - case 3: - _globals->_player.enableControl(); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4045::OlloStand::doAction(int action) { - Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(4045, 19); - break; - case CURSOR_LOOK: - SceneItem::display2(4045, (_strip == 1) ? 5 : 14); - break; - case CURSOR_USE: - SceneItem::display2(4045, 18); - break; - case CURSOR_TALK: - if (_strip == 5) { - setStrip(6); - animate(ANIM_MODE_NONE, NULL); - } - if (_globals->_player._position.y < 135) { - scene->_sceneMode = 4046; - _numFrames = 10; - _globals->_player.disableControl(); - - scene->setAction(&scene->_sequenceManager, this, 4046, &_globals->_player, this, NULL); - } else { - if (!_globals->getFlag(31)) { - _globals->setFlag(31); - _globals->_stripNum = 4080; - } else if (!_globals->getFlag(38)) - _globals->_stripNum = 4060; - else - _globals->_stripNum = 4503; - - scene->setAction(&scene->_action2); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4045::Miranda::doAction(int action) { - Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4045, 9); - break; - case CURSOR_TALK: - scene->_sceneMode = 4102; - _globals->_player.disableControl(); - scene->setAction(&scene->_sequenceManager, scene, 4104, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4045::Necklace::doAction(int action) { - Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4045, 17); - break; - case CURSOR_USE: - if (_globals->_player._position.y < 135) { - SceneItem::display2(4045, 16); - RING_INVENTORY._peg._sceneNumber = 1; - _globals->_events.setCursor(CURSOR_WALK); - remove(); - } else { - scene->_sceneMode = 4047; - _globals->_player.disableControl(); - scene->setAction(&scene->_sequenceManager, scene, 4047, &_globals->_player, &scene->_olloStand, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene4045::Scene4045() : - _flame(0, CURSOR_LOOK, 4045, 1, CURSOR_USE, 4100, 21, LIST_END), - _hotspot7(9, CURSOR_LOOK, 4045, 0, CURSOR_USE, 4045, 15, LIST_END), - _hotspot8(10, CURSOR_LOOK, 4045, 2, LIST_END), - _hotspot9(11, CURSOR_LOOK, 4045, 3, CURSOR_USE, 4045, 15, LIST_END), - _hotspot10(12, CURSOR_LOOK, 4045, 4, CURSOR_USE, 4100, 19, LIST_END), - _hotspot11(13, CURSOR_LOOK, 4045, 6, CURSOR_USE, 4045, 15, LIST_END), - _hotspot12(14, CURSOR_LOOK, 4045, 7, CURSOR_USE, 4150, 29, LIST_END), - _hotspot13(15, CURSOR_LOOK, 4045, 8, CURSOR_USE, 4100, 19, LIST_END), - _hotspot14(0, CURSOR_LOOK, 4045, 10, LIST_END) { - - _hotspot14.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); -} - -void Scene4045::postInit(SceneObjectList *OwnerList) { - loadScene(4045); - Scene::postInit(); - setZoomPercents(100, 60, 200, 100); - - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerML); - _stripManager.addSpeaker(&_speakerPR); - _stripManager.addSpeaker(&_speakerPText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.setCallback(this); - - _speakerQText._textPos.y = 140; - - _flame.postInit(); - _flame.setVisage(4045); - _flame.setPosition(Common::Point(47, 111)); - _flame.animate(ANIM_MODE_2, NULL); - _flame.fixPriority(156); - _globals->_sceneItems.push_back(&_flame); - - _globals->_player.postInit(); - _globals->_player.setVisage(4200); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player._moveDiff = Common::Point(7, 4); - - _olloStand.postInit(); - _olloStand.setVisage(4051); - - _olloFace.postInit(); - _olloFace.setVisage(4051); - _olloFace.setStrip(4); - _olloFace.fixPriority(152); - - if(_globals->_sceneManager._previousScene == 4050) { - _globals->_soundHandler.play(155); - _globals->_player.setPosition(Common::Point(72, 128)); - _globals->_player.enableControl(); - - _olloStand.setStrip(5); - _olloStand.setPosition(Common::Point(173, 99)); - _olloStand._numFrames = 1; - _olloStand.animate(ANIM_MODE_2, NULL); - - _olloFace.setPosition(Common::Point(177, 40)); - - if (RING_INVENTORY._peg._sceneNumber == 4045) { - _necklace.postInit(); - _necklace.setVisage(4045); - _necklace.setStrip(2); - _necklace.setPosition(Common::Point(108, 82)); - _globals->_sceneItems.push_back(&_necklace); - } - } else { - _globals->_player.setPosition(Common::Point(108, 192)); - _globals->_player.setStrip(4); - - if (!_globals->getFlag(36) && !_globals->getFlag(43)) { - _miranda.postInit(); - _miranda.setVisage(4102); - _miranda.animate(ANIM_MODE_NONE, NULL); - _miranda.setStrip(3); - _miranda.setFrame(2); - _miranda.changeZoom(-1); - - _miranda.setPosition(Common::Point(66, 209)); - _globals->_sceneItems.push_back(&_miranda); - } - - if (_globals->getFlag(31)) { - // Olo asleep - _olloStand.setVisage(4051); - _olloStand.setStrip(5); - _olloStand.setPosition(Common::Point(173, 99)); - _olloStand._numFrames = 1; - _olloStand.animate(ANIM_MODE_2, NULL); - - _olloFace.setPosition(Common::Point(177, 40)); - - if (RING_INVENTORY._peg._sceneNumber == 4045) { - _necklace.postInit(); - _necklace.setVisage(4045); - _necklace.setStrip(2); - _necklace.setPosition(Common::Point(108, 82)); - _globals->_sceneItems.push_back(&_necklace); - } - } else { - _olloStand.setPosition(Common::Point(186, 149)); - - _hotspot4.postInit(); - _hotspot4.setVisage(4051); - _hotspot4.setStrip(2); - _hotspot4.fixPriority(152); - _hotspot4.setPosition(Common::Point(202, 80)); - - _olloFace.setPosition(Common::Point(192, 77)); - _globals->setFlag(31); - setAction(&_action1); - - _globals->_player.disableControl(); - } - } - - _globals->_sceneItems.addItems(&_olloStand, &_hotspot7, &_hotspot8, &_hotspot9, &_hotspot10, - &_hotspot13, &_hotspot11, &_hotspot12, &_hotspot14, NULL); -} - -void Scene4045::stripCallback(int v) { - switch (v) { - case 1: - _olloFace.animate(ANIM_MODE_7, 0, NULL); - break; - case 2: - _olloFace.animate(ANIM_MODE_NONE, NULL); - break; - } -} - -void Scene4045::signal() { - switch (_sceneMode) { - case 4046: - case 4047: - _olloFace.animate(ANIM_MODE_NONE, NULL); - break; - case 4050: - _globals->_sceneManager.changeScene(4000); - break; - case 4102: - _globals->_player.enableControl(); - break; - } -} - -void Scene4045::dispatch() { - if (!_action) { - if (_globals->_player.getRegionIndex() == 8) { - _globals->_player.addMover(NULL); - if (_olloStand._strip != 1) { - _globals->_player.disableControl(); - _sceneMode = 4046; - _olloStand._numFrames = 10; - setAction(&_sequenceManager, this, 4046, &_globals->_player, &_olloStand, NULL); - } else { - setAction(&_action3); - } - } - - if (_globals->_player.getRegionIndex() == 10) - _globals->_sceneManager.changeScene(4050); - if (_globals->_player._position.y >= 196) { - _sceneMode = 4050; - _globals->_player.disableControl(); - setAction(&_sequenceManager, this, 4105, &_globals->_player, NULL); - } - } - - Scene::dispatch(); -} - -/*-------------------------------------------------------------------------- - * Scene 4050 - Village - Outside - * - *--------------------------------------------------------------------------*/ - -void Scene4050::Action1::signal() { - // "Map" on the wall - Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: { - Common::Point pt(204, 152); - PlayerMover *mover = new PlayerMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - _globals->_player.checkAngle(&scene->_hotspot17); - - scene->_hotspot14.postInit(); - scene->_hotspot14.setVisage(4050); - scene->_hotspot14.setStrip(2); - scene->_hotspot14.setPosition(Common::Point(91, 154)); - scene->_hotspot14.fixPriority(200); - setDelay(10); - break; - case 3: - _globals->_events.waitForPress(); - _globals->setFlag(45); - scene->_hotspot14.remove(); - - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4050::Action2::signal() { - // Climb down the rope - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(120); - break; - case 1: - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - _globals->_player.setVisage(4202); - _globals->_player.changeZoom(100); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(192, 130)); - - ADD_MOVER(_globals->_player, 215, 130); - break; - case 3: - _globals->_player.setVisage(4052); - _globals->_player.setStrip(5); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(236, 130)); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 4: - _globals->_player.setVisage(4202); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setPosition(Common::Point(210, 185)); - _globals->_player.fixPriority(-1); - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4050::Action3::signal() { - // Climb up the rope - switch (_actionIndex++) { - case 0: - ADD_PLAYER_MOVER(210, 185); - break; - case 1: - _globals->_player.fixPriority(200); - _globals->_player.setVisage(4052); - _globals->_player.setStrip(5); - _globals->_player.changeZoom(100); - _globals->_player.setFrame(_globals->_player.getFrameCount()); - _globals->_player.setPosition(Common::Point(236, 130)); - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 2: - _globals->_player.setVisage(4202); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(215, 130)); - ADD_MOVER(_globals->_player, 212, 130); - break; - case 3: - _globals->_stripNum = 4050; - _globals->_sceneManager.changeScene(4000); - break; - } -} - -void Scene4050::Action4::signal() { - Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - ADD_MOVER(_globals->_player, 189, 135); - _globals->_player.fixPriority(200); - break; - case 1: - _globals->_player._moveDiff.y = 3; - _globals->_player.setStrip2(3); - _globals->_player._frame = 1; - _globals->_player.setPosition(Common::Point(189, 129)); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - _globals->_player.setVisage(4202); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(192, 130)); - _globals->_player.changeZoom(100); - ADD_MOVER(_globals->_player, 215, 130); - - scene->_hotspot16.postInit(); - scene->_hotspot16.setVisage(4052); - scene->_hotspot16.animate(ANIM_MODE_1, NULL); - scene->_hotspot16.setStrip2(6); - scene->_hotspot16.setPosition(Common::Point(160, 240)); - ADD_MOVER(scene->_hotspot16, 172, 188); - break; - case 3: - _globals->_player.setVisage(4052); - _globals->_player.setStrip(5); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(238, 130)); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 4: - _globals->_player.setVisage(4052); - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(216, 184)); - _globals->_player.fixPriority(-1); - break; - case 5: - scene->_hotspot16.setStrip2(4); - scene->_hotspot16.setFrame(1); - scene->_hotspot16.animate(ANIM_MODE_4, 4, 1, this);; - break; - case 6: - scene->_hotspot16.animate(ANIM_MODE_5, NULL); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 7: - _globals->_player.setVisage(4202); - _globals->_player.setStrip(6); - _globals->_player.setFrame(1); - - scene->_stripManager.start(4051, this); - break; - case 8: - setDelay(15); - break; - case 9: - _globals->_sceneManager.changeScene(4000); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4050::Hotspot15::doAction(int action) { - Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4050, 14); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - setAction(&scene->_action3); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4050::Hotspot17::doAction(int action) { - Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - scene->setAction(&scene->_action1); - break; - case CURSOR_USE: - SceneItem::display2(4050, 24); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene4050::Scene4050() : - _hotspot1(0, CURSOR_LOOK, 4050, 0, LIST_END), - _hotspot2(0, CURSOR_LOOK, 4050, 1, CURSOR_USE, 4050, 15, LIST_END), - _hotspot3(0, CURSOR_LOOK, 4050, 2, CURSOR_USE, 4050, 16, LIST_END), - _hotspot4(0, CURSOR_LOOK, 4050, 4, LIST_END), - _hotspot5(0, CURSOR_LOOK, 4050, 5, LIST_END), - _hotspot6(0, CURSOR_LOOK, 4050, 5, LIST_END), - _hotspot7(0, CURSOR_LOOK, 4050, 6, CURSOR_USE, 4050, 18, LIST_END), - _hotspot8(0, CURSOR_LOOK, 4050, 7, CURSOR_USE, 4050, 19, LIST_END), - _hotspot9(0, CURSOR_LOOK, 4050, 8, CURSOR_USE, 4050, 20, LIST_END), - _hotspot10(0, CURSOR_LOOK, 4050, 9, CURSOR_USE, 4050, 21, LIST_END), - _hotspot11(0, CURSOR_LOOK, 4050, 10, CURSOR_USE, 4050, 22, LIST_END), - _hotspot12(0, CURSOR_LOOK, 4050, 11, CURSOR_USE, 4050, 23, LIST_END), - _hotspot13(0, CURSOR_LOOK, 4050, 3, CURSOR_USE, 4050, 17, LIST_END) { -} - -void Scene4050::postInit(SceneObjectList *OwnerList) { - loadScene(4050); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerPText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerGameText); - - _globals->_player.postInit(); - - switch (_globals->_sceneManager._previousScene) { - case 4000: - if (_globals->getFlag(41)) { - // Using a rope - _hotspot15.postInit(); - _hotspot15.setVisage(4054); - _hotspot15.setPosition(Common::Point(206, 103)); - _globals->_sceneItems.push_back(&_hotspot15); - - _globals->_player.setVisage(4008); - _globals->_player.setPosition(Common::Point(206, 62)); - _globals->_player.changeZoom(130); - _globals->_player.fixPriority(200); - _globals->_player.setStrip(2); - - setAction(&_action2); - _globals->_soundHandler.play(175); - } else { - // Without the rope - _globals->_player.setVisage(5315); - _globals->_player.setPosition(Common::Point(189, 83)); - _globals->_player.changeZoom(130); - _globals->_player.setStrip2(2); - _globals->_player._moveDiff.y = 10; - _globals->_player.animate(ANIM_MODE_2, NULL); - - setAction(&_action4); - _globals->_soundHandler.play(176); - } - break; - case 4045: - _hotspot15.postInit(); - _hotspot15.setVisage(4054); - _hotspot15.setPosition(Common::Point(206, 103)); - _globals->_sceneItems.push_back(&_hotspot15); - - _globals->_player.setVisage(4202); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(193, 193)); - - _globals->_soundHandler.play(175); - break; - default: - break; - } - - _hotspot13.postInit(); - _hotspot13.setVisage(4053); - _hotspot13.animate(ANIM_MODE_2, NULL); - _hotspot13.setPosition(Common::Point(190, 97)); - - _hotspot17.postInit(); - _hotspot17.setVisage(4050); - _hotspot17.setPosition(Common::Point(209, 119)); - _hotspot17.fixPriority(2); - - _hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot2.setBounds(Rect(150, 25, 198, 125)); - _hotspot3.setBounds(Rect(56, 94, 88, 153)); - _hotspot4.setBounds(Rect(170, 7, 209, 18)); - _hotspot5.setBounds(Rect(190, 72, 212, 92)); - _hotspot6.setBounds(Rect(122, 75, 145, 93)); - _hotspot7.setBounds(Rect(109, 103, 263, 158)); - _hotspot8.setBounds(Rect(157, 160, 213, 173)); - _hotspot9.setBounds(Rect(95, 157, 120, 178)); - _hotspot10.setBounds(Rect(278, 43, 310, 115)); - _hotspot11.setBounds(Rect(263, 105, 279, 147)); - _hotspot12.setBounds(Rect(258, 154, 307, 180)); - - _globals->_sceneItems.addItems(&_hotspot17, &_hotspot12, &_hotspot11, &_hotspot10, &_hotspot13, - &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot6, &_hotspot8, &_hotspot9, - &_hotspot7, &_hotspot1, NULL); -} - -void Scene4050::signal() { - if (_sceneMode == 4050) - _globals->_sceneManager.changeScene(4045); -} - -void Scene4050::dispatch() { - if (!_action) { - if ((_globals->_player._canWalk) && (_globals->_player._position.y > 196)) { - _sceneMode = 4050; - _globals->_player.disableControl(); - - Common::Point pt(160, 275); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - } - } - Scene::dispatch(); -} - -/*-------------------------------------------------------------------------- - * Scene 4100 - Village - Hut - * - *--------------------------------------------------------------------------*/ - -void Scene4100::Action1::signal() { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(10); - break; - case 1: - scene->_stripManager.start(_globals->_stripNum, this); - break; - case 2: - setDelay(30); - break; - case 3: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4100::Action2::signal() { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_hotspot2.postInit(); - scene->_hotspot2.changeZoom(95); - scene->_hotspot2.setVisage(4120); - scene->_hotspot2.animate(ANIM_MODE_1, NULL); - scene->_hotspot2.setStrip2(4); - scene->_hotspot2.fixPriority(100); - scene->_hotspot2.setPosition(Common::Point(214, 119)); - - setDelay(3); - break; - case 1: - ADD_MOVER(scene->_hotspot2, 249, 131); - break; - case 2: - scene->_hotspot2.setStrip2(3); - scene->_hotspot2.setFrame2(5); - scene->_hotspot2.animate(ANIM_MODE_NONE, NULL); - setDelay(3); - break; - case 3: - remove(); - break; - } -} - - -void Scene4100::Action3::signal() { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->clearFlag(43); - _globals->setFlag(36); - setDelay(15); - break; - case 1: - scene->_stripManager.start(4505, this); - break; - case 2: - setAction(&scene->_action2, this); - break; - case 3: - scene->_stripManager.start(4510, this); - break; - case 4: - setDelay(15); - break; - case 5: - _globals->_sceneManager.changeScene(4150); - break; - default: - break; - } -} - -void Scene4100::Action4::signal() { - // Rock getting drunk - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: - scene->_hotspot1.animate(ANIM_MODE_5, this); - break; - case 2: - scene->_hotspot1.setVisage(4105); - scene->_hotspot1.setFrame(1); - scene->_hotspot1.animate(ANIM_MODE_5, this); - break; - case 3: - _globals->clearFlag(43); - _globals->setFlag(42); - scene->_stripManager.start(4119, this); - break; - case 4: - setDelay(15); - break; - case 5: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4100::Action5::signal() { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - ADD_PLAYER_MOVER(58, 151); - break; - case 1: - if (RING_INVENTORY._ladder._sceneNumber == 4100) { - RING_INVENTORY._ladder._sceneNumber = 1; - scene->_ladder.remove(); - } else { - scene->_ladder.postInit(); - scene->_ladder.setVisage(4101); - scene->_ladder.setPosition(Common::Point(49, 144)); - - RING_INVENTORY._ladder._sceneNumber = 4100; - _globals->_sceneItems.push_front(&scene->_ladder); - } - - _globals->_player.enableControl(); - remove(); - break; - } -} - - -void Scene4100::Action6::signal() { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - scene->_stripManager.start(4103, this); - ADD_PLAYER_MOVER(245, 167); - break; - case 1: - _globals->_player.enableControl(); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4100::Hotspot1::doAction(int action) { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_STUNNER: - SceneItem::display2(4100, 16); - break; - case OBJECT_ALE: - _globals->_player.disableControl(); - scene->setAction(&scene->_action3); - break; - case CURSOR_LOOK: - SceneItem::display2(4100, _globals->getFlag(42) ? 24 : 12); - break; - case CURSOR_USE: - SceneItem::display2(4100, 22); - break; - case CURSOR_TALK: - if (RING_INVENTORY._peg._sceneNumber == 1) { - _globals->_player.disableControl(); - scene->_sceneMode = 4109; - scene->setAction(&scene->_sequenceManager, scene, 4109, NULL); - } else if (_globals->getFlag(42)) { - scene->_sceneMode = 4102; - scene->setAction(&scene->_sequenceManager, scene, 4102, NULL); - } else { - if (_globals->getFlag(33)) - _globals->_stripNum = 4077; - else if (_globals->getFlag(82)) { - _globals->clearFlag(82); - _globals->_stripNum = 4100; - } else { - _globals->_stripNum = 4075; - _globals->setFlag(33); - } - - scene->setAction(&scene->_action1); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4100::Hotspot2::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - error("*** The Chief's daughter... WOW!"); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4100::Miranda::doAction(int action) { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4100, 14); - break; - case CURSOR_TALK: - scene->_sceneMode = 4102; - scene->setAction(&scene->_sequenceManager, scene, 4104, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4100::Ladder::doAction(int action) { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4100, 2); - break; - case CURSOR_USE: - if (_globals->getFlag(42)) { - _globals->_player.disableControl(); - scene->setAction(&scene->_action5); - } else { - scene->_sceneMode = 4102; - scene->setAction(&scene->_sequenceManager, scene, 4103, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/** - Exit hotspot, South - */ -void Scene4100::Hotspot14::doAction(int action) { - Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4100, 0); - break; - case OBJECT_LADDER: - _globals->_player.disableControl(); - scene->setAction(&scene->_action5); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - - -/*--------------------------------------------------------------------------*/ - -Scene4100::Scene4100() : - _hotspot3(0, CURSOR_LOOK, 4100, 10, CURSOR_USE, 4100, 21, LIST_END), - _hotspot4(0, CURSOR_LOOK, 4100, 8, LIST_END), - _hotspot7(0, CURSOR_USE, 4100, 3, CURSOR_USE, 4150, 29, LIST_END), - _hotspot8(0, CURSOR_LOOK, 4100, 5, LIST_END), - _hotspot9(0, CURSOR_LOOK, 4100, 6, CURSOR_USE, 4100, 20, LIST_END), - _hotspot10(0, CURSOR_LOOK, 4100, 7, CURSOR_USE, 4100, 19, LIST_END), - _hotspot11(0, CURSOR_LOOK, 4100, 8, CURSOR_USE, 4100, 18, LIST_END), - _hotspot12(0, CURSOR_LOOK, 4100, 9, LIST_END), - _hotspot13(0, CURSOR_LOOK, 4100, 11, CURSOR_USE, 4100, 17, LIST_END) { -} - -void Scene4100::postInit(SceneObjectList *OwnerList) { - loadScene(4100); - Scene::postInit(); - setZoomPercents(135, 80, 190, 100); - - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerCHFText); - _stripManager.addSpeaker(&_speakerCDRText); - _stripManager.addSpeaker(&_speakerCDR); - _stripManager.addSpeaker(&_speakerML); - _stripManager.addSpeaker(&_speakerQR); - - _globals->_player.postInit(); - _globals->_player.setVisage(4200); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip(4); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(88, 180)); - _globals->_player._moveDiff = Common::Point(7, 4); - - _hotspot1.postInit(); - _hotspot1.setVisage(4102); - _hotspot1.fixPriority(129); - _hotspot1.setPosition(Common::Point(171, 120)); - - _hotspot3.postInit(); - _hotspot3.setVisage(4130); - _hotspot3.animate(ANIM_MODE_2, NULL); - _hotspot3.fixPriority(200); - _hotspot3.setPosition(Common::Point(272, 110)); - - _hotspot4.postInit(); - _hotspot4.setVisage(4130); - _hotspot4.animate(ANIM_MODE_2, NULL); - _hotspot4.setStrip2(2); - _hotspot4.setPosition(Common::Point(152, 167)); - - if (_globals->getFlag(36)) { - _hotspot1.setVisage(4105); - _hotspot1.setStrip(1); - _hotspot1.setFrame(4); - } else if (!_globals->getFlag(43)) { - _miranda.postInit(); - _miranda.setVisage(4102); - _miranda.setStrip2(3); - _miranda.setFrame(2); - _miranda.setPosition(Common::Point(65, 188)); - - _globals->_sceneItems.push_back(&_miranda); - } - - if (RING_INVENTORY._ladder._sceneNumber == 4100) { - _ladder.postInit(); - _ladder.setVisage(4101); - _ladder.setPosition(Common::Point(49, 144)); - - _globals->_sceneItems.push_back(&_ladder); - } - - _hotspot14.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot7._sceneRegionId = 16; - _hotspot8.setBounds(Rect(90, 0, 211, 113)); - _hotspot9.setBounds(Rect(207, 96, 235, 115)); - _hotspot10.setBounds(Rect(87, 81, 212, 107)); - _hotspot11.setBounds(Rect(61, 148, 243, 168)); - _hotspot12.setBounds(Rect(229, 59, 256, 122)); - _hotspot13.setBounds(Rect(255, 152, 286, 183)); - - _globals->_sceneItems.addItems(&_hotspot3, &_hotspot1, &_hotspot13, &_hotspot12, &_hotspot4, - &_hotspot11, &_hotspot9, &_hotspot7, &_hotspot10, &_hotspot8, &_hotspot14, NULL); - - if (_globals->_sceneManager._previousScene == 4150) { - _globals->_soundHandler.play(155); - - if (!_globals->getFlag(42)) { - _hotspot1.setVisage(4104); - _hotspot1.setPosition(Common::Point(152, 118)); - _hotspot1.setStrip2(-1); - _hotspot1.setFrame2(-1); - _hotspot1.setFrame(1); - - _globals->_player.setStrip(2); - _globals->_player.disableControl(); - setAction(&_action4); - - _globals->clearFlag(43); - } else { - // Workaround: In the original, the mouse is hidden when Quinn - // goes back to scene 4150 then to scene 4100. This enables everything. - _globals->_player.enableControl(); - } - - _globals->_player.setPosition(Common::Point(252, 139)); - _globals->_player.setStrip(2); - } else { - if ((RING_INVENTORY._ale._sceneNumber == 4100) && !_globals->getFlag(42)) { - _globals->_player.disableControl(); - setAction(&_action3); - } - if (_globals->getFlag(35)) { - _globals->_player.disableControl(); - _sceneMode = 4101; - setAction(&_sequenceManager, this, 4101, &_globals->_player, NULL); - } - } -} - -void Scene4100::signal() { - switch (_sceneMode) { - case 4101: - _globals->_sceneManager.changeScene(4000); - break; - case 4102: - case 4103: - case 4109: - _globals->_player.enableControl(); - break; - } -} - -void Scene4100::dispatch() { - if (!_action) { - if ((_globals->_player.getRegionIndex() == 15) && !_globals->getFlag(42)) - setAction(&_action6); - - if (_globals->_player.getRegionIndex() == 8) - _globals->_sceneManager.changeScene(4150); - - if (_globals->_player._position.y >= 196) { - _globals->_player.disableControl(); - _sceneMode = 4101; - setAction(&_sequenceManager, this, 4105, &_globals->_player, NULL); - } - } - - Scene::dispatch(); -} - -/*-------------------------------------------------------------------------- - * Scene 4150 - Village - Bedroom - * - *--------------------------------------------------------------------------*/ - -void Scene4150::Action1::signal() { - Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; - byte adjustData[4] = {0, 0, 0, 0}; - - switch (_actionIndex++) { - case 0: - setDelay(60); - break; - case 1: - scene->_stripManager.start(4520, this); - break; - case 2: - setDelay(15); - break; - case 3: - setAction(&scene->_action2, this); - break; - case 4: { - for (int idx = 100; idx >= 0; idx -= 5) { - _globals->_scenePalette.fade(adjustData, false, idx); - g_system->updateScreen(); - g_system->delayMillis(10); - } - - scene->_hotspot4.postInit(); - scene->_hotspot4.setVisage(4150); - scene->_hotspot4.setStrip(2); - scene->_hotspot4.setPosition(Common::Point(166, 157)); - - scene->_hotspot1.postInit(); - scene->_hotspot1.setVisage(4156); - scene->_hotspot1.setStrip(1); - scene->_hotspot1.setFrame(1); - - setDelay(120); - break; - } - case 5: - _globals->_scenePalette.loadPalette(4150); - _globals->_scenePalette.refresh(); - setDelay(60); - break; - case 6: - scene->_stripManager.start(4522, this); - break; - case 7: - for (int idx = 100; idx >= 0; idx -= 5) { - _globals->_scenePalette.fade(adjustData, false, idx); - g_system->updateScreen(); - g_system->delayMillis(10); - } - - scene->_hotspot4.remove(); - scene->_hotspot1.setVisage(4157); - scene->_hotspot1.animate(ANIM_MODE_NONE, NULL); - scene->_hotspot1.setStrip(1); - scene->_hotspot1.setFrame(1); - scene->_hotspot1.show(); - - _globals->_player.setVisage(4200); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip(3); - _globals->_player.setPosition(Common::Point(139, 166)); - _globals->_player._moveDiff = Common::Point(7, 3); - _globals->_player.show(); - - setDelay(120); - break; - case 8: - _globals->_scenePalette.loadPalette(4150); - _globals->_scenePalette.refresh(); - setDelay(30); - break; - case 9: - scene->_stripManager.start(4523, this); - break; - case 10: - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player._moveDiff = Common::Point(7, 4); - _globals->_player.setStrip(3); - _globals->_player.enableControl(); - - remove(); - break; - } -} - -void Scene4150::Action2::signal() { - Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(3); - break; - case 1: - scene->_hotspot1.setVisage(4152); - scene->_hotspot1.setStrip(1); - scene->_hotspot1.setFrame(1); - scene->_hotspot1.animate(ANIM_MODE_5, this); - - _globals->_player.animate(ANIM_MODE_5, NULL); - break; - case 2: - _globals->_player.hide(); - scene->_hotspot1.setVisage(4153); - scene->_hotspot1.setStrip(1); - scene->_hotspot1.setFrame(1); - scene->_hotspot1.animate(ANIM_MODE_5, this); - break; - case 3: - remove(); - break; - } -} - -void Scene4150::Action3::signal() { - Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(15); - break; - case 1: - _globals->_player.checkAngle(&scene->_hotspot3); - - if (RING_INVENTORY._rope._sceneNumber == 1) { - scene->_hotspot3.postInit(); - scene->_hotspot3.setVisage(4150); - scene->_hotspot3.setPosition(Common::Point(175, 70)); - - RING_INVENTORY._rope._sceneNumber = 4150; - _globals->_sceneItems.push_front(&scene->_hotspot3); - } else { - RING_INVENTORY._rope._sceneNumber = 1; - scene->_hotspot3.remove(); - } - - _globals->_player.enableControl(); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4150::HotspotGroup1::doAction(int action) { - Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4150, 0); - break; - case OBJECT_ROPE: - scene->setAction(&scene->_action3); - break; - } -} - -void Scene4150::HotspotGroup3::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4150, _globals->getFlag(46) ? 9 : 8); - _globals->setFlag(46); - break; - case CURSOR_USE: - SceneItem::display2(4150, 30); - break; - } -} - -void Scene4150::HotspotGroup6::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4150, _globals->getFlag(47) ? 16 : 15); - _globals->setFlag(47); - break; - case CURSOR_USE: - SceneItem::display2(4150, 31); - break; - } -} - -void Scene4150::Hotspot3::doAction(int action) { - Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4150, 20); - break; - case CURSOR_USE: - scene->setAction(&scene->_action3); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene4150::Scene4150() : - _hotspot1(0, CURSOR_LOOK, 4150, 17, CURSOR_USE, 4150, 21, CURSOR_TALK, 4150, 21, - OBJECT_SCANNER, 4150, 22, OBJECT_STUNNER, 4150, 23, LIST_END), - _hotspot2(0, CURSOR_LOOK, 4150, 4, CURSOR_USE, 4150, 24, LIST_END), - _hotspot7(0, CURSOR_LOOK, 4150, 1, CURSOR_USE, 4150, 25, OBJECT_ROPE, 4150, 26, LIST_END), - _hotspot8(0, CURSOR_LOOK, 4150, 1, CURSOR_USE, 4150, 25, OBJECT_ROPE, 4150, 26, LIST_END), - _hotspot9(0, CURSOR_LOOK, 4150, 2, CURSOR_USE, 4150, 27, OBJECT_SCANNER, 4150, 28, - OBJECT_STUNNER, 4150, 32, LIST_END), - _hotspot10(0, CURSOR_LOOK, 4150, 5, CURSOR_USE, 4150, 29, LIST_END), - _hotspot11(0, CURSOR_LOOK, 4150, 6, CURSOR_USE, 4150, 29, LIST_END), - _hotspot12(0, CURSOR_LOOK, 4150, 7, CURSOR_USE, 4150, 29, LIST_END), - _hotspot17(0, CURSOR_LOOK, 4150, 10, CURSOR_USE, 4150, 27, OBJECT_STUNNER, 4150, 32, LIST_END), - _hotspot18(0, CURSOR_LOOK, 4150, 11, CURSOR_USE, 4150, 27, OBJECT_STUNNER, 4150, 32, LIST_END), - _hotspot19(0, CURSOR_LOOK, 4150, 12, CURSOR_USE, 4150, 29, LIST_END), - _hotspot20(0, CURSOR_LOOK, 4150, 13, CURSOR_USE, 4150, 29, LIST_END), - _hotspot21(0, CURSOR_LOOK, 4150, 13, CURSOR_USE, 4150, 29, LIST_END), - _hotspot22(0, CURSOR_LOOK, 4150, 13, CURSOR_USE, 4150, 29, LIST_END), - _hotspot23(0, CURSOR_LOOK, 4150, 14, CURSOR_USE, 4150, 27, OBJECT_STUNNER, 4150, 32, LIST_END), - _hotspot24(0, CURSOR_LOOK, 4150, 14, CURSOR_USE, 4150, 27, OBJECT_STUNNER, 4150, 32, LIST_END) - { -} - -void Scene4150::postInit(SceneObjectList *OwnerList) { - loadScene(4150); - Scene::postInit(); - setZoomPercents(60, 85, 200, 100); - - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerCDL); - _stripManager.addSpeaker(&_speakerQText); - - _hotspot2.postInit(); - _hotspot2.setVisage(4171); - _hotspot2.animate(ANIM_MODE_2, NULL); - _hotspot2.fixPriority(100); - _hotspot2.setPosition(Common::Point(76, 147)); - - _hotspot1.postInit(); - _hotspot1.setPosition(Common::Point(177, 201)); - - if (_globals->getFlag(44)) { - _globals->_player.postInit(); - _globals->_player.setVisage(4200); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setStrip(2); - _globals->_player.setPosition(Common::Point(328, 160)); - _globals->_player._moveDiff = Common::Point(7, 4); - _globals->_player.disableControl(); - - _sceneMode = 4151; - setAction(&_sequenceManager, this, 4151, &_globals->_player, NULL); - - _hotspot1.setVisage(4157); - _hotspot1.setPosition(Common::Point(177, 201)); - } else { - _globals->_player.postInit(); - _globals->_player.setVisage(4154); - _globals->_player._canWalk = false; - _globals->_player.setPosition(Common::Point(198, 202)); - _globals->_player.disableControl(); - - _hotspot1.setVisage(4152); - setAction(&_action1); - _globals->setFlag(44); - } - - if (RING_INVENTORY._rope._sceneNumber == 4150) { - _hotspot3.postInit(); - _hotspot3.setVisage(4150); - _hotspot3.setPosition(Common::Point(175, 70)); - - _globals->_sceneItems.push_back(&_hotspot3); - } - - _globals->_sceneItems.push_back(&_hotspot1); - - _hotspot5.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot6.setBounds(Rect(28, 121, 80, 148)); - _hotspot7.setBounds(Rect(27, 17, 127, 100)); - _hotspot8.setBounds(Rect(62, 11, 117, 22)); - _hotspot9.setBounds(Rect(48, 78, 104, 94)); - _hotspot10.setBounds(Rect(32, 107, 58, 119)); - _hotspot11.setBounds(Rect(1, 130, 17, 163)); - _hotspot12.setBounds(Rect(1, 158, 78, 197)); - _hotspot13.setBounds(Rect(253, 11, 274, 188)); - _hotspot14.setBounds(Rect(4, 15, 29, 153)); - _hotspot15.setBounds(Rect(127, 22, 146, 133)); - _hotspot16.setBounds(Rect(165, 22, 181, 141)); - _hotspot17.setBounds(Rect(186, 31, 217, 52)); - _hotspot18.setBounds(Rect(200, 31, 251, 86)); - _hotspot19.setBounds(Rect(183, 81, 234, 111)); - _hotspot20.setBounds(Rect(188, 120, 219, 142)); - _hotspot21.setBounds(Rect(235, 122, 249, 145)); - _hotspot22.setBounds(Rect(283, 125, 320, 146)); - _hotspot23.setBounds(Rect(284, 27, 306, 160)); - _hotspot24.setBounds(Rect(257, 72, 284, 99)); - _hotspot25.setBounds(Rect(183, 155, 316, 190)); - _hotspot26.setBounds(Rect(98, 169, 238, 198)); - - _globals->_sceneItems.addItems(&_hotspot24, &_hotspot23, &_hotspot13, &_hotspot25, - &_hotspot26, &_hotspot19, &_hotspot22, &_hotspot20, &_hotspot17, &_hotspot16, - &_hotspot15, &_hotspot11, &_hotspot14, &_hotspot18, &_hotspot21, &_hotspot12, - &_hotspot10, &_hotspot9, &_hotspot8, &_hotspot7, &_hotspot6, &_hotspot2, - &_hotspot5, NULL); - - _globals->_soundHandler.play(165); - _soundHandler.play(311); -} - -void Scene4150::signal() { - if (_sceneMode == 4151) - _globals->_player.enableControl(); - else if (_sceneMode == 4152) - _globals->_sceneManager.changeScene(4100); -} - -void Scene4150::dispatch() { - Scene::dispatch(); - - if (!_action && (_globals->_player._position.x >= 316)) { - _globals->_soundHandler.fadeOut(NULL); - _soundHandler.fadeOut(NULL); - _globals->_player.disableControl(); - _sceneMode = 4152; - setAction(&_sequenceManager, this, 4152, &_globals->_player, NULL); - } -} - -/*-------------------------------------------------------------------------- - * Scene 4000 - Village - * - *--------------------------------------------------------------------------*/ - -void Scene4250::Action1::signal() { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - ADD_MOVER_NULL(_globals->_player, 6, 190); - ADD_MOVER_NULL(scene->_hotspot3, 9, 195); - ADD_MOVER(scene->_hotspot1, 12, 185); - break; - case 2: - setDelay(30); - break; - case 3: - scene->_stripManager.start(4450, this); - break; - case 4: - case 7: - setDelay(15); - break; - case 5: - ADD_PLAYER_MOVER(220, 175); - scene->_hotspot1.fixPriority(105); - ADD_PLAYER_MOVER_NULL(scene->_hotspot1, 197, 173); - break; - case 6: - scene->_stripManager.start(4470, this); - break; - case 8: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4250::Action2::signal() { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - ADD_PLAYER_MOVER(247, 182); - break; - case 1: - _globals->_player.setVisage(2670); - _globals->_player.changeZoom(50); - _globals->_player.setStrip(3); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300)) { - scene->_stripManager.start(4205, this); - } else { - scene->_stripManager.start(4490, this); - } - break; - case 3: - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 4: - _globals->_player.setVisage(2602); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.changeZoom(70); - - if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300)) { - _globals->_player.enableControl(); - remove(); - } else { - ADD_PLAYER_MOVER(6, 180); - ADD_PLAYER_MOVER_NULL(scene->_hotspot1, 12, 185); - } - break; - case 5: - ADD_PLAYER_MOVER(-16, 180); - ADD_PLAYER_MOVER_NULL(scene->_hotspot1, -12, 185); - scene->_hotspot3.setStrip2(2); - ADD_MOVER_NULL(scene->_hotspot5, -30, 195); - break; - case 6: - _globals->clearFlag(59); - _globals->clearFlag(70); - _globals->clearFlag(37); - _globals->clearFlag(114); - _globals->clearFlag(36); - _globals->clearFlag(43); - _globals->_sceneManager.changeScene(2100); - break; - } -} - -void Scene4250::Action3::signal() { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(3); - break; - case 1: - scene->_stripManager.start(4480, this); - break; - case 2: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4250::Action4::signal() { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - _globals->_player.addMover(NULL); - scene->_stripManager.start((RING_INVENTORY._helmet._sceneNumber == 4250) ? 4259 : 4256, this); - break; - case 2: - ADD_PLAYER_MOVER(_globals->_player._position.x + 5, _globals->_player._position.y); - break; - case 3: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene4250::Action5::signal() { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - scene->_hotspot4.fixPriority(195); - scene->_hotspot1.fixPriority(105); - ADD_MOVER_NULL(_globals->_player, 6, 185); - ADD_MOVER_NULL(scene->_hotspot4, 9, 190); - ADD_MOVER(scene->_hotspot1, 12, 180); - break; - case 2: - ADD_PLAYER_MOVER(252, 176); - ADD_PLAYER_MOVER_NULL(scene->_hotspot1, 197, 173); - ADD_PLAYER_MOVER_NULL(scene->_hotspot4, 239, 195); - break; - case 3: - scene->_hotspot4.fixPriority(-1); - scene->_hotspot1.setStrip(5); - scene->_hotspot4.setStrip(7); - _globals->_player.enableControl(); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4250::Hotspot1::doAction(int action) { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 19 : 14); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - if (!_globals->_sceneObjects->contains(&scene->_hotspot4)) { - scene->setAction(&scene->_action3); - } else { - scene->_sceneMode = 4260; - if (RING_INVENTORY._helmet._sceneNumber == 4250) { - scene->_sceneMode = 4265; - scene->setAction(&scene->_sequenceManager, scene, 4265, this, NULL); - } else { - scene->setAction(&scene->_sequenceManager, scene, - _globals->_sceneObjects->contains(&scene->_hotspot6) ? 4260 : 4262, this, NULL); - } - } - break; - case OBJECT_SCANNER: - if (RING_INVENTORY._helmet._sceneNumber == 4250) - SceneItem::display2(4250, 21); - else - SceneHotspot::doAction(action); - break; - case OBJECT_STUNNER: - if (RING_INVENTORY._helmet._sceneNumber == 4250) - SceneItem::display2(4250, 22); - else - SceneHotspot::doAction(action); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4250::Hotspot2::doAction(int action) { - //Ship with stasis field - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - case CURSOR_USE: - SceneItem::display2(4250, 16); - break; - case OBJECT_SCANNER: - if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300)) - scene->setAction(&scene->_action2); - else if (_globals->getFlag(55)) - SceneItem::display2(4250, 17); - else { - _globals->setFlag(55); - scene->setAction(&scene->_action2); - } - break; - case OBJECT_STASIS_NEGATOR: - _globals->_player.disableControl(); - scene->_sceneMode = 4252; - scene->setAction(&scene->_sequenceManager, scene, 4252, &_globals->_player, this, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4250::Hotspot4::doAction(int action) { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 18 : 5); - break; - case OBJECT_SCANNER: - if (RING_INVENTORY._helmet._sceneNumber == 4250) - SceneItem::display2(4250, 21); - else - SceneHotspot::doAction(action); - break; - case OBJECT_STUNNER: - if (RING_INVENTORY._helmet._sceneNumber == 4250) - SceneItem::display2(4250, 22); - else - SceneHotspot::doAction(action); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - if (!_globals->_sceneObjects->contains(&scene->_hotspot6)) { - scene->_sceneMode = 4254; - scene->setAction(&scene->_sequenceManager, scene, 4263, NULL); - } else { - scene->_sceneMode = 4254; - - if (RING_INVENTORY._helmet._sceneNumber == 4250) { - scene->_sceneMode = 4266; - scene->setAction(&scene->_sequenceManager, scene, 4266, this, NULL); - } else { - scene->setAction(&scene->_sequenceManager, scene, - (RING_INVENTORY._concentrator._sceneNumber == 1) ? 4255 : 4254, NULL); - } - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4250::Hotspot6::doAction(int action) { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 7 : 6); - break; - case OBJECT_SCANNER: - SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 1 : 2); - break; - case OBJECT_STUNNER: - SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 20 : 3); - break; - case OBJECT_HELMET: - _globals->_soundHandler.play(354); - _globals->_player.disableControl(); - RING_INVENTORY._helmet._sceneNumber = 4250; - - if (RING_INVENTORY._concentrator._sceneNumber == 1) { - if (_globals->getFlag(115)) { - scene->_sceneMode = 4269; - scene->setAction(&scene->_sequenceManager, scene, 4269, this, NULL); - } else { - _globals->setFlag(115); - _globals->_events.setCursor(CURSOR_WALK); - scene->_sceneMode = 4256; - scene->setAction(&scene->_sequenceManager, scene, 4256, this, NULL); - } - } else if (RING_INVENTORY._keyDevice._sceneNumber == 1) { - scene->_sceneMode = 4267; - scene->setAction(&scene->_sequenceManager, scene, 4267, this, NULL); - } else if (RING_INVENTORY._keyDevice._sceneNumber == 4300) { - scene->_sceneMode = 4268; - scene->setAction(&scene->_sequenceManager, scene, 4268, this, NULL); - } else { - _globals->_events.setCursor(CURSOR_WALK); - ADD_MOVER_NULL(scene->_hotspot1, 241, 169); - scene->_sceneMode = 4261; - scene->setAction(&scene->_sequenceManager, scene, 4261, &_globals->_player, this, NULL); - } - break; - case OBJECT_NULLIFIER: - if (RING_INVENTORY._helmet._sceneNumber == 4250) { - _globals->_soundHandler.play(353); - _globals->_player.disableControl(); - RING_INVENTORY._helmet._sceneNumber = 1; - - scene->_sceneMode = 4257; - scene->setAction(&scene->_sequenceManager, scene, 4257, &_globals->_player, this, NULL); - } else { - SceneItem::display2(4250, 4); - } - break; - case CURSOR_TALK: - if (RING_INVENTORY._helmet._sceneNumber == 4250) - doAction(OBJECT_HELMET); - else { - _globals->_player.disableControl(); - scene->_sceneMode = 4264; - scene->setAction(&scene->_sequenceManager, scene, 4264, this, NULL); - } - break; - case CURSOR_USE: - if (RING_INVENTORY._helmet._sceneNumber == 4250) - doAction(OBJECT_HELMET); - else { - _globals->_player.disableControl(); - if ((RING_INVENTORY._items._sceneNumber != 1) || (RING_INVENTORY._concentrator._sceneNumber != 1)) { - scene->_sceneMode = 4258; - scene->setAction(&scene->_sequenceManager, scene, 4258, this, NULL); - } else { - scene->_hotspot2.postInit(); - scene->_hotspot2.setVisage(4251); - scene->_hotspot2.setFrame(scene->_hotspot2.getFrameCount()); - scene->_hotspot2.setPosition(Common::Point(267, 172)); - scene->_hotspot2.hide(); - - scene->_sceneMode = 4259; - scene->setAction(&scene->_sequenceManager, scene, 4259, &_globals->_player, this, &scene->_hotspot2, NULL); - } - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4250::Hotspot8::doAction(int action) { - Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - case CURSOR_USE: - _globals->_sceneManager.changeScene(4300); - break; - case OBJECT_SCANNER: - SceneItem::display2(4250, 24); - break; - case OBJECT_STUNNER: - SceneItem::display2(4250, 25); - break; - case OBJECT_STASIS_NEGATOR: - _globals->_player.disableControl(); - scene->_sceneMode = 4270; - scene->setAction(&scene->_sequenceManager, scene, - (RING_INVENTORY._helmet._sceneNumber == 4250) ? 4270 : 4271, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene4250::Scene4250() : - _hotspot7(0, CURSOR_LOOK, 4250, 0, LIST_END) { -} - -void Scene4250::postInit(tSage::SceneObjectList *OwnerList) { - loadScene(4250); - Scene::postInit(); - setZoomPercents(160, 90, 185, 100); - - _stripManager.addSpeaker(&_speakerSR); - _stripManager.addSpeaker(&_speakerSL); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerGameText); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerPText); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerFLText); - - _speakerSText.setTextPos(Common::Point(40, 40)); - _speakerPText.setTextPos(Common::Point(40, 100)); - _hotspot8._sceneRegionId = 16; - - _globals->_player.postInit(); - _globals->_player.setVisage(2602); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(-13, 190)); - _globals->_player.changeZoom(-1); - _globals->_player._moveDiff = Common::Point(4, 1); - - _hotspot1.postInit(); - _hotspot1.setVisage(2801); - _hotspot1.animate(ANIM_MODE_1, NULL); - _hotspot1.setObjectWrapper(new SceneObjectWrapper()); - _hotspot1.setPosition(Common::Point(-18, 185)); - _hotspot1.changeZoom(-1); - _hotspot1._moveDiff = Common::Point(4, 1); - _globals->_sceneItems.push_back(&_hotspot1); - - if (_globals->_sceneManager._previousScene == 4300) { - _hotspot5.postInit(); - _hotspot5.setVisage(4250); - _hotspot5.setPosition(Common::Point(268, 168)); - _hotspot5.fixPriority(1); - - _hotspot4.postInit(); - _hotspot4.setVisage(2701); - _hotspot4.animate(ANIM_MODE_1, NULL); - _hotspot4.setObjectWrapper(new SceneObjectWrapper()); - _hotspot4.setPosition(Common::Point(272, 175)); - _hotspot4.setStrip(2); - _hotspot4._moveDiff = Common::Point(4, 1); - _hotspot4.changeZoom(70); - _globals->_sceneItems.push_back(&_hotspot4); - - _hotspot1.setPosition(Common::Point(197, 173)); - _hotspot1.changeZoom(70); - - _globals->_player.setPosition(Common::Point(252, 176)); - _globals->_player.changeZoom(70); - - _hotspot6.postInit(); - _hotspot6.setVisage(4302); - _hotspot6.setStrip(4); - _hotspot6.setFrame(3); - _hotspot6.changeZoom(50); - _hotspot6.fixPriority(70); - _hotspot6.setPosition(Common::Point(261, 175)); - - if (RING_INVENTORY._helmet._sceneNumber == 4250) { - _hotspot6.setStrip(6); - _hotspot6.setFrame(_hotspot6.getFrameCount()); - } - - if (_globals->getFlag(98)) { - _globals->_sceneItems.push_front(&_hotspot6); - } else { - _hotspot6.hide(); - if ((_globals->_stripNum == 4300) || (_globals->_stripNum == 4301)) { - _globals->setFlag(98); - _globals->_player.setVisage(4302); - _globals->_player.setStrip(5); - _globals->_player.changeZoom(50); - _globals->_player.disableControl(); - - _hotspot4.setPosition(Common::Point(239, 195)); - _sceneMode = 4253; - _globals->_sceneItems.push_front(&_hotspot6); - - setAction(&_sequenceManager, this, 4253, &_globals->_player, &_hotspot6, &_hotspot4, NULL); - } - } - } else if (_globals->_stripNum == 9000) { - _hotspot4.postInit(); - _hotspot4.setVisage(2701); - _hotspot4.animate(ANIM_MODE_1, NULL); - _hotspot4.setObjectWrapper(new SceneObjectWrapper()); - _hotspot4.setPosition(Common::Point(-15, 195)); - _hotspot4._moveDiff = Common::Point(4, 1); - _globals->_sceneItems.push_back(&_hotspot4); - - setAction(&_action5); - } else { - _hotspot3.postInit(); - _hotspot3.setVisage(4006); - _hotspot3.animate(ANIM_MODE_1, NULL); - _hotspot3.setObjectWrapper(new SceneObjectWrapper()); - _hotspot3.setPosition(Common::Point(-15, 195)); - _hotspot3.setStrip2(3); - _hotspot3._moveDiff = Common::Point(4, 1); - - setAction(&_action1); - _globals->clearFlag(43); - _globals->clearFlag(114); - _globals->clearFlag(36); - } - - if (_globals->getFlag(17)) { - _globals->_sceneItems.push_back(&_hotspot8); - } else { - _hotspot2.postInit(); - _hotspot2.setVisage(4251); - _hotspot2.setStrip2(1); - _hotspot2.fixPriority(2); - _hotspot2.setFrame(1); - _hotspot2.setPosition(Common::Point(267, 172)); - - _globals->_sceneItems.push_back(&_hotspot2); - } - - _hotspot7.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _globals->_sceneItems.push_back(&_hotspot7); - _globals->_soundHandler.play(185); -} - -void Scene4250::signal() { - switch (_sceneMode) { - case 4252: - _globals->setFlag(17); - _globals->_sceneManager.changeScene(4301); - break; - case 4253: - if (_globals->_stripNum == 4301) { - _sceneMode = 4261; - ADD_MOVER_NULL(_hotspot1, 241, 169); - setAction(&_sequenceManager, this, 4261, &_globals->_player, &_hotspot6, NULL); - } else { - _globals->_player.enableControl(); - } - break; - case 4254: - case 4256: - case 4257: - case 4258: - case 4260: - case 4264: - case 4265: - case 4266: - case 4267: - case 4268: - case 4269: - case 4270: - _globals->_player.enableControl(); - break; - case 4259: - _globals->_soundHandler.play(360); - _globals->_sceneManager.changeScene(9900); - break; - case 4261: - RING_INVENTORY._keyDevice._sceneNumber = 1; - _globals->_player.enableControl(); - break; - case 4255: - case 4262: - case 4263: - default: - break; - } -} - -void Scene4250::dispatch() { - if (_globals->_player.getRegionIndex() == 8) - _globals->_player.changeZoom(90 - (_globals->_player._position.y - 153)); - if (_globals->_player.getRegionIndex() == 12) - _globals->_player.changeZoom(70); - if (_globals->_player.getRegionIndex() == 15) { - _globals->_player.changeZoom(-1); - _globals->_player.fixPriority(-1); - } - - if (_hotspot1.getRegionIndex() == 8) - _hotspot1.changeZoom(90 - (_hotspot1._position.y - 153)); - if (_hotspot1.getRegionIndex() == 12) - _hotspot1.changeZoom(70); - if (_hotspot1.getRegionIndex() == 15) { - _hotspot1.changeZoom(-1); - _hotspot1.fixPriority(-1); - } - - if (_hotspot4.getRegionIndex() == 8) - _hotspot4.changeZoom(90 - (_hotspot4._position.y - 153)); - if (_hotspot4.getRegionIndex() == 12) - _hotspot4.changeZoom(70); - if (_hotspot4.getRegionIndex() == 15) { - _hotspot4.changeZoom(-1); - _hotspot4.fixPriority(-1); - } - - Scene::dispatch(); - - if (!_action) { - if (!_globals->getFlag(55) && (_globals->_player.getRegionIndex() == 12)) { - setAction(&_action4); - } - - if (_globals->_sceneObjects->contains(&_hotspot6) && (_globals->_player.getRegionIndex() == 12)) - setAction(&_action4); - } -} - -/*-------------------------------------------------------------------------- - * Scene 4300 - Village - Slaver Ship - * - *--------------------------------------------------------------------------*/ - -void Scene4300::Action1::signal() { - Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->setFlag(56); - _globals->_scenePalette.addRotation(240, 254, -1); - scene->_hotspot7.animate(ANIM_MODE_6, this); - _globals->_soundHandler.play(164); - break; - case 1: - _globals->_soundHandler.play(340); - scene->_soundHandler1.play(341); - scene->_hotspot1.remove(); - setDelay(3); - break; - case 2: - scene->_soundHandler1.play(341); - scene->_hotspot2.remove(); - setDelay(6); - break; - case 3: - scene->_soundHandler1.play(341); - scene->_hotspot3.remove(); - setDelay(6); - break; - case 4: - scene->_soundHandler1.play(341); - scene->_hotspot4.remove(); - setDelay(12); - break; - case 5: - scene->_soundHandler1.play(341); - scene->_hotspot5.remove(); - setDelay(12); - break; - case 6: - scene->_soundHandler1.play(341); - scene->_hotspot6.remove(); - setDelay(60); - break; - case 7: - scene->_hotspot10.fixPriority(250); - scene->_hotspot10.animate(ANIM_MODE_5, this); - break; - case 8: - scene->_hotspot13.show(); - scene->_stripManager.start(8015, this, scene); - break; - case 9: - _globals->_soundHandler.play(350); - _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL; - _globals->_events.setCursor(CURSOR_USE); - _globals->_player.enableControl(); - - remove(); - break; - } -} - -void Scene4300::Action2::signal() { - Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(3); - break; - case 1: - scene->_stripManager.start(8016, this, scene); - break; - case 2: - _globals->_player.enableControl(); - remove(); - break; - } -} - - -/*--------------------------------------------------------------------------*/ - -void Scene4300::Hotspot8::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4300, 15); - break; - case CURSOR_USE: - SceneItem::display2(4300, 18); - break; - case OBJECT_SCANNER: - SceneItem::display2(4300, 14); - break; - case OBJECT_STUNNER: - SceneItem::display2(4300, 19); - break; - case OBJECT_KEY_DEVICE: - RING_INVENTORY._keyDevice._sceneNumber = 4300; - _globals->_scenePalette.addRotation(240, 254, -1); - animate(ANIM_MODE_5, NULL); - - _globals->setFlag(99); - _globals->_sceneItems.push_back(this); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4300::Hotspot9::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) || - (RING_INVENTORY._concentrator._sceneNumber == 1)) - SceneItem::display2(4300, 7); - else - SceneItem::display2(4300, 1); - break; - case CURSOR_USE: - if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) || - (RING_INVENTORY._concentrator._sceneNumber == 1)) - SceneItem::display2(4300, 7); - else - SceneItem::display2(4300, 3); - break; - case OBJECT_STUNNER: - SceneItem::display2(4300, 24); - break; - case OBJECT_SCANNER: - if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) || - (RING_INVENTORY._concentrator._sceneNumber != 1)) - SceneItem::display2(4300, 22); - else - SceneItem::display2(4300, 23); - break; - default: - NamedHotspot::doAction(action); - break; - } -} - -void Scene4300::Hotspot10::doAction(int action) { - // Alien - Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4300, 2); - break; - case CURSOR_TALK: - _globals->_player.disableControl(); - scene->setAction(&scene->_action2); - break; - case OBJECT_SCANNER: - SceneItem::display2(4300, 20); - break; - case OBJECT_STUNNER: - SceneItem::display2(4300, 21); - break; - case CURSOR_USE: - case OBJECT_HELMET: - _globals->_stripNum = (action == CURSOR_USE) ? 4300 : 4301; - _globals->_events.setCursor(CURSOR_NONE); - _globals->_sceneManager.changeScene(4250); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4300::Hotspot15::signal() { - Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; - - scene->_soundHandler2.play(345); - - _strip = (_globals->_randomSource.getRandomNumber(6) < 2) ? 2 : 1; - if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) || - (RING_INVENTORY._concentrator._sceneNumber == 1)) { - setStrip(1); - setFrame(1); - animate(ANIM_MODE_NONE, NULL); - } else { - animate(ANIM_MODE_5, this); - } -} - -void Scene4300::Hotspot16::doAction(int action) { - Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4300, 8); - break; - case CURSOR_USE: - if ((RING_INVENTORY._stasisBox2._sceneNumber != 4300) && - (RING_INVENTORY._concentrator._sceneNumber != 4300)) { - SceneItem::display2(4300, 16); - } else { - scene->_sceneMode = 4302; - scene->setAction(&scene->_sequenceManager, scene, 4302, this, NULL); - } - break; - case OBJECT_SCANNER: - SceneItem::display2(4300, 27); - break; - case OBJECT_STUNNER: - SceneItem::display2(4300, 24); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene4300::Hotspot17::doAction(int action) { - Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4300, (RING_INVENTORY._stasisBox2._sceneNumber == 4300) ? 17 : 11); - break; - case CURSOR_USE: - if (RING_INVENTORY._stasisBox2._sceneNumber != 4300) - SceneItem::display2(4300, 13); - else { - _globals->_scenePalette.clearListeners(); - remove(); - - SceneItem::display2(4300, 12); - RING_INVENTORY._concentrator._sceneNumber = 1; - } - break; - case OBJECT_SCANNER: - SceneItem::display2(4300, 25); - break; - case OBJECT_STUNNER: - SceneItem::display2(4300, 26); - break; - case OBJECT_STASIS_BOX2: - scene->_soundHandler1.play(352); - _globals->_events.setCursor(CURSOR_USE); - scene->_sceneMode = 4303; - - scene->setAction(&scene->_sequenceManager, scene, 4303, this, NULL); - break; - } -} - -void Scene4300::Hotspot19::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4300, 9); - break; - case OBJECT_SCANNER: - SceneItem::display2(4300, 28); - break; - case OBJECT_STUNNER: - SceneItem::display2(4300, 24); - break; - case CURSOR_USE: - if ((RING_INVENTORY._stasisBox2._sceneNumber != 4300) && - (RING_INVENTORY._concentrator._sceneNumber != 4300)) - SceneItem::display2(4300, 10); - else - SceneItem::display2(4300, 29); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene4300::Scene4300() : - _hotspot18(0, CURSOR_LOOK, 4300, 0, LIST_END) { -} - -void Scene4300::postInit(SceneObjectList *OwnerList) { - loadScene(4300); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerFLText); - - _hotspot11.setup(76, 97, 102, 127, 4300, 5, 6); - - _hotspot7.postInit(); - _hotspot7.setPosition(Common::Point(90, 128)); - _hotspot7.setVisage(4303); - _hotspot7.fixPriority(250); - _globals->_sceneItems.push_back(&_hotspot7); - - _hotspot9.setup(120, 49, 174, 91, 4300, -1, -1); - - _hotspot15.postInit(); - _hotspot15.setVisage(4300); - _hotspot15.setPosition(Common::Point(149, 79)); - _hotspot15.signal(); - - if (!_globals->getFlag(99)) { - _hotspot8.postInit(); - _hotspot8.setVisage(4300); - _hotspot8.setStrip(3); - _hotspot8.setPosition(Common::Point(196, 47)); - _globals->_sceneItems.push_back(&_hotspot8); - } - - if (RING_INVENTORY._concentrator._sceneNumber == 4300) { - _hotspot17.postInit(); - _hotspot17.setVisage(4300); - _hotspot17.setStrip(6); - _hotspot17.fixPriority(1); - _hotspot17.setPosition(Common::Point(200, 69)); - - if (RING_INVENTORY._stasisBox2._sceneNumber == 4300) - _hotspot17.setFrame(_hotspot17.getFrameCount()); - - _globals->_sceneItems.push_back(&_hotspot17); - } - - if (!_globals->getFlag(98)) { - _hotspot10.postInit(); - _hotspot10.setVisage(4302); - _hotspot10.setPosition(Common::Point(244, 179)); - _hotspot10.fixPriority(100); - _globals->_sceneItems.push_back(&_hotspot10); - - _hotspot12.postInit(); - _hotspot12.setVisage(4302); - _hotspot12.setStrip2(3); - _hotspot12.setPosition(Common::Point(231, 185)); - _hotspot12.fixPriority(251); - _hotspot12.hide(); - - _hotspot13.postInit(); - _hotspot13.hide(); - _hotspot13.setVisage(4302); - _hotspot13.setStrip2(2); - _hotspot13.setPosition(Common::Point(256, 168)); - _hotspot13.fixPriority(251); - _hotspot13._numFrames = 1; - _hotspot13.animate(ANIM_MODE_8, 0, NULL); - } - - if (RING_INVENTORY._items._sceneNumber == 4300) { - _hotspot16.postInit(); - _hotspot16.setVisage(4300); - _hotspot16.setPosition(Common::Point(169, 141)); - _hotspot16.fixPriority(1); - _hotspot16.setStrip(4); - _globals->_sceneItems.push_back(&_hotspot16); - } - - if (_globals->_sceneManager._previousScene == 4301) { - _globals->_player.disableControl(); - _hotspot7.setFrame(_hotspot7.getFrameCount()); - - _hotspot1.postInit(); - _hotspot1.setVisage(4301); - _hotspot1.fixPriority(145); - _hotspot1.setPosition(Common::Point(160, 64)); - - _hotspot2.postInit(); - _hotspot2.setVisage(4301); - _hotspot2.setStrip2(2); - _hotspot2.fixPriority(140); - _hotspot2.setPosition(Common::Point(166, 90)); - - _hotspot3.postInit(); - _hotspot3.setVisage(4301); - _hotspot3.setStrip2(3); - _hotspot3.fixPriority(135); - _hotspot3.setPosition(Common::Point(173, 114)); - - _hotspot4.postInit(); - _hotspot4.setVisage(4301); - _hotspot4.setStrip2(4); - _hotspot4.fixPriority(130); - _hotspot4.setPosition(Common::Point(187, 141)); - - _hotspot5.postInit(); - _hotspot5.setVisage(4301); - _hotspot5.setStrip2(5); - _hotspot5.fixPriority(125); - _hotspot5.setPosition(Common::Point(201, 164)); - - _hotspot6.postInit(); - _hotspot6.setVisage(4301); - _hotspot6.setStrip2(6); - _hotspot6.fixPriority(120); - _hotspot6.setPosition(Common::Point(219, 186)); - - setAction(&_action1); - } else { - _globals->_player.disableControl(); - _sceneMode = 4304; - setAction(&_sequenceManager, this, 4304, NULL); - } - - _hotspot10.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot19._sceneRegionId = 0; - _globals->_sceneItems.push_back(&_hotspot19); - _globals->_sceneItems.push_back(&_hotspot18); -} - -void Scene4300::stripCallback(int v) { - switch (v) { - case 1: - _hotspot12.show(); - _hotspot12.animate(ANIM_MODE_7, 0, NULL); - break; - case 2: - _hotspot12.hide(); - break; - } -} - -void Scene4300::remove() { - _globals->_scenePalette.clearListeners(); - Scene::remove(); -} - -void Scene4300::signal() { - switch (_sceneMode) { - case 4302: - RING_INVENTORY._items._sceneNumber = 1; - _hotspot16.remove(); - _globals->_player.enableControl(); - break; - case 4303: - RING_INVENTORY._stasisBox2._sceneNumber = 4300; - _hotspot15.setStrip(1); - _hotspot15.setFrame(1); - _hotspot15.animate(ANIM_MODE_NONE, NULL); - break; - case 4304: - _hotspot14.postInit(); - _hotspot14.setVisage(4300); - _hotspot14.setStrip(7); - _hotspot14.setPosition(Common::Point(60, 199)); - - _gfxButton.setText(EXIT_MSG); - _gfxButton._bounds.center(60, 193); - _gfxButton.draw(); - _gfxButton._bounds.expandPanes(); - - _globals->_player.enableControl(); - _globals->_scenePalette.addRotation(240, 254, -1); - break; - } -} - -void Scene4300::dispatch() { - if (_action) - _action->dispatch(); -} - -void Scene4300::process(Event &event) { - Scene::process(event); - if (_gfxButton.process(event)) - _globals->_sceneManager.changeScene(4250); -} - -/*-------------------------------------------------------------------------- - * Scene 4301 - Village - Slaver Ship Keypad - * - *--------------------------------------------------------------------------*/ - -void Scene4301::Action1::synchronize(Serializer &s) { - Action::synchronize(s); - s.syncAsSint16LE(_field34E); - for (int idx = 0; idx < 6; ++idx) - s.syncAsSint16LE(_indexList[idx]); -} - -void Scene4301::Action1::remove() { - Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene; - _globals->_player.enableControl(); - - for (_state = 0; _state < 6; ++_state) - _buttonList[_state].remove(); - - scene->_hotspot3.remove(); - scene->_hotspot2.remove(); - - scene->_hotspot1.animate(ANIM_MODE_6, NULL); - Action::remove(); -} - -void Scene4301::Action1::signal() { - Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - scene->_soundHandler.play(164); - scene->_hotspot1.animate(ANIM_MODE_5, this); - break; - case 1: - _globals->_soundHandler.play(335); - _globals->_events.setCursor(CURSOR_USE); - - scene->_hotspot2.postInit(); - scene->_hotspot2.setVisage(4303); - scene->_hotspot2.setStrip(2); - scene->_hotspot2.setFrame(1); - scene->_hotspot2.setPosition(Common::Point(30, 15)); - scene->_hotspot2.fixPriority(255); - - scene->_hotspot3.postInit(); - scene->_hotspot3.setVisage(4303); - scene->_hotspot3.setStrip(2); - scene->_hotspot3.setFrame(2); - scene->_hotspot3.setPosition(Common::Point(48, 29)); - scene->_hotspot3.fixPriority(255); - scene->_hotspot3.hide(); - - _field34E = 0; - _state = 0; - _actionIndex = 2; - break; - case 10: - // Puzzle: Wrong code - _globals->_events.setCursor(CURSOR_NONE); - scene->_soundHandler.play(337); - if (scene->_hotspot3._flags & OBJFLAG_HIDE) - scene->_hotspot3.show(); - else - scene->_hotspot3.hide(); - setDelay(20); - - if (_state <= 8) - _actionIndex = 10; - ++_state; - break; - case 11: - for (_state = 0; _state < 6; ++_state) - _buttonList[_state].remove(); - - scene->_soundHandler.play(338); - scene->_hotspot3.hide(); - - _actionIndex = 2; - _state = 0; - _globals->_events.setCursor(CURSOR_USE); - break; - case 20: - // Puzzle: Correct code - _globals->_player.disableControl(); - scene->_soundHandler.play(339); - scene->_hotspot3._frame = 3; - if (scene->_hotspot3._flags & OBJFLAG_HIDE) - scene->_hotspot3.show(); - else - scene->_hotspot3.hide(); - - if (_state <= 8) - _actionIndex = 20; - ++_state; - - setDelay(20); - break; - case 21: - scene->_field68E = true; - remove(); - break; - } -} - -void Scene4301::Action1::process(Event &event) { - // Puzzle - Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene; - Rect buttonsRect; - - Action::process(event); - if (event.handled || (_actionIndex != 2)) - return; - - buttonsRect = Rect(14, 35, 112, 100); - buttonsRect.translate(30, 15); - - if ((event.eventType == EVENT_BUTTON_DOWN) && buttonsRect.contains(event.mousePos)) { - event.handled = true; - scene->_soundHandler.play(336); - - int buttonIndex = ((event.mousePos.y - buttonsRect.top) / 33) * 3 + - ((event.mousePos.x - buttonsRect.left) / 33); - - _buttonList[_state].postInit(); - _buttonList[_state].setVisage(4303); - _buttonList[_state].setStrip(buttonIndex + 3); - _buttonList[_state].setFrame(1); - _buttonList[_state].setPosition(Common::Point((_state % 3) * 25 + 55, (_state / 3) * 25 + 121)); - _buttonList[_state].fixPriority(255); - _buttonList[_state]._numFrames = 25; - _buttonList[_state].animate(ANIM_MODE_5, NULL); - - _indexList[_state++] = buttonIndex; - - if (_state == 6) { - // Six buttons pressed - if ((_indexList[0] == 2) && (_indexList[1] == 3) && (_indexList[2] == 0) && - (_indexList[3] == 4) && (_indexList[4] == 1) && (_indexList[5] == 5)) { - // Entered the correct full combination - _state = 0; - _actionIndex = 20; - } else { - // Incorrect combination entered - _state = 0; - _actionIndex = 10; - } - - signal(); - } - } - - if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) { - event.handled = true; - remove(); - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4301::Hotspot4::doAction(int action) { - // Hatch near door - Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene; - - if (action == CURSOR_USE) { - _globals->_player.disableControl(); - scene->setAction(&scene->_action1); - } else { - NamedHotspot::doAction(action); - } -} - -void Scene4301::Hotspot5::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4300, 0); - break; - case CURSOR_USE: - SceneItem::display2(4300, 30); - break; - case OBJECT_SCANNER: - SceneItem::display2(4300, 31); - break; - case OBJECT_STUNNER: - SceneItem::display2(4300, 32); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene4301::postInit(SceneObjectList *OwnerList) { - _globals->setFlag(50); - loadScene(4301); - Scene::postInit(); - setZoomPercents(0, 100, 200, 100); - - _field68E = false; - RING_INVENTORY._stasisBox2._sceneNumber = 1; - _hotspot4.setup(97, 76, 127, 102, 4300, 5, 6); - - _hotspot1.postInit(); - _hotspot1.setPosition(Common::Point(90, 128)); - _hotspot1.setVisage(4303); - _hotspot1._strip = 1; - _hotspot1._frame = 1; - _hotspot1.fixPriority(250); - - _hotspot5.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _globals->_sceneItems.push_back(&_hotspot5); - - _globals->_player.enableControl(); -} - -void Scene4301::dispatch() { - if (_action) { - _action->dispatch(); - } else if (_field68E) { - _field68E = 0; - _globals->clearFlag(50); - _globals->_sceneManager._fadeMode = FADEMODE_NONE; - _globals->_sceneManager.setNewScene(4300); - } -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes5.h b/engines/tsage/ringworld_scenes5.h deleted file mode 100644 index c3ae9f4aa9..0000000000 --- a/engines/tsage/ringworld_scenes5.h +++ /dev/null @@ -1,693 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_SCENES5_H -#define TSAGE_RINGWORLD_SCENES5_H - -#include "common/scummsys.h" -#include "tsage/core.h" -#include "tsage/converse.h" -#include "tsage/ringworld_logic.h" - -namespace tSage { - -class Scene4000 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - class Action8 : public Action { - public: - virtual void signal(); - }; - class Action9 : public Action { - public: - virtual void signal(); - }; - class Action10 : public Action { - public: - virtual void signal(); - }; - class Action11 : public Action { - public: - virtual void signal(); - }; - class Action12 : public Action { - public: - virtual void signal(); - }; - class Action13 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Miranda : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot8 : public SceneObject { - private: - int _ctr; - public: - virtual void synchronize(Serializer &s) { - SceneObject::synchronize(s); - s.syncAsUint16LE(_ctr); - } - virtual void doAction(int action); - }; - class GuardRock : public SceneObject { - public: - virtual void doAction(int action); - }; - class Ladder : public SceneObject { - public: - virtual void doAction(int action); - }; - class TheTech : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot13 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot17 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot18 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot23 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3; - ASound _soundHandler1, _soundHandler2; - SpeakerQR _speakerQR; - SpeakerML _speakerML; - SpeakerMR _speakerMR; - SpeakerSR _speakerSR; - SpeakerCHFL _speakerCHFL; - SpeakerPL _speakerPL; - SpeakerPText _speakerPText; - SpeakerQText _speakerQText; - SpeakerSText _speakerSText; - SpeakerMText _speakerMText; - SpeakerCHFR _speakerCHFR; - SpeakerQL _speakerQL; - SpeakerCHFText _speakerCHFText; - SceneObject _smoke1, _hotspot2, _lander, _olo, _hotspot5, _rope; - Miranda _miranda; - Hotspot8 _hotspot8; - GuardRock _guardRock; - Ladder _ladder; - DisplayHotspot _forceField; - TheTech _theTech; - Hotspot13 _hotspot13; - Hotspot _hotspot14, _hotspot15, _hotspot16; - Hotspot17 _hotspot17; - Hotspot18 _hotspot18; - DisplayHotspot _hotspot19, _hotspot20, _hotspot21, _hotspot22; - Hotspot23 _hotspot23; - DisplayHotspot _hotspot24, _hotspot25, _hotspot26; - SceneObject _smoke2; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Action7 _action7; - Action8 _action8; - Action9 _action9; - Action10 _action10; - Action11 _action11; - Action12 _action12; - Action13 _action13; - - Scene4000(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene4010 : public Scene { -public: - SequenceManager _sequenceManager; - SpeakerQText _speakerQText; - SpeakerSText _speakerSText; - SpeakerMText _speakerMText; - SceneObject _hotspot1, _hotspot2; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); -}; - -class Scene4025 : public Scene { - /* Custom classes */ - class Peg; - - class Hole : public SceneObject { - public: - Peg *_pegPtr; - int _armStrip; - Common::Point _newPosition; - - virtual void synchronize(Serializer &s); - virtual void doAction(int action); - }; - class Peg : public SceneObject { - public: - int _field88; - int _armStrip; - - Peg() : SceneObject() { _field88 = 0; _armStrip = 3; } - virtual void synchronize(Serializer &s); - virtual void doAction(int action); - }; - - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; -public: - SequenceManager _sequenceManager; - GfxButton _gfxButton; - SceneObject _armHotspot; - Hole _hole1, _hole2, _hole3, _hole4, _hole5; - Peg _peg1, _peg2, _peg3, _peg4, _peg5; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Peg *_pegPtr, *_pegPtr2; - Hole *_holePtr; - - Scene4025(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void synchronize(Serializer &s); - virtual void remove(); - virtual void signal(); - virtual void process(Event &event); - virtual void dispatch(); -}; - -class Scene4045 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class OlloStand : public SceneObject { - public: - virtual void doAction(int action); - }; - class Miranda : public SceneObject { - public: - virtual void doAction(int action); - }; - class Necklace : public SceneObject { - public: - virtual void doAction(int action); - }; - -public: - SequenceManager _sequenceManager; - SpeakerQR _speakerQR; - SpeakerML _speakerML; - SpeakerPR _speakerPR; - SpeakerPText _speakerPText; - SpeakerQText _speakerQText; - SpeakerQL _speakerQL; - OlloStand _olloStand; - Miranda _miranda; - DisplayHotspot _flame; - SceneObject _hotspot4, _olloFace; - Necklace _necklace; - DisplayHotspot _hotspot7, _hotspot8, _hotspot9, _hotspot10; - DisplayHotspot _hotspot11, _hotspot12, _hotspot13, _hotspot14; - Action1 _action1; - Action2 _action2; - Action3 _action3; - - Scene4045(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void stripCallback(int v); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene4050 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot15 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot17 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - SpeakerPText _speakerPText; - SpeakerQText _speakerQText; - SpeakerGameText _speakerGameText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - DisplayHotspot _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5; - DisplayHotspot _hotspot6, _hotspot7, _hotspot8, _hotspot9, _hotspot10; - DisplayHotspot _hotspot11, _hotspot12, _hotspot13; - SceneObject _hotspot14; - Hotspot15 _hotspot15; - SceneObject _hotspot16; - Hotspot17 _hotspot17; - - Scene4050(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene4100 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Miranda : public SceneObject { - public: - virtual void doAction(int action); - }; - class Ladder : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot14 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - SpeakerMText _speakerMText; - SpeakerML _speakerML; - SpeakerQText _speakerQText; - SpeakerQR _speakerQR; - SpeakerCHFText _speakerCHFText; - SpeakerCDRText _speakerCDRText; - SpeakerCDR _speakerCDR; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Hotspot1 _hotspot1; - Hotspot2 _hotspot2; - DisplayHotspot _hotspot3, _hotspot4; - Miranda _miranda; - Ladder _ladder; - DisplayHotspot _hotspot7, _hotspot8, _hotspot9, _hotspot10; - DisplayHotspot _hotspot11, _hotspot12, _hotspot13; - Hotspot14 _hotspot14; - - Scene4100(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene4150 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class HotspotGroup1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class HotspotGroup3 : public SceneObject { - public: - virtual void doAction(int action); - }; - class HotspotGroup6 : public SceneObject { - public: - virtual void doAction(int action); - }; - - class Hotspot3 : public SceneObject { - public: - virtual void doAction(int action); - }; - -public: - SequenceManager _sequenceManager; - ASound _soundHandler; - SpeakerQText _speakerQText; - SpeakerQR _speakerQR; - SpeakerCDL _speakerCDL; - Action1 _action1; - Action2 _action2; - Action3 _action3; - DisplayHotspot _hotspot1, _hotspot2; - Hotspot3 _hotspot3; - SceneObject _hotspot4; - HotspotGroup1 _hotspot5, _hotspot6; - DisplayHotspot _hotspot7, _hotspot8, _hotspot9, _hotspot10, _hotspot11, _hotspot12; - HotspotGroup3 _hotspot13, _hotspot14, _hotspot15, _hotspot16; - DisplayHotspot _hotspot17, _hotspot18, _hotspot19, _hotspot20, _hotspot21; - DisplayHotspot _hotspot22, _hotspot23, _hotspot24; - HotspotGroup6 _hotspot25, _hotspot26; - - Scene4150(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene4250 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot4 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot6 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot8 : public SceneObject { - public: - virtual void doAction(int action); - }; - -public: - SequenceManager _sequenceManager; - ASound _soundHandler; - SpeakerSR _speakerSR; - SpeakerSL _speakerSL; - SpeakerSText _speakerSText; - SpeakerGameText _speakerGameText; - SpeakerQL _speakerQL; - SpeakerQR _speakerQR; - SpeakerQText _speakerQText; - SpeakerPText _speakerPText; - SpeakerMText _speakerMText; - SpeakerFLText _speakerFLText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Hotspot1 _hotspot1; - Hotspot2 _hotspot2; - SceneObject _hotspot3; - Hotspot4 _hotspot4; - SceneObject _hotspot5; - Hotspot6 _hotspot6; - DisplayHotspot _hotspot7; - Hotspot8 _hotspot8; - - Scene4250(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene4300 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot8 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot9 : public NamedHotspot { - public: - virtual void doAction(int action); - }; - class Hotspot10 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot15 : public SceneObject { - public: - virtual void signal(); - }; - class Hotspot16 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot17 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot19 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - ASound _soundHandler1, _soundHandler2; - SequenceManager _sequenceManager; - GfxButton _gfxButton; - SpeakerQText _speakerQText; - SpeakerSText _speakerSText; - SpeakerMText _speakerMText; - SpeakerFLText _speakerFLText; - - SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4; - SceneObject _hotspot5, _hotspot6, _hotspot7; - Hotspot8 _hotspot8; - Hotspot9 _hotspot9; - Hotspot10 _hotspot10; - NamedHotspot _hotspot11; - SceneObject _hotspot12, _hotspot13, _hotspot14; - Hotspot15 _hotspot15; - Hotspot16 _hotspot16; - Hotspot17 _hotspot17; - DisplayHotspot _hotspot18; - Hotspot19 _hotspot19; - Action1 _action1; - Action2 _action2; - - Scene4300(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void stripCallback(int v); - virtual void remove(); - virtual void signal(); - virtual void dispatch(); - virtual void process(Event &event); -}; - -class Scene4301 : public Scene { - /* Actions */ - class Action1 : public ActionExt { - public: - SceneObject _buttonList[6]; - int _field34E; - int _indexList[6]; - - virtual void synchronize(Serializer &s); - virtual void remove(); - virtual void signal(); - virtual void process(Event &event); - }; - - /* Hotspots */ - class Hotspot4 : public NamedHotspot { - public: - virtual void doAction(int action); - }; - class Hotspot5 : public NamedHotspot { - public: - virtual void doAction(int action); - }; - -public: - Common::List _list1; - SequenceManager _sequenceManager; - ASound _soundHandler; - Action1 _action1; - SceneObject _hotspot1, _hotspot2, _hotspot3; - Hotspot4 _hotspot4; - Hotspot5 _hotspot5; - bool _field68E; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void dispatch(); - virtual void synchronize(Serializer &s) { - Scene::synchronize(s); - s.syncAsSint16LE(_field68E); - } -}; - - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_scenes6.cpp b/engines/tsage/ringworld_scenes6.cpp deleted file mode 100644 index 68c184196c..0000000000 --- a/engines/tsage/ringworld_scenes6.cpp +++ /dev/null @@ -1,2200 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "tsage/ringworld_scenes6.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -/*-------------------------------------------------------------------------- - * Scene 5000 - Caverns - Entrance - * - *--------------------------------------------------------------------------*/ - -void Scene5000::Action1::signal() { - // Ship landing - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - scene->_soundHandler.play(190); - scene->_soundHandler.holdAt(true); - ADD_MOVER(scene->_hotspot1, 283, 12); - break; - case 2: - break; - case 3: - scene->_hotspot1._moveDiff.y = 1; - scene->_hotspot4.setPosition(Common::Point(scene->_hotspot1._position.x, - scene->_hotspot1._position.y + 15)); - scene->_hotspot4.show(); - setDelay(15); - break; - case 4: - scene->_soundHandler.release(); - ADD_MOVER(scene->_hotspot1, 233, 80); - break; - case 5: - scene->_hotspot3.animate(ANIM_MODE_8, 0, NULL); - scene->_hotspot3.show(); - ADD_MOVER(scene->_hotspot1, 233, 90); - break; - case 6: - scene->_hotspot3.remove(); - scene->_hotspot2.setPosition(Common::Point(233, 76)); - scene->_hotspot2.show(); - scene->_hotspot2.animate(ANIM_MODE_5, this); - - scene->_hotspot4.remove(); - break; - case 7: - setDelay(60); - scene->_hotspot2.remove(); - break; - case 8: - scene->_hotspot5.show(); - scene->_hotspot5.animate(ANIM_MODE_5, this); - break; - case 9: - scene->setAction(&scene->_action2); - break; - } -} - -void Scene5000::Action1::dispatch() { - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - Action::dispatch(); - - if (_actionIndex == 3) { - if (scene->_hotspot1._percent % 2 == 0) { - ++scene->_hotspot1._position.y; - if (scene->_hotspot1._position.x > 233) - --scene->_hotspot1._position.x; - } - - scene->_hotspot1.changeZoom(++scene->_hotspot1._percent); - scene->_hotspot1._flags |= OBJFLAG_PANES; - - if (scene->_hotspot1._percent >= 100) - signal(); - } - - if ((_actionIndex == 5) || (_actionIndex == 6)) { - scene->_hotspot4.setPosition(Common::Point(scene->_hotspot1._position.x, - scene->_hotspot1._position.y + 15)); - } -} - -void Scene5000::Action2::signal() { - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.setPosition(Common::Point(217, 76)); - setDelay(10); - break; - case 1: - _globals->_player.setStrip2(3); - _globals->_player.animate(ANIM_MODE_1, NULL); - ADD_MOVER(_globals->_player, 214, 89); - break; - case 2: - if (!_globals->getFlag(59)) - setAction(&scene->_action3, this); - _globals->_player.fixPriority(15); - ADD_MOVER(_globals->_player, 208, 100); - break; - case 3: - ADD_MOVER(_globals->_player, 213, 98); - break; - case 4: - _globals->_player.fixPriority(20); - ADD_MOVER(_globals->_player, 215, 115); - break; - case 5: - _globals->_player.changeZoom(47); - ADD_MOVER(_globals->_player, 220, 125); - break; - case 6: - ADD_MOVER(_globals->_player, 229, 115); - break; - case 7: - _globals->_player.changeZoom(-1); - _globals->_player.fixPriority(35); - ADD_MOVER(_globals->_player, 201, 166); - break; - case 8: - _globals->_player.updateZoom(); - ADD_MOVER(_globals->_player, 205, 146); - break; - case 9: - _globals->_player.changeZoom(-1); - _globals->_player.fixPriority(50); - ADD_MOVER(_globals->_player, 220, 182); - break; - case 10: - _globals->_player.updateZoom(); - ADD_MOVER(_globals->_player, 208, 163); - break; - case 11: - _globals->_player.changeZoom(-1); - _globals->_player.setStrip2(-1); - _globals->_player.fixPriority(-1); - ADD_MOVER(_globals->_player, 208, 175); - break; - case 12: - _globals->_player.setStrip(8); - _globals->_player.setFrame(1); - setDelay(10); - break; - case 13: - if (!_globals->_sceneObjects->contains(&scene->_hotspot7)) - setDelay(10); - break; - case 14: - setDelay(30); - break; - case 15: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene5000::Action3::signal() { - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(10); - break; - case 1: - scene->_hotspot7.postInit(); - scene->_hotspot7.setVisage(2809); - scene->_hotspot7.setObjectWrapper(new SceneObjectWrapper()); - scene->_hotspot7.setPosition(Common::Point(217, 76)); - scene->_hotspot7.changeZoom(10); - scene->_hotspot7.setStrip2(3); - scene->_hotspot7.fixPriority(200); - scene->_hotspot7._moveDiff.y = 2; - scene->_hotspot7.animate(ANIM_MODE_1, NULL); - ADD_MOVER(scene->_hotspot7, 214, 89); - - _globals->_sceneItems.push_front(&scene->_hotspot7); - break; - case 2: - scene->_hotspot7.changeZoom(-1); - scene->_hotspot7.fixPriority(14); - ADD_MOVER(scene->_hotspot7, 208, 100); - break; - case 3: - ADD_MOVER(scene->_hotspot7, 213, 98); - break; - case 4: - scene->_hotspot7.fixPriority(19); - ADD_MOVER(scene->_hotspot7, 215, 115); - break; - case 5: - scene->_hotspot7.changeZoom(46); - ADD_MOVER(scene->_hotspot7, 220, 125); - break; - case 6: - ADD_MOVER(scene->_hotspot7, 229, 115); - break; - case 7: - scene->_hotspot7.changeZoom(-1); - scene->_hotspot7.fixPriority(34); - ADD_MOVER(scene->_hotspot7, 201, 166); - break; - case 8: - scene->_hotspot7.updateZoom(); - ADD_MOVER(scene->_hotspot7, 205, 146); - break; - case 9: - scene->_hotspot7.changeZoom(-1); - scene->_hotspot7.fixPriority(49); - ADD_MOVER(scene->_hotspot7, 210, 182); - break; - case 10: - scene->_hotspot7.updateZoom(); - ADD_MOVER(scene->_hotspot7, 208, 163); - break; - case 11: - scene->_hotspot7.changeZoom(-1); - scene->_hotspot7.setStrip2(-1); - scene->_hotspot7.fixPriority(-1); - ADD_MOVER(scene->_hotspot7, 175, 166); - break; - case 12: - ADD_MOVER(scene->_hotspot7, 126, 146); - break; - case 13: - scene->_hotspot7.setStrip(2); - remove(); - break; - } -} - -void Scene5000::Action4::signal() { - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1); - break; - case 1: - _globals->_player.fixPriority(50); - _globals->_player.setStrip2(4); - ADD_MOVER(_globals->_player, 210, 182); - break; - case 2: - ADD_MOVER(_globals->_player, 205, 146); - break; - case 3: - _globals->_player.fixPriority(35); - ADD_MOVER(_globals->_player, 201, 166); - break; - case 4: - ADD_MOVER(_globals->_player, 229, 115); - break; - case 5: - _globals->_player.fixPriority(20); - _globals->_player.changeZoom(47); - ADD_MOVER(_globals->_player, 220, 125); - break; - case 6: - ADD_MOVER(_globals->_player, 215, 115); - break; - case 7: - _globals->_player.changeZoom(-1); - ADD_MOVER(_globals->_player, 213, 98); - break; - case 8: - _globals->_player.fixPriority(15); - ADD_MOVER(_globals->_player, 208, 100); - break; - case 9: - ADD_MOVER(_globals->_player, 214, 89); - break; - case 10: - ADD_MOVER(_globals->_player, 217, 76); - break; - case 11: - _globals->_player.hide(); - setDelay(60); - break; - case 12: - if (!_globals->_sceneObjects->contains(&scene->_hotspot7)) - _globals->_sceneManager.changeScene(2320); - remove(); - break; - } -} - -void Scene5000::Action5::signal() { - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - ADD_MOVER(_globals->_player, 91, 155); - break; - case 1: - _globals->_player.setVisage(2670); - _globals->_player._strip = 4; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - SceneItem::display2(5000, _globals->_sceneObjects->contains(&scene->_hotspot7) ? 17 : 13); - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 3: - _globals->_player.setVisage(0); - _globals->_player._strip = 8; - _globals->_player.animate(ANIM_MODE_1, NULL); - - _globals->_player.enableControl(); - remove(); - } -} - -void Scene5000::Action6::signal() { - // Discussion between the hero and Seeker, then the hero goes back to the lander - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - _globals->_events.setCursor(CURSOR_WALK); - scene->_stripManager.start(2150, this); - break; - case 2: - _globals->_events.setCursor(CURSOR_NONE); - scene->setAction(&scene->_sequenceManager, this, 5001, &scene->_hotspot7, NULL); - break; - case 3: - ADD_PLAYER_MOVER(208, 163); - break; - case 4: - _globals->_player.fixPriority(50); - _globals->_player.setStrip2(4); - ADD_MOVER(_globals->_player, 210, 182); - break; - case 5: - _globals->_sceneManager.changeScene(2100); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene5000::Hotspot7::doAction(int action) { - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5000, 12); - break; - case CURSOR_TALK: - scene->setAction(&scene->_action6); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5000::Hotspot8::doAction(int action) { - // Cave - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5000, 10); - break; - case OBJECT_STUNNER: - SceneItem::display2(5000, 14); - break; - case OBJECT_SCANNER: - scene->setAction(&scene->_action5); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5000::HotspotGroup1::doAction(int action) { - Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene; - - if (_globals->_sceneObjects->contains(&scene->_hotspot7)) - scene->setAction(&scene->_action6); - else - SceneItem::display2(5000, 11); -} -/*--------------------------------------------------------------------------*/ - -Scene5000::Scene5000() : - _hotspot1(0, CURSOR_LOOK, 5000, 3, LIST_END), - _hotspot12(0, CURSOR_LOOK, 5000, 6, CURSOR_USE, 5000, 7, OBJECT_STUNNER, 5000, 14, - OBJECT_SCANNER, 5000, 16, LIST_END), - _hotspot13(0, CURSOR_LOOK, 5000, 8, CURSOR_USE, 5000, 9, OBJECT_STUNNER, 5000, 0, - OBJECT_SCANNER, 5000, 16, LIST_END), - _hotspot14(0, CURSOR_LOOK, 5000, 8, CURSOR_USE, 5000, 9, OBJECT_STUNNER, 5000, 0, - OBJECT_SCANNER, 5000, 16, LIST_END), - _hotspot15(0, CURSOR_LOOK, 5000, 2, OBJECT_STUNNER, 5000, 15, LIST_END), - _hotspot16(0, CURSOR_LOOK, 5000, 4, CURSOR_USE, 5000, 5, LIST_END), - _hotspot17(0, CURSOR_LOOK, 5000, 1, LIST_END), - _hotspot18(0, CURSOR_LOOK, 5000, 0, LIST_END) { -} - - -void Scene5000::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - loadScene(5000); - - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerQText); - - _globals->_player.postInit(); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player._moveDiff = Common::Point(4, 2); - _globals->_player.changeZoom(-1); - _globals->_player.disableControl(); - - _hotspot1.postInit(); - _hotspot1.setVisage(5001); - _hotspot1.setFrame2(1); - _hotspot1._moveDiff = Common::Point(5, 5); - _hotspot1.fixPriority(10); - _hotspot1.changeZoom(10); - - _hotspot4.postInit(); - _hotspot4.setVisage(5001); - _hotspot4.setStrip2(2); - _hotspot4._moveDiff = Common::Point(5, 1); - _hotspot4.fixPriority(10); - _hotspot4.changeZoom(100); - _hotspot4.animate(ANIM_MODE_8, 0, NULL); - _hotspot4.hide(); - - _hotspot2.postInit(); - _hotspot2.setVisage(5001); - _hotspot2.setStrip2(3); - _hotspot2._numFrames = 5; - _hotspot2.hide(); - - _hotspot3.postInit(); - _hotspot3.setVisage(5001); - _hotspot3.setStrip2(5); - _hotspot3._numFrames = 5; - _hotspot3.setPosition(Common::Point(233, 76)); - _hotspot3.hide(); - - _hotspot5.postInit(); - _hotspot5.setVisage(5001); - _hotspot5.setStrip2(4); - _hotspot5._numFrames = 5; - _hotspot5.fixPriority(15); - _hotspot5.setPosition(Common::Point(218, 76)); - _hotspot5.hide(); - - _hotspot9.postInit(); - _hotspot9.setVisage(5002); - _hotspot9.fixPriority(80); - _hotspot9.setPosition(Common::Point(71, 174)); - - _hotspot10.postInit(); - _hotspot10.setVisage(5002); - _hotspot10.setStrip2(2); - _hotspot10.setPosition(Common::Point(87, 120)); - - _hotspot11.postInit(); - _hotspot11.setVisage(5002); - _hotspot11.setStrip2(2); - _hotspot11.setFrame(3); - _hotspot10.setPosition(Common::Point(93, 118)); - - setZoomPercents(95, 10, 145, 100); - - _hotspot8.setBounds(Rect(0, 73, 87, 144)); - _hotspot18.setBounds(Rect(54, 0, 319, 85)); - _hotspot17.setBounds(Rect(184, 0, 199, 79)); - _hotspot13.setBounds(Rect(0, 164, 135, 200)); - _hotspot14.setBounds(Rect(0, 0, 105, 140)); - _hotspot15.setBounds(Rect(266, 70, 291, 85)); - _hotspot16.setBounds(Rect(0, 86, 319, 200)); - _hotspot12.setBounds(Rect(230, 143, 244, 150)); - - _globals->_sceneItems.addItems(&_hotspot9, &_hotspot10, &_hotspot11, &_hotspot8, &_hotspot13, - &_hotspot14, &_hotspot12, &_hotspot15, &_hotspot17, &_hotspot18, &_hotspot16, NULL); - - switch (_globals->_sceneManager._previousScene) { - case 1000: - case 2100: - case 2320: - if (_globals->getFlag(59)) { - _hotspot1.setPosition(Common::Point(233, 90)); - _hotspot1.changeZoom(100); - _hotspot1.show(); - - _hotspot5.setFrame(1); - _hotspot5.animate(ANIM_MODE_5, NULL); - _hotspot5.setPosition(Common::Point(218, 76)); - _hotspot5.show(); - - _globals->_player.setPosition(Common::Point(217, -10)); - _globals->_player.disableControl(); - - setAction(&_action2); - } else { - _globals->_player.setPosition(Common::Point(217, -10)); - _hotspot1.setPosition(Common::Point(320, -10)); - _globals->_player.disableControl(); - - setAction(&_action1); - } - break; - default: - _globals->_player.disableControl(); - _globals->_player.setPosition(Common::Point(0, 146)); - - _hotspot1.changeZoom(100); - _hotspot1.setPosition(Common::Point(233, 90)); - _hotspot1.show(); - - _hotspot5.setFrame(_hotspot5.getFrameCount()); - _hotspot5.show(); - - _sceneMode = 5004; - setAction(&_sequenceManager, this, 5004, &_globals->_player, NULL); - break; - } - - _globals->_soundHandler.play(190); -} - -void Scene5000::signal() { - switch (_sceneMode) { - case 5002: - case 5003: - case 5004: - _globals->_player.enableControl(); - break; - case 5005: - _globals->_sceneManager.changeScene(5100); - break; - } -} - -void Scene5000::dispatch() { - Scene::dispatch(); - - if (!_action) { - if (!_globals->_sceneObjects->contains(&_hotspot7) && (_globals->_player.getRegionIndex() == 10)) { - _globals->_player.disableControl(); - _sceneMode = 5005; - setAction(&_sequenceManager, this, 5005, &_globals->_player, NULL); - } - - if (_globals->_player.getRegionIndex() == 8) { - _globals->_player.disableControl(); - - if (_globals->_sceneObjects->contains(&_hotspot7)) { - _sceneMode = 5003; - _globals->_player.addMover(NULL); - setAction(&_sequenceManager, this, 5003, &_globals->_player, NULL); - } else { - setAction(&_action4); - } - } - - if (_globals->_sceneObjects->contains(&_hotspot7) && (_globals->_player.getRegionIndex() == 15)) { - _sceneMode = 5002; - _globals->_player.disableControl(); - _globals->_player.addMover(NULL); - setAction(&_sequenceManager, this, 5002, &_globals->_player, NULL); - } - } -} - -/*-------------------------------------------------------------------------- - * Scene 5100 - Caverns - * - *--------------------------------------------------------------------------*/ - -void Scene5100::Action1::signal() { - // Quinn enters the cave for the first time - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: - ADD_MOVER(_globals->_player, 1111, 165); - break; - case 2: - _globals->_player.setStrip(6); - _globals->_player.setFrame(1); - setDelay(60); - break; - case 3: - if (_globals->getFlag(10)) { - _globals->_player.enableControl(); - remove(); - } else { - _globals->setFlag(10); - scene->_stripManager.start(5102, this); - } - break; - case 4: - scene->_soundHandler.play(206); - - scene->_hotspot5.postInit(); - scene->_hotspot5.setVisage(5362); - scene->_hotspot5.setPosition(Common::Point(1160, 34)); - scene->_hotspot5.setStrip2(2); - scene->_hotspot5.animate(ANIM_MODE_1, NULL); - scene->_hotspot5.fixPriority(10); - - _globals->_sceneItems.push_front(&scene->_hotspot5); - ADD_MOVER(scene->_hotspot5, 999, 14); - break; - case 5: - scene->_hotspot5.setStrip2(4); - scene->_hotspot5._frame = 1; - scene->_hotspot5.animate(ANIM_MODE_5, this); - break; - case 6: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene5100::Action2::signal() { - // Quinn and Seeker exit the cave - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(5); - break; - case 1: - if (scene->_hotspot8._visage == 2806) - setDelay(1); - else - scene->_hotspot8.animate(ANIM_MODE_5, this); - break; - case 2: - if (scene->_hotspot8._visage != 2806) { - scene->_hotspot8.setVisage(2806); - scene->_hotspot8.setPosition(Common::Point(548, 193)); - scene->_hotspot8.animate(ANIM_MODE_1, NULL); - scene->_hotspot8._angle = 325; - scene->_hotspot8.setObjectWrapper(new SceneObjectWrapper()); - scene->_hotspot8.setStrip(8); - } - - scene->_stripManager.start(5129, this); - break; - case 3: - if (_globals->_player._position.x >= 966) { - ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 1215, 155); - } else { - ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 966, 185); - } - - if (_globals->_player._position.x >= 966) { - setDelay(1); - } else { - ADD_PLAYER_MOVER(966, 190); - } - break; - case 4: - ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 1215, 155); - ADD_PLAYER_MOVER(1215, 155); - break; - case 5: - _globals->_sceneManager.changeScene(2100); - break; - } -} - -void Scene5100::Action3::signal() { - // Quinns shots flesheater - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->setFlag(62); - _globals->_player.disableControl(); - _globals->_player.addMover(NULL); - - scene->_hotspot2.addMover(NULL); - scene->_hotspot3.addMover(NULL); - _globals->_player.setVisage(2672); - - if (static_cast(_owner)->_position.x >= _globals->_player._position.x) - _globals->_player._strip = 4; - else - _globals->_player._strip = 3; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 1: - _globals->_player.setVisage(2674); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 2: - scene->_soundHandler.play(28); - if (static_cast(_owner)->_position.x < _globals->_player._position.x) { - scene->_hotspot2.setVisage(5130); - scene->_hotspot2._strip = 1; - scene->_hotspot2._frame = 1; - scene->_hotspot2.animate(ANIM_MODE_5, this); - scene->_hotspot2.setAction(NULL); - - scene->_hotspot3.setStrip2(1); - ADD_PLAYER_MOVER_NULL(scene->_hotspot3, 1200, 100); - } else { - scene->_hotspot3.setVisage(5130); - scene->_hotspot3._strip = 1; - scene->_hotspot3._frame = 1; - scene->_hotspot3.animate(ANIM_MODE_5, this); - scene->_hotspot3.setAction(NULL); - - scene->_hotspot2.setStrip2(2); - ADD_PLAYER_MOVER_NULL(scene->_hotspot2, 10, 140); - - } - - _globals->_player.setVisage(2672); - _globals->_player._frame = _globals->_player.getFrameCount(); - _globals->_player.animate(ANIM_MODE_6, this); - break; - case 3: - break; - case 4: - SceneItem::display2(5100, 38); - _globals->_player.enableControl(); - - _globals->_player.setVisage(0); - _globals->_player._strip = 8; - _globals->_player.animate(ANIM_MODE_1, NULL); - remove(); - break; - } -} - -void Scene5100::Action4::signal() { - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - _globals->_player.disableControl(); - scene->_soundHandler.play(208); - SceneItem::display2(5100, 15); - - ObjectMover3 *mover = new ObjectMover3(); - scene->_hotspot2.addMover(mover, &_globals->_player, 20, this); - break; - } - case 1: - scene->_hotspot1.postInit(); - scene->_hotspot1.setVisage(5120); - scene->_hotspot1.setPosition(Common::Point(795, 161)); - scene->_hotspot1._strip = 4; - scene->_hotspot1.animate(ANIM_MODE_5, this); - break; - case 2: - setDelay(15); - break; - case 3: - _globals->_sceneManager.changeScene(5200); - break; - } -} - -void Scene5100::Action5::signal() { - // Quinns forgot the statis box in the throne room, and goes back - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(60); - break; - case 1: - scene->_stripManager.start(5128, this); - break; - case 2: - setDelay(15); - break; - case 3: - scene->_sceneMode = 5106; - scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot14, NULL); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene5100::HotspotGroup1::doAction(int action) { - // Flesh Eaters - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5100, _globals->getFlag(62) ? 41 : 26); - break; - case CURSOR_USE: - SceneItem::display2(5100, 11); - break; - case OBJECT_SCANNER: - SceneItem::display2(5100, 17); - break; - case OBJECT_STUNNER: - if (_globals->getFlag(62)) - SceneItem::display2(5100, 42); - else - setAction(&scene->_action3); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5100::Hotspot4::doAction(int action) { - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5100, 31); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->_sceneMode = 5110; - scene->setAction(&scene->_sequenceManager, scene, 5110, &_globals->_player, this, &scene->_hotspot7, NULL); - break; - case CURSOR_TALK: - SceneItem::display2(5100, 34); - break; - case OBJECT_STUNNER: - SceneItem::display2(5100, 36); - break; - case OBJECT_SCANNER: - SceneItem::display2(5100, 37); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5100::HotspotGroup2::doAction(int action) { - // Bat - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5100, _globals->getFlag(108) ? 47 : 23); - break; - case CURSOR_USE: - SceneItem::display2(5100, 29); - break; - case CURSOR_TALK: - if (_position.x >= 600) - SceneItem::display2(5100, 28); - else { - _globals->_player.disableControl(); - scene->_sceneMode = 5114; - scene->setAction(&scene->_sequenceManager, scene, 5114, NULL); - } - break; - case OBJECT_SCANNER: - SceneItem::display2(5100, 43); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5100::Hotspot9::doAction(int action) { - // Rope - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5100, 32); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->_sceneMode = 5117; - scene->setAction(&scene->_sequenceManager, scene, 5117, &_globals->_player, NULL); - break; - case OBJECT_STUNNER: - SceneItem::display2(5100, 35); - break; - case OBJECT_SCANNER: - SceneItem::display2(5100, 44); - break; - case OBJECT_BONE: - _globals->_player.disableControl(); - scene->_sceneMode = 5116; - scene->setAction(&scene->_sequenceManager, scene, 5116, &_globals->_player, this, &scene->_hotspot10, - &scene->_hotspot4, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5100::Hotspot17::doAction(int action) { - // Rock blocking pit entrance - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5100, 18); - break; - case CURSOR_USE: - if (_globals->getFlag(67)) - SceneItem::display2(5100, 19); - else { - _globals->_player.disableControl(); - scene->_sceneMode = 5101; - scene->setAction(&scene->_sequenceManager, scene, 5101, &_globals->_player, this, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5100::Hotspot18::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->_sceneManager._previousScene != 5000) { - SceneItem::display2(5100, 3); - } else { - switch (_index1) { - case 0: - SceneItem::display2(5100, 0); - ++_index1; - break; - case 1: - SceneItem::display2(5100, 1); - ++_index1; - break; - default: - SceneItem::display2(5100, 2); - break; - } - } - break; - case CURSOR_USE: - switch (_index2) { - case 0: - SceneItem::display2(5100, 8); - ++_index2; - break; - case 1: - SceneItem::display2(5100, 9); - ++_index2; - break; - default: - SceneItem::display2(5100, 10); - break; - } - break; - - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5100::Hotspot19::doAction(int action) { - // Pillar - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5100, _globals->_sceneObjects->contains(&scene->_hotspot14) ? 27 : 20); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - scene->_sceneMode = 5106; - - if (_globals->getFlag(66)) - scene->setAction(&scene->_sequenceManager, scene, 5113, &_globals->_player, NULL); - else { - _globals->setFlag(66); - scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot14, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5100::Hotspot20::doAction(int action) { - Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5100, 21); - break; - case CURSOR_USE: - _globals->_player.disableControl(); - - if (_globals->getFlag(67)) { - scene->_sceneMode = 5112; - scene->setAction(&scene->_sequenceManager, scene, 5112, &_globals->_player, NULL); - } else { - scene->_sceneMode = 5101; - scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot17, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene5100::Scene5100() : - _hotspot16(0, CURSOR_LOOK, 5100, 48, LIST_END), - _hotspot21(0, CURSOR_LOOK, 5100, 4, CURSOR_USE, 5100, 5, LIST_END) { -} - -void Scene5100::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(50, 10, 200, 100); - _sceneMode = 0; - - _stripManager.addSpeaker(&_speakerMText); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerGameText); - _stripManager.addSpeaker(&_speakerBatText); - _speakerQText._npc = &_globals->_player; - _speakerMText._npc = &_globals->_player; - _speakerSText._npc = &_hotspot8; - - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.disableControl(); - - if ((!_globals->getFlag(66)) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) { - _hotspot14.postInit(); - _hotspot14.setVisage(5101); - _hotspot14.setPosition(Common::Point(498, 147)); - _hotspot14.fixPriority(200); - _hotspot14._moveDiff.y = 10; - } - - _hotspot17.postInit(); - _hotspot17.setVisage(5101); - _hotspot17._strip = 2; - _hotspot17.fixPriority(200); - - if (_globals->getFlag(67)) - _hotspot17.setPosition(Common::Point(554, 192)); - else - _hotspot17.setPosition(Common::Point(539, 179)); - - _hotspot19.setBounds(Rect(488, 115, 508, 148)); - _hotspot21.setBounds(Rect(1150, 85, 1173, 112)); - _hotspot20.setBounds(Rect(517, 193, 562, 200)); - _globals->_sceneItems.addItems(&_hotspot19, &_hotspot21, NULL); - - if (_globals->getFlag(67)) { - _globals->_sceneItems.addItems(&_hotspot20, &_hotspot17, NULL); - } else { - _globals->_sceneItems.addItems(&_hotspot17, &_hotspot20, NULL); - } - - if (!_globals->getFlag(105)) { - _hotspot4.postInit(); - _hotspot4.setVisage(5363); - _hotspot4.setPosition(Common::Point(1025, 65)); - _hotspot4.setStrip(4); - _hotspot4.animate(ANIM_MODE_7, 0, NULL);; - _globals->_sceneItems.push_back(&_hotspot4); - - _hotspot9.postInit(); - _hotspot9.setVisage(5363); - _hotspot9.setPosition(Common::Point(966, 120)); - _globals->_sceneItems.push_back(&_hotspot9); - - _hotspot10.postInit(); - _hotspot10.setVisage(5363); - _hotspot10.setPosition(Common::Point(999, 68)); - _hotspot10.setStrip(2); - - _hotspot6.postInit(); - _hotspot6.setVisage(5362); - _hotspot6.setPosition(Common::Point(1017, 34)); - _hotspot6._strip = 4; - _hotspot6._frame = _hotspot6.getFrameCount(); - _globals->_sceneItems.push_back(&_hotspot6); - } - - _hotspot16._sceneRegionId = 15; - _globals->_sceneItems.push_back(&_hotspot16); - - if (!_globals->getFlag(62)) { - _hotspot2.postInit(); - _hotspot2.setVisage(5110); - _hotspot2.animate(ANIM_MODE_1, NULL); - _hotspot2._moveDiff.x = 4; - _globals->_sceneItems.push_back(&_hotspot2); - - _hotspot3.postInit(); - _hotspot3.setVisage(5110); - _hotspot3.animate(ANIM_MODE_1, NULL); - _hotspot3._moveDiff.x = 4; - _globals->_sceneItems.push_back(&_hotspot3); - - if (_globals->getFlag(61)) { - _hotspot2.setPosition(Common::Point(483, 189)); - _hotspot3.setPosition(Common::Point(811, 182)); - } else { - _hotspot2.setPosition(Common::Point(610, 170)); - _hotspot3.setPosition(Common::Point(600, 180)); - } - } - - if (_globals->getFlag(60) && (RING_INVENTORY._stasisBox._sceneNumber == 1) && - _globals->getFlag(107) && _globals->getFlag(67)) { - _hotspot8.postInit(); - _hotspot8.setVisage(2806); - _hotspot8.setPosition(Common::Point(557, 178)); - _hotspot8.animate(ANIM_MODE_1, NULL); - _hotspot8.setObjectWrapper(new SceneObjectWrapper()); - - _globals->clearFlag(59); - } - - switch (_globals->_sceneManager._previousScene) { - case 5000: - default: - _globals->_player.setPosition(Common::Point(1184, 160)); - setAction(&_action1); - break; - case 5200: - if (_globals->_stripNum == 5200) { - _globals->_player.setVisage(5101); - _globals->_player.fixPriority(200); - _globals->_player.setStrip(5); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(513, 199)); - - _sceneMode = 5108; - setAction(&_sequenceManager, this, 5108, &_globals->_player, NULL); - } else { - _globals->_player.setPosition(Common::Point(20, 175)); - - _hotspot13.postInit(); - _hotspot13.setVisage(5110); - _hotspot13.setPosition(Common::Point(578, 192)); - _hotspot13._strip = 2; - - _hotspot11.postInit(); - _hotspot11.setVisage(5110); - _hotspot11.setPosition(Common::Point(5, 162)); - _hotspot11.setStrip2(1); - _hotspot11._moveDiff = Common::Point(4, 2); - _hotspot11.animate(ANIM_MODE_1, NULL); - - ObjectMover2 *mover = new ObjectMover2(); - _hotspot11.addMover(mover, 15, 20, &_globals->_player); - - _hotspot12.postInit(); - _hotspot12.setVisage(5110); - _hotspot12.setPosition(Common::Point(15, 164)); - _hotspot12.setStrip2(1); - _hotspot12._moveDiff = Common::Point(4, 2); - _hotspot12.animate(ANIM_MODE_1, NULL); - - ObjectMover2 *mover2 = new ObjectMover2(); - _hotspot12.addMover(mover2, 25, 50, &_globals->_player); - - _hotspot17.setPosition(Common::Point(554, 182)); - _globals->_player.disableControl(); - - _sceneMode = 5105; - setAction(&_sequenceManager, this, 5105, &_globals->_player, NULL); - } - break; - case 5300: - switch (_globals->_stripNum) { - case 5300: - _sceneMode = 5111; - - _globals->_player.setVisage(5101); - _globals->_player.setStrip(6); - _globals->_player.fixPriority(170); - _globals->_player.setPosition(Common::Point(1168, 110)); - - setAction(&_sequenceManager, this, 5111, &_globals->_player, NULL); - _hotspot8.setPosition(Common::Point(1107, 178)); - break; - case 5302: - _globals->_player.setPosition(Common::Point(512, 190)); - - if (_globals->_sceneObjects->contains(&_hotspot8)) - setAction(&_action2); - else - _globals->_player.enableControl(); - break; - case 5303: - _hotspot8.setVisage(5102); - _hotspot8.setPosition(Common::Point(533, 172)); - _globals->_player.setPosition(Common::Point(512, 190)); - setAction(&_action2); - break; - } - - if (_globals->getFlag(108)) { - _hotspot6.postInit(); - _hotspot6.setVisage(5362); - _hotspot6.setPosition(Common::Point(542, 19)); - _hotspot6.setStrip(6); - _hotspot6.setFrame(1); - _globals->_sceneItems.push_back(&_hotspot6); - } else if (RING_INVENTORY._vial._sceneNumber != 5100) { - _hotspot6.postInit(); - _hotspot6.setVisage(5362); - _hotspot6.setPosition(Common::Point(1152, 70)); - _hotspot6.fixPriority(170); - _hotspot6.setStrip(6); - _hotspot6.setFrame(1); - _globals->_sceneItems.push_back(&_hotspot6); - } - break; - } - - _hotspot18.setBounds(Rect(0, 0, 1280, 200)); - _globals->_sceneItems.push_back(&_hotspot18); - - _hotspot15.postInit(); - _hotspot15.setVisage(5140); - _hotspot15.setStrip(3); - _hotspot15.setPosition(Common::Point(977, 173)); - _hotspot15.fixPriority(1); - - _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position); - loadScene(5100); - _globals->_soundHandler.play(205); -} - -void Scene5100::signal() { - switch (_sceneMode) { - case 5101: - case 5112: - _globals->setFlag(67); - _globals->_sceneManager.changeScene(5300); - break; - case 5102: - case 5114: - _globals->_player.enableControl(); - break; - case 5103: - if (_globals->getFlag(61)) { - SceneItem::display2(5100, 46); - _globals->_sceneManager.changeScene(5300); - } else { - SceneItem::display2(5100, 45); - _globals->_sceneManager.changeScene(5200); - } - break; - case 5105: - _globals->_sceneManager.changeScene(5300); - break; - case 5106: - _globals->_stripNum = 5111; - _globals->_sceneManager.changeScene(5200); - break; - case 5108: - if (!_globals->getFlag(60)) - _globals->_player.enableControl(); - else if (RING_INVENTORY._stasisBox._sceneNumber == 1) - setAction(&_action2); - else - setAction(&_action5); - break; - case 5110: - SceneItem::display2(5100, 30); - _globals->_player._angle = 325; - _globals->_player.enableControl(); - break; - case 5111: - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setVisage(0); - _globals->_player.setStrip(6); - _globals->_player.fixPriority(-1); - _globals->_player.animate(ANIM_MODE_1, NULL); - - if ((RING_INVENTORY._vial._sceneNumber != 5100) && !_globals->getFlag(108)) { - _globals->setFlag(108); - _sceneMode = 5130; - _globals->_player.disableControl(); - - _speakerBatText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 20, 30)); - setAction(&_sequenceManager, this, 5130, &_globals->_player, &_hotspot6, NULL); - } else if (_globals->_sceneObjects->contains(&_hotspot8)) { - setAction(&_action2); - } else { - _globals->_player.enableControl(); - } - break; - case 5116: - _globals->setFlag(105); - RING_INVENTORY._bone._sceneNumber = 0; - - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setVisage(0); - _globals->_player.setStrip(6); - _globals->_player.fixPriority(-1); - _globals->_player.animate(ANIM_MODE_1, NULL); - // No break on purpose - case 5117: - _globals->_player.enableControl(); - break; - case 5130: - _hotspot6.setVisage(5362); - _hotspot6.setPosition(Common::Point(542, 25)); - _hotspot6.setStrip(6); - _hotspot6.setFrame(1); - _globals->_player.enableControl(); - break; - case 5150: - _globals->clearFlag(60); - _globals->_sceneManager.changeScene(5300); - break; - } -} - -void Scene5100::dispatch() { - // Flesheater trap - if (_hotspot15._bounds.contains(_globals->_player._position) && !_globals->_player._visage) { - _globals->_player.disableControl(); - _globals->_player.addMover(NULL); - - _soundHandler.play(207); - _sceneMode = 5103; - setAction(&_sequenceManager, this, (_globals->_player._position.x >= 966) ? 5104 : 5103, - &_globals->_player, &_hotspot15, NULL); - } - - if (_globals->getFlag(61) && !_globals->getFlag(62) && - ((_globals->_player._position.x - _hotspot2._position.x) < 160) && - (_globals->_sceneManager._previousScene != 5200) && (_sceneMode != 5150)) { - setAction(NULL); - _sceneMode = 5150; - _soundHandler.play(208); - - if (RING_INVENTORY._vial._sceneNumber == 5100) { - _globals->_player.addMover(NULL); - _globals->_player.disableControl(); - SceneItem::display2(5100, 39); - } - - _hotspot2.setStrip2(1); - _hotspot3.setStrip2(2); - - ObjectMover3 *mover1 = new ObjectMover3(); - _hotspot2.addMover(mover1, &_globals->_player, 20, this); - ObjectMover3 *mover2 = new ObjectMover3(); - _hotspot3.addMover(mover2, &_globals->_player, 20, this); - } - - if (!_action) { - if (((_globals->_player._position.x - _hotspot2._position.x) < 130) && !_globals->getFlag(61)) { - _globals->_player._canWalk = false; - _globals->_player.addMover(NULL); - - Common::Point pt(20, 25); - PlayerMover2 *mover = new PlayerMover2(); - _hotspot3.addMover(mover, &pt, &_globals->_player); - setAction(&_action4); - } - - if ((_globals->_sceneManager._scene->_backgroundBounds.right - 85) <= _globals->_player._position.x) - _globals->_sceneManager.changeScene(5000); - - if (_globals->_player.getRegionIndex() == 8) { - _sceneMode = 5114; - setAction(&_sequenceManager, this, 5115, &_globals->_player, NULL); - } - } - - Scene::dispatch(); -} - -/*-------------------------------------------------------------------------- - * Scene 5200 - Caverns - Throne Room - * - *--------------------------------------------------------------------------*/ - -void Scene5200::Action1::signal() { - Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(59) + 120); - break; - case 1: - scene->_hotspot3.animate(ANIM_MODE_8, 1, this); - _actionIndex = 0; - break; - } -} - -void Scene5200::Action2::signal() { - // Quinn obtains the stasis box from the flesheater throne room - Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - ADD_PLAYER_MOVER(92, 52); - break; - case 1: - _globals->_player.setVisage(5202); - _globals->_player._strip = 4; - _globals->_player._frame = 1; - _globals->_player.animate(ANIM_MODE_4, 3, 1, this); - break; - case 2: - scene->_soundHandler.stop(); - scene->_hotspot14.remove(); - - RING_INVENTORY._stasisBox._sceneNumber = 1; - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 3: - _globals->_player.setVisage(0); - _globals->_player._strip = 3; - _globals->_player.animate(ANIM_MODE_1, NULL); - - scene->_hotspot8.animate(ANIM_MODE_2, NULL); - ADD_MOVER(scene->_hotspot8, 141, 77); - break; - case 4: - scene->_soundHandler.play(303); - - scene->_hotspot8._strip = 2; - scene->_hotspot8._frame = 1; - scene->_hotspot8.animate(ANIM_MODE_5, this); - break; - case 5: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene5200::Action3::signal() { - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(5); - break; - case 1: - ADD_PLAYER_MOVER(285, 62); - break; - case 2: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene5200::Action4::signal() { - Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(120); - break; - case 1: - _globals->_soundHandler.play(209); - scene->_stripManager.start(5202, this, scene); - break; - case 2: - scene->_hotspot6.animate(ANIM_MODE_5, this); - break; - case 3: - setDelay(10); - break; - case 4: - scene->_stripManager.start(5204, this, scene); - break; - case 5: - setDelay(60); - break; - case 6: - _globals->_sceneManager.changeScene(5100); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene5200::Hotspot9::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (!_state) { - ++_state; - SceneItem::display2(5200, 5); - } else { - SceneItem::display2(5200, 6); - } - break; - case CURSOR_USE: - SceneItem::display2(5200, 14); - break; - default: - SceneItem::doAction(action); - break; - } -} - -void Scene5200::Hotspot10::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (!_state) { - ++_state; - SceneItem::display2(5200, 7); - } else { - SceneItem::display2(5200, 8); - } - break; - default: - SceneObject::doAction(action); - break; - } -} - -void Scene5200::Hotspot14::doAction(int action) { - Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5200, 4); - break; - case CURSOR_USE: - scene->setAction(&scene->_action2); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene5200::Scene5200() : - _hotspot11(0, CURSOR_LOOK, 5200, 0, CURSOR_USE, 5200, 13, LIST_END), - _hotspot12(10, CURSOR_LOOK, 5200, 9, LIST_END), - _hotspot13(8, CURSOR_LOOK, 5200, 0, CURSOR_USE, 5200, 13, LIST_END) { -} - - -void Scene5200::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(0, 150, 199, 150); - _fieldA = 5600; - _fieldE = 5100; - - _hotspot9._state = 0; - _hotspot10._state = 0; - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerGameText); - _stripManager.addSpeaker(&_speakerFLText); - _stripManager.addSpeaker(&_speakerFLL); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.setCallback(this); - - _speakerFLText._textPos.x = 160; - _speakerQText._textPos.x = 20; - - if (RING_INVENTORY._stasisBox._sceneNumber == 5200) { - _soundHandler.play(216); - _soundHandler.holdAt(true); - - _hotspot14.postInit(); - _hotspot14.setVisage(5202); - _hotspot14._strip = 3; - _hotspot14.setPosition(Common::Point(105, 52)); - _hotspot14.fixPriority(90); - - _hotspot8.postInit(); - _hotspot8.setVisage(5202); - _hotspot8._strip = 1; - _hotspot8.setPosition(Common::Point(96, 53)); - _hotspot8.fixPriority(90); - _globals->_sceneItems.push_back(&_hotspot14); - } - - if (_globals->_stripNum == 5111) { - // Happens when the player enters the throne room via the secret passage, - // after talking with the bat. No NPCs are around and the player can - // obtain the stasis box. - _globals->_soundHandler.play(205); - _globals->_player.disableControl(); - - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.changeZoom(75); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip(1); - _globals->_player.setFrame(3); - _globals->_player.setPosition(Common::Point(307, 62)); - - setAction(&_action3); - } else { - // Happens when the player is captured by the flesh eaters the first time. - _globals->_player.postInit(); - _globals->_player.setVisage(2640); - _globals->_player._strip = 1; - _globals->_player._frame = 4; - _globals->_player.setPosition(Common::Point(105, 199)); - - _hotspot5.postInit(); - _hotspot5.setVisage(5210); - _hotspot5._frame = 2; - _hotspot5.setPosition(Common::Point(189, 167)); - - _hotspot6.postInit(); - _hotspot6.setVisage(5210); - _hotspot6._frame = 1; - _hotspot6._strip = 2; - _hotspot6.setPosition(Common::Point(159, 137)); - - _hotspot7.postInit(); - _hotspot7.setVisage(5210); - _hotspot7._frame = 1; - _hotspot7._strip = 4; - _hotspot7.fixPriority(168); - _hotspot7.setPosition(Common::Point(186, 106)); - - _hotspot1.postInit(); - _hotspot1.setVisage(5212); - _hotspot1._frame = 1; - _hotspot1.setPosition(Common::Point(62, 132)); - - _hotspot2.postInit(); - _hotspot2.setVisage(5212); - _hotspot2._strip = 3; - _hotspot2.setPosition(Common::Point(148, 141)); - _hotspot2.fixPriority(90); - - _hotspot3.postInit(); - _hotspot3.setVisage(5212); - _hotspot3._strip = 2; - _hotspot3.setPosition(Common::Point(62, 109)); - _hotspot3.fixPriority(138); - _hotspot3.setAction(&_action1); - - _hotspot4.postInit(); - _hotspot4.setVisage(5212); - _hotspot4._strip = 4; - _hotspot4.setPosition(Common::Point(146, 110)); - _hotspot4.fixPriority(90); - - _globals->_player.disableControl(); - _globals->setFlag(61); - - setAction(&_action4); - } - - _hotspot11.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot9._sceneRegionId = 11; - _hotspot10._sceneRegionId = 9; - _hotspot12._sceneRegionId = 10; - _hotspot13._sceneRegionId = 8; - - _globals->_sceneItems.addItems(&_hotspot12, &_hotspot13, &_hotspot9, &_hotspot10, &_hotspot11, NULL); - _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position); - loadScene(5200); -} - -void Scene5200::stripCallback(int v) { - switch (v) { - case 1: - _hotspot7.animate(ANIM_MODE_2, NULL); - break; - case 2: - _hotspot7.animate(ANIM_MODE_NONE, NULL); - break; - } -} - -void Scene5200::dispatch() { - Scene::dispatch(); - - if (!_action && (_globals->_player.getRegionIndex() == 12)) { - _globals->_stripNum = 5200; - _globals->_sceneManager.changeScene(5100); - } -} - -/*-------------------------------------------------------------------------- - * Scene 5300 - Caverns - Pit - * - *--------------------------------------------------------------------------*/ - -void Scene5300::Action1::signal() { - // Seeker waking up - Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - scene->_hotspot2._numFrames = 4; - scene->_hotspot2.animate(ANIM_MODE_8, 1, NULL); - setDelay(120); - break; - case 2: - scene->_hotspot2.animate(ANIM_MODE_NONE, NULL); - - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setStrip2(-1); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - ADD_MOVER(_globals->_player, 85, 170); - break; - case 3: - scene->_hotspot2.fixPriority(-1); - _globals->_player.checkAngle(&scene->_hotspot2); - setAction(&scene->_sequenceManager, this, 5305, &scene->_hotspot2, NULL); - break; - case 4: - scene->_stripManager.start(5316, this); - break; - case 5: - if (!_globals->getFlag(106) || !_globals->getFlag(107) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) { - _globals->_player.enableControl(); - remove(); - } else { - _globals->setFlag(60); - scene->_hotspot2._numFrames = 10; - - if (_globals->getFlag(67)) { - scene->_sceneMode = 5310; - scene->setAction(&scene->_sequenceManager, scene, 5310, &_globals->_player, &scene->_hotspot2, NULL); - } else { - scene->_sceneMode = 5347; - scene->setAction(&scene->_sequenceManager, scene, 5347, NULL); - } - } - break; - } -} - -void Scene5300::Action2::signal() { - Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(60); - break; - case 1: - _globals->setFlag(60); - scene->_stripManager.start(5328, this); - break; - case 2: - if (RING_INVENTORY._stasisBox._sceneNumber == 1) { - _globals->_stripNum = 5303; - setDelay(5); - } else { - _globals->_stripNum = 5302; - scene->_stripManager.start(5329, this); - } - break; - case 3: - _globals->_sceneManager.changeScene(5100); - remove(); - break; - } -} - -void Scene5300::Action3::signal() { - Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(30); - break; - case 1: - scene->_stripManager.start(_globals->_stripNum, this); - break; - case 2: - _globals->_player.enableControl(); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene5300::Hotspot1::doAction(int action) { - Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5300, 24); - break; - case CURSOR_TALK: - _globals->_stripNum = 5312; - scene->setAction(&scene->_action3); - break; - default: - SceneHotspot::doAction(action); - break; - } -} -void Scene5300::Hotspot2::doAction(int action) { - // Seeker - Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5300, 23); - break; - case CURSOR_USE: - if (!_globals->getFlag(106)) { - _globals->_player.disableControl(); - scene->_sceneMode = 5302; - scene->setAction(&scene->_sequenceManager, scene, 5302, &_globals->_player, NULL); - } else { - SceneItem::display2(5300, _globals->getFlag(107) ? 25 : 20); - } - break; - case CURSOR_TALK: - if (!_globals->getFlag(106)) { - _globals->_player.disableControl(); - scene->_sceneMode = 5302; - scene->setAction(&scene->_sequenceManager, scene, 5302, &_globals->_player, NULL); - } else if (!_globals->getFlag(107)) { - SceneItem::display2(5300, 11); - } else { - _globals->_player.disableControl(); - - if (RING_INVENTORY._stasisBox._sceneNumber != 1) { - scene->_sceneMode = 5316; - scene->setAction(&scene->_sequenceManager, scene, 5316, NULL); - } else { - _globals->setFlag(60); - if (_globals->getFlag(67)) { - scene->_sceneMode = 5315; - scene->setAction(&scene->_sequenceManager, scene, 5315, this, NULL); - } else { - scene->_sceneMode = 5347; - scene->setAction(&scene->_sequenceManager, scene, 5347, NULL); - } - } - } - break; - case OBJECT_SCANNER: - SceneItem::display2(5300, _globals->getFlag(107) ? 10 : 9); - break; - case OBJECT_MEDKIT: - if (_globals->getFlag(106)) - SceneItem::display2(5300, 7); - else { - _globals->setFlag(106); - _globals->_player.disableControl(); - - scene->_sceneMode = 5303; - scene->setAction(&scene->_sequenceManager, scene, 5303, &_globals->_player, NULL); - } - break; - case OBJECT_VIAL: - if (_globals->getFlag(107)) { - SceneItem::display2(5300, 8); - } else { - RING_INVENTORY._vial._sceneNumber = 5300; - _globals->setFlag(107); - _globals->_player.disableControl(); - scene->_sceneMode = 5304; - - scene->setAction(&scene->_sequenceManager, scene, 5304, &_globals->_player, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5300::Hotspot5::doAction(int action) { - // Sharp bone - Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5300, 27); - break; - case CURSOR_USE: - RING_INVENTORY._bone._sceneNumber = 1; - _globals->_player.disableControl(); - - scene->_sceneMode = 5309; - scene->setAction(&scene->_sequenceManager, scene, 5309, &_globals->_player, this, NULL); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5300::Hotspot6::doAction(int action) { - // Left Hole - Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber == 1)) - SceneItem::display2(5300, 4); - else - SceneItem::display2(5300, 26); - break; - case CURSOR_USE: - if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber != 5100)) { - _globals->_player.disableControl(); - scene->_sceneMode = 5301; - scene->setAction(&scene->_sequenceManager, scene, 5301, &_globals->_player, NULL); - } else { - _globals->_player.disableControl(); - scene->_sceneMode = 5307; - RING_INVENTORY._vial._sceneNumber = 1; - - scene->setAction(&scene->_sequenceManager, scene, 5307, &scene->_hotspot1, &_globals->_player, - &scene->_hotspot4, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5300::Hotspot7::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(63)) - SceneItem::display2(5300, 2); - else { - _globals->setFlag(63); - SceneItem::display2(5300, 0); - SceneItem::display2(5300, 1); - } - break; - case CURSOR_USE: - if (_globals->getFlag(64)) - SceneItem::display2(5300, 15); - else { - _globals->setFlag(64); - SceneItem::display2(5300, 14); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene5300::Hotspot8::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(5300, _globals->getFlag(65) ? 6 : 5); - break; - case CURSOR_USE: - SceneItem::display2(5300, 18); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene5300::Scene5300() : - _hotspot3(0, CURSOR_LOOK, 5300, 3, CURSOR_USE, 5300, 16, LIST_END) { -} - -void Scene5300::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - loadScene(5300); - setZoomPercents(0, 100, 199, 100); - - _stripManager.addSpeaker(&_speakerQR); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerBatR); - _stripManager.addSpeaker(&_speakerSR); - _stripManager.addSpeaker(&_speakerSL); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerBatText); - _stripManager.addSpeaker(&_speakerSText); - _stripManager.addSpeaker(&_speakerGameText); - - if (_globals->getFlag(106) && _globals->getFlag(107)) { - _hotspot2.postInit(); - _hotspot2.setVisage(2806); - _hotspot2.setObjectWrapper(new SceneObjectWrapper()); - _hotspot2.setPosition(Common::Point(63, 170)); - _hotspot2.animate(ANIM_MODE_1, NULL); - } else { - _hotspot2.postInit(); - _hotspot2.setVisage(5310); - _hotspot2.setPosition(Common::Point(63, 170)); - _hotspot2.animate(ANIM_MODE_1, NULL); - _hotspot2.fixPriority(98); - } - - _hotspot1.postInit(); - _hotspot1.setVisage(5362); - _hotspot1.setStrip2(3); - _hotspot1.setFrame2(5); - _hotspot1.setPosition(Common::Point(76, 48)); - - _hotspot4.postInit(); - _hotspot4.setVisage(5316); - _hotspot4.setStrip(2); - _hotspot4.setPosition(Common::Point(89, 65)); - _hotspot4.animate(ANIM_MODE_2, NULL); - _hotspot4.hide(); - - if (_globals->getFlag(67)) { - _globals->_player.postInit(); - _globals->_player.setVisage(5316); - _globals->_player.setPosition(Common::Point(191, 27)); - _globals->_player.disableControl(); - - if (_globals->getFlag(107) && _globals->getFlag(106)) { - _hotspot2.setVisage(2806); - _hotspot2.postInit(); - _hotspot2.setObjectWrapper(new SceneObjectWrapper()); - _hotspot2.animate(ANIM_MODE_1, NULL); - - setAction(&_action2); - } else { - _globals->_player.setVisage(5315); - _globals->_player.setPosition(Common::Point(204, 86)); - _globals->_player.animate(ANIM_MODE_2, NULL); - _globals->_player.setStrip2(1); - _globals->_player._moveDiff.y = 12; - - _sceneMode = 5308; - setAction(&_sequenceManager, this, 5308, &_globals->_player, NULL); - } - } else { - _hotspot3.postInit(); - _hotspot3.setVisage(5301); - _hotspot3.setPosition(Common::Point(172, 32)); - _hotspot3.fixPriority(1); - _hotspot3.animate(ANIM_MODE_NONE, NULL); - - _globals->_player.postInit(); - _globals->_player.setVisage(5315); - _globals->_player.setPosition(Common::Point(204, 86)); - _globals->_player.animate(ANIM_MODE_2, NULL); - _globals->_player.setStrip2(1); - _globals->_player._moveDiff.y = 12; - _globals->_player.disableControl(); - - _sceneMode = 5306; - setAction(&_sequenceManager, this, 5306, &_globals->_player, &_hotspot3, NULL); - } - - _field1B0A = 1; - if (RING_INVENTORY._bone._sceneNumber == 5300) { - _hotspot5.postInit(); - _hotspot5.setVisage(5301); - _hotspot5.setStrip(2); - _hotspot5.setPosition(Common::Point(190, 147)); - _globals->_sceneItems.push_back(&_hotspot5); - } - - _hotspot6.setBounds(Rect(74, 51, 114, 69)); - _hotspot7.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _hotspot8._sceneRegionId = 8; - - _globals->_sceneItems.addItems(&_hotspot8, &_hotspot2, &_hotspot6, &_hotspot3, &_hotspot7, NULL); - _globals->_soundHandler.play(212); -} - -void Scene5300::signal() { - switch (_sceneMode) { - case 5301: - _globals->_stripNum = 5300; - _globals->_sceneManager.changeScene(5100); - break; - case 5307: - _soundHandler.fadeOut(NULL); - // No break on purpose - case 5302: - case 5308: - case 5316: - case 5347: - _globals->_player.setStrip2(-1); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.enableControl(); - break; - case 5303: - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.enableControl(); - - if (_globals->getFlag(107)) - setAction(&_action1); - else - SceneItem::display2(5300, 28); - break; - case 5304: - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.enableControl(); - - if (_globals->getFlag(106)) - setAction(&_action1); - else - SceneItem::display2(5300, 28); - break; - case 5306: - _globals->clearFlag(67); - _globals->_player.setStrip2(-1); - - if ((RING_INVENTORY._vial._sceneNumber == 1) || (RING_INVENTORY._vial._sceneNumber == 5300)) - _stripManager.start(5303, this); - else - _stripManager.start(5302, this); - _sceneMode = 5302; - break; - case 5309: - _hotspot5.remove(); - _globals->_player.enableControl(); - break; - case 5310: - _hotspot2.fixPriority(41); - _sceneMode = 5315; - - setAction(&_sequenceManager, this, 5315, &_hotspot2, NULL); - break; - case 5315: - _globals->_stripNum = 5302; - _globals->_sceneManager.changeScene(5100); - break; - } -} - - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes6.h b/engines/tsage/ringworld_scenes6.h deleted file mode 100644 index 2e99f5ab87..0000000000 --- a/engines/tsage/ringworld_scenes6.h +++ /dev/null @@ -1,330 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_SCENES6_H -#define TSAGE_RINGWORLD_SCENES6_H - -#include "common/scummsys.h" -#include "tsage/ringworld_logic.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" - -namespace tSage { - -class Scene5000 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - virtual void dispatch(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot7 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot8 : public SceneObject { - public: - virtual void doAction(int action); - }; - class HotspotGroup1 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - ASound _soundHandler; - SpeakerSText _speakerSText; - SpeakerQText _speakerQText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - DisplayHotspot _hotspot1; - SceneObject _hotspot2, _hotspot3, _hotspot4, _hotspot5, _hotspot6; - Hotspot7 _hotspot7; - Hotspot8 _hotspot8; - HotspotGroup1 _hotspot9, _hotspot10, _hotspot11; - DisplayHotspot _hotspot12, _hotspot13, _hotspot14, _hotspot15; - DisplayHotspot _hotspot16, _hotspot17, _hotspot18; - - Scene5000(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene5100 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class HotspotGroup1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class HotspotGroup2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot4 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot9 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot17 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot18 : public SceneHotspot { - public: - int _index1; - int _index2; - - virtual void doAction(int action); - }; - class Hotspot19 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot20 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - SequenceManager _sequenceManager; - ASound _soundHandler; - SpeakerMText _speakerMText; - SpeakerQText _speakerQText; - SpeakerSText _speakerSText; - SpeakerBatText _speakerBatText; - SpeakerGameText _speakerGameText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - HotspotGroup1 _hotspot1, _hotspot2, _hotspot3; - Hotspot4 _hotspot4; - HotspotGroup2 _hotspot5, _hotspot6, _hotspot7; - SceneObject _hotspot8; - Hotspot9 _hotspot9; - SceneObject _hotspot10, _hotspot11, _hotspot12, _hotspot13, _hotspot14, _hotspot15; - DisplayHotspot _hotspot16; - Hotspot17 _hotspot17; - Hotspot18 _hotspot18; - Hotspot19 _hotspot19; - Hotspot20 _hotspot20; - DisplayHotspot _hotspot21; - - Scene5100(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene5200 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot9 : public SceneObjectExt { - public: - virtual void doAction(int action); - }; - class Hotspot10 : public SceneObjectExt { - public: - virtual void doAction(int action); - }; - class Hotspot14 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - ASound _soundHandler; - SpeakerFLL _speakerFLL; - SpeakerFLText _speakerFLText; - SpeakerQL _speakerQL; - SpeakerQText _speakerQText; - SpeakerGameText _speakerGameText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - - SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5, _hotspot6, _hotspot7; - SceneObject _hotspot8; - Hotspot9 _hotspot9; - Hotspot10 _hotspot10; - DisplayHotspot _hotspot11, _hotspot12, _hotspot13; - Hotspot14 _hotspot14; - - Scene5200(); - virtual void stripCallback(int v); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void dispatch(); -}; - -class Scene5300 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - - /* Hotspots */ - class Hotspot1 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot2 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot5 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot6 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot7 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Hotspot8 : public SceneObject { - public: - virtual void doAction(int action); - }; -public: - ASound _soundHandler; - SequenceManager _sequenceManager; - SpeakerQR _speakerQR; - SpeakerQL _speakerQL; - SpeakerQText _speakerQText; - SpeakerBatR _speakerBatR; - SpeakerBatText _speakerBatText; - SpeakerSR _speakerSR; - SpeakerSL _speakerSL; - SpeakerSText _speakerSText; - SpeakerGameText _speakerGameText; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Hotspot1 _hotspot1; - Hotspot2 _hotspot2; - DisplayHotspot _hotspot3; - SceneObject _hotspot4; - Hotspot5 _hotspot5; - Hotspot6 _hotspot6; - Hotspot7 _hotspot7; - Hotspot8 _hotspot8; - int _field1B0A; - - Scene5300(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void synchronize(Serializer &s) { - Scene::synchronize(s); - s.syncAsSint16LE(_field1B0A); - } -}; - - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp deleted file mode 100644 index d0e7491d4a..0000000000 --- a/engines/tsage/ringworld_scenes8.cpp +++ /dev/null @@ -1,2545 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "graphics/cursorman.h" -#include "tsage/ringworld_scenes8.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/staticres.h" - -namespace tSage { - -void NamedHotspotMult::synchronize(Serializer &s) { - SceneHotspot::synchronize(s); - s.syncAsSint16LE(_useLineNum); - s.syncAsSint16LE(_lookLineNum); -} - -void SceneObject7700::synchronize(Serializer &s) { - SceneObject::synchronize(s); - if (s.getVersion() >= 3) { - s.syncAsSint16LE(_lookLineNum); - s.syncAsSint16LE(_defltLineNum); - } -} - -/*-------------------------------------------------------------------------- - * Scene 7000 - Landing near beach - * - *--------------------------------------------------------------------------*/ - -void Scene7000::Action1::signal() { - // Quinn walks from the lander to the seaside (action6) then discuss with Skeenar - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - setAction(&scene->_action6, this); - break; - case 2: - scene->_soundHandler.play(252); - scene->_object8.remove(); - scene->_object1.postInit(); - scene->_object1.setVisage(7003); - scene->_object1.animate(ANIM_MODE_5, this); - scene->_object1.setPosition(Common::Point(151, 182)); - scene->_object1.fixPriority(205); - _globals->_sceneItems.push_front(&scene->_object1); - break; - case 3: - scene->_object1._numFrames = 4; - scene->_object1.setStrip(2); - scene->_object1.animate(ANIM_MODE_8, 0, NULL); - scene->_stripManager.start(7005, this); - break; - case 4: - scene->_object1.animate(ANIM_MODE_2, NULL); - setDelay(3); - break; - case 5: - _globals->_player.enableControl(); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Action2::signal() { - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - _globals->_player.addMover(NULL); - _globals->_player.setVisage(7006); - _globals->_player.setStrip(1); - _globals->_player.setFrame(1); - _globals->_player.setPosition(Common::Point(_globals->_player._position.x, _globals->_player._position.y + 13)); - _globals->_player.changeZoom(68); - _globals->_player.animate(ANIM_MODE_5, this); - scene->_object1.remove(); - break; - case 2: - _globals->_sceneManager.changeScene(7100); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Action3::dispatch() { - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - - Action::dispatch(); - if (_actionIndex == 4) - scene->_object4.setPosition(Common::Point(scene->_object3._position.x, scene->_object3._position.y + 15)); -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Action3::signal() { - // Lander is landing - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - scene->setZoomPercents(10, 10, 62, 100); - scene->_object4.postInit(); - scene->_object4.setVisage(5001); - scene->_object4.setStrip2(2); - scene->_object4.animate(ANIM_MODE_8, 0, NULL); - scene->_object4.setPosition(Common::Point(10, 18)); - scene->_object4.fixPriority(10); - scene->_object4.changeZoom(100); - scene->_object4.hide(); - break; - case 1: { - NpcMover *mover = new NpcMover(); - Common::Point pt(107, 65); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 2: - scene->_object3._moveDiff.y = 1; - scene->_object3.fixPriority(10); - scene->_object4.setPosition(Common::Point(scene->_object3._position.x, scene->_object3._position.y + 15)); - scene->_object4.show(); - setDelay(30); - break; - case 3: { - NpcMover *mover = new NpcMover(); - Common::Point pt(107, 92); - scene->_object3.addMover(mover, &pt, this); - break; - } - case 4: - scene->_object4.remove(); - _globals->_sceneManager.changeScene(2100); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Action4::signal() { - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - scene->_object1.animate(ANIM_MODE_6, this); - break; - case 1: - scene->_object1.hide(); - setDelay(300); - break; - case 2: - _globals->_soundHandler.play(252); - scene->_object1.show(); - scene->_object1.setStrip(3); - scene->_object1.setFrame(1); - scene->_object1.animate(ANIM_MODE_5, this); - break; - case 3: - scene->_object1.setStrip(4); - scene->_object1.animate(ANIM_MODE_8, 0, NULL); - _globals->setFlag(81); - _globals->_player.enableControl(); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Action5::signal() { - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: { - NpcMover *playerMover = new NpcMover(); - Common::Point pt(88, 121); - _globals->_player.addMover(playerMover, &pt, this); - break; - } - case 1: - _globals->_player.checkAngle(&scene->_object1); - _globals->_soundHandler.play(252); - scene->_object1.setStrip(2); - scene->_stripManager.start(7015, this); - break; - case 2: - scene->_object1.setStrip(1); - scene->_object1.setFrame(4); - scene->_object1.animate(ANIM_MODE_6, this); - break; - case 3: { - scene->_object1.remove(); - NpcMover *mover = new NpcMover(); - Common::Point pt(31, 94); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 4: { - NpcMover *mover = new NpcMover(); - Common::Point pt(11, 94); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 5: { - _globals->_player.fixPriority(10); - NpcMover *mover = new NpcMover(); - Common::Point pt(11, 89); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 6: { - NpcMover *mover = new NpcMover(); - Common::Point pt(41, 89); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 7: - _globals->clearFlag(36); - _globals->clearFlag(37); - _globals->clearFlag(72); - _globals->clearFlag(13); - _globals->_sceneManager.changeScene(2100); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Action6::signal() { - // Quinn walks from the lander to the seaside - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: { - NpcMover *mover = new NpcMover(); - Common::Point pt(12, 91); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: { - NpcMover *mover = new NpcMover(); - Common::Point pt(8, 91); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: { - NpcMover *mover = new NpcMover(); - Common::Point pt(31, 96); - _globals->_player.addMover(mover, &pt, this); - _globals->_player.fixPriority(-1); - break; - } - case 4: { - NpcMover *mover = new NpcMover(); - Common::Point pt(83, 117); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 5: { - NpcMover *mover = new NpcMover(); - Common::Point pt(95, 121); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 6: - _globals->_player.setStrip(3); - _globals->_player.setFrame(1); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Action7::signal() { - switch (_actionIndex++) { - case 0: - _globals->_player.disableControl(); - setDelay(3); - break; - case 1: - setDelay(3); - break; - case 2: { - NpcMover *mover = new NpcMover(); - Common::Point pt(31, 94); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: { - NpcMover *mover = new NpcMover(); - Common::Point pt(11, 94); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 4: { - _globals->_player.fixPriority(10); - NpcMover *mover = new NpcMover(); - Common::Point pt(11, 89); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 5: { - NpcMover *mover = new NpcMover(); - Common::Point pt(41, 89); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 6: - if (_globals->getFlag(13)) - _globals->_sceneManager.changeScene(2280); - else - _globals->_sceneManager.changeScene(2320); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Hotspot1::doAction(int action) { - if (action == CURSOR_LOOK) - SceneItem::display2(7000, 2); - else - SceneHotspot::doAction(action); -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::Object1::doAction(int action) { - // Skeenar - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_TRANSLATOR: - _globals->_player.disableControl(); - RING_INVENTORY._translator._sceneNumber = 7000; - - if ((RING_INVENTORY._waldos._sceneNumber != 7000) && (RING_INVENTORY._jar._sceneNumber != 7000)) { - scene->_sceneMode = 7004; - scene->setAction(&scene->_sequenceManager, scene, 7004, &_globals->_player, this, NULL); - } else if (RING_INVENTORY._waldos._sceneNumber != 7000) { - scene->_sceneMode = 7011; - scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, NULL); - } else if (RING_INVENTORY._jar._sceneNumber != 7000) { - scene->_sceneMode = 7012; - scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, NULL); - } else { - scene->_sceneMode = 7015; - scene->setAction(&scene->_sequenceManager, scene, 7017, &_globals->_player, NULL); - } - break; - case OBJECT_WALDOS: - _globals->_player.disableControl(); - RING_INVENTORY._waldos._sceneNumber = 7000; - if (RING_INVENTORY._translator._sceneNumber == 7000) { - if (RING_INVENTORY._jar._sceneNumber == 7000) { - scene->_sceneMode = 7015; - scene->setAction(&scene->_sequenceManager, scene, 7015, &_globals->_player, NULL); - } else { - scene->_sceneMode = 7006; - scene->setAction(&scene->_sequenceManager, scene, 7006, &_globals->_player, NULL); - } - } else { - scene->_sceneMode = 7009; - scene->setAction(&scene->_sequenceManager, scene, 7009, &_globals->_player, NULL); - } - break; - case OBJECT_JAR: - _globals->_player.disableControl(); - RING_INVENTORY._jar._sceneNumber = 7000; - - if (RING_INVENTORY._translator._sceneNumber == 7000) { - if (RING_INVENTORY._waldos._sceneNumber != 7000) { - scene->_sceneMode = 7007; - scene->setAction(&scene->_sequenceManager, scene, 7007, &_globals->_player, &scene->_object1, NULL); - } else { - scene->_sceneMode = 7015; - scene->setAction(&scene->_sequenceManager, scene, 7016, &_globals->_player, NULL); - } - } else { - scene->_sceneMode = 7008; - scene->setAction(&scene->_sequenceManager, scene, 7008, &_globals->_player, NULL); - } - break; - case CURSOR_LOOK: - if (_globals->getFlag(81)) - SceneItem::display2(7000, 1); - else - SceneItem::display2(7000, 0); - break; - case CURSOR_USE: - if (_globals->getFlag(81)) { - RING_INVENTORY._stasisBox2._sceneNumber = 1; - _globals->_player.disableControl(); - scene->setAction(&scene->_action5); - } else { - SceneItem::display2(7000, 5); - } - break; - case CURSOR_TALK: - if (_globals->getFlag(81)) { - RING_INVENTORY._stasisBox2._sceneNumber = 1; - _globals->_player.disableControl(); - scene->setAction(&scene->_action5); - } else if (_globals->getFlag(52)) { - scene->_sceneMode = 7005; - scene->setAction(&scene->_sequenceManager, scene, 7013, NULL); - } else if (_globals->getFlag(13)) { - scene->_sceneMode = 7002; - scene->setAction(&scene->_sequenceManager, scene, 7014, NULL); - } else { - scene->_sceneMode = 7002; - scene->setAction(&scene->_sequenceManager, scene, 7002, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::dispatch() { - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - - if (!_action) { - if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 8) { - if (!_globals->getFlag(13)) { - _globals->_player.disableControl(); - _globals->_player.addMover(NULL); - SceneItem::display2(7000, 3); - _sceneMode = 7001; - setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL); - } else if (!_globals->getFlag(52)) { - setAction(&_action2); - } else { - _globals->_player.disableControl(); - _sceneMode = 7003; - setAction(&scene->_sequenceManager, this, 7003, &_globals->_player, NULL); - } - } - if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 9) - scene->setAction(&scene->_action7); - } - Scene::dispatch(); -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::postInit(SceneObjectList *OwnerList) { - loadScene(7000); - Scene::postInit(); - setZoomPercents(93, 25, 119, 55); - _stripManager.addSpeaker(&_speakerSKText); - _stripManager.addSpeaker(&_speakerSKL); - _stripManager.addSpeaker(&_speakerQText); - _stripManager.addSpeaker(&_speakerQL); - _stripManager.addSpeaker(&_speakerQR); - - _speakerSKText._npc = &_object1; - _speakerQText._npc = &_globals->_player; - - _object5.postInit(); - _object5.setVisage(7001); - _object5.setStrip2(1); - _object5.animate(ANIM_MODE_2, NULL); - _object5.setPosition(Common::Point(49, 147)); - _object5.fixPriority(1); - - _object6.postInit(); - _object6.setVisage(7001); - _object6.setStrip2(2); - _object6.animate(ANIM_MODE_2, NULL); - _object6.setPosition(Common::Point(160, 139)); - _object6.fixPriority(1); - - _object7.postInit(); - _object7.setVisage(7001); - _object7.setStrip2(3); - _object7.animate(ANIM_MODE_2, NULL); - _object7.setPosition(Common::Point(272, 129)); - _object7.fixPriority(1); - - _object8.postInit(); - _object8.setVisage(7001); - _object8.setStrip2(4); - _object8.animate(ANIM_MODE_2, NULL); - _object8.setPosition(Common::Point(176, 175)); - _object8.fixPriority(1); - - if (_globals->getFlag(72)) { - _object3.postInit(); - _object3.setVisage(5001); - _object3.setStrip2(1); - _object3.setPosition(Common::Point(107, 92)); - _object3.changeZoom(100); - _object3.fixPriority(10); - - _object1.postInit(); - _object1.setVisage(7003); - if (_globals->getFlag(81)) - _object1.setStrip(4); - else - _object1.setStrip(2); - _object1.setPosition(Common::Point(87, 129)); - _object1._numFrames = 4; - _object1.changeZoom(45); - _object1.animate(ANIM_MODE_8, 0, NULL); - _globals->_sceneItems.push_back(&_object1); - } - _soundHandler.play(251); - if (_globals->_sceneManager._previousScene == 2100) { - if (_globals->getFlag(72)) { - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - SceneObjectWrapper *wrapper = new SceneObjectWrapper(); - _globals->_player.setObjectWrapper(wrapper); - _globals->_player.setPosition(Common::Point(57, 94)); - _globals->_player.changeZoom(-1); - _globals->_player.fixPriority(10); - if (_globals->getFlag(81)) { - setAction(&_action4); - } else { - _object1.setPosition(Common::Point(151, 182)); - _object1.changeZoom(100); - setAction(&_action1); - } - } else { - _globals->_soundHandler.play(250); - _globals->setFlag(72); - - _object3.postInit(); - _object3.setVisage(5001); - _object3.setStrip2(1); - _object3.animate(ANIM_MODE_1, NULL); - _object3.setPosition(Common::Point(307, 0)); - _object3.changeZoom(-1); - setAction(&_action3); - } - } else if (_globals->_sceneManager._previousScene == 2280) { - _globals->_player.postInit(); - _globals->_player.setVisage(2170); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setPosition(Common::Point(57, 94)); - _globals->_player.changeZoom(-1); - _globals->_player.fixPriority(10); - _globals->_player.disableControl(); - _sceneMode = 7001; - setAction(&_action6, this); - if (!_globals->getFlag(81)) { - _object1.setPosition(Common::Point(151, 182)); - _object1.changeZoom(100); - } - _object8.remove(); - _object9.remove(); - } else if (_globals->_sceneManager._previousScene == 2320) { - _globals->_player.postInit(); - _globals->_player.setVisage(0); - _globals->_player.animate(ANIM_MODE_1, NULL); - SceneObjectWrapper *wrapper = new SceneObjectWrapper(); - _globals->_player.setObjectWrapper(wrapper); - _globals->_player.setPosition(Common::Point(57, 94)); - _globals->_player.changeZoom(-1); - _globals->_player.fixPriority(10); - _sceneMode = 7001; - setAction(&_action6, this); - } else { - _globals->setFlag(72); - - _object3.postInit(); - _object3.setVisage(5001); - _object3.setStrip2(1); - _object3.setPosition(Common::Point(307, 0)); - _soundHandler.play(151); - _soundHandler.holdAt(true); - _globals->_soundHandler.play(250); - setAction(&_action3); - } - - _hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); - _globals->_sceneItems.push_back(&_hotspot1); -} - -/*--------------------------------------------------------------------------*/ - -void Scene7000::signal() { - Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; - switch (_sceneMode) { - case 7001: - case 7002: - case 7004: - case 7005: - case 7006: - case 7007: - case 7008: - case 7009: - _globals->_player.enableControl(); - break; - case 7003: - _sceneMode = 7001; - setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL); - break; - case 7011: - _sceneMode = 7005; - setAction(&scene->_sequenceManager, this, 7005, &_globals->_player, NULL); - break; - case 7012: - _sceneMode = 7005; - setAction(&scene->_sequenceManager, this, 7012, &_globals->_player, NULL); - break; - case 7015: - setAction(&_action4); - break; - } -} - - -/*-------------------------------------------------------------------------- - * Scene 7100 - Underwater: swimming - * - *--------------------------------------------------------------------------*/ - -void Scene7100::Action3::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1); - break; - case 1: { - Common::Point pt(433, 308); - NpcMover *mover = new NpcMover(); - scene->_object4.addMover(mover, &pt, this); - break; - } - case 2: - scene->_object4.remove(); - remove(); - break; - } -} - -void Scene7100::Action4::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(1) + 1); - break; - case 1: { - scene->_object5.setStrip(3); - Common::Point pt(85, 52); - NpcMover *mover = new NpcMover(); - scene->_object5.addMover(mover, &pt, this); - break; - } - case 2: { - scene->_object5.setStrip(4); - Common::Point pt(20, 52); - NpcMover *mover = new NpcMover(); - scene->_object5.addMover(mover, &pt, this); - break; - } - case 3: - _actionIndex = 0; - setDelay(1); - break; - } -} - -void Scene7100::Action5::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1); - break; - case 1: { - Common::Point pt(59, 151); - NpcMover *mover = new NpcMover(); - scene->_object9.addMover(mover, &pt, this); - break; - } - case 2: { - scene->_object9.setStrip2(1); - Common::Point pt(127, 144); - NpcMover *mover = new NpcMover(); - scene->_object9.addMover(mover, &pt, this); - break; - } - case 3: { - scene->_object9.setStrip2(2); - scene->_object9.fixPriority(180); - Common::Point pt(8, 181); - NpcMover *mover = new NpcMover(); - scene->_object9.addMover(mover, &pt, this); - break; - } - case 4: { - scene->_object9.remove(); - remove(); - } - } -} - -void Scene7100::Action6::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1); - scene->_object10.fixPriority(8); - scene->_object10.setPosition(Common::Point(155, 187)); - - scene->_object11.fixPriority(8); - scene->_object11.setPosition(Common::Point(155, 190)); - - scene->_object12.fixPriority(8); - scene->_object12.setPosition(Common::Point(151, 193)); - break; - case 1: { - Common::Point pt1(167, 187); - NpcMover *mover1 = new NpcMover(); - scene->_object10.addMover(mover1, &pt1, this); - - Common::Point pt2(165, 185); - NpcMover *mover2 = new NpcMover(); - scene->_object11.addMover(mover2, &pt2, NULL); - - Common::Point pt3(163, 183); - NpcMover *mover3 = new NpcMover(); - scene->_object12.addMover(mover3, &pt3, NULL); - break; - } - case 2: { - scene->_object10.setStrip2(6); - Common::Point pt1(91, 187); - NpcMover *mover1 = new NpcMover(); - scene->_object10.addMover(mover1, &pt1, this); - - scene->_object11.setStrip2(6); - scene->_object11.fixPriority(50); - Common::Point pt2(89, 185); - NpcMover *mover2 = new NpcMover(); - scene->_object11.addMover(mover2, &pt2, NULL); - - scene->_object12.setStrip2(6); - scene->_object12.fixPriority(50); - Common::Point pt3(87, 183); - NpcMover *mover3 = new NpcMover(); - scene->_object12.addMover(mover3, &pt3, NULL); - break; - } - case 3: - _actionIndex = 0; - setDelay(1); - break; - } -} - -void Scene7100::Action7::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1); - break; - case 1: { - scene->_object13.setStrip2(8); - Common::Point pt(324, 87); - NpcMover *mover = new NpcMover(); - scene->_object13.addMover(mover, &pt, this); - break; - } - case 2: { - scene->_object13.setStrip2(2); - Common::Point pt(524, 104); - NpcMover *mover = new NpcMover(); - scene->_object13.addMover(mover, &pt, NULL); - break; - } - case 3: - _actionIndex = 0; - setDelay(1); - break; - } -} - -void Scene7100::Action8::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1); - break; - case 1: { - scene->_object17.setStrip2(4); - scene->_object18.setStrip2(4); - scene->_object19.setStrip2(4); - - Common::Point pt1(482, 153); - NpcMover *mover1 = new NpcMover(); - scene->_object17.addMover(mover1, &pt1, this); - - Common::Point pt2(480, 146); - NpcMover *mover2 = new NpcMover(); - scene->_object18.addMover(mover2, &pt2, NULL); - - Common::Point pt3(470, 153); - NpcMover *mover3 = new NpcMover(); - scene->_object19.addMover(mover3, &pt3, NULL); - break; - } - case 2: { - scene->_object17.setStrip2(3); - scene->_object18.setStrip2(3); - scene->_object19.setStrip2(3); - - Common::Point pt1(506, 186); - NpcMover *mover1 = new NpcMover(); - scene->_object17.addMover(mover1, &pt1, this); - - Common::Point pt2(502, 179); - NpcMover *mover2 = new NpcMover(); - scene->_object18.addMover(mover2, &pt2, NULL); - - Common::Point pt3(495, 184); - NpcMover *mover3 = new NpcMover(); - scene->_object19.addMover(mover3, &pt3, NULL); - break; - } - case 3: { - scene->_object17.setStrip2(4); - scene->_object18.setStrip2(4); - scene->_object19.setStrip2(4); - - Common::Point pt1(386, 167); - NpcMover *mover1 = new NpcMover(); - scene->_object17.addMover(mover1, &pt1, this); - - Common::Point pt2(379, 161); - NpcMover *mover2 = new NpcMover(); - scene->_object18.addMover(mover2, &pt2, NULL); - - Common::Point pt3(373, 167); - NpcMover *mover3 = new NpcMover(); - scene->_object19.addMover(mover3, &pt3, NULL); - break; - } - case 4: { - scene->_object17.setStrip2(3); - scene->_object18.setStrip2(3); - scene->_object19.setStrip2(3); - - Common::Point pt1(479, 193); - NpcMover *mover1 = new NpcMover(); - scene->_object17.addMover(mover1, &pt1, this); - - Common::Point pt2(473, 187); - NpcMover *mover2 = new NpcMover(); - scene->_object18.addMover(mover2, &pt2, NULL); - - Common::Point pt3(466, 192); - NpcMover *mover3 = new NpcMover(); - scene->_object19.addMover(mover3, &pt3, NULL); - break; - } - case 5: { - Common::Point pt1(552, 183); - NpcMover *mover1 = new NpcMover(); - scene->_object17.addMover(mover1, &pt1, this); - - Common::Point pt2(552, 178); - NpcMover *mover2 = new NpcMover(); - scene->_object18.addMover(mover2, &pt2, NULL); - - Common::Point pt3(541, 183); - NpcMover *mover3 = new NpcMover(); - scene->_object19.addMover(mover3, &pt3, NULL); - - _actionIndex = 0; - break; - } - } -} - -void Scene7100::Action9::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1); - break; - case 1: { - scene->_object24.setStrip2(1); - Common::Point pt(64, 159); - NpcMover *mover = new NpcMover(); - scene->_object24.addMover(mover, &pt, this); - break; - } - case 2: { - scene->_object24.setStrip2(2); - scene->_object24.fixPriority(160); - Common::Point pt(34, 159); - NpcMover *mover = new NpcMover(); - scene->_object24.addMover(mover, &pt, this); - break; - } - case 3: { - scene->_object24.setStrip2(1); - Common::Point pt(64, 159); - NpcMover *mover = new NpcMover(); - scene->_object24.addMover(mover, &pt, this); - break; - } - case 4: { - scene->_object24.setStrip2(2); - scene->_object24.fixPriority(180); - Common::Point pt(-12, 182); - NpcMover *mover = new NpcMover(); - scene->_object24.addMover(mover, &pt, this); - break; - } - case 5: { - _actionIndex = 0; - setDelay(1); - break; - } - } -} - -void Scene7100::Action10::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(1000); - break; - case 1: { - Common::Point pt(610, -60); - NpcMover *mover = new NpcMover(); - scene->_object25.addMover(mover, &pt, this); - break; - } - case 2: - scene->_object25.remove(); - remove(); - break; - } -} - -void Scene7100::Action11::signal() { - Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: { - Common::Point pt(154, 175); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - ObjectMover2 *mover2 = new ObjectMover2(); - scene->_object1.addMover(mover2, 25, 35, &_globals->_player); - break; - } - case 2: { - Common::Point pt(700, 155); - NpcMover *mover = new NpcMover(); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 3: - _globals->_sceneManager.changeScene(7200); - remove(); - break; - } -} - -void Scene7100::postInit(SceneObjectList *OwnerList) { - loadScene(7100); - Scene::postInit(); - setZoomPercents(60, 85, 200, 100); - - _object2.postInit(); - _object2.setVisage(7161); - _object2.animate(ANIM_MODE_2, NULL); - _object2.setPosition(Common::Point(10, 140)); - _object2._numFrames = 1; - _object2.fixPriority(180); - _object2.setAction(&_action1, NULL); - - _object3.postInit(); - _object3.setVisage(7161); - _object3.animate(ANIM_MODE_2, NULL); - _object3.setPosition(Common::Point(34, 115)); - _object3._numFrames = 1; - _object3.fixPriority(180); - _object3.setAction(&_action2, NULL); - - _object4.postInit(); - _object4.setVisage(7164); - _object4.animate(ANIM_MODE_2, NULL); - _object4.setPosition(Common::Point(-10, 159)); - _object4._numFrames = 2; - _object4.fixPriority(250); - _object4.setAction(&_action3, NULL); - - _object5.postInit(); - _object5.setVisage(7162); - _object5.setStrip(3); - _object5.animate(ANIM_MODE_2, NULL); - _object5.setPosition(Common::Point(20, 52)); - _object5.setAction(&_action4, NULL); - - _object9.postInit(); - _object9.setVisage(7160); - _object5.setStrip(2); - _object9.animate(ANIM_MODE_2, NULL); - _object9.setPosition(Common::Point(110, 168)); - _object9._numFrames = 2; - _object9.fixPriority(16); - _object9.setAction(&_action5, NULL); - - _object13.postInit(); - _object13.setVisage(7161); - _object13.setStrip(8); - _object13.animate(ANIM_MODE_2, NULL); - _object13.setPosition(Common::Point(524, 104)); - _object13._numFrames = 5; - _object13.fixPriority(250); - _object13.setAction(&_action7, NULL); - - _object17.postInit(); - _object17.setVisage(7160); - _object17.setStrip(3); - _object17.animate(ANIM_MODE_2, NULL); - _object17.setPosition(Common::Point(552, 183)); - _object17._numFrames = 4; - _object17._moveDiff.x = 12; - _object17._moveDiff.y = 12; - _object17.setAction(&_action8, NULL); - - _object18.postInit(); - _object18.setVisage(7160); - _object18.setStrip(3); - _object18.animate(ANIM_MODE_2, NULL); - _object18.setPosition(Common::Point(552, 178)); - _object18._numFrames = 4; - _object18._moveDiff.x = 12; - _object18._moveDiff.y = 12; - - _object19.postInit(); - _object19.setVisage(7160); - _object19.setStrip(3); - _object19.animate(ANIM_MODE_2, NULL); - _object19.setPosition(Common::Point(541, 183)); - _object19._numFrames = 4; - _object19._moveDiff.x = 12; - _object19._moveDiff.y = 12; - - _object24.postInit(); - _object24.setVisage(7162); - _object24.setStrip(1); - _object24.animate(ANIM_MODE_2, NULL); - _object24.setPosition(Common::Point(-12, 182)); - _object24._numFrames = 4; - _object24.fixPriority(180); - _object24.setAction(&_action9, NULL); - - _object25.postInit(); - _object25.setVisage(7163); - _object25.animate(ANIM_MODE_2, NULL); - _object25.setPosition(Common::Point(551, 145)); - _object25._numFrames = 5; - _object25.fixPriority(160); - _object25.setAction(&_action10, NULL); - - // Swimmer 1 - _globals->_player.postInit(); - _globals->_player.setVisage(7101); - _globals->_player.animate(ANIM_MODE_2, NULL); - _globals->_player._moveDiff.x = 4; - _globals->_player._moveDiff.y = 2; - _globals->_player.setPosition(Common::Point(135, 135)); - _globals->_player.fixPriority(200); - _globals->_player.disableControl(); - - // Swimmer 2 - _object1.postInit(); - _object1.setVisage(7110); - _object1.animate(ANIM_MODE_1, NULL); - _object1._moveDiff.x = 4; - _object1._moveDiff.y = 2; - _object1.setPosition(Common::Point(100, 100)); - - setAction(&_action11); - _soundHandler1.play(270); - _soundHandler2.play(275); - _globals->_soundHandler.play(270); -} -/*-------------------------------------------------------------------------- - * Scene 7200 - Underwater: Entering the cave - * - *--------------------------------------------------------------------------*/ - -void Scene7200::Action1::signal() { - Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(15); - break; - case 1: { - PlayerMover *mover1 = new PlayerMover(); - Common::Point pt1(165, 147); - scene->_swimmer.addMover(mover1, &pt1, this); - Common::Point pt2(207, 138); - PlayerMover *mover2 = new PlayerMover(); - _globals->_player.addMover(mover2, &pt2, this); - break; - } - case 2: - break; - case 3: - _globals->_sceneManager.changeScene(7300); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7200::Action2::signal() { - Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(3); - break; - case 1: { - scene->_object2.fixPriority(25); - scene->_object3.fixPriority(25); - scene->_object4.fixPriority(25); - scene->_object2.setStrip(1); - scene->_object3.setStrip(1); - scene->_object4.setStrip(1); - NpcMover *mover1 = new NpcMover(); - Common::Point pt1(54, 90); - scene->_object2.addMover(mover1, &pt1, this); - NpcMover *mover2 = new NpcMover(); - Common::Point pt2(56, 85); - scene->_object3.addMover(mover2, &pt2, NULL); - NpcMover *mover3 = new NpcMover(); - Common::Point pt3(54, 80); - scene->_object4.addMover(mover3, &pt3, NULL); - break; - } - case 2: { - scene->_object2.fixPriority(160); - scene->_object3.fixPriority(160); - scene->_object4.fixPriority(160); - scene->_object2.setStrip(2); - scene->_object3.setStrip(2); - scene->_object4.setStrip(2); - NpcMover *mover1 = new NpcMover(); - Common::Point pt1(10, 89); - scene->_object2.addMover(mover1, &pt1, this); - NpcMover *mover2 = new NpcMover(); - Common::Point pt2(12, 84); - scene->_object3.addMover(mover2, &pt2, NULL); - NpcMover *mover3 = new NpcMover(); - Common::Point pt3(10, 79); - scene->_object4.addMover(mover3, &pt3, NULL); - break; - } - case 3: - _actionIndex = 0; - setDelay(1); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7200::postInit(SceneObjectList *OwnerList) { - loadScene(7200); - Scene::postInit(); - _object2.postInit(); - _object2.setVisage(7160); - _object2.animate(ANIM_MODE_2, NULL); - _object2.setZoom(10); - _object2.setPosition(Common::Point(53, 88)); - _object2.setAction(&_action2); - - _object3.postInit(); - _object3.setVisage(7160); - _object3.animate(ANIM_MODE_2, NULL); - _object3.setZoom(10); - _object3.setPosition(Common::Point(55, 83)); - - _object4.postInit(); - _object4.setVisage(7160); - _object4.animate(ANIM_MODE_2, NULL); - _object4.setZoom(10); - _object4.setPosition(Common::Point(57, 78)); - - _object5.postInit(); - _object5.setVisage(7201); - _object5.setPosition(Common::Point(300, 172)); - _object5.setPriority(172); - _object5.animate(ANIM_MODE_2, NULL); - _object5._numFrames = 3; - - _object6.postInit(); - _object6.setVisage(7201); - _object6.setStrip2(3); - _object6.setPosition(Common::Point(144, 97)); - _object6.setPriority(199); - _object6.animate(ANIM_MODE_2, NULL); - _object6._numFrames = 3; - - _object7.postInit(); - _object7.setVisage(7201); - _object7.setStrip2(4); - _object7.setPosition(Common::Point(115, 123)); - _object7.setPriority(199); - _object7.animate(ANIM_MODE_2, NULL); - _object7._numFrames = 3; - - _object8.postInit(); - _object8.setVisage(7201); - _object8.setStrip2(6); - _object8.setPosition(Common::Point(140, 173)); - _object8.setPriority(199); - _object8.animate(ANIM_MODE_2, NULL); - _object8._numFrames = 3; - - _object9.postInit(); - _object9.setVisage(7201); - _object9.setStrip2(7); - _object9.setPosition(Common::Point(215, 196)); - _object9.setPriority(199); - _object9.animate(ANIM_MODE_2, NULL); - _object9._numFrames = 3; - - // Orange swimmer - _globals->_player.postInit(); - _globals->_player.setVisage(7110); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setZoom(50); - _globals->_player.setPosition(Common::Point(-18, 16)); - _globals->_player.disableControl(); - - _swimmer.postInit(); - _swimmer.setVisage(7101); - _swimmer.animate(ANIM_MODE_1, NULL); - _swimmer.setObjectWrapper(new SceneObjectWrapper()); - _swimmer.setZoom(50); - _swimmer.setPosition(Common::Point(-8, 16)); - - setAction(&_action1); - _soundHandler.play(271); -} - -/*-------------------------------------------------------------------------- - * Scene 7300 - Underwater: Lord Poria - * - *--------------------------------------------------------------------------*/ - -void Scene7300::Action1::signal() { - Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - case 1: - case 3: - setDelay(30); - break; - case 2: - scene->_stripManager.start(7300, this); - break; - case 4: { - NpcMover *mover = new NpcMover(); - Common::Point pt(102, 122); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 5: - _globals->_player.setStrip(2); - _globals->_player.setFrame(1); - _globals->_player.animate(ANIM_MODE_5, this); - break; - case 6: - _globals->_player.setStrip(3); - _globals->_player._numFrames = 5; - _globals->_player.animate(ANIM_MODE_2, this); - if (RING_INVENTORY._translator._sceneNumber == 1) - scene->_stripManager.start(7310, this); - else - scene->_stripManager.start(7305, this); - break; - case 7: - setDelay(3); - _globals->_soundHandler.fadeOut(NULL); - break; - case 8: - _globals->_sceneManager.changeScene(2280); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7300::Action2::signal() { - Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: - NpcMover *mover1 = new NpcMover(); - Common::Point pt(_globals->_randomSource.getRandomNumber(3) + 203, _globals->_randomSource.getRandomNumber(3) + 96); - scene->_object3.addMover(mover1, &pt, this); - _actionIndex = 0; - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7300::Action3::signal() { - Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; - - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: - NpcMover *mover1 = new NpcMover(); - Common::Point pt(_globals->_randomSource.getRandomNumber(5) + 76, _globals->_randomSource.getRandomNumber(5) + 78); - scene->_object1.addMover(mover1, &pt, this); - _actionIndex = 0; - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7300::Action4::signal() { - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: - _actionIndex = 0; - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7300::dispatch() { - Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; - scene->_object4.setPosition(Common::Point(scene->_object3._position.x + 15, scene->_object3._position.y + 61)); - scene->_object2.setPosition(Common::Point(scene->_object1._position.x + 1, scene->_object1._position.y - 31)); - - Scene::dispatch(); -} - -/*--------------------------------------------------------------------------*/ - -void Scene7300::postInit(SceneObjectList *OwnerList) { - loadScene(7300); - - Scene::postInit(); - setZoomPercents(60, 85, 200, 100); - - _globals->setFlag(52); - _globals->setFlag(24); - _globals->setFlag(109); - - _stripManager.addSpeaker(&_speakerPOR); - _stripManager.addSpeaker(&_speakerPOText); - _stripManager.addSpeaker(&_speakerSKText); - _stripManager.addSpeaker(&_speakerQU); - - _speakerSKText.setTextPos(Common::Point(100, 20)); - _speakerPOText.setTextPos(Common::Point(100, 160)); - - _object4.postInit(); - _object4.setVisage(7311); - _object4.setStrip(1); - _object4.setFrame(1); - _object4.setPosition(Common::Point(218, 157)); - - _object3.postInit(); - _object3.setVisage(7311); - _object3.setStrip(2); - _object3.setFrame(1); - _object3.setPosition(Common::Point(203, 96)); - _object3._numFrames = 2; - _object3._moveDiff = Common::Point(1, 1); - _object3.animate(ANIM_MODE_8, 0, NULL); - _object3._moveRate = 2; - _object3.setAction(&_action2); - - _globals->_player.postInit(); - _globals->_player.setVisage(7305); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setPosition(Common::Point(-100, 100)); - _globals->_player.disableControl(); - - _object1.postInit(); - _object1.setVisage(7312); - _object1.animate(ANIM_MODE_1, NULL); - _object1._moveDiff = Common::Point(1, 1); - _object1.setPosition(Common::Point(76, 78)); - _object1._moveRate = 1; - _object1.setAction(&_action3); - - _object2.postInit(); - _object2.setVisage(7312); - _object2.setStrip(2); - _object2.animate(ANIM_MODE_2, NULL); - _object2.setPosition(Common::Point(77, 47)); - _object2.fixPriority(190); - - _object5.postInit(); - _object5.setVisage(7300); - _object5.setPosition(Common::Point(106, 45)); - _object5.animate(ANIM_MODE_2, NULL); - _object5._numFrames = 5; - - _object6.postInit(); - _object6.setVisage(7300); - _object6.setStrip2(2); - _object6.setPosition(Common::Point(283, 193)); - _object6.animate(ANIM_MODE_2, NULL); - _object6._numFrames = 3; - - _object7.postInit(); - _object7.setVisage(7300); - _object7.setStrip(4); - _object7.setPosition(Common::Point(295, 77)); - _object7.animate(ANIM_MODE_2, NULL); - _object7._numFrames = 3; - - _object8.postInit(); - _object8.setVisage(7300); - _object8.setStrip(5); - _object8.setPosition(Common::Point(1, 147)); - _object8.animate(ANIM_MODE_2, NULL); - _object8._numFrames = 2; - - setAction(&_action1); - _globals->_soundHandler.play(272); -} - -/*-------------------------------------------------------------------------- - * Scene 7600 - Floating Buildings: Outside - * - *--------------------------------------------------------------------------*/ - -void Scene7600::Action1::signal() { - switch (_actionIndex++) { - case 0: - setDelay(120); - break; - case 1: { - PlayerMover *mover = new PlayerMover(); - Common::Point pt(389, 57); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - _globals->_sceneManager.changeScene(7700); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7600::Action2::signal() { - switch (_actionIndex++) { - case 0: - setDelay(30); - break; - case 1: { - NpcMover *mover = new NpcMover(); - Common::Point pt(-30, 195); - _globals->_player.addMover(mover, &pt, this); - break; - } - case 2: - _globals->_sceneManager.changeScene(2320); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene7600::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - setZoomPercents(100, 0, 200, 100); - - _object2.postInit(); - _object2.setVisage(7601); - _object2.setStrip(1); - _object2.animate(ANIM_MODE_2, NULL); - _object2.setPosition(Common::Point(48, 135)); - _object2.fixPriority(1); - - _object3.postInit(); - _object3.setVisage(7601); - _object3.setStrip(2); - _object3.animate(ANIM_MODE_2, NULL); - _object3.setPosition(Common::Point(158, 136)); - _object3.fixPriority(1); - - _object4.postInit(); - _object4.setVisage(7601); - _object4.setStrip(3); - _object4.animate(ANIM_MODE_2, NULL); - _object4.setPosition(Common::Point(293, 141)); - _object4.fixPriority(1); - - _object5.postInit(); - _object5.setVisage(7601); - _object5.setStrip(4); - _object5.animate(ANIM_MODE_2, NULL); - _object5.setPosition(Common::Point(405, 143)); - _object5.fixPriority(1); - - _object6.postInit(); - _object6.setVisage(7601); - _object6.setStrip(5); - _object6.animate(ANIM_MODE_2, NULL); - _object6.setPosition(Common::Point(379, 191)); - _object6.fixPriority(1); - - _globals->_player.postInit(); - _globals->_player.setVisage(2333); - _globals->_player.animate(ANIM_MODE_1, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); - _globals->_player.setStrip(1); - _globals->_player._moveDiff = Common::Point(16, 16); - _globals->_player.changeZoom(-1); - _globals->_player.disableControl(); - - if (_globals->_sceneManager._previousScene == 7700) { - _globals->_player.setPosition(Common::Point(389, 57)); - setAction(&_action2); - } else { - _globals->_player.setPosition(Common::Point(-50, 195)); - setAction(&_action1); - } - _sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y); - loadScene(7600); - _soundHandler2.play(255); - _soundHandler1.play(251); -} - -/*-------------------------------------------------------------------------- - * Scene 7700 - Floating Buildings: In the lab - * - *--------------------------------------------------------------------------*/ - -void Scene7700::Action1::signal() { - SceneObjectExt *fmtObj = (SceneObjectExt *) _endHandler; - switch (_actionIndex++) { - case 0: { - PlayerMover *mover1 = new PlayerMover(); - Common::Point pt = Common::Point(fmtObj->_position.x, fmtObj->_position.y + 30); - _globals->_player.addMover(mover1, &pt, this); - break; - } - case 1: - _globals->_player.checkAngle(fmtObj); - if (fmtObj->_state == 0) - fmtObj->animate(ANIM_MODE_5, this); - else - fmtObj->animate(ANIM_MODE_6, this); - break; - case 2: - remove(); - break; - } -} - -void Scene7700::Action2::signal() { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - switch (_actionIndex++) { - case 0: - case 2: - setDelay(_globals->_randomSource.getRandomNumber(60) + 60); - break; - case 1: - scene->_prof.animate(ANIM_MODE_7, 0, NULL); - setDelay(20); - break; - case 3: - scene->_prof.animate(ANIM_MODE_6, this); - _actionIndex = 0; - break; - } -} - -void Scene7700::Action3::signal() { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - switch (_actionIndex++) { - case 0: - scene->_object15.animate(ANIM_MODE_5, this); - break; - case 1: - scene->_sceneItem10.remove(); - scene->_object15.remove(); - scene->_sceneHotspot8.remove(); - scene->_sceneHotspot9.remove(); - scene->_object19.remove(); - setDelay(60); - // No break on purpose! - case 2: - scene->_soundHandler.play(260); - scene->_object8.setVisage(7703); - scene->_object8.setPosition(Common::Point(177, 97)); - scene->_object8.setStrip2(3); - scene->_object8.animate(ANIM_MODE_5, this); - scene->_object8._numFrames = 3; - break; - case 3: - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene7700::Action4::signal() { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - switch (_actionIndex++) { - case 2: - scene->_object13.remove(); - // No break on purpose! - case 0: - setDelay(3); - break; - case 1: - CursorMan.showMouse(false); - scene->_object13.postInit(); - scene->_object13.setVisage(7700); - scene->_object13.setStrip2(7); - scene->_object13.setPosition(Common::Point(151, 33)); - scene->_object13.animate(ANIM_MODE_5, this); - break; - case 3: - CursorMan.showMouse(true); - SceneItem::display2(7700, 11); - _globals->_player.enableControl(); - remove(); - break; - } -} - -void Scene7700::Action5::signal() { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - switch (_actionIndex++) { - case 0: - setDelay(_globals->_randomSource.getRandomNumber(240)); - break; - case 1: { - scene->_cloud.setFrame(_globals->_randomSource.getRandomNumber(1) + 1); - scene->_cloud.setPosition(Common::Point(133, 145 + _globals->_randomSource.getRandomNumber(54))); - - Common::Point pt(360, scene->_cloud._position.y); - NpcMover *mover = new NpcMover(); - scene->_cloud.addMover(mover, &pt, this); - _actionIndex = 0; - break; - } - } -} - -void Scene7700::Action6::signal() { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - switch (_actionIndex++) { - case 0: - setDelay(5); - break; - case 1: { - Common::Point pt(2, 66); - NpcMover *mover = new NpcMover(); - scene->_easterEgg1.addMover(mover, &pt, this); - break; - } - case 2: - scene->_easterEgg1.setStrip(2); - scene->_easterEgg1.setPosition(Common::Point(43, 65)); - - scene->_easterEgg2.postInit(); - scene->_easterEgg2.setVisage(7708); - scene->_easterEgg2.setStrip(3); - scene->_easterEgg2.setPosition(Common::Point(116, 54)); - scene->_easterEgg2.animate(ANIM_MODE_2, NULL); - - setDelay(120); - break; - case 3: - scene->_easterEgg1.remove(); - scene->_easterEgg2.remove(); - remove(); - break; - } -} - -void Scene7700::SceneHotspot1::doAction(int action) { - if (action == CURSOR_LOOK) - SceneItem::display2(7700, 4); - else - SceneHotspot::doAction(action); -} - -void Scene7700::SceneHotspot2::doAction(int action) { - if (action == CURSOR_LOOK) - SceneItem::display2(7700, 6); - else - SceneHotspot::doAction(action); -} - -void Scene7700::SceneHotspot3::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_KEY: - SceneItem::display2(7702, 3); - RING_INVENTORY._key._sceneNumber = 7700; - break; - case CURSOR_LOOK: - if (RING_INVENTORY._key._sceneNumber == 7700) - scene->setAction(&scene->_action4, NULL); - else - SceneItem::display2(7700, 53); - break; - case CURSOR_USE: - if (!_globals->getFlag(78)) { - scene->_sceneMode = 7712; - scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); - } else if (RING_INVENTORY._key._sceneNumber == 7700) { - _globals->_player.disableControl(); - scene->_sceneMode = 7705; - scene->setAction(&scene->_sequenceManager, scene, 7705, &_globals->_player, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene7700::SceneHotspot4::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(7700, 12); - break; - case CURSOR_USE: - if (!_globals->getFlag(78)) { - scene->_sceneMode = 7712; - scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); - } else { - SceneItem::display2(7700, 12); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene7700::SceneHotspot5::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(7700, 28); - break; - case CURSOR_USE: - if (_globals->getFlag(78)) { - if (RING_INVENTORY._paper._sceneNumber == 7700) { - _globals->_player.disableControl(); - scene->_sceneMode = 7708; - scene->setAction(&scene->_sequenceManager, scene, 7708, &_globals->_player, NULL); - } - } else { - scene->_sceneMode = 7712; - scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene7700::SceneHotspot6::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(7700, 43); - break; - case CURSOR_USE: - SceneItem::display2(7700, 56); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene7700::SceneItem7::doAction(int action) { - if (action == CURSOR_LOOK) - SceneItem::display2(7700, 51); -} - -void Scene7700::SceneHotspot8::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(7700, 48); - break; - case CURSOR_USE: - scene->_sceneMode = 7709; - scene->_soundHandler.play(259); - scene->_object15.setFrame(scene->_object15.getFrameCount()); - scene->_object15.animate(ANIM_MODE_6, scene); - if ((scene->_field977 == 2) && (scene->_field97B == 0)) { - scene->_field979++; - } else { - scene->_field97B = 0; - scene->_field979 = 0; - scene->_field977 = 0; - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene7700::SceneHotspot9::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(7700, 48); - break; - case CURSOR_USE: - scene->_sceneMode = 7709; - scene->_soundHandler.play(259); - scene->_object15.setFrame(1); - scene->_object15.animate(ANIM_MODE_5, scene); - if (scene->_field977 > 2) { - scene->_field97B = 0; - scene->_field979 = 0; - scene->_field977 = 0; - } - - if (scene->_field979 != 0) { - if (scene->_field979 != 4) { - scene->_field97B = 0; - scene->_field979 = 0; - scene->_field977 = 0; - } else { - scene->_field97B++; - if (scene->_field97B == 3) { - _globals->_player.disableControl(); - scene->setAction(&scene->_action3); - } - } - } else { - scene->_field977++; - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene7700::SceneItem10::doAction(int action) { -} - -void Scene7700::Object1::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(7700, _lookLineNum); - } else if (action == CURSOR_USE) { - if (_globals->getFlag(78)) { - _globals->_player.disableControl(); - scene->setAction(&scene->_action1, this); - } else { - scene->_sceneMode = 7712; - scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); - } - } else { - SceneHotspot::doAction(action); - } -} - -void Scene7700::SceneHotspot11::doAction(int action) { - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(7700, _lookLineNum); - break; - case CURSOR_USE: - SceneItem::display2(7701, _useLineNum); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene7700::Object1::signal() { - if (_state == 0) { - _state = 1; - SceneItem::display2(7701, _defltLineNum); - } else { - _state = 0; - } - _globals->_player.enableControl(); -} - -void Scene7700::Object3::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(7700, 34); - } else if (action == CURSOR_USE) { - if (_globals->getFlag(78)) { - if (scene->_object3._frame == 1) { - _globals->_player.disableControl(); - scene->_sceneMode = 7707; - scene->setAction(&scene->_sequenceManager, scene, 7707, &_globals->_player, this, NULL); - } else { - SceneItem::display2(7700, 60); - } - } else { - scene->_sceneMode = 7712; - scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); - } - } else { - SceneHotspot::doAction(action); - } -} - -void Scene7700::Object7::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - if (_globals->getFlag(78)) - SceneItem::display2(7700, 45); - else - SceneItem::display2(7700, 44); - break; - case CURSOR_USE: - if (_globals->getFlag(78)) { - SceneItem::display2(7701, 41); - } else { - scene->_sceneMode = 7712; - scene->setAction(&scene->_sequenceManager, scene, 7714, NULL); - } - break; - case CURSOR_TALK: - if (_globals->getFlag(78)) { - SceneItem::display2(7702, 1); - } else { - _globals->_player.disableControl(); - if (_state == 0) { - _state = 1; - scene->_sceneMode = 7703; - scene->setAction(&scene->_sequenceManager, scene, 7703, NULL); - } else { - scene->_sceneMode = 7712; - scene->setAction(&scene->_sequenceManager, scene, 7712, NULL); - } - } - break; - case OBJECT_STUNNER: - if (!_globals->getFlag(78)) { - _globals->_soundHandler.stop(); - _globals->setFlag(78); - setAction(NULL); - _globals->_player.disableControl(); - scene->_sceneMode = 7704; - scene->setAction(&scene->_sequenceManager, scene, 7704, &_globals->_player, this, NULL); - } - break; - default: - SceneHotspot::doAction(action); - break; - } -} - -void Scene7700::Object8::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) { - if (_strip == 3) { - scene->_object9.postInit(); - scene->_object9.setVisage(7701); - scene->_object9.setStrip2(3); - scene->_object9.setPosition(Common::Point(91, 166)); - scene->_object9.fixPriority(200); - - scene->_object14.postInit(); - scene->_object14.setVisage(7701); - scene->_object14.setStrip(2); - scene->_object14.fixPriority(250); - scene->_object14.setPosition(Common::Point(139, 151)); - - scene->_gfxButton.setText(EXIT_MSG); - scene->_gfxButton._bounds.center(140, 189); - scene->_gfxButton.draw(); - - _globals->_sceneItems.push_front(&scene->_sceneItem10); - _globals->_sceneItems.push_front(&scene->_object9); - _globals->_player._canWalk = false; - } else if (_globals->getFlag(78)) { - scene->_object15.postInit(); - scene->_object15.setVisage(7701); - scene->_object15.setPosition(Common::Point(140, 165)); - scene->_object15.fixPriority(200); - - scene->_gfxButton.setText(EXIT_MSG); - scene->_gfxButton._bounds.center(140, 186); - scene->_gfxButton.draw(); - scene->_gfxButton._bounds.expandPanes(); - - scene->_object19.postInit(); - scene->_object19.setVisage(7700); - scene->_object19.setStrip(6); - scene->_object19.setPosition(Common::Point(140, 192)); - - _globals->_sceneItems.push_front(&scene->_sceneItem10); - _globals->_sceneItems.push_front(&scene->_sceneHotspot8); - _globals->_sceneItems.push_front(&scene->_sceneHotspot9); - _globals->_events.setCursor(CURSOR_WALK); - _globals->_player._canWalk = false; - } else { - scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); - } - } else { - SceneHotspot::doAction(action); - } -} - -void Scene7700::Object9::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - switch (action) { - case CURSOR_LOOK: - SceneItem::display2(7700, 49); - break; - case CURSOR_USE: - SceneItem::display2(7701, 42); - break; - case CURSOR_TALK: - SceneItem::display2(7702, 4); - break; - case OBJECT_KEY: - if (_frame == 1) { - if (!_globals->getFlag(80)) { - scene->_object10.postInit(); - scene->_object10.setVisage(7701); - scene->_object10.setStrip(4); - scene->_object10.setPosition(Common::Point(159, 136)); - _globals->_sceneItems.push_front(&scene->_object10); - scene->_object10.fixPriority(240); - } - - scene->_soundHandler.play(262); - scene->_object14.animate(ANIM_MODE_5, NULL); - } - _globals->_events.setCursor(CURSOR_WALK); - break; - default: - SceneHotspot::doAction(action); - } -} - -void Scene7700::Object10::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(7700, 50); - } else if (action == CURSOR_USE) { - _globals->_player._canWalk = true; - RING_INVENTORY._translator._sceneNumber = 1; - _globals->setFlag(80); - scene->_sceneItem10.remove(); - scene->_gfxButton._bounds.expandPanes(); - scene->_object14.remove(); - scene->_object9.remove(); - remove(); - } else { - SceneHotspot::doAction(action); - } -} - -void Scene7700::Object11::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - switch (action) { - case OBJECT_SCANNER: - if (_frame != 1) - SceneItem::display2(7701, 44); - else - SceneItem::doAction(action); - break; - case CURSOR_LOOK: - if (_frame != 1) - SceneItem::display2(7700, 9); - else - SceneItem::display2(7700, 52); - break; - case CURSOR_USE: - if (_frame != 1) { - SceneItem::display2(7701, 8); - } else { - _globals->setFlag(49); - _globals->_player.disableControl(); - scene->_sceneMode = 7706; - scene->setAction(&scene->_sequenceManager, scene, 7706, &_globals->_player, this, NULL); - } - break; - case OBJECT_EMPTY_JAR: - RING_INVENTORY._emptyJar._sceneNumber = 0; - RING_INVENTORY._jar._sceneNumber = 1; - _globals->_player.disableControl(); - scene->_sceneMode = 7710; - scene->setAction(&scene->_sequenceManager, scene, 7710, &_globals->_player, NULL); - break; - default: - SceneHotspot::doAction(action); - } -} - -void Scene7700::Object12::doAction(int action) { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - - if (action == CURSOR_LOOK) { - SceneItem::display2(7700, 15); - } else if (action == CURSOR_USE) { - if (_globals->getFlag(78)) { - scene->_sceneMode = 7713; - scene->setAction(&scene->_sequenceManager, scene, 7713, &_globals->_player, NULL); - } else { - scene->_sceneMode = 7712; - scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); - } - } else { - SceneHotspot::doAction(action); - } -} - -void Scene7700::signal() { - switch (_sceneMode) { - case 7701: - _globals->_player.fixPriority(-1); - _globals->_player.setStrip2(-1); - if (_globals->getFlag(78)) { - _globals->_player.enableControl(); - } else { - _sceneMode = 7711; - setAction(&_sequenceManager, this, 7711, NULL); - } - break; - case 7702: - _globals->_soundHandler.fadeOut(NULL); - _globals->_sceneManager.changeScene(7600); - break; - case 7703: - case 7706: - case 7707: - case 7711: - case 7712: - _globals->_player.enableControl(); - break; - case 7704: - _globals->_soundHandler.play(256); - _prof.setStrip2(4); - _prof.setFrame2(1); - _prof.setPosition(Common::Point(159, 87)); - _globals->_player.enableControl(); - break; - case 7705: - RING_INVENTORY._key._sceneNumber = 1; - _globals->_player.enableControl(); - break; - case 7708: - RING_INVENTORY._paper._sceneNumber = 1; - _globals->_player.enableControl(); - break; - case 7709: - _globals->_events.setCursor(CURSOR_USE); - break; - case 7710: - _globals->_player.enableControl(); - SceneItem::display2(7700, 62); - break; - case 7713: - _emptyJar.remove(); - RING_INVENTORY._emptyJar._sceneNumber = 1; - break; - default: - break; - } -} - -void Scene7700::process(Event &event) { - Scene::process(event); - - if (contains(_globals->_sceneItems, &_sceneItem10)) { - if (_gfxButton.process(event)) { - _sceneItem10.remove(); - _object15.remove(); - _object9.remove(); - if (_globals->_sceneObjects->contains(&_object10)) - _object10.remove(); - if (_globals->_sceneObjects->contains(&_object14)) - _object14.remove(); - _object19.remove(); - _gfxButton._bounds.expandPanes(); - _globals->_player._canWalk = true; - } - } - if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_p)) { - event.handled = true; - if (!_globals->_sceneObjects->contains(&_easterEgg1)) { - _easterEgg1.postInit(); - _easterEgg1.setVisage(7708); - _easterEgg1.setPosition(Common::Point(163, 50)); - _easterEgg1.fixPriority(1); - _easterEgg1.animate(ANIM_MODE_2, NULL); - _easterEgg1.setAction(&_action6); - } - } -} - -void Scene7700::dispatch() { - if ((_globals->_sceneRegions.indexOf(_globals->_player._position) == 6) || (_globals->_player._position.x < 10)) - _globals->_player.changeZoom(100 - ((_globals->_player._position.y - 68) / 2)); - else - _globals->_player.changeZoom(-1); - - if ((_action == 0) && (_globals->_sceneRegions.indexOf(_globals->_player._position) == 30)) { - _globals->_player.disableControl(); - _sceneMode = 7702; - setAction(&_sequenceManager, this, 7702, &_globals->_player, NULL); - } - Scene::dispatch(); -} - -void Scene7700::postInit(SceneObjectList *OwnerList) { - loadScene(7700); - Scene::postInit(); - setZoomPercents(100, 80, 200, 100); - _globals->setFlag(53); - _field97B = 0; - _field979 = 0; - _field977 = 0; - - _stripManager.addSpeaker(&_speakerEText); - _stripManager.addSpeaker(&_speakerQText); - _speakerQText._npc = &_globals->_player; - _speakerEText._npc = &_prof; - - _globals->_player.postInit(); - _globals->_player.setVisage(4201); - _globals->_player.animate(ANIM_MODE_1, NULL); - SceneObjectWrapper *wrapper = new SceneObjectWrapper(); - _globals->_player.setObjectWrapper(wrapper); - _globals->_player.setPosition(Common::Point(-19, 68)); - _globals->_player.setStrip2(7); - _globals->_player.fixPriority(95); - _globals->_player.changeZoom(80); - _globals->_player._moveDiff.x = 6; - _globals->_player._moveDiff.y = 3; - _globals->_player.disableControl(); - - _prof.postInit(); - _prof.setVisage(7706); - - if (_globals->getFlag(78)) { - _prof.setStrip2(4); - _prof.fixPriority(80); - _prof.setPosition(Common::Point(159, 87)); - } else { - _prof.setPosition(Common::Point(203, 87)); - _prof.setStrip2(2); - _prof._numFrames = 6; - _prof.setAction(&_action2); - } - - _cloud.postInit(); - _cloud.setVisage(7700); - _cloud.setStrip2(5); - _cloud.fixPriority(1); - _cloud.setPosition(Common::Point(133, 160)); - _cloud._moveDiff.x = 1; - _cloud._moveRate = 7; - _cloud.setAction(&_action5); - - _object1.postInit(); - _object1.setVisage(7700); - _object1.setPosition(Common::Point(184, 61)); - _object1._lookLineNum = 18; - _object1._defltLineNum = 16; - - _object2.postInit(); - _object2.setVisage(7700); - _object2.setPosition(Common::Point(184, 70)); - _object2.fixPriority(60); - _object2._lookLineNum = 19; - _object2._defltLineNum = 17; - - _object3.postInit(); - _object3.setVisage(7703); - _object3.setPosition(Common::Point(288, 36)); - _object3.setStrip(2); - - _object4.postInit(); - _object4.setVisage(7700); - _object4.setPosition(Common::Point(268, 59)); - _object4.setStrip(2); - _object4._lookLineNum = 37; - _object4._defltLineNum = 35; - - _object5.postInit(); - _object5.setVisage(7700); - _object5.setPosition(Common::Point(268, 67)); - _object5.fixPriority(58); - _object5.setStrip2(3); - _object5._lookLineNum = 38; - _object5._defltLineNum = 36; - - _object6.postInit(); - _object6.setVisage(7700); - _object6.setPosition(Common::Point(268, 75)); - _object6.fixPriority(57); - _object6.setStrip2(4); - _object6._lookLineNum = 40; - _object6._defltLineNum = 43; - - _object8.postInit(); - _object8.setVisage(7703); - _object8.setPosition(Common::Point(203, 91)); - _object8.setStrip2(4); - _object8.fixPriority(86); - - _sceneHotspot8.setBounds(82, 141, 161, 92); - _sceneHotspot9.setBounds(82, 187, 161, 141); - - _cork.postInit(); - _cork.setVisage(7703); - _cork.setPosition(Common::Point(32, 128)); - - if (_globals->getFlag(49)) - _cork.setFrame(_cork.getFrameCount()); - - if (RING_INVENTORY._emptyJar._sceneNumber == 7700) { - _emptyJar.postInit(); - _emptyJar.setVisage(7700); - _emptyJar.setStrip(8); - _emptyJar.setPosition(Common::Point(189, 48)); - _globals->_sceneItems.addItems(&_emptyJar, NULL); - } - _sceneHotspot1._sceneRegionId = 28; - _sceneHotspot2._sceneRegionId = 6; - _sceneHotspot3._sceneRegionId = 10; - _sceneHotspot4._sceneRegionId = 11; - _sceneHotspot5._sceneRegionId = 9; - _sceneHotspot6._sceneRegionId = 7; - - _sceneItem7.setBounds(0, 320, 200, 0); - _sceneItem10.setBounds(0, 320, 200, 0); - - _sceneHotspot11._sceneRegionId = 57; - _sceneHotspot11._useLineNum = 0; - _sceneHotspot11._lookLineNum = 0; - _sceneHotspot12._sceneRegionId = 2; - _sceneHotspot12._useLineNum = 2; - _sceneHotspot12._lookLineNum = 2; - _sceneHotspot13._sceneRegionId = 12; - _sceneHotspot13._useLineNum = 3; - _sceneHotspot13._lookLineNum = 3; - _sceneHotspot14._sceneRegionId = 18; - _sceneHotspot14._useLineNum = 4; - _sceneHotspot14._lookLineNum = 5; - _sceneHotspot15.setBounds(0, 55, 50, 8); - _sceneHotspot15._useLineNum = 6; - _sceneHotspot15._lookLineNum = 7; - _sceneHotspot16.setBounds(0, 130, 34, 103); - _sceneHotspot16._useLineNum = 7; - _sceneHotspot16._lookLineNum = 8; - _sceneHotspot17.setBounds(41, 180, 46, 170); - _sceneHotspot17._useLineNum = 11; - _sceneHotspot17._lookLineNum = 13; - _sceneHotspot18.setBounds(38, 187, 46, 180); - _sceneHotspot18._useLineNum = 12; - _sceneHotspot18._lookLineNum = 14; - _sceneHotspot19._sceneRegionId = 3; - _sceneHotspot19._useLineNum = 14; - _sceneHotspot19._lookLineNum = 16; - _sceneHotspot20._sceneRegionId = 14; - _sceneHotspot20._useLineNum = 15; - _sceneHotspot20._lookLineNum = 17; - _sceneHotspot21.setBounds(9, 215, 26, 210); - _sceneHotspot21._useLineNum = 18; - _sceneHotspot21._lookLineNum = 20; - _sceneHotspot22.setBounds(10, 221, 26, 215); - _sceneHotspot22._useLineNum = 19; - _sceneHotspot22._lookLineNum = 21; - _sceneHotspot23.setBounds(6, 230, 26, 225); - _sceneHotspot23._useLineNum = 20; - _sceneHotspot23._lookLineNum = 22; - _sceneHotspot24._sceneRegionId = 13; - _sceneHotspot24._useLineNum = 21; - _sceneHotspot24._lookLineNum = 23; - _sceneHotspot25._sceneRegionId = 21; - _sceneHotspot25._useLineNum = 22; - _sceneHotspot25._lookLineNum = 24; - _sceneHotspot26._sceneRegionId = 19; - _sceneHotspot26._useLineNum = 23; - _sceneHotspot26._lookLineNum = 25; - _sceneHotspot27._sceneRegionId = 27; - _sceneHotspot27._useLineNum = 24; - _sceneHotspot27._lookLineNum = 26; - _sceneHotspot28._sceneRegionId = 15; - _sceneHotspot28._useLineNum = 25; - _sceneHotspot28._lookLineNum = 27; - _sceneHotspot29._sceneRegionId = 26; - _sceneHotspot29._useLineNum = 27; - _sceneHotspot29._lookLineNum = 29; - _sceneHotspot30.setBounds(0, 317, 34, 310); - _sceneHotspot30._useLineNum = 28; - _sceneHotspot30._lookLineNum = 30; - _sceneHotspot31._sceneRegionId = 17; - _sceneHotspot31._useLineNum = 29; - _sceneHotspot31._lookLineNum = 31; - _sceneHotspot32._sceneRegionId = 25; - _sceneHotspot32._useLineNum = 30; - _sceneHotspot32._lookLineNum = 32; - _sceneHotspot33._sceneRegionId = 5; - _sceneHotspot33._useLineNum = 31; - _sceneHotspot33._lookLineNum = 33; - _sceneHotspot34.setBounds(42, 292, 48, 281); - _sceneHotspot34._useLineNum = 32; - _sceneHotspot34._lookLineNum = 35; - _sceneHotspot35._sceneRegionId = 24; - _sceneHotspot35._useLineNum = 38; - _sceneHotspot35._lookLineNum = 41; - _sceneHotspot36._sceneRegionId = 1; - _sceneHotspot36._useLineNum = 39; - _sceneHotspot36._lookLineNum = 42; - - _globals->_sceneItems.addItems(&_prof, &_sceneHotspot35, &_object8, &_sceneHotspot34, &_sceneHotspot33, &_sceneHotspot32, NULL); - _globals->_sceneItems.addItems(&_sceneHotspot31, &_sceneHotspot30, &_sceneHotspot29, &_sceneHotspot5, &_sceneHotspot28, &_sceneHotspot27, NULL); - _globals->_sceneItems.addItems(&_sceneHotspot26, &_sceneHotspot25, &_sceneHotspot24, &_sceneHotspot23, &_sceneHotspot22, &_sceneHotspot21, NULL); - _globals->_sceneItems.addItems(&_sceneHotspot20, &_sceneHotspot19, &_sceneHotspot18, &_sceneHotspot17, &_sceneHotspot4, &_sceneHotspot3, NULL); - _globals->_sceneItems.addItems(&_sceneHotspot16, &_sceneHotspot15, &_sceneHotspot2, &_sceneHotspot14, &_cork, &_sceneHotspot1, NULL); - _globals->_sceneItems.addItems(&_sceneHotspot13, &_sceneHotspot12, &_sceneHotspot11, &_object2, &_object1, &_object3, NULL); - _globals->_sceneItems.addItems(&_object6, &_object5, &_object4, &_sceneHotspot6, &_sceneHotspot36, &_sceneItem7, NULL); - - _sceneMode = 7701; - setAction(&_sequenceManager, this, 7701, &_globals->_player, NULL); - _soundHandler.play(256); -} - -Scene7700::Scene7700() { - _object1._state = 0; - _object2._state = 0; - _object4._state = 0; - _object5._state = 0; - _object6._state = 0; - _prof._state = 0; -} - -void Scene7700::synchronize(Serializer &s) { - Scene::synchronize(s); - if (s.getVersion() >= 3) { - s.syncAsSint16LE(_field977); - s.syncAsSint16LE(_field979); - s.syncAsSint16LE(_field97B); - } -} - -} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h deleted file mode 100644 index fe9560d9d8..0000000000 --- a/engines/tsage/ringworld_scenes8.h +++ /dev/null @@ -1,490 +0,0 @@ -/* 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TSAGE_RINGWORLD_SCENES8_H -#define TSAGE_RINGWORLD_SCENES8_H - -#include "common/scummsys.h" -#include "tsage/ringworld_logic.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" - -namespace tSage { - -class NamedHotspotMult : public SceneHotspot { -public: - int _useLineNum, _lookLineNum; - NamedHotspotMult() : SceneHotspot() {} - - virtual Common::String getClassName() { return "NamedHotspotMult"; } - virtual void synchronize(Serializer &s); -}; - -class SceneObject7700 : public SceneObjectExt { -public: - int _lookLineNum, _defltLineNum; - - virtual void synchronize(Serializer &s); - virtual Common::String getClassName() { return "SceneObject7700"; } -}; - -class Scene7000 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void dispatch(); - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - - /* Objects */ - class Object1 : public SceneObject { - public: - virtual void doAction(int action); - }; - - /* Items */ - class Hotspot1 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - -public: - ASound _soundHandler; - SequenceManager _sequenceManager; - SpeakerSKText _speakerSKText; - SpeakerSKL _speakerSKL; - SpeakerQL _speakerQL; - SpeakerQR _speakerQR; - SpeakerQText _speakerQText; - Object1 _object1; - SceneObject _object2; - SceneObject _object3; - SceneObject _object4; - SceneObject _object5; - SceneObject _object6; - SceneObject _object7; - SceneObject _object8; - SceneObject _object9; - SceneObject _object10; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Action7 _action7; - Hotspot1 _hotspot1; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void dispatch(); -}; - -class Scene7100 : public Scene { - /* Actions */ - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - class Action7 : public Action { - public: - virtual void signal(); - }; - class Action8 : public Action { - public: - virtual void signal(); - }; - class Action9 : public Action { - public: - virtual void signal(); - }; - class Action10 : public Action { - public: - virtual void signal(); - }; - class Action11 : public Action { - public: - virtual void signal(); - }; - -public: - ASound _soundHandler1; - ASound _soundHandler2; - SceneObject _object1; - SceneObject _object2; - SceneObject _object3; - SceneObject _object4; - SceneObject _object5; - SceneObject _object6; - SceneObject _object7; - SceneObject _object8; - SceneObject _object9; - SceneObject _object10; - SceneObject _object11; - SceneObject _object12; - SceneObject _object13; - SceneObject _object14; - SceneObject _object15; - SceneObject _object16; - SceneObject _object17; - SceneObject _object18; - SceneObject _object19; - SceneObject _object20; - SceneObject _object21; - SceneObject _object22; - SceneObject _object23; - SceneObject _object24; - SceneObject _object25; - Action _action1; - Action _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - Action7 _action7; - Action8 _action8; - Action9 _action9; - Action10 _action10; - Action11 _action11; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene7200 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - -public: - Action1 _action1; - Action2 _action2; - SceneObject _swimmer; - SceneObject _object2; - SceneObject _object3; - SceneObject _object4; - SceneObject _object5; - SceneObject _object6; - SceneObject _object7; - SceneObject _object8; - SceneObject _object9; - ASound _soundHandler; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene7300 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - -public: - SpeakerPOR _speakerPOR; - SpeakerPOText _speakerPOText; - SpeakerSKText _speakerSKText; - SpeakerQU _speakerQU; - SceneObject _object1; - SceneObject _object2; - SceneObject _object3; - SceneObject _object4; - SceneObject _object5; - SceneObject _object6; - SceneObject _object7; - SceneObject _object8; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void dispatch(); -}; - -class Scene7600 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - -public: - Action1 _action1; - Action2 _action2; - SceneObject _object1; - SceneObject _object2; - SceneObject _object3; - SceneObject _object4; - SceneObject _object5; - SceneObject _object6; - ASound _soundHandler1; - ASound _soundHandler2; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene7700 : public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; - class Action2 : public Action { - public: - virtual void signal(); - }; - class Action3 : public Action { - public: - virtual void signal(); - }; - class Action4 : public Action { - public: - virtual void signal(); - }; - class Action5 : public Action { - public: - virtual void signal(); - }; - class Action6 : public Action { - public: - virtual void signal(); - }; - - class Object1 : public SceneObject7700 { - public: - virtual void signal(); - virtual void doAction(int action); - }; - class Object3 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object7 : public SceneObjectExt { - public: - virtual void doAction(int action); - }; - class Object8 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object9 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object10 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object11 : public SceneObject { - public: - virtual void doAction(int action); - }; - class Object12 : public SceneObject { - public: - virtual void doAction(int action); - }; - - /* Items */ - class SceneHotspot1 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class SceneHotspot2 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class SceneHotspot3 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class SceneHotspot4 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class SceneHotspot5 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class SceneHotspot6 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class SceneItem7 : public SceneItem { - public: - virtual void doAction(int action); - }; - class SceneHotspot8 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class SceneHotspot9 : public SceneHotspot { - public: - virtual void doAction(int action); - }; - class SceneItem10 : public SceneItem { - public: - virtual void doAction(int action); - }; - class SceneHotspot11 : public NamedHotspotMult { - public: - virtual void doAction(int action); - }; -public: - ASound _soundHandler; - SequenceManager _sequenceManager; - GfxButton _gfxButton; - SpeakerEText _speakerEText; - SpeakerQText _speakerQText; - Object1 _object1; - Object1 _object2; - Object3 _object3; - Object1 _object4; - Object1 _object5; - Object1 _object6; - Object7 _prof; - Object8 _object8; - Object9 _object9; - Object10 _object10; - Object11 _cork; - Object12 _emptyJar; - SceneObject _object13; - SceneObject _object14; - SceneObject _object15; - SceneObject _cloud; - SceneObject _easterEgg1; - SceneObject _easterEgg2; - SceneObject _object19; - Action1 _action1; - Action2 _action2; - Action3 _action3; - Action4 _action4; - Action5 _action5; - Action6 _action6; - SceneHotspot1 _sceneHotspot1; - SceneHotspot2 _sceneHotspot2; - SceneHotspot3 _sceneHotspot3; - SceneHotspot4 _sceneHotspot4; - SceneHotspot5 _sceneHotspot5; - SceneHotspot6 _sceneHotspot6; - SceneItem7 _sceneItem7; - SceneHotspot8 _sceneHotspot8; - SceneHotspot9 _sceneHotspot9; - SceneItem10 _sceneItem10; - SceneHotspot11 _sceneHotspot11; - SceneHotspot11 _sceneHotspot12; - SceneHotspot11 _sceneHotspot13; - SceneHotspot11 _sceneHotspot14; - SceneHotspot11 _sceneHotspot15; - SceneHotspot11 _sceneHotspot16; - SceneHotspot11 _sceneHotspot17; - SceneHotspot11 _sceneHotspot18; - SceneHotspot11 _sceneHotspot19; - SceneHotspot11 _sceneHotspot20; - SceneHotspot11 _sceneHotspot21; - SceneHotspot11 _sceneHotspot22; - SceneHotspot11 _sceneHotspot23; - SceneHotspot11 _sceneHotspot24; - SceneHotspot11 _sceneHotspot25; - SceneHotspot11 _sceneHotspot26; - SceneHotspot11 _sceneHotspot27; - SceneHotspot11 _sceneHotspot28; - SceneHotspot11 _sceneHotspot29; - SceneHotspot11 _sceneHotspot30; - SceneHotspot11 _sceneHotspot31; - SceneHotspot11 _sceneHotspot32; - SceneHotspot11 _sceneHotspot33; - SceneHotspot11 _sceneHotspot34; - SceneHotspot11 _sceneHotspot35; - SceneHotspot11 _sceneHotspot36; - int _field977, _field979, _field97B; - - Scene7700(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void signal(); - virtual void process(Event &event); - virtual void dispatch(); - virtual void synchronize(Serializer &s); -}; - -} // End of namespace tSage - -#endif diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 6a164a6b1e..954c63e081 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -22,7 +22,7 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -#include "tsage/ringworld_logic.h" +#include "tsage/ringworld/ringworld_logic.h" #include "tsage/tsage.h" #include "tsage/saveload.h" -- cgit v1.2.3 From 2a69bcbebafda402ba34cfd393790ef4277f49ee Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 13 Aug 2011 19:56:43 +1000 Subject: CGE: Fix backslashes in module.mk --- engines/tsage/module.mk | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 41078cdaaf..5c7104936e 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -1,9 +1,9 @@ MODULE := engines/tsage MODULE_OBJS := \ - blue_force\blueforce_logic.o \ - blue_force\blueforce_scenes0.o \ - blue_force\blueforce_scenes1.o \ + blue_force/blueforce_logic.o \ + blue_force/blueforce_scenes0.o \ + blue_force/blueforce_scenes1.o \ converse.o \ core.o \ debugger.o \ @@ -13,16 +13,16 @@ MODULE_OBJS := \ globals.o \ graphics.o \ resources.o \ - ringworld\ringworld_demo.o \ - ringworld\ringworld_logic.o \ - ringworld\ringworld_scenes1.o \ - ringworld\ringworld_scenes2.o \ - ringworld\ringworld_scenes3.o \ - ringworld\ringworld_scenes4.o \ - ringworld\ringworld_scenes5.o \ - ringworld\ringworld_scenes6.o \ - ringworld\ringworld_scenes8.o \ - ringworld\ringworld_scenes10.o \ + ringworld/ringworld_demo.o \ + ringworld/ringworld_logic.o \ + ringworld/ringworld_scenes1.o \ + ringworld/ringworld_scenes2.o \ + ringworld/ringworld_scenes3.o \ + ringworld/ringworld_scenes4.o \ + ringworld/ringworld_scenes5.o \ + ringworld/ringworld_scenes6.o \ + ringworld/ringworld_scenes8.o \ + ringworld/ringworld_scenes10.o \ saveload.o \ scenes.o \ sound.o \ -- cgit v1.2.3 From 2dbd8581866ea34db2051ee08cabf511b707f4e2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 13 Aug 2011 21:14:48 +1000 Subject: TSAGE: Fix crash when exiting whilst a palette rotation is active --- engines/tsage/globals.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 39850cd1a5..0b74244b35 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -117,6 +117,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface } Globals::~Globals() { + _scenePalette.clearListeners(); delete _inventory; delete _game; _globals = NULL; -- cgit v1.2.3 From 3101dfab165e519c06d71f1b2a8fb653a8052aae Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Aug 2011 12:23:11 +1000 Subject: TSAGE: Added new global variables for Blue Force --- engines/tsage/globals.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 9d12669fa7..a3d02ec787 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -100,6 +100,10 @@ class BlueForceGlobals: public Globals { public: ASound _sound1, _sound2, _sound3; int _v4CEA2; + int _v4CF9E; + int _v4E238; + int _v501FC; + int _v51C42; int _v51C44; int _v51C24; -- cgit v1.2.3 From fed3306b15666fb989a08a6e62322577de1e9414 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Aug 2011 12:24:23 +1000 Subject: TSAGE: Removed recently added preloadVisage method Method associated was actually the standard getVisage method --- engines/tsage/scenes.cpp | 10 ---------- engines/tsage/scenes.h | 1 - 2 files changed, 11 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 954c63e081..8db1a321f4 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -501,16 +501,6 @@ void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent _zoomPercents[yEnd++] = minPercent; } -byte *Scene::preloadVisage(int resNum) { - // This isn't being used, since modern systems can load the data much quicker, and in any case - // visage data is specially loaded into the Visage class, and the resources discarded from memory. - return NULL; -/* - assert(!_v52C9F); - return _resourceManager->getResource(RES_VISAGE, resNum, 9999, false); -*/ -} - /*--------------------------------------------------------------------------*/ void Game::execute() { diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h index 665da585f8..5845efaec9 100644 --- a/engines/tsage/scenes.h +++ b/engines/tsage/scenes.h @@ -67,7 +67,6 @@ public: void loadBackground(int xAmount, int yAmount); void refreshBackground(int xAmount, int yAmount); void loadSceneData(int sceneNum); - byte *preloadVisage(int resNum); }; class SceneManager : public GameHandler, public SaveListener { -- cgit v1.2.3 From fd8fcc303dbca30383ac0651e36014079b2ffc88 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Aug 2011 12:25:02 +1000 Subject: TSAGE: Implemented changes in SequenceManager introduced by Blue Force --- engines/tsage/converse.cpp | 43 +++++++++++++++++++++++++++++++++++++------ engines/tsage/converse.h | 4 +++- engines/tsage/core.cpp | 17 +++++++++++++++++ engines/tsage/core.h | 10 +++++++++- 4 files changed, 66 insertions(+), 8 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 0ae575c557..cc1c596ddc 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -34,7 +34,7 @@ namespace tSage { SequenceManager::SequenceManager() : Action() { Common::set_to(&_objectList[0], &_objectList[6], (SceneObject *)NULL); _sequenceData.clear(); - _field24 = 0; + _fontNum = 0; _sequenceOffset = 0; _resNum = 0; _field26 = 0; @@ -56,7 +56,7 @@ void SequenceManager::synchronize(Serializer &s) { s.syncAsSint32LE(_resNum); s.syncAsSint32LE(_sequenceOffset); s.syncAsByte(_keepActive); - s.syncAsSint32LE(_field24); + s.syncAsSint32LE(_fontNum); s.syncAsSint32LE(_field26); s.syncAsSint32LE(_objectIndex); @@ -284,6 +284,32 @@ void SequenceManager::signal() { _objectList[objIndex3], _objectList[objIndex4], _objectList[objIndex5], _objectList[objIndex6], NULL); break; } + /* Following indexes were introduced for Blue Force */ + case 35: + v1 = getNextValue(); + _sceneObject->updateAngle(_objectList[v1]); + break; + case 36: + _sceneObject->animate(ANIM_MODE_9, NULL); + break; + case 37: + v1 = getNextValue(); + v2 = getNextValue(); + warning("TODO: dword_53030(%d,%d)", v1, v2); + break; + case 38: { + int resNum = getNextValue(); + int lineNum = getNextValue(); + int fontNum = getNextValue(); + int color1 = getNextValue(); + int color2 = getNextValue(); + int color3 = getNextValue(); + int xp = getNextValue(); + int yp = getNextValue(); + int width = getNextValue(); + setMessage(resNum, lineNum, fontNum, color1, color2, color3, Common::Point(xp, yp), width); + break; + } default: error("SequenceManager::signal - Unknown action %d at offset %xh", idx, _sequenceOffset - 2); break; @@ -337,10 +363,15 @@ uint16 SequenceManager::getNextValue() { } void SequenceManager::setMessage(int resNum, int lineNum, int color, const Common::Point &pt, int width) { - _sceneText._color1 = color; - _sceneText._color2 = 0; - _sceneText._color3 = 0; - _sceneText._fontNumber = 2; + setMessage(resNum, lineNum, 2, color, 0, 0, pt, width); +} + +void SequenceManager::setMessage(int resNum, int lineNum, int fontNum, int color1, int color2, int color3, + const Common::Point &pt, int width) { + _sceneText._color1 = color1; + _sceneText._color2 = color2; + _sceneText._color3 = color3; + _sceneText._fontNumber = fontNum; _sceneText._width = width; // Get the display message diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h index 13c490e995..5836b0bfbb 100644 --- a/engines/tsage/converse.h +++ b/engines/tsage/converse.h @@ -39,13 +39,15 @@ private: void setup(); uint16 getNextValue(); void setMessage(int resNum, int lineNum, int color, const Common::Point &pt, int width); + void setMessage(int resNum, int lineNum, int fontNum, int color1, int color2, int color3, + const Common::Point &pt, int width); SequenceManager *globalManager(); public: SceneText _sceneText; int _resNum; uint _sequenceOffset; bool _keepActive; - int _field24; + int _fontNum; int _field26; Common::Array _sequenceData; int _objectIndex; diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 52c1a5c8be..492ecf7cb1 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1655,6 +1655,11 @@ void SceneObjectWrapper::remove() { } void SceneObjectWrapper::dispatch() { + if (_vm->getGameID() == GType_Ringworld) + check(); +} + +void SceneObjectWrapper::check() { _visageImages.setVisage(_sceneObject->_visage); int frameCount = _visageImages.getFrameCount(); int angle = _sceneObject->_angle; @@ -2277,6 +2282,18 @@ void SceneObject::updateScreen() { } } +void SceneObject::updateAngle(SceneObject *sceneObj) { + checkAngle(sceneObj); + if (_objectWrapper) + _objectWrapper->check(); +} + +void SceneObject::changeAngle(int angle) { + _angle = angle; + if (_objectWrapper) + _objectWrapper->check(); +} + void SceneObject::setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority) { postInit(); setVisage(visage); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 959f96bf34..c4408e38a4 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -437,7 +437,10 @@ public: }; enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3, - ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8}; + ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8, + // Introduced in Blue Force + ANIM_MODE_9 = 9 +}; class SceneObject; @@ -468,6 +471,7 @@ public: virtual ~SceneObjectWrapper() {} void setSceneObject(SceneObject *so); + void check(); virtual void synchronize(Serializer &s); virtual Common::String getClassName() { return "SceneObjectWrapper"; } @@ -556,6 +560,10 @@ public: virtual void draw(); virtual void proc19() {} virtual void updateScreen(); + // New methods introduced by Blue FOrce + virtual void updateAngle(SceneObject *sceneObj); + virtual void changeAngle(int angle); + void setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority); }; -- cgit v1.2.3 From 81ba9b2ebccffa0677ff1526f6ef1b017f61f61b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Aug 2011 12:25:55 +1000 Subject: TSAGE: Further changes to Blue Force scenes, and started implementing scene 109 --- engines/tsage/blue_force/blueforce_logic.cpp | 124 +++++++++++++- engines/tsage/blue_force/blueforce_logic.h | 50 ++++++ engines/tsage/blue_force/blueforce_scenes0.cpp | 12 +- engines/tsage/blue_force/blueforce_scenes0.h | 2 +- engines/tsage/blue_force/blueforce_scenes1.cpp | 217 +++++++++++++++++++++++++ engines/tsage/blue_force/blueforce_scenes1.h | 47 +++++- 6 files changed, 442 insertions(+), 10 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 87e1597e1d..5f635da02f 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -31,7 +31,7 @@ namespace tSage { void BlueForceGame::start() { // Start the game - _globals->_sceneManager.changeScene(20); + _globals->_sceneManager.changeScene(109); _globals->_events.setCursor(CURSOR_WALK); } @@ -50,6 +50,8 @@ Scene *BlueForceGame::createScene(int sceneNumber) { // Tsnunami Title Screen #2 return new BF_Scene100(); case 109: + // Introduction Bar Room + return new BF_Scene109(); case 110: case 114: case 115: @@ -125,4 +127,124 @@ Scene *BlueForceGame::createScene(int sceneNumber) { } } +/*--------------------------------------------------------------------------*/ + +ObjArray::ObjArray(): EventHandler() { + _inUse = false; + clear(); +} + +void ObjArray::clear() { + for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) + _objList[i] = NULL; +} + +void ObjArray::synchronize(Serializer &s) { + EventHandler::synchronize(s); + for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) + SYNC_POINTER(_objList[i]); +} + +void ObjArray::process(Event &event) { + if (_inUse) + error("Array error"); + _inUse = true; + + for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) { + if (_objList[i]) + _objList[i]->process(event); + } + + _inUse = false; +} + +void ObjArray::dispatch() { + if (_inUse) + error("Array error"); + _inUse = true; + + for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) { + if (_objList[i]) + _objList[i]->dispatch(); + } + + _inUse = false; +} + +/*--------------------------------------------------------------------------*/ + +SceneExt::SceneExt(): Scene() { + warning("TODO: dword_503AA/dword_503AE/dword_53030"); + + _field372 = 0; + _field37C = NULL; +} + +void SceneExt::postInit(SceneObjectList *OwnerList) { + Scene::postInit(OwnerList); + if (BF_GLOBALS._v4CEA2) { + // Blank out the bottom portion of the screen + BF_GLOBALS._v51C24 = BF_INTERFACE_Y; + + Rect r(0, BF_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT); + BF_GLOBALS.gfxManager().getSurface().fillRect(r, 0); + } +} + +void SceneExt::process(Event &event) { + _objArray2.process(event); + if (!event.handled) + Scene::process(event); +} + +void SceneExt::dispatch() { + _objArray1.dispatch(); + + if (_field37A) { + if ((--_field37A == 0) && BF_GLOBALS._v4CEA2) { + if (BF_GLOBALS._v4E238 && (BF_GLOBALS._v4CF9E == 1)) { + warning("sub_1B052"); + } + + _field37A = 0; + } + } + + Scene::dispatch(); +} + +void SceneExt::loadScene(int sceneNum) { + Scene::loadScene(sceneNum); + warning("TODO: word_51C38/word_51C3C"); +} + +/*--------------------------------------------------------------------------*/ + +GameScene::GameScene() { + +} + +void GameScene::postInit(SceneObjectList *OwnerList) { + _field794 = 0; + _field412 = 1; + SceneExt::postInit(OwnerList); +} + +void GameScene::remove() { + SceneExt::remove(); + if (_field794 == 1) { + for (SynchronizedList::iterator i = BF_GLOBALS._sceneObjects->begin(); + i != BF_GLOBALS._sceneObjects->end(); ++i) + (*i)->remove(); + + BF_GLOBALS._sceneObjects->draw(); + BF_GLOBALS._scenePalette.loadPalette(2); + BF_GLOBALS._v51C44 = 1; + BF_GLOBALS._v51C42 = 1; + } + + BF_GLOBALS._scenePalette._field412 = 1; +} + + } // End of namespace tSage diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index 9237e50a13..6cfbe9120a 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -29,6 +29,8 @@ #include "tsage/scenes.h" #include "tsage/globals.h" +#define BF_INTERFACE_Y 168 + namespace tSage { class BlueForceGame: public Game { @@ -37,6 +39,54 @@ public: virtual Scene *createScene(int sceneNumber); }; +#define OBJ_ARRAY_SIZE 10 +class ObjArray: public EventHandler { +public: + EventHandler *_objList[OBJ_ARRAY_SIZE]; + bool _inUse; +public: + ObjArray(); + void clear(); + + virtual Common::String getClassName() { return "ObjArray"; } + virtual void synchronize(Serializer &s); + virtual void process(Event &event); + virtual void dispatch(); +}; + +class SceneExt: public Scene { +public: + ObjArray _objArray1, _objArray2; + int _field372; + int _field37A; + EventHandler *_field37C; +public: + SceneExt(); + + virtual Common::String getClassName() { return "SceneExt"; } + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void process(Event &event); + virtual void dispatch(); + virtual void loadScene(int sceneNum); + virtual void proc13() { warning("TODO: SceneExt::proc13"); } +}; + +class GameScene: public SceneExt { +public: + int _field412; + int _field794; +public: + GameScene(); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); +}; + +class BlueAnimatedSpeaker: public Speaker { +public: +}; + + } // End of namespace tSage #endif diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index 3eaa2bfdab..5f271d4185 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -33,7 +33,7 @@ namespace tSage { *--------------------------------------------------------------------------*/ void BF_Scene20::Action1::signal() { - BF_Scene20 *scene = (BF_Scene20 *)_globals->_sceneManager._scene; + BF_Scene20 *scene = (BF_Scene20 *)BF_GLOBALS._sceneManager._scene; static byte black[3] = { 0, 0, 0 }; switch (_actionIndex++) { @@ -42,7 +42,7 @@ void BF_Scene20::Action1::signal() { break; case 1: _sound.play(1); - _globals->_scenePalette.addRotation(64, 127, -1, 1, this); + BF_GLOBALS._scenePalette.addRotation(64, 127, -1, 1, this); break; case 2: scene->_object1.setVisage(22); @@ -88,7 +88,7 @@ void BF_Scene20::Action1::signal() { setDelay(1); break; case 3: - _globals->_scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this); + BF_GLOBALS._scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this); break; case 4: setDelay(60); @@ -105,10 +105,10 @@ void BF_Scene20::Action1::signal() { setDelay(120); break; case 7: - _globals->_scenePalette.addFader(black, 1, 5, this); + BF_GLOBALS._scenePalette.addFader(black, 1, 5, this); break; case 8: - _globals->_sceneManager.changeScene(100); + BF_GLOBALS._sceneManager.changeScene(100); remove(); break; } @@ -121,8 +121,6 @@ void BF_Scene20::postInit(SceneObjectList *OwnerList) { Scene::postInit(); setZoomPercents(60, 85, 200, 100); - preloadVisage(21); - preloadVisage(22); _scenePalette.loadPalette(1); _scenePalette.loadPalette(22); diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index c176a17110..182a45fe49 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -34,7 +34,7 @@ namespace tSage { -class BF_Scene20 : public Scene { +class BF_Scene20 : public SceneExt { /* Actions */ class Action1 : public Action { private: diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 0f0ab6c1c3..8e744a4ee3 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -192,4 +192,221 @@ void BF_Scene100::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 109 - Introduction Bar Room + * + *--------------------------------------------------------------------------*/ + +void BF_Scene109::Action1::signal() { + BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: + BF_GLOBALS._sound1.play(12); + BF_GLOBALS._sceneObjects->draw(); + BF_GLOBALS._scenePalette.loadPalette(2); + BF_GLOBALS._scenePalette.refresh(); + setDelay(10); + break; + case 2: + scene->_text.setup(BF_19840515, this); + break; + case 3: + BF_GLOBALS._v51C44 = 1; + scene->loadScene(115); + + scene->_protaginist2.show(); + scene->_protaginist2.setPriority(133); + scene->_protaginist1.show(); + scene->_bartender.show(); + scene->_object1.show(); + scene->_object6.show(); + scene->_object6.setAction(&scene->_action3); + scene->_object2.show(); + scene->_object9.show(); + scene->_object9.setAction(&scene->_action2); + + BF_GLOBALS._v501FC = 170; + setDelay(60); + break; + case 4: + scene->_bartender.setAction(&scene->_sequenceManager4, NULL, 109, &scene->_bartender, &scene->_object2, NULL); + scene->_protaginist1.setAction(&scene->_sequenceManager5, NULL, 107, &scene->_protaginist1, NULL); + scene->_protaginist2.setAction(&scene->_sequenceManager6, this, 106, &scene->_protaginist2, NULL); + break; + case 5: + scene->setAction(&scene->_sequenceManager6, this, 105, &scene->_object10, NULL); + break; + case 6: + scene->_object10.remove(); + scene->setAction(&scene->_sequenceManager6, this, 100, &scene->_object10, NULL); + break; + case 7: + scene->_object7.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_object7, NULL); + scene->_object5.setAction(&scene->_sequenceManager8, this, 102, &scene->_object5, NULL); + scene->_protaginist2.setAction(&scene->_sequenceManager6, NULL, 104, &scene->_protaginist2, &scene->_bartender, NULL); + break; + case 8: + scene->setAction(&scene->_sequenceManager8, this, 101, &scene->_object5, &scene->_protaginist1, NULL); + break; + case 9: + scene->_protaginist1.setAction(&scene->_sequenceManager5, this, 98, &scene->_protaginist1, NULL); + scene->_object7.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_object7, NULL); + break; + case 10: + scene->_sceneMode = 1; + remove(); + break; + } +} + +void BF_Scene109::Action2::signal() { + BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene; + scene->setAction(&scene->_sequenceManager2, this, 3117, &scene->_object9, NULL); +} + +void BF_Scene109::Action3::signal() { + BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene; + scene->setAction(&scene->_sequenceManager3, this, 108, &scene->_object6, NULL); +} + +/*--------------------------------------------------------------------------*/ + +BF_Scene109::Text::Text(): SceneText() { + _action = NULL; + _frameNumber = 0; + _diff = 0; +} + +void BF_Scene109::Text::setup(const Common::String &msg, Action *action) { + _frameNumber = BF_GLOBALS._events.getFrameNumber(); + _diff = 180; + _action = action; + _fontNumber = 4; + _width = 300; + _textMode = ALIGN_CENTER; + _color1 = BF_GLOBALS._scenePalette._colors.background; + _color2 = _color3 = 0; + + SceneText::setup(msg); + + // Center the text on-screen + reposition(); + _bounds.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2); + + // Set the new position + _position.x = _bounds.left; + _position.y = _bounds.top; +} + +void BF_Scene109::Text::synchronize(Serializer &s) { + SceneText::synchronize(s); + SYNC_POINTER(_action); + s.syncAsUint32LE(_frameNumber); + s.syncAsSint16LE(_diff); +} + +void BF_Scene109::Text::dispatch() { + if (_diff) { + uint32 frameNumber = BF_GLOBALS._events.getFrameNumber(); + if (_frameNumber < frameNumber) { + _diff -= frameNumber - _frameNumber; + _frameNumber = frameNumber; + + if (_diff <= 0) { + // Time has expired, so remove the text and signal the designated action + remove(); + if (_action) + _action->signal(); + } + } + } +} + +/*--------------------------------------------------------------------------*/ + +BF_Scene109::BF_Scene109(): GameScene() { +} + +void BF_Scene109::postInit(SceneObjectList *OwnerList) { + GameScene::postInit(OwnerList); + loadScene(999); + + _protaginist2.postInit(); + _protaginist2.setVisage(119); + _protaginist2.setFrame(11); + _protaginist2.setFrame2(133); + _protaginist2.setPosition(Common::Point(165, 124)); + _protaginist2.hide(); + + _protaginist1.postInit(); + _protaginist1.setVisage(118); + _protaginist1.setStrip(1); + _protaginist1.setFrame(8); + _protaginist1.setFrame2(132); + _protaginist1.setPosition(Common::Point(143, 125)); + _protaginist1.hide(); + + _bartender.postInit(); + _bartender.setVisage(121); + _bartender.setStrip(2); + _bartender.setFrame(1); + _bartender.setPriority(-1); + _bartender.setPosition(Common::Point(92, 64)); + _bartender.hide(); + + _object1.postInit(); + _object1.setVisage(121); + _object1.setStrip(6); + _object1.setFrame(1); + _object1.setPriority(-1); + _object1.setPosition(Common::Point(110, 64)); + _object1.hide(); + + _object6.postInit(); + _object6.setVisage(120); + _object6.setStrip(2); + _object6.setFrame(5); + _object6.setPriority(-1); + _object6.setPosition(Common::Point(127, 97)); + _object6.hide(); + + _object2.postInit(); + _object2.setVisage(121); + _object2.setStrip(5); + _object2.setFrame(1); + _object2.setPriority(-1); + _object2.setPosition(Common::Point(104, 64)); + _object2.hide(); + + _object9.postInit(); + _object9.setVisage(115); + _object9.setStrip(4); + _object9.setFrame(1); + _object9.setPosition(Common::Point(262, 29)); + _object9.hide(); + + _object5.postInit(); + _object5.hide(); + + _object7.postInit(); + _object7.hide(); + + _object10.postInit(); + _object10.hide(); + + BF_GLOBALS._player.disableControl(); + setAction(&_action1); +} + +void BF_Scene109::signal() { + if (_sceneMode == 1) { + BF_GLOBALS._scenePalette.clearListeners(); + BF_GLOBALS._sceneManager.changeScene(110); + } +} + } // End of namespace tSage diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 16d327fe9f..b3d16ab878 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -52,7 +52,6 @@ class BF_Scene100: public Scene { }; class Action2: public ActionExt { public: - virtual Common::String getClassName() { return "BF100Action2"; } virtual void signal(); }; public: @@ -68,6 +67,52 @@ public: virtual void signal(); }; +class BF_Scene109: public GameScene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + class Action3: public Action { + public: + virtual void signal(); + }; + + /* Texts */ + class Text: public SceneText { + public: + Action *_action; + uint32 _frameNumber; + int _diff; + public: + Text(); + void setup(const Common::String &msg, Action *action); + + virtual Common::String getClassName() { return "BF109Text"; } + virtual void synchronize(Serializer &s); + virtual void dispatch(); + }; +public: + SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3; + SequenceManager _sequenceManager4, _sequenceManager5, _sequenceManager6; + SequenceManager _sequenceManager7, _sequenceManager8; + SceneObject _object1, _object2, _protaginist2, _protaginist1, _object5; + SceneObject _object6, _object7, _bartender, _object9, _object10; + Text _text; + BlueAnimatedSpeaker _speaker; + Action1 _action1; + Action _action2, _action3; +public: + BF_Scene109(); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + } // End of namespace tSage #endif -- cgit v1.2.3 From d23d0d2a17d645dfc8496c053a81491a0da5487f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Aug 2011 16:02:04 +1000 Subject: TSAGE: Change Blue Force detection entries to include GF_ALT_REGIONS flag This ensures it uses the correct walk region loading code --- engines/tsage/detection_tables.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 9e7b853b48..fcab028c6d 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -124,7 +124,7 @@ static const tSageGameDescription gameDescriptions[] = { Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_BlueForce, - GF_FLOPPY + GF_FLOPPY | GF_ALT_REGIONS }, // Blue Force CD and First Wave use the same files { @@ -138,7 +138,7 @@ static const tSageGameDescription gameDescriptions[] = { Common::GUIO_NOSPEECH | Common::GUIO_NOSFX }, GType_BlueForce, - GF_CD + GF_CD | GF_ALT_REGIONS }, { AD_TABLE_END_MARKER, 0, 0 } }; -- cgit v1.2.3 From ff5b85e160424e6bce7a0e8a70f98b2d1e9ce642 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Aug 2011 16:02:44 +1000 Subject: TSAGE: Completed Scene 109 of Blue Force (Bar-room Introduction scene) --- engines/tsage/blue_force/blueforce_scenes1.cpp | 43 +++++++++++++++----------- engines/tsage/blue_force/blueforce_scenes1.h | 2 +- 2 files changed, 26 insertions(+), 19 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 8e744a4ee3..cdd8194b19 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -78,7 +78,7 @@ void BF_Scene100::Action1::setTextStrings(const Common::String &msg1, const Comm _sceneText1._color2 = _globals->_fontColors.foreground; _sceneText1._color3 = _globals->_fontColors.background; _sceneText1.setup(msg1); - _sceneText1.setFrame2(-1); + _sceneText1.fixPriority(-1); _sceneText1.setPosition(Common::Point( (SCREEN_WIDTH - _sceneText1.getFrame().getBounds().width()) / 2, 202)); _sceneText1._moveRate = 30; @@ -92,7 +92,7 @@ void BF_Scene100::Action1::setTextStrings(const Common::String &msg1, const Comm _sceneText2._color2 = _globals->_fontColors.foreground; _sceneText2._color3 = _globals->_fontColors.background; _sceneText2.setup(msg1); - _sceneText2.setFrame2(-1); + _sceneText2.fixPriority(-1); GfxSurface textSurface = _sceneText2.getFrame(); _sceneText2.setPosition(Common::Point((SCREEN_WIDTH - textSurface.getBounds().width()) / 2, 202)); _sceneText2._moveRate = 30; @@ -223,8 +223,8 @@ void BF_Scene109::Action1::signal() { scene->_protaginist1.show(); scene->_bartender.show(); scene->_object1.show(); - scene->_object6.show(); - scene->_object6.setAction(&scene->_action3); + scene->_drunk.show(); + scene->_drunk.setAction(&scene->_action3); scene->_object2.show(); scene->_object9.show(); scene->_object9.setAction(&scene->_action2); @@ -233,30 +233,37 @@ void BF_Scene109::Action1::signal() { setDelay(60); break; case 4: + // Start drinking scene->_bartender.setAction(&scene->_sequenceManager4, NULL, 109, &scene->_bartender, &scene->_object2, NULL); scene->_protaginist1.setAction(&scene->_sequenceManager5, NULL, 107, &scene->_protaginist1, NULL); scene->_protaginist2.setAction(&scene->_sequenceManager6, this, 106, &scene->_protaginist2, NULL); break; case 5: - scene->setAction(&scene->_sequenceManager6, this, 105, &scene->_object10, NULL); + // Open briefcase and pass over disk + setAction(&scene->_sequenceManager6, this, 105, &scene->_object10, NULL); break; case 6: + // Protaginist 2 walk to the bar scene->_object10.remove(); - scene->setAction(&scene->_sequenceManager6, this, 100, &scene->_object10, NULL); + setAction(&scene->_sequenceManager6, this, 100, &scene->_protaginist2, NULL); break; case 7: + // Two thugs enter and walk to table scene->_object7.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_object7, NULL); scene->_object5.setAction(&scene->_sequenceManager8, this, 102, &scene->_object5, NULL); scene->_protaginist2.setAction(&scene->_sequenceManager6, NULL, 104, &scene->_protaginist2, &scene->_bartender, NULL); break; case 8: - scene->setAction(&scene->_sequenceManager8, this, 101, &scene->_object5, &scene->_protaginist1, NULL); + // Protaginist 1 leaves, protaginist 2 stands up + setAction(&scene->_sequenceManager8, this, 101, &scene->_object5, &scene->_protaginist1, NULL); break; case 9: + // Shots fired! scene->_protaginist1.setAction(&scene->_sequenceManager5, this, 98, &scene->_protaginist1, NULL); scene->_object7.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_object7, NULL); break; case 10: + // End scene scene->_sceneMode = 1; remove(); break; @@ -270,7 +277,7 @@ void BF_Scene109::Action2::signal() { void BF_Scene109::Action3::signal() { BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene; - scene->setAction(&scene->_sequenceManager3, this, 108, &scene->_object6, NULL); + scene->setAction(&scene->_sequenceManager3, this, 108, &scene->_drunk, NULL); } /*--------------------------------------------------------------------------*/ @@ -338,7 +345,7 @@ void BF_Scene109::postInit(SceneObjectList *OwnerList) { _protaginist2.postInit(); _protaginist2.setVisage(119); _protaginist2.setFrame(11); - _protaginist2.setFrame2(133); + _protaginist2.fixPriority(133); _protaginist2.setPosition(Common::Point(165, 124)); _protaginist2.hide(); @@ -346,7 +353,7 @@ void BF_Scene109::postInit(SceneObjectList *OwnerList) { _protaginist1.setVisage(118); _protaginist1.setStrip(1); _protaginist1.setFrame(8); - _protaginist1.setFrame2(132); + _protaginist1.fixPriority(132); _protaginist1.setPosition(Common::Point(143, 125)); _protaginist1.hide(); @@ -366,13 +373,13 @@ void BF_Scene109::postInit(SceneObjectList *OwnerList) { _object1.setPosition(Common::Point(110, 64)); _object1.hide(); - _object6.postInit(); - _object6.setVisage(120); - _object6.setStrip(2); - _object6.setFrame(5); - _object6.setPriority(-1); - _object6.setPosition(Common::Point(127, 97)); - _object6.hide(); + _drunk.postInit(); + _drunk.setVisage(120); + _drunk.setStrip(2); + _drunk.setFrame(5); + _drunk.setPriority(-1); + _drunk.setPosition(Common::Point(127, 97)); + _drunk.hide(); _object2.postInit(); _object2.setVisage(121); @@ -399,7 +406,7 @@ void BF_Scene109::postInit(SceneObjectList *OwnerList) { _object10.hide(); BF_GLOBALS._player.disableControl(); - setAction(&_action1); + setAction(&_action1, this); } void BF_Scene109::signal() { diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index b3d16ab878..21c1ab4518 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -101,7 +101,7 @@ public: SequenceManager _sequenceManager4, _sequenceManager5, _sequenceManager6; SequenceManager _sequenceManager7, _sequenceManager8; SceneObject _object1, _object2, _protaginist2, _protaginist1, _object5; - SceneObject _object6, _object7, _bartender, _object9, _object10; + SceneObject _drunk, _object7, _bartender, _object9, _object10; Text _text; BlueAnimatedSpeaker _speaker; Action1 _action1; -- cgit v1.2.3 From da76e6133680d23b01ca2d361fae1f95018dab10 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Aug 2011 20:18:32 +1000 Subject: TSAGE: Separated Ringworld and Blue Force game logic into their own namespaces --- engines/tsage/blue_force/blueforce_logic.cpp | 10 +++--- engines/tsage/blue_force/blueforce_logic.h | 6 ++-- engines/tsage/blue_force/blueforce_scenes0.cpp | 10 +++--- engines/tsage/blue_force/blueforce_scenes0.h | 8 +++-- engines/tsage/blue_force/blueforce_scenes1.cpp | 44 +++++++++++++------------- engines/tsage/blue_force/blueforce_scenes1.h | 14 ++++---- engines/tsage/globals.cpp | 14 +++++--- engines/tsage/globals.h | 26 +++++++++------ engines/tsage/ringworld/ringworld_demo.cpp | 4 +-- engines/tsage/ringworld/ringworld_demo.h | 6 ++-- engines/tsage/ringworld/ringworld_logic.cpp | 4 +-- engines/tsage/ringworld/ringworld_logic.h | 8 +++-- engines/tsage/ringworld/ringworld_scenes1.cpp | 4 +-- engines/tsage/ringworld/ringworld_scenes1.h | 6 ++-- engines/tsage/ringworld/ringworld_scenes10.cpp | 4 +-- engines/tsage/ringworld/ringworld_scenes10.h | 6 ++-- engines/tsage/ringworld/ringworld_scenes2.cpp | 4 +-- engines/tsage/ringworld/ringworld_scenes2.h | 6 ++-- engines/tsage/ringworld/ringworld_scenes3.cpp | 4 +-- engines/tsage/ringworld/ringworld_scenes3.h | 6 ++-- engines/tsage/ringworld/ringworld_scenes4.cpp | 4 +-- engines/tsage/ringworld/ringworld_scenes4.h | 6 ++-- engines/tsage/ringworld/ringworld_scenes5.cpp | 4 +-- engines/tsage/ringworld/ringworld_scenes5.h | 6 ++-- engines/tsage/ringworld/ringworld_scenes6.cpp | 4 +-- engines/tsage/ringworld/ringworld_scenes6.h | 6 ++-- engines/tsage/ringworld/ringworld_scenes8.cpp | 4 +-- engines/tsage/ringworld/ringworld_scenes8.h | 6 ++-- engines/tsage/tsage.cpp | 2 +- 29 files changed, 136 insertions(+), 100 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 5f635da02f..8facc6a9f3 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -27,7 +27,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_BlueForce { void BlueForceGame::start() { // Start the game @@ -41,17 +41,17 @@ Scene *BlueForceGame::createScene(int sceneNumber) { /* Scene Group #0 */ case 20: // Tsunami Title Screen - return new BF_Scene20(); + return new Scene20(); case 50: case 60: error("Scene group 0 not implemented"); /* Scene Group #1 */ case 100: // Tsnunami Title Screen #2 - return new BF_Scene100(); + return new Scene100(); case 109: // Introduction Bar Room - return new BF_Scene109(); + return new Scene109(); case 110: case 114: case 115: @@ -247,4 +247,4 @@ void GameScene::remove() { } -} // End of namespace tSage +} // End of namespace tSage_BlueForce diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index 6cfbe9120a..7aa5ad864a 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -31,7 +31,9 @@ #define BF_INTERFACE_Y 168 -namespace tSage { +namespace tSage_BlueForce { + +using namespace tSage; class BlueForceGame: public Game { public: @@ -87,6 +89,6 @@ public: }; -} // End of namespace tSage +} // End of namespace tSage_BlueForce #endif diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index 5f271d4185..9a13480d5b 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -25,15 +25,15 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_BlueForce { /*-------------------------------------------------------------------------- * Scene 20 - Tsunami Title Screen * *--------------------------------------------------------------------------*/ -void BF_Scene20::Action1::signal() { - BF_Scene20 *scene = (BF_Scene20 *)BF_GLOBALS._sceneManager._scene; +void Scene20::Action1::signal() { + Scene20 *scene = (Scene20 *)BF_GLOBALS._sceneManager._scene; static byte black[3] = { 0, 0, 0 }; switch (_actionIndex++) { @@ -116,7 +116,7 @@ void BF_Scene20::Action1::signal() { /*--------------------------------------------------------------------------*/ -void BF_Scene20::postInit(SceneObjectList *OwnerList) { +void Scene20::postInit(SceneObjectList *OwnerList) { loadScene(20); Scene::postInit(); setZoomPercents(60, 85, 200, 100); @@ -191,4 +191,4 @@ void BF_Scene20::postInit(SceneObjectList *OwnerList) { setAction(&_action1); } -} // End of namespace tSage +} // End of namespace tSage_BlueForce diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 182a45fe49..f5535e037a 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -32,9 +32,11 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace tSage_BlueForce { -class BF_Scene20 : public SceneExt { +using namespace tSage; + +class Scene20 : public SceneExt { /* Actions */ class Action1 : public Action { private: @@ -51,6 +53,6 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; -} // End of namespace tSage +} // End of namespace tSage_BlueForce #endif diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index cdd8194b19..1346399f24 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -27,14 +27,14 @@ #include "tsage/staticres.h" #include "tsage/globals.h" -namespace tSage { +namespace tSage_BlueForce { /*-------------------------------------------------------------------------- * Scene 100 - Tsunami Title Screen #2 * *--------------------------------------------------------------------------*/ -void BF_Scene100::Action1::signal() { +void Scene100::Action1::signal() { static byte black[3] = { 0, 0, 0 }; switch (_actionIndex++) { @@ -69,7 +69,7 @@ void BF_Scene100::Action1::signal() { } } -void BF_Scene100::Action1::setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action) { +void Scene100::Action1::setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action) { // Set data for first text control _sceneText1._fontNumber = 10; _sceneText1._width = 160; @@ -106,8 +106,8 @@ void BF_Scene100::Action1::setTextStrings(const Common::String &msg1, const Comm _sceneText1.addMover(mover, &pt, action); } -void BF_Scene100::Action2::signal() { - BF_Scene100 *scene = (BF_Scene100 *)_globals->_sceneManager._scene; +void Scene100::Action2::signal() { + Scene100 *scene = (Scene100 *)_globals->_sceneManager._scene; static byte black[3] = {0, 0, 0}; switch (_actionIndex++) { @@ -147,11 +147,11 @@ void BF_Scene100::Action2::signal() { /*--------------------------------------------------------------------------*/ -BF_Scene100::BF_Scene100(): Scene() { +Scene100::Scene100(): Scene() { _index = 0; } -void BF_Scene100::postInit(SceneObjectList *OwnerList) { +void Scene100::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._scenePalette.loadPalette(2); BF_GLOBALS._v51C44 = 1; Scene::postInit(); @@ -178,7 +178,7 @@ void BF_Scene100::postInit(SceneObjectList *OwnerList) { setZoomPercents(60, 85, 200, 100); } -void BF_Scene100::signal() { +void Scene100::signal() { ++_sceneMode; if (BF_GLOBALS._v4CEA2 < 6) { BF_GLOBALS._scenePalette.clearListeners(); @@ -197,8 +197,8 @@ void BF_Scene100::signal() { * *--------------------------------------------------------------------------*/ -void BF_Scene109::Action1::signal() { - BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene; +void Scene109::Action1::signal() { + Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: @@ -270,25 +270,25 @@ void BF_Scene109::Action1::signal() { } } -void BF_Scene109::Action2::signal() { - BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene; +void Scene109::Action2::signal() { + Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene; scene->setAction(&scene->_sequenceManager2, this, 3117, &scene->_object9, NULL); } -void BF_Scene109::Action3::signal() { - BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene; +void Scene109::Action3::signal() { + Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene; scene->setAction(&scene->_sequenceManager3, this, 108, &scene->_drunk, NULL); } /*--------------------------------------------------------------------------*/ -BF_Scene109::Text::Text(): SceneText() { +Scene109::Text::Text(): SceneText() { _action = NULL; _frameNumber = 0; _diff = 0; } -void BF_Scene109::Text::setup(const Common::String &msg, Action *action) { +void Scene109::Text::setup(const Common::String &msg, Action *action) { _frameNumber = BF_GLOBALS._events.getFrameNumber(); _diff = 180; _action = action; @@ -309,14 +309,14 @@ void BF_Scene109::Text::setup(const Common::String &msg, Action *action) { _position.y = _bounds.top; } -void BF_Scene109::Text::synchronize(Serializer &s) { +void Scene109::Text::synchronize(Serializer &s) { SceneText::synchronize(s); SYNC_POINTER(_action); s.syncAsUint32LE(_frameNumber); s.syncAsSint16LE(_diff); } -void BF_Scene109::Text::dispatch() { +void Scene109::Text::dispatch() { if (_diff) { uint32 frameNumber = BF_GLOBALS._events.getFrameNumber(); if (_frameNumber < frameNumber) { @@ -335,10 +335,10 @@ void BF_Scene109::Text::dispatch() { /*--------------------------------------------------------------------------*/ -BF_Scene109::BF_Scene109(): GameScene() { +Scene109::Scene109(): GameScene() { } -void BF_Scene109::postInit(SceneObjectList *OwnerList) { +void Scene109::postInit(SceneObjectList *OwnerList) { GameScene::postInit(OwnerList); loadScene(999); @@ -409,11 +409,11 @@ void BF_Scene109::postInit(SceneObjectList *OwnerList) { setAction(&_action1, this); } -void BF_Scene109::signal() { +void Scene109::signal() { if (_sceneMode == 1) { BF_GLOBALS._scenePalette.clearListeners(); BF_GLOBALS._sceneManager.changeScene(110); } } -} // End of namespace tSage +} // End of namespace tSage_BlueForce diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 21c1ab4518..4d275ae89a 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -32,9 +32,11 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace tSage_BlueForce { -class BF_Scene100: public Scene { +using namespace tSage; + +class Scene100: public Scene { /* Actions */ class Action1: public ActionExt { private: @@ -62,12 +64,12 @@ public: SceneObjectExt2 _object1, _object2, _object3, _object4, _object5; int _index; - BF_Scene100(); + Scene100(); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; -class BF_Scene109: public GameScene { +class Scene109: public GameScene { /* Actions */ class Action1: public Action { public: @@ -107,12 +109,12 @@ public: Action1 _action1; Action _action2, _action3; public: - BF_Scene109(); + Scene109(); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; -} // End of namespace tSage +} // End of namespace tSage_BlueForce #endif diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 0b74244b35..1de6912809 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -103,15 +103,15 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface switch (_vm->getGameID()) { case GType_Ringworld: if (!(_vm->getFeatures() & GF_DEMO)) { - _inventory = new RingworldInvObjectList(); - _game = new RingworldGame(); + _inventory = new tSage_Ringworld::RingworldInvObjectList(); + _game = new tSage_Ringworld::RingworldGame(); } else { - _game = new RingworldDemoGame(); + _game = new tSage_Ringworld::RingworldDemoGame(); } break; case GType_BlueForce: - _game = new BlueForceGame(); + _game = new tSage_BlueForce::BlueForceGame(); break; } } @@ -167,8 +167,12 @@ void Globals::dispatchSounds() { Common::for_each(_sounds.begin(), _sounds.end(), Globals::dispatchSound); } +} // end of namespace tSage + /*--------------------------------------------------------------------------*/ +namespace tSage_BlueForce { + BlueForceGlobals::BlueForceGlobals(): Globals() { _v51C24 = 0; _v51C44 = 1; @@ -180,4 +184,4 @@ void BlueForceGlobals::synchronize(Serializer &s) { error("Sync variables"); } -} // end of namespace tSage +} // end of namespace tSage_BlueForce diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index a3d02ec787..d4c82c1d0f 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -96,6 +96,21 @@ public: void dispatchSounds(); }; +extern Globals *_globals; + +#define GLOBALS (*_globals) +#define BF_GLOBALS (*((BlueForceGlobals *)_globals)) + +// Note: Currently this can't be part of the _globals structure, since it needs to be constructed +// prior to many of the fields in Globals execute their constructors +extern ResourceManager *_resourceManager; + +} // end of namespace tSage + +namespace tSage_BlueForce { + +using namespace tSage; + class BlueForceGlobals: public Globals { public: ASound _sound1, _sound2, _sound3; @@ -112,15 +127,6 @@ public: virtual void synchronize(Serializer &s); }; -extern Globals *_globals; - -#define GLOBALS (*_globals) -#define BF_GLOBALS (*((BlueForceGlobals *)_globals)) - -// Note: Currently this can't be part of the _globals structure, since it needs to be constructed -// prior to many of the fields in Globals execute their constructors -extern ResourceManager *_resourceManager; - -} // End of namespace tSage +} // End of namespace tSage_BlueForce #endif diff --git a/engines/tsage/ringworld/ringworld_demo.cpp b/engines/tsage/ringworld/ringworld_demo.cpp index ce06df8e80..02203e4ffe 100644 --- a/engines/tsage/ringworld/ringworld_demo.cpp +++ b/engines/tsage/ringworld/ringworld_demo.cpp @@ -25,7 +25,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { void RingworldDemoGame::start() { // Start the demo's single scene @@ -117,4 +117,4 @@ void RingworldDemoScene::process(Event &event) { } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_demo.h b/engines/tsage/ringworld/ringworld_demo.h index 3e7431e107..f9c9fcbfa1 100644 --- a/engines/tsage/ringworld/ringworld_demo.h +++ b/engines/tsage/ringworld/ringworld_demo.h @@ -30,7 +30,9 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class RingworldDemoGame: public Game { private: @@ -54,6 +56,6 @@ public: virtual void signal(); }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index 99890c90ff..8bf0ded996 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -37,7 +37,7 @@ #include "tsage/ringworld/ringworld_scenes8.h" #include "tsage/ringworld/ringworld_scenes10.h" -namespace tSage { +namespace tSage_Ringworld { Scene *RingworldGame::createScene(int sceneNumber) { switch (sceneNumber) { @@ -1487,4 +1487,4 @@ void RingworldGame::processEvent(Event &event) { } } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h index 19b0f10b42..0ff5428e8a 100644 --- a/engines/tsage/ringworld/ringworld_logic.h +++ b/engines/tsage/ringworld/ringworld_logic.h @@ -29,7 +29,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; #define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ _globals->_player.addMover(mover, &pt, this); } @@ -438,7 +440,7 @@ public: virtual Common::String getClassName() { return "RingworldInvObjectList"; } }; -#define RING_INVENTORY (*((RingworldInvObjectList *)_globals->_inventory)) +#define RING_INVENTORY (*((tSage_Ringworld::RingworldInvObjectList *)_globals->_inventory)) class RingworldGame: public Game { protected: @@ -456,6 +458,6 @@ public: virtual void processEvent(Event &event); }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp index 880fa51e6e..c87b9ab972 100644 --- a/engines/tsage/ringworld/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld/ringworld_scenes1.cpp @@ -25,7 +25,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { /*-------------------------------------------------------------------------- * Scene 10 - Kziniti Palace (Introduction) @@ -3342,4 +3342,4 @@ void Scene6100::showMessage(const Common::String &msg, int color, Action *action } } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes1.h b/engines/tsage/ringworld/ringworld_scenes1.h index dd64e563cd..7d93eb6483 100644 --- a/engines/tsage/ringworld/ringworld_scenes1.h +++ b/engines/tsage/ringworld/ringworld_scenes1.h @@ -32,7 +32,9 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class Scene10 : public Scene { /* Actions */ @@ -533,6 +535,6 @@ public: }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp index 1cff5d0aaf..e7461ba10e 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld/ringworld_scenes10.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { Scene2::Scene2() : Scene() { _sceneState = 0; @@ -2086,4 +2086,4 @@ void Scene9999::postInit(SceneObjectList *OwnerList) { } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes10.h b/engines/tsage/ringworld/ringworld_scenes10.h index 792234cc91..54a3bfcdd0 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.h +++ b/engines/tsage/ringworld/ringworld_scenes10.h @@ -30,7 +30,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class SceneObject9150 : public SceneObject { public: @@ -527,6 +529,6 @@ public: }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_scenes2.cpp b/engines/tsage/ringworld/ringworld_scenes2.cpp index 2dadaf4c30..7091a9510c 100644 --- a/engines/tsage/ringworld/ringworld_scenes2.cpp +++ b/engines/tsage/ringworld/ringworld_scenes2.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { /*-------------------------------------------------------------------------- * Scene 1000 - Title Screen @@ -925,4 +925,4 @@ void Scene1500::postInit(SceneObjectList *OwnerList) { } } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes2.h b/engines/tsage/ringworld/ringworld_scenes2.h index ef3158bbb9..c066c41633 100644 --- a/engines/tsage/ringworld/ringworld_scenes2.h +++ b/engines/tsage/ringworld/ringworld_scenes2.h @@ -30,7 +30,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class Scene1000 : public Scene { /* Actions */ @@ -144,6 +146,6 @@ public: -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_scenes3.cpp b/engines/tsage/ringworld/ringworld_scenes3.cpp index 3d8f151c35..238652f4dd 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld/ringworld_scenes3.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { /*-------------------------------------------------------------------------- * Scene 2000 - Cockpit cutscenes @@ -6130,4 +6130,4 @@ void Scene2400::postInit(SceneObjectList *OwnerList) { _globals->_soundHandler.play(153); } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes3.h b/engines/tsage/ringworld/ringworld_scenes3.h index 4f8f559091..bd8fe28d43 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.h +++ b/engines/tsage/ringworld/ringworld_scenes3.h @@ -28,7 +28,9 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class Scene2000 : public Scene { /* Actions */ @@ -890,6 +892,6 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_scenes4.cpp b/engines/tsage/ringworld/ringworld_scenes4.cpp index 83dd559a6d..543c17b693 100644 --- a/engines/tsage/ringworld/ringworld_scenes4.cpp +++ b/engines/tsage/ringworld/ringworld_scenes4.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { /*-------------------------------------------------------------------------- * Scene 3500 - Ringworld Scan @@ -247,4 +247,4 @@ void Scene3700::postInit(tSage::SceneObjectList *OwnerList) { _globals->_soundHandler.play(195); } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes4.h b/engines/tsage/ringworld/ringworld_scenes4.h index 6c706d2dab..ccad604204 100644 --- a/engines/tsage/ringworld/ringworld_scenes4.h +++ b/engines/tsage/ringworld/ringworld_scenes4.h @@ -28,7 +28,9 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class Scene3500 : public Scene { /* Actions */ @@ -87,6 +89,6 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index 0803a2039a..bdb04161ad 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { /*-------------------------------------------------------------------------- * Scene 4000 - Village @@ -4438,4 +4438,4 @@ void Scene4301::dispatch() { } } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes5.h b/engines/tsage/ringworld/ringworld_scenes5.h index d28e809678..49e4b95dba 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.h +++ b/engines/tsage/ringworld/ringworld_scenes5.h @@ -28,7 +28,9 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class Scene4000 : public Scene { /* Actions */ @@ -688,6 +690,6 @@ public: }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_scenes6.cpp b/engines/tsage/ringworld/ringworld_scenes6.cpp index 6b335fe7c3..f1b7310938 100644 --- a/engines/tsage/ringworld/ringworld_scenes6.cpp +++ b/engines/tsage/ringworld/ringworld_scenes6.cpp @@ -25,7 +25,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { /*-------------------------------------------------------------------------- * Scene 5000 - Caverns - Entrance @@ -2197,4 +2197,4 @@ void Scene5300::signal() { } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes6.h b/engines/tsage/ringworld/ringworld_scenes6.h index db6efd0e18..976c477077 100644 --- a/engines/tsage/ringworld/ringworld_scenes6.h +++ b/engines/tsage/ringworld/ringworld_scenes6.h @@ -30,7 +30,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class Scene5000 : public Scene { /* Actions */ @@ -325,6 +327,6 @@ public: }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/ringworld/ringworld_scenes8.cpp b/engines/tsage/ringworld/ringworld_scenes8.cpp index 5b01bb2c58..15f469afea 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld/ringworld_scenes8.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace tSage_Ringworld { void NamedHotspotMult::synchronize(Serializer &s) { SceneHotspot::synchronize(s); @@ -2542,4 +2542,4 @@ void Scene7700::synchronize(Serializer &s) { } } -} // End of namespace tSage +} // End of namespace tSage_Ringworld diff --git a/engines/tsage/ringworld/ringworld_scenes8.h b/engines/tsage/ringworld/ringworld_scenes8.h index e4f82fc164..defb2870f1 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.h +++ b/engines/tsage/ringworld/ringworld_scenes8.h @@ -30,7 +30,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace tSage_Ringworld { + +using namespace tSage; class NamedHotspotMult : public SceneHotspot { public: @@ -485,6 +487,6 @@ public: virtual void synchronize(Serializer &s); }; -} // End of namespace tSage +} // End of namespace tSage_Ringworld #endif diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 3332841188..9cf462c164 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -81,7 +81,7 @@ void TSageEngine::initialize() { _resourceManager->addLib("FILES.RLB"); _resourceManager->addLib("TSAGE.RLB"); } - _globals = new BlueForceGlobals(); + _globals = new tSage_BlueForce::BlueForceGlobals(); } _globals->gfxManager().setDefaults(); -- cgit v1.2.3 From 833c6fdb72042b593d0bc23f8b9d223234e0ad8d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 15 Aug 2011 19:03:14 +1000 Subject: TSAGE: Started implementing Blue Force Scene #50 --- engines/tsage/blue_force/blueforce_scenes0.cpp | 47 ++++++++++++++++++++++++++ engines/tsage/blue_force/blueforce_scenes0.h | 25 ++++++++++++++ 2 files changed, 72 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index 9a13480d5b..b5392635a3 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -191,4 +191,51 @@ void Scene20::postInit(SceneObjectList *OwnerList) { setAction(&_action1); } +/*-------------------------------------------------------------------------- + * Scene 50 - Map Screen + * + *--------------------------------------------------------------------------*/ + +Scene50::Tooltip::Tooltip(): SavedObject() { + strcpy(_msg, ""); + _field60 = _field62 = 0; +} + +void Scene50::Tooltip::synchronize(Serializer &s) { + SavedObject::synchronize(s); + _bounds.synchronize(s); + s.syncBytes((byte *)&_msg[0], 84); +} + +void Scene50::Tooltip2::signal() { + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: { + Common::Point pt(410, 181); + NpcMover *mover = new NpcMover(); + ((SceneObject *)_owner)->addMover(mover, &pt, this); + break; + } + case 2: + _owner->remove(); + break; + default: + break; + } +} + +void Scene50::Tooltip2::dispatch() { + Action::dispatch(); + SceneObject *owner = (SceneObject *)_owner; + + if ((_actionIndex == 2) && (owner->_percent < 100)) { + owner->changeZoom(owner->_percent + 1); + } +} + +/*--------------------------------------------------------------------------*/ + + } // End of namespace tSage_BlueForce diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index f5535e037a..766b9f0295 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -53,6 +53,31 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; +class Scene50: public SceneExt { + class Tooltip: public SavedObject { + public: + Rect _bounds; + char _msg[80]; + int _field60; + int _field62; + public: + Tooltip(); + + virtual Common::String getClassName() { return "Scene50_Tooltip"; } + virtual void synchronize(Serializer &s); + }; + class Tooltip2: public Action { + public: + Tooltip2(): Action() {} + + virtual Common::String getClassName() { return "Scene50_Tooltip2"; } + virtual void signal(); + virtual void dispatch(); + }; +public: + +}; + } // End of namespace tSage_BlueForce #endif -- cgit v1.2.3 From 28aef23a60e4a1bb943a40e1087e2d0de69d9de1 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 15 Aug 2011 19:26:15 +1000 Subject: TSAGE: Changed Ringworld/Blue Force namespaces to be embedded namespaces within tSage --- engines/tsage/blue_force/blueforce_logic.cpp | 7 +++++-- engines/tsage/blue_force/blueforce_logic.h | 7 +++++-- engines/tsage/blue_force/blueforce_scenes0.cpp | 7 +++++-- engines/tsage/blue_force/blueforce_scenes0.h | 8 ++++++-- engines/tsage/blue_force/blueforce_scenes1.cpp | 8 ++++++-- engines/tsage/blue_force/blueforce_scenes1.h | 8 ++++++-- engines/tsage/globals.cpp | 16 ++++++++-------- engines/tsage/globals.h | 7 ++++--- engines/tsage/ringworld/ringworld_demo.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_demo.h | 8 ++++++-- engines/tsage/ringworld/ringworld_logic.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_logic.h | 10 +++++++--- engines/tsage/ringworld/ringworld_scenes1.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes1.h | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes10.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes10.h | 7 +++++-- engines/tsage/ringworld/ringworld_scenes2.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes2.h | 8 +++++--- engines/tsage/ringworld/ringworld_scenes3.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes3.h | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes4.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes4.h | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes5.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes5.h | 7 +++++-- engines/tsage/ringworld/ringworld_scenes6.cpp | 7 +++++-- engines/tsage/ringworld/ringworld_scenes6.h | 7 +++++-- engines/tsage/ringworld/ringworld_scenes8.cpp | 8 ++++++-- engines/tsage/ringworld/ringworld_scenes8.h | 8 ++++++-- engines/tsage/staticres.cpp | 9 +++++++++ engines/tsage/staticres.h | 7 +++++++ engines/tsage/tsage.cpp | 2 +- 31 files changed, 178 insertions(+), 66 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 8facc6a9f3..a29d677fb1 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -27,7 +27,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_BlueForce { +namespace tSage { + +namespace BlueForce { void BlueForceGame::start() { // Start the game @@ -246,5 +248,6 @@ void GameScene::remove() { BF_GLOBALS._scenePalette._field412 = 1; } +} // End of namespace BlueForce -} // End of namespace tSage_BlueForce +} // End of namespace tSage diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index 7aa5ad864a..e870fa1430 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -31,7 +31,9 @@ #define BF_INTERFACE_Y 168 -namespace tSage_BlueForce { +namespace tSage { + +namespace BlueForce { using namespace tSage; @@ -88,7 +90,8 @@ class BlueAnimatedSpeaker: public Speaker { public: }; +} // End of namespace BlueForce -} // End of namespace tSage_BlueForce +} // End of namespace tSage #endif diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index b5392635a3..a47d7d712f 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -25,7 +25,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_BlueForce { +namespace tSage { + +namespace BlueForce { /*-------------------------------------------------------------------------- * Scene 20 - Tsunami Title Screen @@ -237,5 +239,6 @@ void Scene50::Tooltip2::dispatch() { /*--------------------------------------------------------------------------*/ +} // End of namespace BlueForce -} // End of namespace tSage_BlueForce +} // End of namespace tSage diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 766b9f0295..7eda443ee9 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -32,7 +32,9 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage_BlueForce { +namespace tSage { + +namespace BlueForce { using namespace tSage; @@ -78,6 +80,8 @@ public: }; -} // End of namespace tSage_BlueForce +} // End of namespace BlueForce + +} // End of namespace tSage #endif diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 1346399f24..1dafff2bce 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -27,7 +27,9 @@ #include "tsage/staticres.h" #include "tsage/globals.h" -namespace tSage_BlueForce { +namespace tSage { + +namespace BlueForce { /*-------------------------------------------------------------------------- * Scene 100 - Tsunami Title Screen #2 @@ -416,4 +418,6 @@ void Scene109::signal() { } } -} // End of namespace tSage_BlueForce +} // End of namespace BlueForce + +} // End of namespace tSage diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 4d275ae89a..86ca4a9f14 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -32,7 +32,9 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage_BlueForce { +namespace tSage { + +namespace BlueForce { using namespace tSage; @@ -115,6 +117,8 @@ public: virtual void signal(); }; -} // End of namespace tSage_BlueForce +} // End of namespace BlueForce + +} // End of namespace tSage #endif diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 1de6912809..5481c79be5 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -103,15 +103,15 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface switch (_vm->getGameID()) { case GType_Ringworld: if (!(_vm->getFeatures() & GF_DEMO)) { - _inventory = new tSage_Ringworld::RingworldInvObjectList(); - _game = new tSage_Ringworld::RingworldGame(); + _inventory = new Ringworld::RingworldInvObjectList(); + _game = new Ringworld::RingworldGame(); } else { - _game = new tSage_Ringworld::RingworldDemoGame(); + _game = new Ringworld::RingworldDemoGame(); } break; case GType_BlueForce: - _game = new tSage_BlueForce::BlueForceGame(); + _game = new BlueForce::BlueForceGame(); break; } } @@ -167,11 +167,9 @@ void Globals::dispatchSounds() { Common::for_each(_sounds.begin(), _sounds.end(), Globals::dispatchSound); } -} // end of namespace tSage - /*--------------------------------------------------------------------------*/ -namespace tSage_BlueForce { +namespace BlueForce { BlueForceGlobals::BlueForceGlobals(): Globals() { _v51C24 = 0; @@ -184,4 +182,6 @@ void BlueForceGlobals::synchronize(Serializer &s) { error("Sync variables"); } -} // end of namespace tSage_BlueForce +} // end of namespace BlueForce + +} // end of namespace tSage diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index d4c82c1d0f..40865fba43 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -105,9 +105,8 @@ extern Globals *_globals; // prior to many of the fields in Globals execute their constructors extern ResourceManager *_resourceManager; -} // end of namespace tSage -namespace tSage_BlueForce { +namespace BlueForce { using namespace tSage; @@ -127,6 +126,8 @@ public: virtual void synchronize(Serializer &s); }; -} // End of namespace tSage_BlueForce +} // End of namespace BlueForce + +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_demo.cpp b/engines/tsage/ringworld/ringworld_demo.cpp index 02203e4ffe..08cb88536c 100644 --- a/engines/tsage/ringworld/ringworld_demo.cpp +++ b/engines/tsage/ringworld/ringworld_demo.cpp @@ -25,7 +25,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { void RingworldDemoGame::start() { // Start the demo's single scene @@ -117,4 +119,6 @@ void RingworldDemoScene::process(Event &event) { } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_demo.h b/engines/tsage/ringworld/ringworld_demo.h index f9c9fcbfa1..13a33f85d6 100644 --- a/engines/tsage/ringworld/ringworld_demo.h +++ b/engines/tsage/ringworld/ringworld_demo.h @@ -30,7 +30,9 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -56,6 +58,8 @@ public: virtual void signal(); }; -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index 8bf0ded996..94b8bccfd0 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -37,7 +37,9 @@ #include "tsage/ringworld/ringworld_scenes8.h" #include "tsage/ringworld/ringworld_scenes10.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { Scene *RingworldGame::createScene(int sceneNumber) { switch (sceneNumber) { @@ -1487,4 +1489,6 @@ void RingworldGame::processEvent(Event &event) { } } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h index 0ff5428e8a..66084c7915 100644 --- a/engines/tsage/ringworld/ringworld_logic.h +++ b/engines/tsage/ringworld/ringworld_logic.h @@ -29,7 +29,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -440,7 +442,7 @@ public: virtual Common::String getClassName() { return "RingworldInvObjectList"; } }; -#define RING_INVENTORY (*((tSage_Ringworld::RingworldInvObjectList *)_globals->_inventory)) +#define RING_INVENTORY (*((::tSage::Ringworld::RingworldInvObjectList *)_globals->_inventory)) class RingworldGame: public Game { protected: @@ -458,6 +460,8 @@ public: virtual void processEvent(Event &event); }; -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp index c87b9ab972..ca16b785c4 100644 --- a/engines/tsage/ringworld/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld/ringworld_scenes1.cpp @@ -25,7 +25,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { /*-------------------------------------------------------------------------- * Scene 10 - Kziniti Palace (Introduction) @@ -3342,4 +3344,6 @@ void Scene6100::showMessage(const Common::String &msg, int color, Action *action } } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes1.h b/engines/tsage/ringworld/ringworld_scenes1.h index 7d93eb6483..ed8b0e48f7 100644 --- a/engines/tsage/ringworld/ringworld_scenes1.h +++ b/engines/tsage/ringworld/ringworld_scenes1.h @@ -32,7 +32,9 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -535,6 +537,8 @@ public: }; -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp index e7461ba10e..160d829285 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld/ringworld_scenes10.cpp @@ -26,7 +26,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { Scene2::Scene2() : Scene() { _sceneState = 0; @@ -2086,4 +2088,6 @@ void Scene9999::postInit(SceneObjectList *OwnerList) { } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes10.h b/engines/tsage/ringworld/ringworld_scenes10.h index 54a3bfcdd0..e796fb5085 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.h +++ b/engines/tsage/ringworld/ringworld_scenes10.h @@ -30,7 +30,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -528,7 +530,8 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; +} // End of namespace Ringworld -} // End of namespace tSage_Ringworld +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_scenes2.cpp b/engines/tsage/ringworld/ringworld_scenes2.cpp index 7091a9510c..63d0d4af14 100644 --- a/engines/tsage/ringworld/ringworld_scenes2.cpp +++ b/engines/tsage/ringworld/ringworld_scenes2.cpp @@ -26,7 +26,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { /*-------------------------------------------------------------------------- * Scene 1000 - Title Screen @@ -925,4 +927,6 @@ void Scene1500::postInit(SceneObjectList *OwnerList) { } } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes2.h b/engines/tsage/ringworld/ringworld_scenes2.h index c066c41633..08654b0c80 100644 --- a/engines/tsage/ringworld/ringworld_scenes2.h +++ b/engines/tsage/ringworld/ringworld_scenes2.h @@ -30,7 +30,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -144,8 +146,8 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; +} // End of namespace Ringworld - -} // End of namespace tSage_Ringworld +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_scenes3.cpp b/engines/tsage/ringworld/ringworld_scenes3.cpp index 238652f4dd..7f9e41fbc5 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld/ringworld_scenes3.cpp @@ -26,7 +26,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { /*-------------------------------------------------------------------------- * Scene 2000 - Cockpit cutscenes @@ -6130,4 +6132,6 @@ void Scene2400::postInit(SceneObjectList *OwnerList) { _globals->_soundHandler.play(153); } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes3.h b/engines/tsage/ringworld/ringworld_scenes3.h index bd8fe28d43..2f79afe9d5 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.h +++ b/engines/tsage/ringworld/ringworld_scenes3.h @@ -28,7 +28,9 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -892,6 +894,8 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_scenes4.cpp b/engines/tsage/ringworld/ringworld_scenes4.cpp index 543c17b693..ff4c5e3bf3 100644 --- a/engines/tsage/ringworld/ringworld_scenes4.cpp +++ b/engines/tsage/ringworld/ringworld_scenes4.cpp @@ -26,7 +26,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { /*-------------------------------------------------------------------------- * Scene 3500 - Ringworld Scan @@ -247,4 +249,6 @@ void Scene3700::postInit(tSage::SceneObjectList *OwnerList) { _globals->_soundHandler.play(195); } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes4.h b/engines/tsage/ringworld/ringworld_scenes4.h index ccad604204..7b61c21cb0 100644 --- a/engines/tsage/ringworld/ringworld_scenes4.h +++ b/engines/tsage/ringworld/ringworld_scenes4.h @@ -28,7 +28,9 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -89,6 +91,8 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index bdb04161ad..fd3521e14c 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -26,7 +26,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { /*-------------------------------------------------------------------------- * Scene 4000 - Village @@ -4438,4 +4440,6 @@ void Scene4301::dispatch() { } } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes5.h b/engines/tsage/ringworld/ringworld_scenes5.h index 49e4b95dba..4ece715345 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.h +++ b/engines/tsage/ringworld/ringworld_scenes5.h @@ -28,7 +28,9 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -689,7 +691,8 @@ public: } }; +} // End of namespace Ringworld -} // End of namespace tSage_Ringworld +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_scenes6.cpp b/engines/tsage/ringworld/ringworld_scenes6.cpp index f1b7310938..95e85de1e7 100644 --- a/engines/tsage/ringworld/ringworld_scenes6.cpp +++ b/engines/tsage/ringworld/ringworld_scenes6.cpp @@ -25,7 +25,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { /*-------------------------------------------------------------------------- * Scene 5000 - Caverns - Entrance @@ -2196,5 +2198,6 @@ void Scene5300::signal() { } } +} // End of namespace Ringworld -} // End of namespace tSage_Ringworld +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes6.h b/engines/tsage/ringworld/ringworld_scenes6.h index 976c477077..839d73ca69 100644 --- a/engines/tsage/ringworld/ringworld_scenes6.h +++ b/engines/tsage/ringworld/ringworld_scenes6.h @@ -30,7 +30,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -326,7 +328,8 @@ public: } }; +} // End of namespace Ringworld -} // End of namespace tSage_Ringworld +} // End of namespace tSage #endif diff --git a/engines/tsage/ringworld/ringworld_scenes8.cpp b/engines/tsage/ringworld/ringworld_scenes8.cpp index 15f469afea..739fbb019e 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld/ringworld_scenes8.cpp @@ -26,7 +26,9 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { void NamedHotspotMult::synchronize(Serializer &s) { SceneHotspot::synchronize(s); @@ -2542,4 +2544,6 @@ void Scene7700::synchronize(Serializer &s) { } } -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage diff --git a/engines/tsage/ringworld/ringworld_scenes8.h b/engines/tsage/ringworld/ringworld_scenes8.h index defb2870f1..9b4d23dc2a 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.h +++ b/engines/tsage/ringworld/ringworld_scenes8.h @@ -30,7 +30,9 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage_Ringworld { +namespace tSage { + +namespace Ringworld { using namespace tSage; @@ -487,6 +489,8 @@ public: virtual void synchronize(Serializer &s); }; -} // End of namespace tSage_Ringworld +} // End of namespace Ringworld + +} // End of namespace tSage #endif diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 5d8f1b057f..adc69f2fe5 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -96,6 +96,9 @@ const char *PICK_BTN_STRING = "Pick"; const char *START_PLAY_BTN_STRING = " Start Play "; const char *INTRODUCTION_BTN_STRING = "Introduction"; + +namespace Ringworld { + const char *EXIT_MSG = " EXIT "; const char *SCENE6100_CAREFUL = "Be careful! The probe cannot handle too much of that."; const char *SCENE6100_TOUGHER = "Hey! This is tougher than it looks!"; @@ -118,6 +121,10 @@ const char *EXIT_BTN_STRING = "Exit"; const char *DEMO_BTN_STRING = "Demo"; const char *DEMO_RESUME_BTN_STRING = "Resume"; +} // End of namespace Ringworld + +namespace BlueForce { + // Blue Force general messages const char *BF_NAME = "Blue Force"; const char *BF_COPYRIGHT = " Copyright, 1993 Tsunami Media, Inc."; @@ -129,4 +136,6 @@ const char *BF_11_YEARS = "Eleven years later."; const char *BF_NEXT_DAY = "The Next Day"; const char *BF_ACADEMY = "Here we are at the Academy"; +} // End of namespace BlueForce + } // End of namespace tSage diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index bac8976a14..1d1fc8b95c 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -62,6 +62,8 @@ extern const char *INV_EMPTY_MSG; extern const char *START_PLAY_BTN_STRING; extern const char *INTRODUCTION_BTN_STRING; +namespace Ringworld { + // Scene specific resources extern const char *EXIT_MSG; extern const char *SCENE6100_CAREFUL; @@ -86,6 +88,10 @@ extern const char *EXIT_BTN_STRING; extern const char *DEMO_BTN_STRING; extern const char *DEMO_RESUME_BTN_STRING; +} // End of namespace Ringworld + +namespace BlueForce { + // Blue Force messages extern const char *BF_NAME; extern const char *BF_COPYRIGHT; @@ -97,6 +103,7 @@ extern const char *BF_11_YEARS; extern const char *BF_NEXT_DAY; extern const char *BF_ACADEMY; +} // End of namespace BlueForce } // End of namespace tSage diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 9cf462c164..554a5499e5 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -81,7 +81,7 @@ void TSageEngine::initialize() { _resourceManager->addLib("FILES.RLB"); _resourceManager->addLib("TSAGE.RLB"); } - _globals = new tSage_BlueForce::BlueForceGlobals(); + _globals = new BlueForce::BlueForceGlobals(); } _globals->gfxManager().setDefaults(); -- cgit v1.2.3 From 697230709be6b9460b4a3ac9bc8d9c7f065562d2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 15 Aug 2011 20:47:59 +1000 Subject: TSAGE: Corrected casing of tSage namespace to be TsAGE This matches the casing of the original engine name. --- engines/tsage/blue_force/blueforce_logic.cpp | 10 ++++++---- engines/tsage/blue_force/blueforce_logic.h | 8 +++++--- engines/tsage/blue_force/blueforce_scenes0.cpp | 4 ++-- engines/tsage/blue_force/blueforce_scenes0.h | 6 +++--- engines/tsage/blue_force/blueforce_scenes1.cpp | 10 +++++----- engines/tsage/blue_force/blueforce_scenes1.h | 8 ++++---- engines/tsage/converse.cpp | 4 ++-- engines/tsage/converse.h | 4 ++-- engines/tsage/core.cpp | 4 ++-- engines/tsage/core.h | 6 +++--- engines/tsage/debugger.cpp | 4 ++-- engines/tsage/debugger.h | 4 ++-- engines/tsage/detection.cpp | 16 ++++++++-------- engines/tsage/detection_tables.h | 4 ++-- engines/tsage/dialogs.cpp | 4 ++-- engines/tsage/dialogs.h | 4 ++-- engines/tsage/events.cpp | 4 ++-- engines/tsage/events.h | 4 ++-- engines/tsage/globals.cpp | 4 ++-- engines/tsage/globals.h | 6 +++--- engines/tsage/graphics.cpp | 4 ++-- engines/tsage/graphics.h | 4 ++-- engines/tsage/resources.cpp | 4 ++-- engines/tsage/resources.h | 4 ++-- engines/tsage/ringworld/ringworld_demo.cpp | 4 ++-- engines/tsage/ringworld/ringworld_demo.h | 6 +++--- engines/tsage/ringworld/ringworld_logic.cpp | 4 ++-- engines/tsage/ringworld/ringworld_logic.h | 8 ++++---- engines/tsage/ringworld/ringworld_scenes1.cpp | 4 ++-- engines/tsage/ringworld/ringworld_scenes1.h | 6 +++--- engines/tsage/ringworld/ringworld_scenes10.cpp | 4 ++-- engines/tsage/ringworld/ringworld_scenes10.h | 6 +++--- engines/tsage/ringworld/ringworld_scenes2.cpp | 4 ++-- engines/tsage/ringworld/ringworld_scenes2.h | 6 +++--- engines/tsage/ringworld/ringworld_scenes3.cpp | 4 ++-- engines/tsage/ringworld/ringworld_scenes3.h | 6 +++--- engines/tsage/ringworld/ringworld_scenes4.cpp | 6 +++--- engines/tsage/ringworld/ringworld_scenes4.h | 6 +++--- engines/tsage/ringworld/ringworld_scenes5.cpp | 6 +++--- engines/tsage/ringworld/ringworld_scenes5.h | 6 +++--- engines/tsage/ringworld/ringworld_scenes6.cpp | 4 ++-- engines/tsage/ringworld/ringworld_scenes6.h | 6 +++--- engines/tsage/ringworld/ringworld_scenes8.cpp | 4 ++-- engines/tsage/ringworld/ringworld_scenes8.h | 6 +++--- engines/tsage/saveload.cpp | 4 ++-- engines/tsage/saveload.h | 4 ++-- engines/tsage/scenes.cpp | 4 ++-- engines/tsage/scenes.h | 4 ++-- engines/tsage/sound.cpp | 4 ++-- engines/tsage/sound.h | 4 ++-- engines/tsage/staticres.cpp | 4 ++-- engines/tsage/staticres.h | 4 ++-- engines/tsage/tsage.cpp | 4 ++-- engines/tsage/tsage.h | 4 ++-- 54 files changed, 142 insertions(+), 138 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index a29d677fb1..0238475533 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -27,13 +27,13 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace BlueForce { void BlueForceGame::start() { // Start the game - _globals->_sceneManager.changeScene(109); + _globals->_sceneManager.changeScene(100); _globals->_events.setCursor(CURSOR_WALK); } @@ -217,7 +217,9 @@ void SceneExt::dispatch() { void SceneExt::loadScene(int sceneNum) { Scene::loadScene(sceneNum); - warning("TODO: word_51C38/word_51C3C"); + + _v51C34.top = 0; + _v51C34.bottom = 300; } /*--------------------------------------------------------------------------*/ @@ -250,4 +252,4 @@ void GameScene::remove() { } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index e870fa1430..1ff6ecf507 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -31,11 +31,11 @@ #define BF_INTERFACE_Y 168 -namespace tSage { +namespace TsAGE { namespace BlueForce { -using namespace tSage; +using namespace TsAGE; class BlueForceGame: public Game { public: @@ -64,6 +64,8 @@ public: int _field372; int _field37A; EventHandler *_field37C; + + Rect _v51C34; public: SceneExt(); @@ -92,6 +94,6 @@ public: } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index a47d7d712f..cc0f9bb1fd 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -25,7 +25,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace BlueForce { @@ -241,4 +241,4 @@ void Scene50::Tooltip2::dispatch() { } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 7eda443ee9..587941e59e 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -32,11 +32,11 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace TsAGE { namespace BlueForce { -using namespace tSage; +using namespace TsAGE; class Scene20 : public SceneExt { /* Actions */ @@ -82,6 +82,6 @@ public: } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 1dafff2bce..e5d66bcbb5 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -27,7 +27,7 @@ #include "tsage/staticres.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { namespace BlueForce { @@ -149,7 +149,7 @@ void Scene100::Action2::signal() { /*--------------------------------------------------------------------------*/ -Scene100::Scene100(): Scene() { +Scene100::Scene100(): SceneExt() { _index = 0; } @@ -168,12 +168,12 @@ void Scene100::postInit(SceneObjectList *OwnerList) { // Title loadScene(100); BF_GLOBALS._sound1.play(2); - setAction(&_action2, this); +// setAction(&_action2, this); } else { // Credits loadScene(101); BF_GLOBALS._sound1.play(118); - setAction(&_action1, this); +// setAction(&_action1, this); } loadScene(20); @@ -420,4 +420,4 @@ void Scene109::signal() { } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 86ca4a9f14..d6cde0a44d 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -32,13 +32,13 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace TsAGE { namespace BlueForce { -using namespace tSage; +using namespace TsAGE; -class Scene100: public Scene { +class Scene100: public SceneExt { /* Actions */ class Action1: public ActionExt { private: @@ -119,6 +119,6 @@ public: } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index cc1c596ddc..615b1c36fd 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -26,7 +26,7 @@ #include "tsage/globals.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { #define STRIP_WORD_DELAY 30 @@ -985,4 +985,4 @@ void AnimatedSpeaker::removeText() { _objectList.draw(); } -} // end of namespace tSage +} // end of namespace TsAGE diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h index 5836b0bfbb..e263a12d12 100644 --- a/engines/tsage/converse.h +++ b/engines/tsage/converse.h @@ -27,7 +27,7 @@ #include "tsage/dialogs.h" #include "tsage/sound.h" -namespace tSage { +namespace TsAGE { class StripCallback : public Action { public: @@ -224,6 +224,6 @@ public: void addSpeaker(Speaker *speaker); }; -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 492ecf7cb1..864c3af103 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -33,7 +33,7 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace TsAGE { // The engine uses ScumMVM screen buffering, so all logic is hardcoded to use pane buffer 0 #define CURRENT_PANENUM 0 @@ -3620,4 +3620,4 @@ void SceneHandler::dispatchObject(EventHandler *obj) { void SceneHandler::saveListener(Serializer &ser) { } -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/core.h b/engines/tsage/core.h index c4408e38a4..96e7e82fe5 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -34,7 +34,7 @@ #include "tsage/resources.h" #include "tsage/saveload.h" -namespace tSage { +namespace TsAGE { #define MAX_FLAGS 256 @@ -714,7 +714,7 @@ public: SynchronizedList::iterator begin() { return _objList.begin(); } SynchronizedList::iterator end() { return _objList.end(); } int size() const { return _objList.size(); } - bool contains(SceneObject *sceneObj) { return tSage::contains(_objList, sceneObj); } + bool contains(SceneObject *sceneObj) { return TsAGE::contains(_objList, sceneObj); } void push_back(SceneObject *sceneObj) { _objList.push_back(sceneObj); } void push_front(SceneObject *sceneObj) { _objList.push_front(sceneObj); } void remove(SceneObject *sceneObj) { @@ -859,6 +859,6 @@ public: static void saveListener(Serializer &ser); }; -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index cae9639565..e3c4569dd2 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -25,7 +25,7 @@ #include "tsage/graphics.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace TsAGE { Debugger::Debugger() : GUI::Debugger() { DCmd_Register("continue", WRAP_METHOD(Debugger, Cmd_Exit)); @@ -449,4 +449,4 @@ bool Debugger::Cmd_Sound(int argc, const char **argv) { return false; } -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/debugger.h b/engines/tsage/debugger.h index 44fd61ec5e..8bc1b06336 100644 --- a/engines/tsage/debugger.h +++ b/engines/tsage/debugger.h @@ -26,7 +26,7 @@ #include "common/scummsys.h" #include "gui/debugger.h" -namespace tSage { +namespace TsAGE { class Debugger : public GUI::Debugger { public: @@ -46,6 +46,6 @@ protected: bool Cmd_Sound(int argc, const char **argv); }; -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp index c8aa415914..f12efc02e8 100644 --- a/engines/tsage/detection.cpp +++ b/engines/tsage/detection.cpp @@ -30,7 +30,7 @@ #include "tsage/tsage.h" -namespace tSage { +namespace TsAGE { struct tSageGameDescription { ADGameDescription desc; @@ -55,7 +55,7 @@ Common::String TSageEngine::getPrimaryFilename() const { return Common::String(_gameDescription->desc.filesDescriptions[0].fileName); } -} // End of namespace tSage +} // End of namespace TsAGE static const PlainGameDescriptor tSageGameTitles[] = { { "tsage", "Unknown Tsunami TSAGE-based Game" }, @@ -72,7 +72,7 @@ enum { class TSageMetaEngine : public AdvancedMetaEngine { public: - TSageMetaEngine() : AdvancedMetaEngine(tSage::gameDescriptions, sizeof(tSage::tSageGameDescription), tSageGameTitles) { + TSageMetaEngine() : AdvancedMetaEngine(TsAGE::gameDescriptions, sizeof(TsAGE::tSageGameDescription), tSageGameTitles) { _md5Bytes = 5000; _singleid = "tsage"; _guioptions = Common::GUIO_NOSPEECH; @@ -103,7 +103,7 @@ public: virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const { if (desc) { - *engine = new tSage::TSageEngine(syst, (const tSage::tSageGameDescription *)desc); + *engine = new TsAGE::TSageEngine(syst, (const TsAGE::tSageGameDescription *)desc); } return desc != 0; } @@ -118,7 +118,7 @@ public: Common::StringArray filenames = g_system->getSavefileManager()->listSavefiles(pattern); sort(filenames.begin(), filenames.end()); - tSage::tSageSavegameHeader header; + TsAGE::tSageSavegameHeader header; SaveStateList saveList; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { @@ -129,7 +129,7 @@ public: Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(*file); if (in) { - if (tSage::Saver::readSavegameHeader(in, header)) { + if (TsAGE::Saver::readSavegameHeader(in, header)) { saveList.push_back(SaveStateDescriptor(slot, header.saveName)); delete header.thumbnail; } @@ -156,8 +156,8 @@ public: generateGameStateFileName(target, slot)); assert(f); - tSage::tSageSavegameHeader header; - tSage::Saver::readSavegameHeader(f, header); + TsAGE::tSageSavegameHeader header; + TsAGE::Saver::readSavegameHeader(f, header); delete f; // Create the return descriptor diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index fcab028c6d..4b69549673 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -20,7 +20,7 @@ * */ -namespace tSage { +namespace TsAGE { static const tSageGameDescription gameDescriptions[] = { @@ -143,4 +143,4 @@ static const tSageGameDescription gameDescriptions[] = { { AD_TABLE_END_MARKER, 0, 0 } }; -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index 8a1b7c6429..ae385b8c15 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -32,7 +32,7 @@ #include "tsage/globals.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace TsAGE { /*--------------------------------------------------------------------------*/ @@ -595,4 +595,4 @@ OptionsDialog::OptionsDialog() { } -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/dialogs.h b/engines/tsage/dialogs.h index a50307f775..55adb6c813 100644 --- a/engines/tsage/dialogs.h +++ b/engines/tsage/dialogs.h @@ -30,7 +30,7 @@ #include "common/rect.h" #include "common/system.h" -namespace tSage { +namespace TsAGE { class MessageDialog : public GfxDialog { public: @@ -128,6 +128,6 @@ public: static void show(); }; -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 59894f3300..44c79bd2fe 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -31,7 +31,7 @@ #include "tsage/tsage.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { EventsClass::EventsClass() { _currentCursor = CURSOR_NONE; @@ -325,4 +325,4 @@ void EventsClass::loadNotifierProc(bool postFlag) { } } -} // end of namespace tSage +} // end of namespace TsAGE diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 772de24b5a..c36db59270 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -29,7 +29,7 @@ #include "graphics/surface.h" #include "tsage/saveload.h" -namespace tSage { +namespace TsAGE { enum EventType {EVENT_NONE = 0, EVENT_BUTTON_DOWN = 1, EVENT_BUTTON_UP = 2, EVENT_KEYPRESS = 4, EVENT_MOUSE_MOVE = 8}; @@ -103,6 +103,6 @@ public: static void loadNotifierProc(bool postFlag); }; -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 5481c79be5..ce37004206 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -26,7 +26,7 @@ #include "tsage/ringworld/ringworld_demo.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace TsAGE { Globals *_globals = NULL; ResourceManager *_resourceManager = NULL; @@ -184,4 +184,4 @@ void BlueForceGlobals::synchronize(Serializer &s) { } // end of namespace BlueForce -} // end of namespace tSage +} // end of namespace TsAGE diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 40865fba43..b581294883 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -31,7 +31,7 @@ #include "tsage/sound.h" #include "tsage/saveload.h" -namespace tSage { +namespace TsAGE { class Globals : public SavedObject { private: @@ -108,7 +108,7 @@ extern ResourceManager *_resourceManager; namespace BlueForce { -using namespace tSage; +using namespace TsAGE; class BlueForceGlobals: public Globals { public: @@ -128,6 +128,6 @@ public: } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 87ffdf4494..7e0994696e 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -30,7 +30,7 @@ #include "graphics/surface.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { /** * Creates a new graphics surface with the specified area of another surface @@ -1512,4 +1512,4 @@ GfxFontBackup::~GfxFontBackup() { } -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index e09e1093a3..45b53612e5 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -30,7 +30,7 @@ #include "common/system.h" #include "graphics/surface.h" -namespace tSage { +namespace TsAGE { class GfxSurface; class Region; @@ -343,6 +343,6 @@ GfxSurface *Surface_getArea(GfxSurface &src, const Rect &bounds); GfxSurface surfaceFromRes(const byte *imgData); GfxSurface surfaceFromRes(int resNum, int rlbNum, int subNum); -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp index 6d2c6b5837..99b431b5dc 100644 --- a/engines/tsage/resources.cpp +++ b/engines/tsage/resources.cpp @@ -28,7 +28,7 @@ #include "tsage/resources.h" #include "tsage/tsage.h" -namespace tSage { +namespace TsAGE { MemoryManager::MemoryManager() { @@ -504,4 +504,4 @@ Common::String ResourceManager::getMessage(int resNum, int lineNum, bool suppres return result; } -} // end of namespace tSage +} // end of namespace TsAGE diff --git a/engines/tsage/resources.h b/engines/tsage/resources.h index efbb86b24e..176d60fcc4 100644 --- a/engines/tsage/resources.h +++ b/engines/tsage/resources.h @@ -33,7 +33,7 @@ #include "common/util.h" #include "graphics/surface.h" -namespace tSage { +namespace TsAGE { // Magic number used by original game to identify valid memory blocks const uint32 MEMORY_ENTRY_ID = 0xE11DA722; @@ -175,6 +175,6 @@ public: }; -} // end of namespace tSage +} // end of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_demo.cpp b/engines/tsage/ringworld/ringworld_demo.cpp index 08cb88536c..5612325aff 100644 --- a/engines/tsage/ringworld/ringworld_demo.cpp +++ b/engines/tsage/ringworld/ringworld_demo.cpp @@ -25,7 +25,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -121,4 +121,4 @@ void RingworldDemoScene::process(Event &event) { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_demo.h b/engines/tsage/ringworld/ringworld_demo.h index 13a33f85d6..30527b0aea 100644 --- a/engines/tsage/ringworld/ringworld_demo.h +++ b/engines/tsage/ringworld/ringworld_demo.h @@ -30,11 +30,11 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class RingworldDemoGame: public Game { private: @@ -60,6 +60,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index 94b8bccfd0..d6e72fe95c 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -37,7 +37,7 @@ #include "tsage/ringworld/ringworld_scenes8.h" #include "tsage/ringworld/ringworld_scenes10.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -1491,4 +1491,4 @@ void RingworldGame::processEvent(Event &event) { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h index 66084c7915..73ecc9722b 100644 --- a/engines/tsage/ringworld/ringworld_logic.h +++ b/engines/tsage/ringworld/ringworld_logic.h @@ -29,11 +29,11 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; #define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \ _globals->_player.addMover(mover, &pt, this); } @@ -442,7 +442,7 @@ public: virtual Common::String getClassName() { return "RingworldInvObjectList"; } }; -#define RING_INVENTORY (*((::tSage::Ringworld::RingworldInvObjectList *)_globals->_inventory)) +#define RING_INVENTORY (*((::TsAGE::Ringworld::RingworldInvObjectList *)_globals->_inventory)) class RingworldGame: public Game { protected: @@ -462,6 +462,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp index ca16b785c4..332aef6d8d 100644 --- a/engines/tsage/ringworld/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld/ringworld_scenes1.cpp @@ -25,7 +25,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -3346,4 +3346,4 @@ void Scene6100::showMessage(const Common::String &msg, int color, Action *action } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_scenes1.h b/engines/tsage/ringworld/ringworld_scenes1.h index ed8b0e48f7..49ea65eb3a 100644 --- a/engines/tsage/ringworld/ringworld_scenes1.h +++ b/engines/tsage/ringworld/ringworld_scenes1.h @@ -32,11 +32,11 @@ #include "tsage/globals.h" #include "tsage/sound.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class Scene10 : public Scene { /* Actions */ @@ -539,6 +539,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp index 160d829285..df25c324ab 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld/ringworld_scenes10.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -2090,4 +2090,4 @@ void Scene9999::postInit(SceneObjectList *OwnerList) { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_scenes10.h b/engines/tsage/ringworld/ringworld_scenes10.h index e796fb5085..02c42f3d01 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.h +++ b/engines/tsage/ringworld/ringworld_scenes10.h @@ -30,11 +30,11 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class SceneObject9150 : public SceneObject { public: @@ -532,6 +532,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_scenes2.cpp b/engines/tsage/ringworld/ringworld_scenes2.cpp index 63d0d4af14..cfd3e3d8f7 100644 --- a/engines/tsage/ringworld/ringworld_scenes2.cpp +++ b/engines/tsage/ringworld/ringworld_scenes2.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -929,4 +929,4 @@ void Scene1500::postInit(SceneObjectList *OwnerList) { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_scenes2.h b/engines/tsage/ringworld/ringworld_scenes2.h index 08654b0c80..3502aea15b 100644 --- a/engines/tsage/ringworld/ringworld_scenes2.h +++ b/engines/tsage/ringworld/ringworld_scenes2.h @@ -30,11 +30,11 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class Scene1000 : public Scene { /* Actions */ @@ -148,6 +148,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_scenes3.cpp b/engines/tsage/ringworld/ringworld_scenes3.cpp index 7f9e41fbc5..f744a98c33 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld/ringworld_scenes3.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -6134,4 +6134,4 @@ void Scene2400::postInit(SceneObjectList *OwnerList) { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_scenes3.h b/engines/tsage/ringworld/ringworld_scenes3.h index 2f79afe9d5..2dbdc27211 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.h +++ b/engines/tsage/ringworld/ringworld_scenes3.h @@ -28,11 +28,11 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class Scene2000 : public Scene { /* Actions */ @@ -896,6 +896,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_scenes4.cpp b/engines/tsage/ringworld/ringworld_scenes4.cpp index ff4c5e3bf3..0f4c3e49a0 100644 --- a/engines/tsage/ringworld/ringworld_scenes4.cpp +++ b/engines/tsage/ringworld/ringworld_scenes4.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -229,7 +229,7 @@ void Scene3700::Action1::signal() { /*--------------------------------------------------------------------------*/ -void Scene3700::postInit(tSage::SceneObjectList *OwnerList) { +void Scene3700::postInit(TsAGE::SceneObjectList *OwnerList) { Scene::postInit(); loadScene(3700); @@ -251,4 +251,4 @@ void Scene3700::postInit(tSage::SceneObjectList *OwnerList) { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_scenes4.h b/engines/tsage/ringworld/ringworld_scenes4.h index 7b61c21cb0..af31de84b9 100644 --- a/engines/tsage/ringworld/ringworld_scenes4.h +++ b/engines/tsage/ringworld/ringworld_scenes4.h @@ -28,11 +28,11 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class Scene3500 : public Scene { /* Actions */ @@ -93,6 +93,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index fd3521e14c..58f47d7f82 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -3522,7 +3522,7 @@ Scene4250::Scene4250() : _hotspot7(0, CURSOR_LOOK, 4250, 0, LIST_END) { } -void Scene4250::postInit(tSage::SceneObjectList *OwnerList) { +void Scene4250::postInit(TsAGE::SceneObjectList *OwnerList) { loadScene(4250); Scene::postInit(); setZoomPercents(160, 90, 185, 100); @@ -4442,4 +4442,4 @@ void Scene4301::dispatch() { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_scenes5.h b/engines/tsage/ringworld/ringworld_scenes5.h index 4ece715345..6c6b6b6f32 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.h +++ b/engines/tsage/ringworld/ringworld_scenes5.h @@ -28,11 +28,11 @@ #include "tsage/converse.h" #include "tsage/ringworld/ringworld_logic.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class Scene4000 : public Scene { /* Actions */ @@ -693,6 +693,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_scenes6.cpp b/engines/tsage/ringworld/ringworld_scenes6.cpp index 95e85de1e7..f21ae59478 100644 --- a/engines/tsage/ringworld/ringworld_scenes6.cpp +++ b/engines/tsage/ringworld/ringworld_scenes6.cpp @@ -25,7 +25,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -2200,4 +2200,4 @@ void Scene5300::signal() { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_scenes6.h b/engines/tsage/ringworld/ringworld_scenes6.h index 839d73ca69..79e604a177 100644 --- a/engines/tsage/ringworld/ringworld_scenes6.h +++ b/engines/tsage/ringworld/ringworld_scenes6.h @@ -30,11 +30,11 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class Scene5000 : public Scene { /* Actions */ @@ -330,6 +330,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/ringworld/ringworld_scenes8.cpp b/engines/tsage/ringworld/ringworld_scenes8.cpp index 739fbb019e..5f1ff5cdca 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld/ringworld_scenes8.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { @@ -2546,4 +2546,4 @@ void Scene7700::synchronize(Serializer &s) { } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_scenes8.h b/engines/tsage/ringworld/ringworld_scenes8.h index 9b4d23dc2a..4878db5cc8 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.h +++ b/engines/tsage/ringworld/ringworld_scenes8.h @@ -30,11 +30,11 @@ #include "tsage/scenes.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { namespace Ringworld { -using namespace tSage; +using namespace TsAGE; class NamedHotspotMult : public SceneHotspot { public: @@ -491,6 +491,6 @@ public: } // End of namespace Ringworld -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index e07964d443..45e655037d 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -30,7 +30,7 @@ #include "tsage/sound.h" #include "tsage/tsage.h" -namespace tSage { +namespace TsAGE { Saver *_saver; @@ -410,4 +410,4 @@ void Saver::resolveLoadPointers() { error("Could not resolve savegame block pointers"); } -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index ce181cbc8f..03beafed7c 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -29,7 +29,7 @@ #include "common/savefile.h" #include "common/serializer.h" -namespace tSage { +namespace TsAGE { typedef void (*SaveNotifierFn)(bool postFlag); @@ -222,6 +222,6 @@ public: extern Saver *_saver; -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 8db1a321f4..181a927c13 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -26,7 +26,7 @@ #include "tsage/tsage.h" #include "tsage/saveload.h" -namespace tSage { +namespace TsAGE { SceneManager::SceneManager() { _scene = NULL; @@ -519,4 +519,4 @@ void Game::execute() { } while (activeFlag && !_vm->shouldQuit()); } -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h index 5845efaec9..7e8c26f912 100644 --- a/engines/tsage/scenes.h +++ b/engines/tsage/scenes.h @@ -29,7 +29,7 @@ #include "tsage/core.h" #include "tsage/saveload.h" -namespace tSage { +namespace TsAGE { class Scene : public StripCallback { private: @@ -134,6 +134,6 @@ public: virtual void processEvent(Event &event) {} }; -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index efffa70574..22aff6cb04 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -28,7 +28,7 @@ #include "tsage/graphics.h" #include "tsage/tsage.h" -namespace tSage { +namespace TsAGE { static SoundManager *_soundManager = NULL; @@ -2929,4 +2929,4 @@ void SoundBlasterDriver::proc42(int channel, int cmd, int value, int *v1, int *v *v1 = 1; } -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 2c9221c27a..9507d22cfb 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -33,7 +33,7 @@ #include "tsage/saveload.h" #include "tsage/core.h" -namespace tSage { +namespace TsAGE { class Sound; @@ -499,6 +499,6 @@ public: }; -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index adc69f2fe5..62a22cbe82 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -22,7 +22,7 @@ #include "tsage/staticres.h" -namespace tSage { +namespace TsAGE { const byte CURSOR_ARROW_DATA[] = { 15, 0, 15, 0, 0, 0, 0, 0, 9, 0, @@ -138,4 +138,4 @@ const char *BF_ACADEMY = "Here we are at the Academy"; } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 1d1fc8b95c..702e767aaf 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -25,7 +25,7 @@ #include "common/scummsys.h" -namespace tSage { +namespace TsAGE { extern const byte CURSOR_ARROW_DATA[]; @@ -105,6 +105,6 @@ extern const char *BF_ACADEMY; } // End of namespace BlueForce -} // End of namespace tSage +} // End of namespace TsAGE #endif diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 554a5499e5..b958933c0c 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -30,7 +30,7 @@ #include "tsage/resources.h" #include "tsage/globals.h" -namespace tSage { +namespace TsAGE { TSageEngine *_vm = NULL; @@ -155,4 +155,4 @@ bool TSageEngine::shouldQuit() { return getEventManager()->shouldQuit() || getEventManager()->shouldRTL(); } -} // End of namespace tSage +} // End of namespace TsAGE diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h index 805461886a..88175f92ce 100644 --- a/engines/tsage/tsage.h +++ b/engines/tsage/tsage.h @@ -36,7 +36,7 @@ #include "tsage/resources.h" -namespace tSage { +namespace TsAGE { enum { GType_Ringworld = 0, @@ -99,6 +99,6 @@ extern TSageEngine *_vm; #define ALLOCATE(x) _vm->_memoryManager.allocate2(x) #define DEALLOCATE(x) _vm->_memoryManager.deallocate(x) -} // End of namespace tSage +} // End of namespace TsAGE #endif -- cgit v1.2.3 From c280824b2d749be01e7346597d28da04419b5798 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 16 Aug 2011 21:15:18 +1000 Subject: TSAGE: Completed Blue Force Scene #100 --- engines/tsage/blue_force/blueforce_logic.cpp | 2 +- engines/tsage/blue_force/blueforce_scenes1.cpp | 41 ++++++++++++++++---------- engines/tsage/blue_force/blueforce_scenes1.h | 10 ++++++- engines/tsage/globals.cpp | 36 +++++++++++++--------- engines/tsage/globals.h | 6 ++-- engines/tsage/graphics.cpp | 18 +++++------ engines/tsage/graphics.h | 2 +- engines/tsage/scenes.cpp | 5 ++++ engines/tsage/staticres.cpp | 14 +++++++-- engines/tsage/staticres.h | 13 ++++++-- 10 files changed, 96 insertions(+), 51 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 0238475533..ec85e48fbf 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -186,7 +186,7 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { Scene::postInit(OwnerList); if (BF_GLOBALS._v4CEA2) { // Blank out the bottom portion of the screen - BF_GLOBALS._v51C24 = BF_INTERFACE_Y; + BF_GLOBALS._interfaceY = BF_INTERFACE_Y; Rect r(0, BF_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT); BF_GLOBALS.gfxManager().getSurface().fillRect(r, 0); diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index e5d66bcbb5..650b63c24b 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -36,6 +36,17 @@ namespace BlueForce { * *--------------------------------------------------------------------------*/ +void Scene100::Text::dispatch() { + SceneText::dispatch(); + + // Keep the second text string below the first one + Scene100 *scene = (Scene100 *)BF_GLOBALS._sceneManager._scene; + Common::Point &pt = scene->_action1._sceneText1._position; + scene->_action1._sceneText2.setPosition(Common::Point(pt.x, + pt.y + scene->_action1._textHeight)); +} + + void Scene100::Action1::signal() { static byte black[3] = { 0, 0, 0 }; @@ -46,9 +57,10 @@ void Scene100::Action1::signal() { break; case 1: { Common::String msg1 = _resourceManager->getMessage(100, _state++); - if (!msg1.compareTo("LASTCREDIT")) { + if (msg1.compareTo("LASTCREDIT")) { Common::String msg2 = _resourceManager->getMessage(100, _state++); setTextStrings(msg1, msg2, this); + --_actionIndex; } else { setTextStrings(BF_NAME, BF_ALL_RIGHTS_RESERVED, this); @@ -76,11 +88,11 @@ void Scene100::Action1::setTextStrings(const Common::String &msg1, const Common: _sceneText1._fontNumber = 10; _sceneText1._width = 160; _sceneText1._textMode = ALIGN_RIGHT; - _sceneText1._color1 = _globals->_fontColors.background; - _sceneText1._color2 = _globals->_fontColors.foreground; - _sceneText1._color3 = _globals->_fontColors.background; + _sceneText1._color1 = BF_GLOBALS._scenePalette._colors.foreground; + _sceneText1._color2 = BF_GLOBALS._scenePalette._colors.background; + _sceneText1._color3 = BF_GLOBALS._scenePalette._colors.foreground; _sceneText1.setup(msg1); - _sceneText1.fixPriority(-1); + _sceneText1.fixPriority(255); _sceneText1.setPosition(Common::Point( (SCREEN_WIDTH - _sceneText1.getFrame().getBounds().width()) / 2, 202)); _sceneText1._moveRate = 30; @@ -90,11 +102,11 @@ void Scene100::Action1::setTextStrings(const Common::String &msg1, const Common: _sceneText2._fontNumber = 10; _sceneText2._width = _sceneText1._width; _sceneText2._textMode = _sceneText1._textMode; - _sceneText2._color1 = _globals->_fontColors.background; - _sceneText2._color2 = _globals->_fontColors.foreground; - _sceneText2._color3 = _globals->_fontColors.background; - _sceneText2.setup(msg1); - _sceneText2.fixPriority(-1); + _sceneText2._color1 = _sceneText1._color1; + _sceneText2._color2 = 31; + _sceneText2._color3 = _sceneText1._color3; + _sceneText2.setup(msg2); + _sceneText2.fixPriority(255); GfxSurface textSurface = _sceneText2.getFrame(); _sceneText2.setPosition(Common::Point((SCREEN_WIDTH - textSurface.getBounds().width()) / 2, 202)); _sceneText2._moveRate = 30; @@ -157,7 +169,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._scenePalette.loadPalette(2); BF_GLOBALS._v51C44 = 1; Scene::postInit(); - BF_GLOBALS._v51C24 = 200; + BF_GLOBALS._interfaceY = SCREEN_HEIGHT; _globals->_player.enableControl(); _globals->_player.hide(); @@ -168,16 +180,13 @@ void Scene100::postInit(SceneObjectList *OwnerList) { // Title loadScene(100); BF_GLOBALS._sound1.play(2); -// setAction(&_action2, this); + setAction(&_action2, this); } else { // Credits loadScene(101); BF_GLOBALS._sound1.play(118); -// setAction(&_action1, this); + setAction(&_action1, this); } - - loadScene(20); - setZoomPercents(60, 85, 200, 100); } void Scene100::signal() { diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index d6cde0a44d..0769c6e3c6 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -39,12 +39,20 @@ namespace BlueForce { using namespace TsAGE; class Scene100: public SceneExt { + /* Support classes */ + class Text: public SceneText { + public: + virtual Common::String getClassName() { return "BF100Text"; } + virtual void dispatch(); + }; + /* Actions */ class Action1: public ActionExt { private: void setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action); public: - SceneText _sceneText1, _sceneText2; + Text _sceneText1; + SceneText _sceneText2; int _textHeight; virtual Common::String getClassName() { return "BF100Action1"; } diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index ce37004206..47c83fcc94 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -51,7 +51,7 @@ static SavedObject *classFactoryProc(const Common::String &className) { /*--------------------------------------------------------------------------*/ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface), - _randomSource("tsage"), _unkColor1(0), _unkColor2(255), _unkColor3(255) { + _randomSource("tsage"), _color1(0), _color2(255), _color3(255) { reset(); _stripNum = 0; _gfxEdgeAdjust = 3; @@ -64,18 +64,26 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _fontColors.foreground = 6; _dialogCenter.y = 80; // Workaround in order to use later version of the engine - _unkColor1 = _gfxColors.foreground; - _unkColor2 = _gfxColors.foreground; - _unkColor3 = _gfxColors.foreground; + _color1 = _gfxColors.foreground; + _color2 = _gfxColors.foreground; + _color3 = _gfxColors.foreground; + } else if (_vm->getGameID() == GType_BlueForce) { + // Blue Force + _gfxFontNumber = 0; + _gfxColors.background = 89; + _gfxColors.foreground = 83; + _fontColors.background = 88; + _fontColors.foreground = 92; + _dialogCenter.y = 165; } else if ((_vm->getGameID() == GType_Ringworld) && (_vm->getFeatures() & GF_CD)) { _gfxFontNumber = 50; _gfxColors.background = 53; _gfxColors.foreground = 0; _fontColors.background = 51; _fontColors.foreground = 54; - _unkColor1 = 18; - _unkColor2 = 18; - _unkColor3 = 18; + _color1 = 18; + _color2 = 18; + _color3 = 18; } else { _gfxFontNumber = 50; _gfxColors.background = 53; @@ -83,9 +91,9 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _fontColors.background = 51; _fontColors.foreground = 54; // Workaround in order to use later version of the engine - _unkColor1 = _gfxColors.foreground; - _unkColor2 = _gfxColors.foreground; - _unkColor3 = _gfxColors.foreground; + _color1 = _gfxColors.foreground; + _color2 = _gfxColors.foreground; + _color3 = _gfxColors.foreground; } _screenSurface.setScreenSurface(); _gfxManagers.push_back(&_gfxManagerInstance); @@ -143,9 +151,9 @@ void Globals::synchronize(Serializer &s) { s.syncAsSint32LE(_fontColors.foreground); if (s.getVersion() >= 4) { - s.syncAsByte(_unkColor1); - s.syncAsByte(_unkColor2); - s.syncAsByte(_unkColor3); + s.syncAsByte(_color1); + s.syncAsByte(_color2); + s.syncAsByte(_color3); } s.syncAsSint16LE(_dialogCenter.x); s.syncAsSint16LE(_dialogCenter.y); @@ -172,7 +180,7 @@ void Globals::dispatchSounds() { namespace BlueForce { BlueForceGlobals::BlueForceGlobals(): Globals() { - _v51C24 = 0; + _interfaceY = 0; _v51C44 = 1; _v4CEA2 = 0; } diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index b581294883..c8cfc1c323 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -54,7 +54,7 @@ public: int _gfxFontNumber; GfxColors _gfxColors; GfxColors _fontColors; - byte _unkColor1, _unkColor2, _unkColor3; + byte _color1, _color2, _color3; SoundManager _soundManager; Common::Point _dialogCenter; WalkRegions _walkRegions; @@ -99,7 +99,7 @@ public: extern Globals *_globals; #define GLOBALS (*_globals) -#define BF_GLOBALS (*((BlueForceGlobals *)_globals)) +#define BF_GLOBALS (*((::TsAGE::BlueForce::BlueForceGlobals *)_globals)) // Note: Currently this can't be part of the _globals structure, since it needs to be constructed // prior to many of the fields in Globals execute their constructors @@ -119,7 +119,7 @@ public: int _v501FC; int _v51C42; int _v51C44; - int _v51C24; + int _interfaceY; BlueForceGlobals(); virtual Common::String getClassName() { return "BFGlobals"; } diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 7e0994696e..1884bfb4f5 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -626,9 +626,9 @@ void GfxElement::setDefaults() { _fontNumber = _globals->_gfxFontNumber; _colors = _globals->_gfxColors; _fontColors = _globals->_fontColors; - _unkColor1 = _globals->_unkColor1; - _unkColor2 = _globals->_unkColor2; - _unkColor3 = _globals->_unkColor3; + _color1 = _globals->_color1; + _color2 = _globals->_color2; + _color3 = _globals->_color3; } /** @@ -824,9 +824,9 @@ void GfxMessage::draw() { gfxManager.setFillFlag(false); gfxManager._font.setFontNumber(_fontNumber); - gfxManager._font._colors.foreground = this->_unkColor1; - gfxManager._font._colors2.background = this->_unkColor2; - gfxManager._font._colors2.foreground = this->_unkColor3; + gfxManager._font._colors.foreground = this->_color1; + gfxManager._font._colors2.background = this->_color2; + gfxManager._font._colors2.foreground = this->_color3; // Display the text gfxManager._font.writeLines(_message.c_str(), _bounds, _textAlign); @@ -867,9 +867,9 @@ void GfxButton::draw() { gfxManager._font.setFontNumber(_fontNumber); // - gfxManager._font._colors.foreground = this->_unkColor1; - gfxManager._font._colors2.background = this->_unkColor2; - gfxManager._font._colors2.foreground = this->_unkColor3; + gfxManager._font._colors.foreground = this->_color1; + gfxManager._font._colors2.background = this->_color2; + gfxManager._font._colors2.foreground = this->_color3; // Display the button's text Rect tempRect(_bounds); diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index 45b53612e5..06b482d7b5 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -177,7 +177,7 @@ public: uint16 _fontNumber; GfxColors _colors; GfxColors _fontColors; - byte _unkColor1, _unkColor2, _unkColor3; + byte _color1, _color2, _color3; uint16 _keycode; public: GfxElement(); diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 181a927c13..53e48a1d21 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -424,6 +424,11 @@ void Scene::refreshBackground(int xAmount, int yAmount) { (xSectionSrc + 1) * 160, (ySectionSrc + 1) * 100); Rect destBounds(xSectionDest * 160, ySectionDest * 100, (xSectionDest + 1) * 160, (ySectionDest + 1) * 100); + if (_vm->getGameID() == GType_BlueForce) { + // For Blue Force, if the scene has an interface area, exclude it from the copy + srcBounds.bottom = MIN(srcBounds.bottom, BF_GLOBALS._interfaceY); + destBounds.bottom = MIN(destBounds.bottom, BF_GLOBALS._interfaceY); + } _backSurface.copyFrom(_backSurface, srcBounds, destBounds); } diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 62a22cbe82..deb6fd61a6 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -73,7 +73,6 @@ const char *SAVE_ERROR_MSG = "Error occurred saving game. Please do not try to r const char *SAVING_NOT_ALLOWED_MSG = "Saving is not allowed at this time."; const char *RESTORING_NOT_ALLOWED_MSG = "Restoring is not allowed at this time."; const char *RESTART_CONFIRM_MSG = "Do you want to restart your game?"; -const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; const char *INV_EMPTY_MSG = "You have nothing in your possesion."; const char *HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\ @@ -93,12 +92,16 @@ const char *SOUND_BTN_STRING = "Sound"; const char *RESUME_BTN_STRING = " Resume \rplay"; const char *LOOK_BTN_STRING = "Look"; const char *PICK_BTN_STRING = "Pick"; -const char *START_PLAY_BTN_STRING = " Start Play "; -const char *INTRODUCTION_BTN_STRING = "Introduction"; namespace Ringworld { +// Dialog resources +const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; +const char *START_PLAY_BTN_STRING = " Start Play "; +const char *INTRODUCTION_BTN_STRING = "Introduction"; + +// Scene specific resources const char *EXIT_MSG = " EXIT "; const char *SCENE6100_CAREFUL = "Be careful! The probe cannot handle too much of that."; const char *SCENE6100_TOUGHER = "Hey! This is tougher than it looks!"; @@ -125,6 +128,11 @@ const char *DEMO_RESUME_BTN_STRING = "Resume"; namespace BlueForce { +// Dialog resources +const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; +const char *START_PLAY_BTN_STRING = " Play "; +const char *INTRODUCTION_BTN_STRING = " Watch "; + // Blue Force general messages const char *BF_NAME = "Blue Force"; const char *BF_COPYRIGHT = " Copyright, 1993 Tsunami Media, Inc."; diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 702e767aaf..290d627090 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -40,7 +40,6 @@ extern const char *SAVE_ERROR_MSG; extern const char *SAVING_NOT_ALLOWED_MSG; extern const char *RESTORING_NOT_ALLOWED_MSG; extern const char *RESTART_CONFIRM_MSG; -extern const char *WATCH_INTRO_MSG; // Dialogs extern const char *HELP_MSG; @@ -59,11 +58,14 @@ extern const char *RESUME_BTN_STRING; extern const char *LOOK_BTN_STRING; extern const char *PICK_BTN_STRING; extern const char *INV_EMPTY_MSG; -extern const char *START_PLAY_BTN_STRING; -extern const char *INTRODUCTION_BTN_STRING; namespace Ringworld { +// Dialog resources +extern const char *WATCH_INTRO_MSG; +extern const char *START_PLAY_BTN_STRING; +extern const char *INTRODUCTION_BTN_STRING; + // Scene specific resources extern const char *EXIT_MSG; extern const char *SCENE6100_CAREFUL; @@ -92,6 +94,11 @@ extern const char *DEMO_RESUME_BTN_STRING; namespace BlueForce { +// Dialog resources +extern const char *WATCH_INTRO_MSG; +extern const char *START_PLAY_BTN_STRING; +extern const char *INTRODUCTION_BTN_STRING; + // Blue Force messages extern const char *BF_NAME; extern const char *BF_COPYRIGHT; -- cgit v1.2.3 From a21133ed12228e9a818b696bbc148f5b53946a30 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 20 Aug 2011 19:14:23 +1000 Subject: TSAGE: Implemented Blue Force Scene #50 - Map Scene --- engines/tsage/blue_force/blueforce_logic.cpp | 114 ++++++++++- engines/tsage/blue_force/blueforce_logic.h | 46 ++++- engines/tsage/blue_force/blueforce_scenes0.cpp | 263 ++++++++++++++++++++++++- engines/tsage/blue_force/blueforce_scenes0.h | 24 ++- engines/tsage/core.cpp | 18 +- engines/tsage/core.h | 2 + engines/tsage/globals.cpp | 21 ++ engines/tsage/globals.h | 13 +- engines/tsage/ringworld/ringworld_logic.cpp | 14 +- engines/tsage/ringworld/ringworld_scenes1.cpp | 2 +- engines/tsage/scenes.cpp | 2 +- engines/tsage/sound.cpp | 4 + engines/tsage/sound.h | 2 + engines/tsage/staticres.cpp | 11 ++ engines/tsage/staticres.h | 11 ++ engines/tsage/tsage.cpp | 2 +- 16 files changed, 517 insertions(+), 32 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index ec85e48fbf..46c9307632 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -33,7 +33,7 @@ namespace BlueForce { void BlueForceGame::start() { // Start the game - _globals->_sceneManager.changeScene(100); + _globals->_sceneManager.changeScene(50); _globals->_events.setCursor(CURSOR_WALK); } @@ -45,6 +45,7 @@ Scene *BlueForceGame::createScene(int sceneNumber) { // Tsunami Title Screen return new Scene20(); case 50: + return new Scene50(); case 60: error("Scene group 0 not implemented"); /* Scene Group #1 */ @@ -55,6 +56,7 @@ Scene *BlueForceGame::createScene(int sceneNumber) { // Introduction Bar Room return new Scene109(); case 110: + case 114: case 115: case 125: @@ -131,23 +133,23 @@ Scene *BlueForceGame::createScene(int sceneNumber) { /*--------------------------------------------------------------------------*/ -ObjArray::ObjArray(): EventHandler() { +AObjectArray::AObjectArray(): EventHandler() { _inUse = false; clear(); } -void ObjArray::clear() { +void AObjectArray::clear() { for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) _objList[i] = NULL; } -void ObjArray::synchronize(Serializer &s) { +void AObjectArray::synchronize(Serializer &s) { EventHandler::synchronize(s); for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) SYNC_POINTER(_objList[i]); } -void ObjArray::process(Event &event) { +void AObjectArray::process(Event &event) { if (_inUse) error("Array error"); _inUse = true; @@ -160,7 +162,7 @@ void ObjArray::process(Event &event) { _inUse = false; } -void ObjArray::dispatch() { +void AObjectArray::dispatch() { if (_inUse) error("Array error"); _inUse = true; @@ -173,12 +175,94 @@ void ObjArray::dispatch() { _inUse = false; } +int AObjectArray::getNewIndex() { + for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) { + if (!_objList[i]) + return i; + } + error("AObjectArray too full."); +} + +void AObjectArray::add(EventHandler *obj) { + int idx = getNewIndex(); + _objList[idx] = obj; +} + +void AObjectArray::remove(EventHandler *obj) { + for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) { + if (_objList[i] == obj) { + _objList[i] = NULL; + return; + } + } +} + +/*--------------------------------------------------------------------------*/ + +Timer::Timer() { + _endFrame = 0; + _endAction = NULL; + _tickAction = NULL; +} + +void Timer::remove() { + _endFrame = 0; + _endAction = NULL; + + ((Scene100 *)BF_GLOBALS._sceneManager._scene)->removeTimer(this); +} + +void Timer::signal() { + assert(_endAction); + Action *action = _endAction; + remove(); + action->signal(); +} + +void Timer::dispatch() { + if (_tickAction) + _tickAction->dispatch(); + + if (_endFrame) { + uint32 frameNumber = BF_GLOBALS._events.getFrameNumber(); + if (frameNumber > _endFrame) + // Timer has expired + signal(); + } +} + +void Timer::set(uint32 delay, Action *action) { + assert(delay != 0); + + _endFrame = BF_GLOBALS._sceneHandler->getFrameDifference() + delay; + _endAction = action; + + ((SceneExt *)BF_GLOBALS._sceneManager._scene)->addTimer(this); +} + +/*--------------------------------------------------------------------------*/ + +void SceneItemType1::process(Event &event) { + if (_action) + _action->process(event); +} + +void SceneItemType1::startMove(SceneObject *sceneObj, va_list va) { + warning("TODO: sub_1621C"); +} + +/*--------------------------------------------------------------------------*/ + +void SceneItemType2::startMove(SceneObject *sceneObj, va_list va) { +} + /*--------------------------------------------------------------------------*/ SceneExt::SceneExt(): Scene() { warning("TODO: dword_503AA/dword_503AE/dword_53030"); _field372 = 0; + _field37A = 0; _field37C = NULL; } @@ -200,7 +284,7 @@ void SceneExt::process(Event &event) { } void SceneExt::dispatch() { - _objArray1.dispatch(); + _timerList.dispatch(); if (_field37A) { if ((--_field37A == 0) && BF_GLOBALS._v4CEA2) { @@ -250,6 +334,22 @@ void GameScene::remove() { BF_GLOBALS._scenePalette._field412 = 1; } +/*--------------------------------------------------------------------------*/ + +void SceneHandlerExt::postInit(SceneObjectList *OwnerList) { + SceneHandler::postInit(OwnerList); + + // Load the low end palette data + GLOBALS._scenePalette.loadPalette(2); + GLOBALS._scenePalette.refresh(); +} + +void SceneHandlerExt::process(Event &event) { + SceneHandler::process(event); + + // TODO: All the new stuff from Blue Force +} + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index 1ff6ecf507..9ab8a87a0c 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -44,23 +44,52 @@ public: }; #define OBJ_ARRAY_SIZE 10 -class ObjArray: public EventHandler { +class AObjectArray: public EventHandler { public: EventHandler *_objList[OBJ_ARRAY_SIZE]; bool _inUse; + int getNewIndex(); public: - ObjArray(); + AObjectArray(); void clear(); - virtual Common::String getClassName() { return "ObjArray"; } + virtual Common::String getClassName() { return "AObjectArray"; } virtual void synchronize(Serializer &s); virtual void process(Event &event); virtual void dispatch(); + + void add(EventHandler *obj); + void remove(EventHandler *obj); +}; + +class Timer: public EventHandler { +public: + Action *_tickAction; + Action *_endAction; + uint32 _endFrame; +public: + Timer(); + void set(uint32 delay, Action *action); + + virtual void remove(); + virtual void signal(); + virtual void dispatch(); +}; + +class SceneItemType1: public SceneItem { +public: + virtual void process(Event &event); + virtual void startMove(SceneObject *sceneObj, va_list va); +}; + +class SceneItemType2: public SceneItemType1 { +public: + virtual void startMove(SceneObject *sceneObj, va_list va); }; class SceneExt: public Scene { public: - ObjArray _objArray1, _objArray2; + AObjectArray _timerList, _objArray2; int _field372; int _field37A; EventHandler *_field37C; @@ -75,6 +104,9 @@ public: virtual void dispatch(); virtual void loadScene(int sceneNum); virtual void proc13() { warning("TODO: SceneExt::proc13"); } + + void addTimer(Timer *timer) { _timerList.add(timer); } + void removeTimer(Timer *timer) { _timerList.remove(timer); } }; class GameScene: public SceneExt { @@ -88,6 +120,12 @@ public: virtual void remove(); }; +class SceneHandlerExt: public SceneHandler { +public: + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void process(Event &event); +}; + class BlueAnimatedSpeaker: public Speaker { public: }; diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index cc0f9bb1fd..bf9a7572ae 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -199,14 +199,13 @@ void Scene20::postInit(SceneObjectList *OwnerList) { *--------------------------------------------------------------------------*/ Scene50::Tooltip::Tooltip(): SavedObject() { - strcpy(_msg, ""); - _field60 = _field62 = 0; + _newSceneNumber = _locationId = 0; } void Scene50::Tooltip::synchronize(Serializer &s) { SavedObject::synchronize(s); _bounds.synchronize(s); - s.syncBytes((byte *)&_msg[0], 84); + s.syncString(_msg); } void Scene50::Tooltip2::signal() { @@ -237,8 +236,266 @@ void Scene50::Tooltip2::dispatch() { } } +void Scene50::Tooltip::set(const Rect &bounds, int v60, const Common::String &msg, int v62) { + _bounds = bounds; + _newSceneNumber = v60; + _msg = msg; + _locationId = v62; +} + +void Scene50::Tooltip::update() { + // Set up the text object for the scene with the appropriate settings + Scene50 *scene = (Scene50 *)BF_GLOBALS._sceneManager._scene; + scene->_text._fontNumber = 10; + scene->_text._color1 = BF_GLOBALS._scenePalette._colors.foreground; + scene->_text._color2 = BF_GLOBALS._scenePalette._colors.background; + scene->_text.setup(_msg); + + int yp = (scene->_text._textSurface.getBounds().height() == 0) ? _bounds.bottom : _bounds.top; + scene->_text.setPosition(Common::Point(_bounds.left, yp)); +} + +void Scene50::Tooltip::highlight(bool btnDown) { + Scene50 *scene = (Scene50 *)BF_GLOBALS._sceneManager._scene; + + scene->_field382 = _newSceneNumber; + if ((scene->_field380 != 0) || (scene->_field380 != _newSceneNumber)) + update(); + + if (btnDown) { + if ((BF_GLOBALS._bikiniHutState == 14) && BF_GLOBALS.getFlag(98)) + scene->_sceneNumber = 600; + else if (BF_GLOBALS._bikiniHutState == 5) + scene->_sceneNumber = 410; + else { + BF_GLOBALS._v4CEF4 = _newSceneNumber; + + switch (BF_GLOBALS._v4CEF2) { + case 330: + case 340: + case 342: + BF_GLOBALS._player.disableControl(); + if (_locationId != BF_GLOBALS._mapLocationId) { + scene->_sceneNumber = 330; + } else { + scene->_sceneNumber = (BF_GLOBALS._v4CEA2 != 1) || (BF_GLOBALS._bikiniHutState < 1) || + (BF_GLOBALS._bikiniHutState >= 2) ? 342 : 340; + } + break; + + case 410: + case 551: + if (BF_GLOBALS.getFlag((BF_GLOBALS._v4CEF2 == 410) ? 41 : 40)) { + BF_GLOBALS._mapLocationId = _locationId; + BF_GLOBALS._player.disableControl(); + scene->_sceneNumber = _newSceneNumber; + } else { + BF_GLOBALS._v4CEA8 = 4; + BF_GLOBALS._sceneManager.changeScene(666); + return; + } + break; + + case 300: + if (_locationId == 1) { + BF_GLOBALS._v4CEF4 = 300; + _newSceneNumber = 300; + } + // Deliberate fall through to default + default: + BF_GLOBALS._mapLocationId = _locationId; + BF_GLOBALS._player.disableControl(); + scene->_sceneNumber = _newSceneNumber; + break; + } + + // Signal the scene to change to the new scene + scene->_sceneMode = 1; + scene->signal(); + } + } +} + /*--------------------------------------------------------------------------*/ +Scene50::Scene50(): SceneExt() { + _field382 = 0; + _field380 = 0; +} + +void Scene50::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + + BF_GLOBALS._interfaceY = 200; + BF_GLOBALS._player.postInit(); + BF_GLOBALS._player.setVisage(830); + BF_GLOBALS._player.setStrip(3); + BF_GLOBALS._player.setPosition(Common::Point(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2)); + BF_GLOBALS._player.hide(); + BF_GLOBALS._player.enableControl(); + BF_GLOBALS._player._uiEnabled = false; + + BF_GLOBALS._scrollFollower = NULL; + _text._color1 = 19; + _text._color2 = 9; + _text._color3 = 9; + _text._width = 75; + _text._fontNumber = 4; + _text._textMode = ALIGN_LEFT; + _text.fixPriority(256); + + // Set all the hotspots + _location3.set(Rect(10, 92, 24, 105), 180, GRANDMA_FRANNIE, 4); + _location2.set(Rect(443, 149, 508, 178), 330, MARINA, 2); + _location1.set(Rect(573, 103, 604, 130), 190, POLICE_DEPARTMENT, 1); + _location4.set(Rect(313, 21, 325, 33), 114, TONYS_BAR, 8); + _location8.set(Rect(69, 79, 82, 88), 580, CHILD_PROTECTIVE_SERVICES, 256); + _location6.set(Rect(242, 131, 264, 144), 440, ALLEY_CAT, 64); + _location5.set(Rect(383, 57, 402, 70), 380, CITY_HALL_JAIL, 32); + _location7.set(Rect(128, 32, 143, 42), 800, JAMISON_RYAN, 128); + _location9.set(Rect(349, 125, 359, 132), + (BF_GLOBALS._bikiniHutState == 13) || (BF_GLOBALS._bikiniHutState == 14) ? 551 : 550, + BIKINI_HUT, 16); + + _item.setBounds(Rect(0, 0, SCREEN_WIDTH * 2, SCREEN_HEIGHT)); + BF_GLOBALS._sceneItems.push_back(&_item); + + // Find the location to start at + int selectedTooltip = BF_GLOBALS._mapLocationId; + Tooltip *tooltip = NULL; + int xp = 0; + + switch (selectedTooltip) { + case 1: + tooltip = &_location1; + xp = 588; + break; + case 2: + tooltip = &_location2; + xp = 475; + break; + case 4: + tooltip = &_location3; + xp = 17; + break; + case 8: + tooltip = &_location4; + xp = 319; + break; + case 32: + tooltip = &_location5; + xp = 392; + break; + case 64: + tooltip = &_location6; + xp = 253; + break; + case 128: + tooltip = &_location7; + xp = 135; + break; + case 16: + tooltip = &_location9; + xp = 354; + break; + case 256: + tooltip = &_location8; + xp = 75; + break; + } + + loadBackground(xp - 160, 0); + tooltip->update(); + + _timer.set(240, this); + _sceneBounds.center(xp, SCREEN_HEIGHT / 2); + loadScene(55); + _sceneMode = 2; +} + +void Scene50::remove() { + // Blank out the screen + BF_GLOBALS._screenSurface.fillRect(BF_GLOBALS._screenSurface.getBounds(), 0); + + SceneExt::remove(); + BF_GLOBALS._v4E238 = 1; +} + +void Scene50::signal() { + if (_sceneMode == 1) { + // Destination selected + if ((BF_GLOBALS._v4CEF2 == 551) && (_sceneNumber != BF_GLOBALS._v4CEF2)) { + BF_GLOBALS.setFlag(109); + BF_GLOBALS.setFlag(115); + BF_GLOBALS.setFlag(121); + BF_GLOBALS.setFlag(127); + BF_GLOBALS.setFlag(133); + } + + if ((BF_GLOBALS._v4CEF2 == 410) && (_sceneNumber != BF_GLOBALS._v4CEF2)) { + BF_GLOBALS.setFlag(125); + } + + if ((BF_GLOBALS._v4CEF2 == 340) && (_sceneNumber != BF_GLOBALS._v4CEF2)) { + BF_GLOBALS.setFlag(123); + } + + if ((BF_GLOBALS._v4CEF2 == 380) && (_sceneNumber != BF_GLOBALS._v4CEF2)) { + if (BF_GLOBALS._bikiniHutState >= 4) + BF_GLOBALS.setFlag(129); + if (BF_GLOBALS._bikiniHutState >= 6) + BF_GLOBALS.setFlag(131); + if (BF_GLOBALS._bikiniHutState == 3) { + BF_GLOBALS._v4CEA8 = 19; + _sceneNumber = 666; + } + } + + if ((_sceneNumber == 551) && BF_GLOBALS.getFlag(147)) + _sceneNumber = 550; + + BF_GLOBALS._sound1.fadeOut2(NULL); + BF_GLOBALS._sceneManager.changeScene(_sceneNumber); + + } else if (_sceneMode == 2) { + // Initial delay complete, time to switch to interactive mode + _text.remove(); + BF_GLOBALS._player.enableControl(); + _sceneMode = 0; + _field380 = 0; + } +} + +void Scene50::process(Event &event) { + SceneExt::process(event); + Common::Point pt(event.mousePos.x + _sceneBounds.left, event.mousePos.y + _sceneBounds.top); + bool mouseDown = false; + _field382 = 0; + + if ((event.mousePos.x > 270 && (_sceneBounds.right < (SCREEN_WIDTH * 2)))) + loadBackground(4, 0); + else if ((event.mousePos.x < 50) && (_sceneBounds.left > 0)) + loadBackground(-4, 0); + else + mouseDown = event.eventType == EVENT_BUTTON_DOWN; + + if (BF_GLOBALS._player._uiEnabled) { + Tooltip *tooltipList[9] = { &_location1, &_location2, &_location3, &_location4, + &_location5, &_location6, &_location7, &_location8, &_location9 }; + + for (int idx = 0; idx < 9; ++idx) { + if (tooltipList[idx]->_bounds.contains(pt)) { + // Found a tooltip to highlight + tooltipList[idx]->highlight(mouseDown); + return; + } + } + + // No hotspot selected, so remove any current tooltip display + _text.remove(); + } +} + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 587941e59e..5c98184ed8 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -59,11 +59,14 @@ class Scene50: public SceneExt { class Tooltip: public SavedObject { public: Rect _bounds; - char _msg[80]; - int _field60; - int _field62; + Common::String _msg; + int _newSceneNumber; + int _locationId; public: Tooltip(); + void set(const Rect &bounds, int v60, const Common::String &msg, int v62); + void update(); + void highlight(bool btnDown); virtual Common::String getClassName() { return "Scene50_Tooltip"; } virtual void synchronize(Serializer &s); @@ -77,7 +80,20 @@ class Scene50: public SceneExt { virtual void dispatch(); }; public: - + int _field380, _field382; + int _sceneNumber; + SceneText _text; + SceneItemType2 _item; + Tooltip _location1, _location2, _location3, _location4, _location5; + Tooltip _location6, _location7, _location8, _location9; + Timer _timer; +public: + Scene50(); + virtual Common::String getClassName() { return "Scene50"; } + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); }; } // End of namespace BlueForce diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 864c3af103..7ad2084985 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -3473,6 +3473,7 @@ void GameHandler::synchronize(Serializer &s) { SceneHandler::SceneHandler() { _saveGameSlot = -1; _loadGameSlot = -1; + _prevFrameNumber = 0; } void SceneHandler::registerHandler() { @@ -3480,6 +3481,10 @@ void SceneHandler::registerHandler() { _globals->_game->addHandler(this); } +uint32 SceneHandler::getFrameDifference() { + return GLOBALS._events.getFrameNumber() - _prevFrameNumber; +} + void SceneHandler::postInit(SceneObjectList *OwnerList) { _delayTicks = 2; @@ -3594,10 +3599,19 @@ void SceneHandler::dispatch() { // Not actually used //_eventListeners.forEach(SceneHandler::handleListener); - // Handle pending eents + // Handle pending events Event event; - while (_globals->_events.getEvent(event)) + if (_globals->_events.getEvent(event)) { + // Process pending events + do { + process(event); + } while (_globals->_events.getEvent(event)); + } else if (_vm->getGameID() == GType_BlueForce) { + // For Blue Force, 'none' events need to be generated in the absence of any + event.eventType = EVENT_NONE; + event.mousePos = _globals->_events._mousePos; process(event); + } // Handle drawing the contents of the scene if (_globals->_sceneManager._scene) diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 96e7e82fe5..19987ed399 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -846,9 +846,11 @@ public: int _loadGameSlot; int _delayTicks; Common::String _saveName; + uint32 _prevFrameNumber; public: SceneHandler(); void registerHandler(); + uint32 getFrameDifference(); virtual Common::String getClassName() { return "SceneHandler"; } virtual void postInit(SceneObjectList *OwnerList = NULL); diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 47c83fcc94..27067c7d1c 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -116,10 +116,12 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface } else { _game = new Ringworld::RingworldDemoGame(); } + _sceneHandler = new SceneHandler(); break; case GType_BlueForce: _game = new BlueForce::BlueForceGame(); + _sceneHandler = new BlueForce::SceneHandlerExt(); break; } } @@ -127,6 +129,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface Globals::~Globals() { _scenePalette.clearListeners(); delete _inventory; + delete _sceneHandler; delete _game; _globals = NULL; } @@ -183,6 +186,16 @@ BlueForceGlobals::BlueForceGlobals(): Globals() { _interfaceY = 0; _v51C44 = 1; _v4CEA2 = 0; + _v4CEA8 = 0; + _v4CEF2 = 0; + _v4CEF4 = 0; + _v4CF9E = 0; + _v4E238 = 0; + _v501FC = 0; + _v51C42 = 0; + _bikiniHutState = 0; + _mapLocationId = 1; + Common::set_to(&_globalFlags[0], &_globalFlags[12], 0); } void BlueForceGlobals::synchronize(Serializer &s) { @@ -190,6 +203,14 @@ void BlueForceGlobals::synchronize(Serializer &s) { error("Sync variables"); } +bool BlueForceGlobals::getFlag(int v) { + return _globalFlags[v / 16] & (1 << (v % 8)); +} + +void BlueForceGlobals::setFlag(int v) { + _globalFlags[v / 16] |= 1 << (v % 8); +} + } // end of namespace BlueForce } // end of namespace TsAGE diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index c8cfc1c323..2d409b6343 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -40,7 +40,7 @@ public: GfxSurface _screenSurface; GfxManager _gfxManagerInstance; Common::List _gfxManagers; - SceneHandler _sceneHandler; + SceneHandler *_sceneHandler; Game *_game; EventsClass _events; SceneManager _sceneManager; @@ -112,18 +112,27 @@ using namespace TsAGE; class BlueForceGlobals: public Globals { public: - ASound _sound1, _sound2, _sound3; + ASoundExt _sound1, _sound2, _sound3; int _v4CEA2; + int _v4CEA8; + int _v4CEF2; + int _v4CEF4; int _v4CF9E; int _v4E238; int _v501FC; int _v51C42; int _v51C44; int _interfaceY; + int _bikiniHutState; + int _mapLocationId; + uint8 _globalFlags[12]; BlueForceGlobals(); virtual Common::String getClassName() { return "BFGlobals"; } virtual void synchronize(Serializer &s); + + void setFlag(int v); + bool getFlag(int v); }; } // End of namespace BlueForce diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index d6e72fe95c..2a34e49b39 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -1287,7 +1287,7 @@ void RingworldGame::saveGame() { MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING); else { // Show the save dialog - handleSaveLoad(true, _globals->_sceneHandler._saveGameSlot, _globals->_sceneHandler._saveName); + handleSaveLoad(true, _globals->_sceneHandler->_saveGameSlot, _globals->_sceneHandler->_saveName); } } @@ -1296,7 +1296,7 @@ void RingworldGame::restoreGame() { MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING); else { // Show the load dialog - handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName); + handleSaveLoad(false, _globals->_sceneHandler->_loadGameSlot, _globals->_sceneHandler->_saveName); } } @@ -1348,7 +1348,7 @@ void RingworldGame::start() { } if (slot >= 0) - _globals->_sceneHandler._loadGameSlot = slot; + _globals->_sceneHandler->_loadGameSlot = slot; else // Switch to the title screen _globals->_sceneManager.setNewScene(1000); @@ -1365,8 +1365,8 @@ void RingworldGame::restart() { _globals->setFlag(34); // Clear save/load slots - _globals->_sceneHandler._saveGameSlot = -1; - _globals->_sceneHandler._loadGameSlot = -1; + _globals->_sceneHandler->_saveGameSlot = -1; + _globals->_sceneHandler->_loadGameSlot = -1; _globals->_stripNum = 0; _globals->_events.setCursor(CURSOR_WALK); @@ -1431,8 +1431,8 @@ void RingworldGame::endGame(int resNum, int lineNum) { restart(); breakFlag = true; } else { - handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName); - breakFlag = _globals->_sceneHandler._loadGameSlot >= 0; + handleSaveLoad(false, _globals->_sceneHandler->_loadGameSlot, _globals->_sceneHandler->_saveName); + breakFlag = _globals->_sceneHandler->_loadGameSlot >= 0; } } while (!breakFlag); } diff --git a/engines/tsage/ringworld/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp index 332aef6d8d..20af25561c 100644 --- a/engines/tsage/ringworld/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld/ringworld_scenes1.cpp @@ -3168,7 +3168,7 @@ Scene6100::Scene6100(): Scene() { _angle = 0; _msgActive = false; - _globals->_sceneHandler._delayTicks = 8; + _globals->_sceneHandler->_delayTicks = 8; _globals->_player.disableControl(); _globals->_events.setCursor(CURSOR_WALK); diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 53e48a1d21..c3625452de 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -113,7 +113,7 @@ void SceneManager::sceneChange() { assert(_objectCount == _saver->getObjectCount()); } _objectCount = _saver->getObjectCount(); - _globals->_sceneHandler._delayTicks = 2; + _globals->_sceneHandler->_delayTicks = 2; // Instantiate and set the new scene _scene = getNewScene(); diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 22aff6cb04..7c8dc83fe9 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -2477,6 +2477,10 @@ void ASoundExt::signal() { } } +void ASoundExt::fadeOut2(Action *action) { + fade(0, 10, 10, true, action); +} + /*--------------------------------------------------------------------------*/ SoundDriver::SoundDriver() { diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 9507d22cfb..afcc8f6377 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -406,6 +406,8 @@ public: int _soundNum; ASoundExt(); + void fadeOut2(Action *action); + virtual Common::String getClassName() { return "ASoundExt"; } virtual void synchronize(Serializer &s); virtual void signal(); diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index deb6fd61a6..819cf56f31 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -144,6 +144,17 @@ const char *BF_11_YEARS = "Eleven years later."; const char *BF_NEXT_DAY = "The Next Day"; const char *BF_ACADEMY = "Here we are at the Academy"; +// Scene 50 hotspots +const char *GRANDMA_FRANNIE = "Grandma Frannie"; +const char *MARINA = "Marina"; +const char *POLICE_DEPARTMENT = "Police Department"; +const char *TONYS_BAR = "Tony's Bar"; +const char *CHILD_PROTECTIVE_SERVICES = "Child Protective Services"; +const char *ALLEY_CAT = "Alley Cat"; +const char *CITY_HALL_JAIL = "City Hall & Jail"; +const char *JAMISON_RYAN = "Jamison & Ryan"; +const char *BIKINI_HUT = "Bikini Hut"; + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 290d627090..b08e92def2 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -110,6 +110,17 @@ extern const char *BF_11_YEARS; extern const char *BF_NEXT_DAY; extern const char *BF_ACADEMY; +// Scene 50 tooltips +extern const char *GRANDMA_FRANNIE; +extern const char *MARINA; +extern const char *POLICE_DEPARTMENT; +extern const char *TONYS_BAR; +extern const char *CHILD_PROTECTIVE_SERVICES; +extern const char *ALLEY_CAT; +extern const char *CITY_HALL_JAIL; +extern const char *JAMISON_RYAN; +extern const char *BIKINI_HUT; + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index b958933c0c..2fcabff16c 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -102,7 +102,7 @@ Common::Error TSageEngine::run() { // Basic initialisation initialize(); - _globals->_sceneHandler.registerHandler(); + _globals->_sceneHandler->registerHandler(); _globals->_game->execute(); deinitialize(); -- cgit v1.2.3 From 472d2ef9a30e43e4c4f1818da0cfa0122f7a9982 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 20 Aug 2011 21:30:03 +1000 Subject: TSAGE: Fix memory leak of sound voiceType list --- engines/tsage/sound.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 7c8dc83fe9..0b77628801 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -71,6 +71,14 @@ SoundManager::~SoundManager() { // g_system->getTimerManager()->removeTimerProc(_sfUpdateCallback); } + // Free any allocated voice type structures + for (int idx = 0; idx < SOUND_ARR_SIZE; ++idx) { + if (sfManager()._voiceTypeStructPtrs[idx]) { + delete sfManager()._voiceTypeStructPtrs[idx]; + sfManager()._voiceTypeStructPtrs[idx] = NULL; + } + } + _soundManager = NULL; } -- cgit v1.2.3 From fbf8262ce6c7f17a7cfd5ac6e9e4a9f53489870a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 20 Aug 2011 21:30:52 +1000 Subject: TSAGE: Fix Valgrind issues with loading Scene 50 --- engines/tsage/blue_force/blueforce_scenes0.cpp | 6 +++--- engines/tsage/core.cpp | 1 + engines/tsage/scenes.cpp | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index bf9a7572ae..f1b714ec6c 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -404,13 +404,13 @@ void Scene50::postInit(SceneObjectList *OwnerList) { break; } - loadBackground(xp - 160, 0); - tooltip->update(); - _timer.set(240, this); _sceneBounds.center(xp, SCREEN_HEIGHT / 2); loadScene(55); _sceneMode = 2; + + loadBackground(xp - 160, 0); + tooltip->update(); } void Scene50::remove() { diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 7ad2084985..42cb1d039f 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1718,6 +1718,7 @@ SceneObject::SceneObject() : SceneHotspot() { _sceneRegionId = 0; _percent = 100; _flags |= OBJFLAG_PANES; + _priority = 0; _frameChange = 0; _visage = 0; diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index c3625452de..5aeacda6fe 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -38,6 +38,7 @@ SceneManager::SceneManager() { _scrollerRect = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); _saver->addListener(this); _objectCount = 0; + _loadMode = 0; } SceneManager::~SceneManager() { @@ -257,6 +258,7 @@ void SceneManager::listenerSynchronize(Serializer &s) { Scene::Scene() : _sceneBounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), _backgroundBounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) { _sceneMode = 0; + _activeScreenNumber = 0; _oldSceneBounds = Rect(4000, 4000, 4100, 4100); Common::set_to(&_zoomPercents[0], &_zoomPercents[256], 0); } -- cgit v1.2.3