diff options
author | athrxx | 2011-04-21 20:29:25 +0200 |
---|---|---|
committer | athrxx | 2011-04-21 20:29:25 +0200 |
commit | 204644b001d85612742426b5731b8149b0a24f2e (patch) | |
tree | 8e19872f056e773335536b5cb6a70d3e3f55f75f | |
parent | b0008d2d33c394fbba358c08b032c5872e6a909d (diff) | |
parent | 44e79c70fa2908e0abdb7c9effa1dd039404a520 (diff) | |
download | scummvm-rg350-204644b001d85612742426b5731b8149b0a24f2e.tar.gz scummvm-rg350-204644b001d85612742426b5731b8149b0a24f2e.tar.bz2 scummvm-rg350-204644b001d85612742426b5731b8149b0a24f2e.zip |
Merge branch 'master' of https://github.com/scummvm/scummvm
38 files changed, 513 insertions, 450 deletions
diff --git a/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp b/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp index 6b0074862e..93c779ea5f 100644 --- a/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp +++ b/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp @@ -23,7 +23,7 @@ * */ -#if defined(MACOSX) || defined(GP2X) +#if defined(MACOSX) || defined(GP2X) || defined(CAANOO) || defined(GP2XWIZ) #include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h" diff --git a/backends/module.mk b/backends/module.mk index 426409ab73..cd0e2a56de 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -75,11 +75,6 @@ MODULE_OBJS := \ vkeybd/virtual-keyboard-gui.o \ vkeybd/virtual-keyboard-parser.o -ifeq ($(BACKEND),dc) -MODULE_OBJS += \ - plugins/dc/dc-provider.o -endif - ifeq ($(BACKEND),ds) MODULE_OBJS += \ fs/ds/ds-fs-factory.o \ diff --git a/backends/platform/dc/Makefile b/backends/platform/dc/Makefile index 637f474b4b..11d9421a0a 100644 --- a/backends/platform/dc/Makefile +++ b/backends/platform/dc/Makefile @@ -65,7 +65,7 @@ ENABLE_TOUCHE = $(ENABLED) ENABLE_TUCKER = $(ENABLED) OBJS := dcmain.o time.o display.o audio.o input.o selector.o icon.o \ - label.o vmsave.o softkbd.o dcloader.o cache.o dc-fs.o + label.o vmsave.o softkbd.o dcloader.o cache.o dc-fs.o plugins.o MODULE_DIRS += ./ diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h index 76c4b8cfd2..f0c8c1f96c 100644 --- a/backends/platform/dc/dc.h +++ b/backends/platform/dc/dc.h @@ -31,6 +31,9 @@ #include "backends/audiocd/default/default-audiocd.h" #include "backends/fs/fs-factory.h" #include "audio/mixer_intern.h" +#ifdef DYNAMIC_MODULES +#include "backends/plugins/dynamic-plugin.h" +#endif #define NUM_BUFFERS 4 #define SOUND_BUFFER_SHIFT 3 @@ -69,7 +72,11 @@ class DCCDManager : public DefaultAudioCDManager { void updateCD(); }; -class OSystem_Dreamcast : private DCHardware, public BaseBackend, public PaletteManager, public FilesystemFactory { +class OSystem_Dreamcast : private DCHardware, public BaseBackend, public PaletteManager, public FilesystemFactory +#ifdef DYNAMIC_MODULES + , public FilePluginProvider +#endif + { public: OSystem_Dreamcast(); @@ -250,6 +257,14 @@ public: void logMessage(LogMessageType::Type type, const char *message); Common::String getSystemLanguage() const; + +#ifdef DYNAMIC_MODULES + class DCPlugin; + + protected: + Plugin* createPlugin(const Common::FSNode &node) const; + bool isPluginFilename(const Common::FSNode &node) const; +#endif }; diff --git a/backends/platform/dc/dcmain.cpp b/backends/platform/dc/dcmain.cpp index bbd4f994f7..f9640130d3 100644 --- a/backends/platform/dc/dcmain.cpp +++ b/backends/platform/dc/dcmain.cpp @@ -33,7 +33,6 @@ #include <common/config-manager.h> #include <common/memstream.h> -#include "backends/plugins/dc/dc-provider.h" #include "audio/mixer_intern.h" @@ -336,7 +335,7 @@ int main() g_system = &osys_dc; #ifdef DYNAMIC_MODULES - PluginManager::instance().addPluginProvider(new DCPluginProvider()); + PluginManager::instance().addPluginProvider(&osys_dc); #endif scummvm_main(argc, argv); diff --git a/backends/platform/dc/module.mk b/backends/platform/dc/module.mk index c52ca1a474..9ab287c080 100644 --- a/backends/platform/dc/module.mk +++ b/backends/platform/dc/module.mk @@ -1,7 +1,7 @@ MODULE := backends/platform/dc MODULE_OBJS := dcmain.o time.o display.o audio.o input.o selector.o icon.o \ - label.o vmsave.o softkbd.o dcloader.o cache.o dc-fs.o + label.o vmsave.o softkbd.o dcloader.o cache.o dc-fs.o plugins.o # We don't use rules.mk but rather manually update OBJS and MODULE_DIRS. MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) diff --git a/backends/plugins/dc/dc-provider.cpp b/backends/platform/dc/plugins.cpp index 86ef68828c..be329ab314 100644 --- a/backends/plugins/dc/dc-provider.cpp +++ b/backends/platform/dc/plugins.cpp @@ -25,16 +25,48 @@ #include "common/scummsys.h" -#if defined(DYNAMIC_MODULES) && defined(__DC__) +#if defined(DYNAMIC_MODULES) -#include "backends/plugins/dc/dc-provider.h" #include "backends/plugins/dynamic-plugin.h" #include "common/fs.h" #include "dcloader.h" +extern void draw_solid_quad(float x1, float y1, float x2, float y2, + int c0, int c1, int c2, int c3); + +static void drawPluginProgress(const Common::String &filename) +{ + ta_sync(); + void *mark = ta_txmark(); + Label lab1, lab2, lab3; + char buf[32]; + unsigned memleft = 0x8cf00000-((unsigned)sbrk(0)); + float ffree = memleft*(1.0/(16<<20)); + int fcol = (memleft < (1<<20)? 0xffff0000: + (memleft < (4<<20)? 0xffffff00: 0xff00ff00)); + snprintf(buf, sizeof(buf), "%dK free memory", memleft>>10); + lab1.create_texture("Loading plugins, please wait..."); + lab2.create_texture(filename.c_str()); + lab3.create_texture(buf); + ta_begin_frame(); + draw_solid_quad(80.0, 320.0, 560.0, 350.0, + 0xff808080, 0xff808080, 0xff808080, 0xff808080); + draw_solid_quad(85.0, 325.0, 555.0, 345.0, + 0xff202020, 0xff202020, 0xff202020, 0xff202020); + draw_solid_quad(85.0, 325.0, 85.0+470.0*ffree, 345.0, + fcol, fcol, fcol, fcol); + ta_commit_end(); + lab1.draw(100.0, 200.0, 0xffffffff); + lab2.draw(100.0, 240.0, 0xffffffff); + lab3.draw(100.0, 280.0, 0xffffffff); + ta_commit_frame(); + ta_sync(); + ta_txrelease(mark); +} + -class DCPlugin : public DynamicPlugin { +class OSystem_Dreamcast::DCPlugin : public DynamicPlugin { protected: void *_dlHandle; @@ -59,6 +91,7 @@ public: bool loadPlugin() { assert(!_dlHandle); + drawPluginProgress(_filename); _dlHandle = dlopen(_filename.c_str(), RTLD_LAZY); if (!_dlHandle) { @@ -85,11 +118,11 @@ public: }; -Plugin* DCPluginProvider::createPlugin(const Common::FSNode &node) const { +Plugin* OSystem_Dreamcast::createPlugin(const Common::FSNode &node) const { return new DCPlugin(node.getPath()); } -bool DCPluginProvider::isPluginFilename(const Common::FSNode &node) const { +bool OSystem_Dreamcast::isPluginFilename(const Common::FSNode &node) const { // Check the plugin suffix Common::String filename = node.getName(); if (!filename.hasSuffix(".PLG")) @@ -98,4 +131,4 @@ bool DCPluginProvider::isPluginFilename(const Common::FSNode &node) const { return true; } -#endif // defined(DYNAMIC_MODULES) && defined(__DC__) +#endif // defined(DYNAMIC_MODULES) diff --git a/backends/platform/gph/gph-backend.cpp b/backends/platform/gph/gph-backend.cpp index 0432974246..fddcd03d85 100644 --- a/backends/platform/gph/gph-backend.cpp +++ b/backends/platform/gph/gph-backend.cpp @@ -26,23 +26,22 @@ #include "backends/platform/sdl/sdl-sys.h" // #include "backends/platform/gph/gph-options.h" -#include "backends/platform/gph/gph-sdl.h" +#include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h" #include "backends/platform/gph/gph-hw.h" +#include "backends/platform/gph/gph-sdl.h" #include "backends/plugins/posix/posix-provider.h" +#include "backends/saves/default/default-saves.h" +#include "backends/timer/default/default-timer.h" + #include "base/main.h" #include "common/archive.h" #include "common/config-manager.h" #include "common/debug.h" #include "common/events.h" -#include "common/util.h" - #include "common/file.h" -#include "base/main.h" - -#include "backends/saves/default/default-saves.h" +#include "common/util.h" -#include "backends/timer/default/default-timer.h" #include "audio/mixer_intern.h" #include <stdio.h> @@ -67,6 +66,14 @@ void OSystem_GPH::initBackend() { _graphicsManager = new GPHGraphicsManager(_eventSource); } + // Create the mixer manager + if (_mixer == 0) { + _mixerManager = new DoubleBufferSDLMixerManager(); + + // Setup and start mixer + _mixerManager->init(); + } + /* Setup default save path to be workingdir/saves */ char savePath[PATH_MAX+1]; diff --git a/backends/platform/gph/gph-sdl.h b/backends/platform/gph/gph-sdl.h index 51c609d29e..68a641eed7 100644 --- a/backends/platform/gph/gph-sdl.h +++ b/backends/platform/gph/gph-sdl.h @@ -32,7 +32,6 @@ #include "backends/events/gph/gph-events.h" #define __GP2XWIZ__ -#define MIXER_DOUBLE_BUFFERING 1 #ifndef PATH_MAX #define PATH_MAX 255 diff --git a/backends/platform/openpandora/op-backend.cpp b/backends/platform/openpandora/op-backend.cpp index 5b333929c9..4c29636e40 100644 --- a/backends/platform/openpandora/op-backend.cpp +++ b/backends/platform/openpandora/op-backend.cpp @@ -26,20 +26,17 @@ #include "backends/platform/openpandora/op-sdl.h" #include "base/main.h" +#include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h" #include "backends/saves/default/default-saves.h" +#include "backends/timer/default/default-timer.h" #include "common/archive.h" #include "common/config-manager.h" #include "common/debug.h" #include "common/events.h" -#include "common/util.h" - #include "common/file.h" -#include "base/main.h" - -#include "backends/saves/default/default-saves.h" +#include "common/util.h" -#include "backends/timer/default/default-timer.h" #include "audio/mixer_intern.h" #include <stdio.h> @@ -78,6 +75,14 @@ void OSystem_OP::initBackend() { // } // + // Create the mixer manager + if (_mixer == 0) { + _mixerManager = new DoubleBufferSDLMixerManager(); + + // Setup and start mixer + _mixerManager->init(); + } + /* Setup default save path to be workingdir/saves */ char savePath[PATH_MAX+1]; diff --git a/backends/platform/openpandora/op-sdl.h b/backends/platform/openpandora/op-sdl.h index 93c82ca397..9d92472b17 100644 --- a/backends/platform/openpandora/op-sdl.h +++ b/backends/platform/openpandora/op-sdl.h @@ -32,7 +32,6 @@ #include "backends/graphics/openpandora/op-graphics.h" #define __OPENPANDORA__ -#define MIXER_DOUBLE_BUFFERING 1 #ifndef PATH_MAX #define PATH_MAX 255 diff --git a/backends/platform/symbian/AdaptAllMMPs.pl b/backends/platform/symbian/AdaptAllMMPs.pl index 921f384c65..84f42d2a0b 100644 --- a/backends/platform/symbian/AdaptAllMMPs.pl +++ b/backends/platform/symbian/AdaptAllMMPs.pl @@ -111,7 +111,8 @@ ParseModule("_base", "base", \@section_empty); # now in ./TRG/ScummVM_TRG.mmp, ParseModule("_base", "common", \@section_empty); ParseModule("_base", "gui", \@section_empty, \@excludes_gui); ParseModule("_base", "graphics", \@section_empty, \@excludes_graphics); -ParseModule("_base", "sound", \@section_empty, \@excludes_snd); +ParseModule("_base", "audio", \@section_empty, \@excludes_snd); +ParseModule("_base", "video", \@section_empty); chdir("engines/"); ParseModule("_scumm", "scumm", \@sections_scumm, \@excludes_scumm ); diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in index b3bfbab530..2b74bca42b 100644 --- a/backends/platform/symbian/mmp/scummvm_base.mmp.in +++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in @@ -96,11 +96,11 @@ SOURCEPATH ..\..\..\..\gui //SOURCE Actions.cpp SOURCEPATH ..\..\..\..\audio -//START_AUTO_OBJECTS_SOUND_// +//START_AUTO_OBJECTS_AUDIO_// // empty base file, will be updated by Perl build scripts -//STOP_AUTO_OBJECTS_SOUND_// +//STOP_AUTO_OBJECTS_AUDIO_// SOURCE softsynth\fmtowns_pc98\towns_pc98_fmsynth.cpp // Included since its excluded by filter #if defined (WINS) diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h index 1c5de2d43c..e8a620475e 100644 --- a/backends/platform/symbian/src/portdefs.h +++ b/backends/platform/symbian/src/portdefs.h @@ -35,6 +35,11 @@ #include <e32std.h> #include <math.h> +/* define pi */ +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif /* M_PI */ + #define DISABLE_COMMAND_LINE #if defined(USE_TREMOR) && !defined(USE_VORBIS) diff --git a/backends/plugins/dc/dc-provider.h b/backends/plugins/dc/dc-provider.h deleted file mode 100644 index 55413ade5a..0000000000 --- a/backends/plugins/dc/dc-provider.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. - * - * $URL$ - * $Id$ - * - */ - -#ifndef BACKENDS_PLUGINS_DC_H -#define BACKENDS_PLUGINS_DC_H - -#include "base/plugins.h" - -#if defined(DYNAMIC_MODULES) && defined(__DC__) - -class DCPluginProvider : public FilePluginProvider { -protected: - Plugin* createPlugin(const Common::FSNode &node) const; - - bool isPluginFilename(const Common::FSNode &node) const; -}; - -#endif // defined(DYNAMIC_MODULES) && defined(__DC__) - -#endif diff --git a/common/stream.cpp b/common/stream.cpp index c0783b2352..1be3fbffea 100644 --- a/common/stream.cpp +++ b/common/stream.cpp @@ -205,7 +205,6 @@ uint32 SubReadStream::read(void *dataPtr, uint32 dataSize) { } dataSize = _parentStream->read(dataPtr, dataSize); - _eos |= _parentStream->eos(); _pos += dataSize; return dataSize; diff --git a/common/substream.h b/common/substream.h index dc49ce9ecf..4d90ec5ced 100644 --- a/common/substream.h +++ b/common/substream.h @@ -59,7 +59,7 @@ public: delete _parentStream; } - virtual bool eos() const { return _eos; } + virtual bool eos() const { return _eos | _parentStream->eos(); } virtual bool err() const { return _parentStream->err(); } virtual void clearErr() { _eos = false; _parentStream->clearErr(); } virtual uint32 read(void *dataPtr, uint32 dataSize); diff --git a/engines/gob/save/savefile.cpp b/engines/gob/save/savefile.cpp index d472ef600b..45cd2a2b7d 100644 --- a/engines/gob/save/savefile.cpp +++ b/engines/gob/save/savefile.cpp @@ -336,7 +336,7 @@ bool SavePartSprite::read(Common::ReadStream &stream) { // If it's in the current format, the true color flag has to be the same too if (!_oldFormat) - if (stream.readByte() != _trueColor) + if ((stream.readByte() != 0) != _trueColor) return false; // Sprite data diff --git a/engines/hugo/mouse.cpp b/engines/hugo/mouse.cpp index 1b2dd588b8..e8926b17c4 100644 --- a/engines/hugo/mouse.cpp +++ b/engines/hugo/mouse.cpp @@ -363,6 +363,7 @@ void MouseHandler::readHotspot(Common::ReadStream &in, hotspot_t &hotspot) { void MouseHandler::loadHotspots(Common::ReadStream &in) { hotspot_t *wrkHotspots = 0; hotspot_t tmp; + memset(&tmp, 0, sizeof(tmp)); for (int varnt = 0; varnt < _vm->_numVariant; varnt++) { int numRows = in.readUint16BE(); if (varnt == _vm->_gameVariant) diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp index feee4cbadd..9cfdd1a41d 100644 --- a/engines/hugo/parser.cpp +++ b/engines/hugo/parser.cpp @@ -87,6 +87,7 @@ void Parser::readCmd(Common::ReadStream &in, cmd &curCmd) { */ void Parser::loadCmdList(Common::ReadStream &in) { cmd tmpCmd; + memset(&tmpCmd, 0, sizeof(tmpCmd)); for (int varnt = 0; varnt < _vm->_numVariant; varnt++) { uint16 numElem = in.readUint16BE(); if (varnt == _vm->_gameVariant) { @@ -119,6 +120,7 @@ void Parser::readBG(Common::ReadStream &in, background_t &curBG) { */ void Parser::loadBackgroundObjects(Common::ReadStream &in) { background_t tmpBG; + memset(&tmpBG, 0, sizeof(tmpBG)); for (int varnt = 0; varnt < _vm->_numVariant; varnt++) { uint16 numElem = in.readUint16BE(); @@ -145,6 +147,7 @@ void Parser::loadBackgroundObjects(Common::ReadStream &in) { void Parser::loadCatchallList(Common::ReadStream &in) { background_t *wrkCatchallList = 0; background_t tmpBG; + memset(&tmpBG, 0, sizeof(tmpBG)); for (int varnt = 0; varnt < _vm->_numVariant; varnt++) { uint16 numElem = in.readUint16BE(); diff --git a/engines/lure/menu.cpp b/engines/lure/menu.cpp index c4654c3e93..f9a78d8fc8 100644 --- a/engines/lure/menu.cpp +++ b/engines/lure/menu.cpp @@ -34,7 +34,7 @@ #include "lure/events.h" #include "lure/lure.h" -#if defined(_WIN32_WCE) || defined(__SYMBIAN32__) +#if defined(_WIN32_WCE) || defined(__SYMBIAN32__) || defined(WEBOS) #define LURE_CLICKABLE_MENUS #endif diff --git a/engines/mohawk/myst_stacks/selenitic.cpp b/engines/mohawk/myst_stacks/selenitic.cpp index f485bab2f9..a84cd0632d 100644 --- a/engines/mohawk/myst_stacks/selenitic.cpp +++ b/engines/mohawk/myst_stacks/selenitic.cpp @@ -816,7 +816,7 @@ void Selenitic::o_soundLockEndMove(uint16 op, uint16 var, uint16 argc, uint16 *a debugC(kDebugScript, "Opcode %d: Sound lock end move", op); MystResourceType10 *slider = soundLockSliderFromVar(var); - uint16 *value = 0; + uint16 *value = &_state.soundLockSliderPositions[0]; switch (var) { case 20: // Sound lock sliders @@ -834,6 +834,9 @@ void Selenitic::o_soundLockEndMove(uint16 op, uint16 var, uint16 argc, uint16 *a case 24: value = &_state.soundLockSliderPositions[4]; break; + default: + error("Incorrect var value for Selenitic opcode 114"); + break; } uint16 stepped = 12 * (*value / 12) + 6; diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp index fb96518f19..25bf91c3ad 100644 --- a/engines/sci/engine/script.cpp +++ b/engines/sci/engine/script.cpp @@ -611,7 +611,7 @@ void Script::initialiseObjectsSci0(SegManager *segMan, SegmentId segmentId) { // #3150767. // Same happens with script 764, it seems to // contain junk towards its end. - _objects.erase(addr.toUint16() + (getSciVersion() < SCI_VERSION_1_1) ? 8 : 0); + _objects.erase(addr.toUint16() - SCRIPT_OBJECT_MAGIC_OFFSET); } else { error("Failed to locate base object for object at %04X:%04X", PRINT_REG(addr)); } diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index d77e536d5b..57c5c48975 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -530,7 +530,7 @@ void StripManager::start(int stripNum, EventHandler *owner, StripCallback *callb _stripNum = stripNum; _callbackObject = callback; - _sceneNumber = _globals->_sceneManager._scene->_sceneNumber; + _sceneNumber = _globals->_sceneManager._scene->_screenNumber; _sceneBounds = _globals->_sceneManager._scene->_sceneBounds; _script.clear(); @@ -631,7 +631,7 @@ void StripManager::remove() { if (_activeSpeaker) _activeSpeaker->remove(); - if (_sceneNumber != _globals->_sceneManager._scene->_sceneNumber) { + if (_sceneNumber != _globals->_sceneManager._scene->_screenNumber) { _globals->_sceneManager._scene->_sceneBounds = _sceneBounds; _globals->_sceneManager._scene->loadScene(_sceneNumber); } @@ -695,7 +695,7 @@ void StripManager::signal() { _activeSpeaker->remove(); _activeSpeaker = speakerP; - if ((_activeSpeaker->_newSceneNumber == -1) && (_globals->_sceneManager._scene->_sceneNumber != _sceneNumber)) { + if ((_activeSpeaker->_newSceneNumber == -1) && (_globals->_sceneManager._scene->_screenNumber != _sceneNumber)) { _globals->_sceneManager._scene->_sceneBounds = _sceneBounds; _globals->_sceneManager._scene->loadScene(_sceneNumber); } diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 2d0a69f89c..1b38599df1 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1300,7 +1300,7 @@ uint8 ScenePalette::indexOf(uint r, uint g, uint b, int threshold) { int bDiff = abs(ib - (int)b); int idxThreshold = rDiff * rDiff + gDiff * gDiff + bDiff * bDiff; - if (idxThreshold <= threshold) { + if (idxThreshold < threshold) { threshold = idxThreshold; palIndex = i; } @@ -2254,8 +2254,9 @@ void SceneObject::removeObject() { _mover->remove(); _mover = NULL; } - if (_flags & 0x800) - destroy(); + if (_flags & OBJFLAG_CLONED) + // Cloned temporary object, so delete it + delete this; } GfxSurface SceneObject::getFrame() { @@ -2388,8 +2389,8 @@ void SceneObjectList::draw() { // Handle updating object priority if (!(obj->_flags & OBJFLAG_FIXED_PRIORITY)) { - obj->_priority = MIN((int)obj->_position.y - 1, - (int)_globals->_sceneManager._scene->_backgroundBounds.bottom); + obj->_priority = MIN((int)obj->_position.y, + (int)_globals->_sceneManager._scene->_backgroundBounds.bottom - 1); } if ((_globals->_paneRefreshFlag[paneNum] != 0) || !_globals->_paneRegions[paneNum].empty()) { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 6508d1576a..c18984fd45 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -728,6 +728,7 @@ public: } SynchronisedList<SceneObject *>::iterator begin() { return _objList.begin(); } SynchronisedList<SceneObject *>::iterator end() { return _objList.end(); } + int size() const { return _objList.size(); } 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); } diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index 21970cee24..688f266133 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -464,6 +464,7 @@ void InventoryDialog::execute() { GfxElement *hiliteObj; bool lookFlag = false; + _gfxManager.activate(); while (!_vm->getEventManager()->shouldQuit()) { // Get events @@ -511,9 +512,7 @@ void InventoryDialog::execute() { _globals->_events.setCursor(CURSOR_WALK); } - _gfxManager.activate(); hiliteObj->draw(); - _gfxManager.deactivate(); } else if (hiliteObj) { // Inventory item selected InvObject *invObject = static_cast<GfxInvImage *>(hiliteObj)->_invObject; @@ -525,6 +524,8 @@ void InventoryDialog::execute() { } } } + + _gfxManager.deactivate(); } /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp index c8d10e1708..506d8bd36d 100644 --- a/engines/tsage/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld_scenes1.cpp @@ -1866,33 +1866,33 @@ void Scene60::Action1::signal() { setDelay(3); break; case 1: - scene->_object9.postInit(); - scene->_object9.setVisage(60); - scene->_object9.setStrip(7); - scene->_object9.setPosition(Common::Point(136, 65)); - scene->_object9.animate(ANIM_MODE_5, this); + 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.startSound(35); break; case 2: - scene->_object10.postInit(); - scene->_object10.setVisage(60); - scene->_object10.setPosition(Common::Point(199, 186)); - scene->_object10.animate(ANIM_MODE_8, 0, NULL); - scene->_object10._numFrames = 5; + 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->_object5.postInit(); - scene->_object5.setVisage(60); - scene->_object5.setStrip2(3); - scene->_object5.setFrame(2); - scene->_object5.setPosition(Common::Point(148, 85)); - scene->_object5.animate(ANIM_MODE_2, NULL); - scene->_object5._numFrames = 5; - - _globals->_sceneItems.push_front(&scene->_object5); + 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.startSound(38); } @@ -1901,10 +1901,10 @@ void Scene60::Action1::signal() { case 3: scene->_soundHandler2.startSound(37); scene->loadScene(65); - scene->_object5.remove(); + scene->_message.remove(); - if (_globals->_sceneObjects->contains(&scene->_object10)) - scene->_object10.remove(); + if (_globals->_sceneObjects->contains(&scene->_redLights)) + scene->_redLights.remove(); scene->_controlButton.remove(); scene->_slaveButton.remove(); @@ -1912,29 +1912,29 @@ void Scene60::Action1::signal() { scene->_item1.remove(); scene->_item2.remove(); - scene->_object3.postInit(); - scene->_object3.setVisage(65); - scene->_object3.setPosition(Common::Point(118, 197)); - - scene->_object2.postInit(); - scene->_object2.setVisage(65); - scene->_object2.setStrip(2); - scene->_object2.setPosition(Common::Point(160, 197)); - - scene->_object4.postInit(); - scene->_object4.setVisage(65); - scene->_object4.setStrip(3); - scene->_object4.setPosition(Common::Point(202, 197)); - - scene->_object1.postInit(); - scene->_object1.setVisage(65); - scene->_object1.setStrip(4); - scene->_object1.setFrame(1); - scene->_object1.setPosition(Common::Point(145, 165)); - - _globals->_sceneItems.push_front(&scene->_object3); - _globals->_sceneItems.push_front(&scene->_object2); - _globals->_sceneItems.push_front(&scene->_object4); + 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); @@ -1954,19 +1954,19 @@ void Scene60::Action1::signal() { _globals->_player._uiEnabled = false; _globals->_inventory._infoDisk._sceneNumber = 1; - if (_globals->_sceneObjects->contains(&scene->_object5)) - scene->_object5.remove(); + if (_globals->_sceneObjects->contains(&scene->_message)) + scene->_message.remove(); scene->_controlButton.animate(ANIM_MODE_NONE); scene->_controlButton.setFrame(1); - scene->_object10.remove(); + scene->_redLights.remove(); - scene->_object9.postInit(); - scene->_object9.setVisage(60); - scene->_object9.setStrip(7); - scene->_object9.setPosition(Common::Point(136, 65)); - scene->_object9.setFrame(scene->_object9.getFrameCount()); - scene->_object9.animate(ANIM_MODE_6, this); + 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.startSound(35); scene->_soundHandler3.proc3(); @@ -1982,7 +1982,7 @@ void Scene60::Action1::signal() { break; case 11: _globals->_player._uiEnabled = true; - scene->_object9.remove(); + scene->_floppyDrive.remove(); remove(); break; case 8: @@ -2010,7 +2010,7 @@ void Scene60::Action2::signal() { /*--------------------------------------------------------------------------*/ -void Scene60::Object2::doAction(int action) { +void Scene60::PrevObject::doAction(int action) { Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; if (action == CURSOR_LOOK) { @@ -2028,7 +2028,7 @@ void Scene60::Object2::doAction(int action) { } } -void Scene60::Object3::doAction(int action) { +void Scene60::NextObject::doAction(int action) { Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; if (action == CURSOR_LOOK) { @@ -2045,7 +2045,7 @@ void Scene60::Object3::doAction(int action) { } } -void Scene60::Object4::doAction(int action) { +void Scene60::ExitObject::doAction(int action) { Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; if (action == CURSOR_LOOK) { @@ -2053,16 +2053,17 @@ void Scene60::Object4::doAction(int action) { } else if (action == CURSOR_USE) { scene->_soundHandler3.startSound(36); animate(ANIM_MODE_8, 1, NULL); - scene->_object3.remove(); - scene->_object2.remove(); - scene->_object4.remove(); - scene->_object1.remove(); + 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); @@ -2079,12 +2080,12 @@ void Scene60::Object4::doAction(int action) { _globals->_sceneItems.push_front(&scene->_masterButton); _globals->_sceneItems.push_front(&scene->_slaveButton); - scene->_object10.postInit(); - scene->_object10.setVisage(60); - scene->_object10.setPosition(Common::Point(199, 186)); - scene->_object10.animate(ANIM_MODE_8, 0, NULL); - scene->_object10._numFrames = 5; - scene->_object10.setAction(&scene->_sequenceManager, scene, 61, NULL); + 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); @@ -2109,7 +2110,7 @@ void Scene60::Object4::doAction(int action) { } } -void Scene60::Object5::doAction(int action) { +void Scene60::MessageObject::doAction(int action) { Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; if (action == CURSOR_LOOK) { @@ -2205,7 +2206,7 @@ void Scene60::MasterObject::doAction(int action) { } } -void Scene60::Object9::doAction(int action) { +void Scene60::FloppyDrive::doAction(int action) { Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene; if (action == CURSOR_LOOK) { @@ -2341,22 +2342,22 @@ void Scene60::postInit(SceneObjectList *OwnerList) { if (_globals->getFlag(118)) { _controlButton.animate(ANIM_MODE_2, NULL); - _object10.postInit(); - _object10.setVisage(60); - _object10.setPosition(Common::Point(199, 186)); - _object10.animate(ANIM_MODE_8, 0, NULL); + _redLights.postInit(); + _redLights.setVisage(60); + _redLights.setPosition(Common::Point(199, 186)); + _redLights.animate(ANIM_MODE_8, 0, NULL); _soundHandler1.startSound(35); if (!_globals->getFlag(83)) { - _object5.postInit(); - _object5.setVisage(60); - _object5.setStrip2(3); - _object5.setFrame(2); - _object5.setPosition(Common::Point(148, 85)); - _object5.animate(ANIM_MODE_2, NULL); - _object5._numFrames = 5; - _globals->_sceneItems.push_front(&_object5); + _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.startSound(38); } @@ -2375,23 +2376,23 @@ void Scene60::postInit(SceneObjectList *OwnerList) { if (_globals->getFlag(121)) { _controlButton.animate(ANIM_MODE_2, NULL); - _object10.postInit(); - _object10.setVisage(60); - _object10.setPosition(Common::Point(199, 186)); - _object10.animate(ANIM_MODE_8, 0, NULL); - _object10._numFrames = 5; + _redLights.postInit(); + _redLights.setVisage(60); + _redLights.setPosition(Common::Point(199, 186)); + _redLights.animate(ANIM_MODE_8, 0, NULL); + _redLights._numFrames = 5; _soundHandler1.startSound(35); if (!_globals->getFlag(83)) { - _object5.postInit(); - _object5.setVisage(60); - _object5.setStrip2(3); - _object5.setFrame(2); - _object5.setPosition(Common::Point(148, 85)); - _object5.animate(ANIM_MODE_2, NULL); - _object5._numFrames = 5; - _globals->_sceneItems.push_front(&_object5); + _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.startSound(38); } @@ -2424,7 +2425,7 @@ void Scene60::signal() { void Scene60::process(Event &event) { Scene::process(event); - if (_sceneNumber == 60) { + if (_screenNumber == 60) { if (_gfxButton.process(event)) _globals->_sceneManager.changeScene(50); } diff --git a/engines/tsage/ringworld_scenes1.h b/engines/tsage/ringworld_scenes1.h index 4862bedfe0..be6d8e6337 100644 --- a/engines/tsage/ringworld_scenes1.h +++ b/engines/tsage/ringworld_scenes1.h @@ -323,19 +323,19 @@ class Scene60 : public Scene { public: virtual void signal(); }; - class Object2 : public SceneObject { + class PrevObject : public SceneObject { public: virtual void doAction(int action); }; - class Object3 : public SceneObject { + class NextObject : public SceneObject { public: virtual void doAction(int action); }; - class Object4 : public SceneObject { + class ExitObject : public SceneObject { public: virtual void doAction(int action); }; - class Object5 : public SceneObject { + class MessageObject : public SceneObject { public: virtual void doAction(int action); }; @@ -351,7 +351,7 @@ class Scene60 : public Scene { public: virtual void doAction(int action); }; - class Object9 : public SceneObject { + class FloppyDrive : public SceneObject { public: virtual void doAction(int action); }; @@ -378,16 +378,16 @@ public: SpeakerSText _speakerSText; Action1 _action1; Action2 _action2; - SceneObject _object1; - Object2 _object2; - Object3 _object3; - Object4 _object4; - Object5 _object5; + SceneObject _rose; + PrevObject _prevButton; + NextObject _nextButton; + ExitObject _exitButton; + MessageObject _message; ControlObject _controlButton; SlaveObject _slaveButton; MasterObject _masterButton; - Object9 _object9; - SceneObject _object10; + FloppyDrive _floppyDrive; + SceneObject _redLights; Item1 _item1; Item _item2, _item3, _item4, _item5, _item6; SoundHandler _soundHandler1; diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index 4d413a09fb..5e0cabde6a 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -785,7 +785,7 @@ void Scene9400::dispatch() { void Scene9400::postInit(SceneObjectList *OwnerList) { Scene::postInit(); - _sceneNumber = 9400; + _screenNumber = 9400; setZoomPercents(0, 100, 200, 100); _globals->_player.postInit(); _object1.postInit(0); diff --git a/engines/tsage/ringworld_scenes2.cpp b/engines/tsage/ringworld_scenes2.cpp index 9d941d3242..3e3686e2d5 100644 --- a/engines/tsage/ringworld_scenes2.cpp +++ b/engines/tsage/ringworld_scenes2.cpp @@ -112,28 +112,23 @@ void Scene1000::Action3::signal() { setDelay(240); break; case 5: { - // Intro.txt file presence is used to allow user option to skip the introduction - _globals->_player.enableControl(); - Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading("Intro.txt"); - if (!in) { - // File not present, so create it - Common::OutSaveFile *out = g_system->getSavefileManager()->openForSaving("Intro.txt"); - out->finalize(); - delete out; - setDelay(1); - } else { - delete in; + // WORKAROUND: At this point, the original used the presence of a file called 'Intro.txt' + // to determine whether the introduction has been played the first time the game was started. + // In ScummVM, we don't like creating any files that aren't explicitly savegames, so the + // game startup will always show the Start Play / Introduction buttons, even when the game + // is played for the first time - // Prompt user for whether to start play or watch introduction - if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) { - _actionIndex = 20; - _globals->_soundHandler.proc1(this); - } else { - setDelay(1); - } + // Prompt user for whether to start play or watch introduction + _globals->_player.enableControl(); - _globals->_player.disableControl(); + if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) { + _actionIndex = 20; + _globals->_soundHandler.proc1(this); + } else { + setDelay(1); } + + _globals->_player.disableControl(); break; } case 6: { diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp index 1571f18f84..bd276a8fee 100644 --- a/engines/tsage/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld_scenes3.cpp @@ -5068,7 +5068,7 @@ void Scene2320::Action3::signal() { break; } case 3: - scene->_hotspot6.setPriority2(scene->_hotspot6._priority - 1); + _globals->_player.setPriority2(scene->_hotspot6._priority - 1); _globals->_player._strip = 3; setDelay(10); break; @@ -5798,7 +5798,7 @@ void Scene2320::postInit(SceneObjectList *OwnerList) { _globals->_sceneItems.push_back(&_hotspot8); } - _area1.setup(2100, 2, 1, 2100); + _area1.setup(2153, 2, 1, 2100); _area1._pt = Common::Point(200, 31); _area2.setup(2153, 3, 1, 2150); _area2._pt = Common::Point(200, 50); diff --git a/engines/tsage/ringworld_scenes5.cpp b/engines/tsage/ringworld_scenes5.cpp index b424a403db..bf4af4d781 100644 --- a/engines/tsage/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld_scenes5.cpp @@ -57,28 +57,28 @@ void Scene4000::Action1::signal() { break; } case 1: { - scene->_hotspot9.postInit(); - scene->_hotspot9.setVisage(4001); - scene->_hotspot9.animate(ANIM_MODE_1, NULL); - scene->_hotspot9.setObjectWrapper(new SceneObjectWrapper()); - scene->_hotspot9.setPosition(Common::Point(314, 132)); + 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)); - ADD_PLAYER_MOVER_NULL(scene->_hotspot9, 288, 167); + ADD_PLAYER_MOVER_NULL(scene->_guardRock, 288, 167); - scene->_hotspot4.postInit(); - scene->_hotspot4.setVisage(4006); - scene->_hotspot4.animate(ANIM_MODE_1, NULL); - scene->_hotspot4.setStrip(1); - scene->_hotspot4.setPosition(Common::Point(207, 136)); + 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->_hotspot4, 220, 151); + ADD_PLAYER_MOVER_NULL(scene->_olo, 220, 151); - scene->_hotspot7.postInit(); - scene->_hotspot7.setVisage(2701); - scene->_hotspot7.animate(ANIM_MODE_1, NULL); - scene->_hotspot7.setObjectWrapper(new SceneObjectWrapper()); - scene->_hotspot7._moveDiff = Common::Point(4, 2); - scene->_hotspot7.setPosition(Common::Point(300, 135)); + 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_NULL(_globals->_player, 266, 169); break; @@ -89,13 +89,13 @@ void Scene4000::Action1::signal() { case 3: { Common::Point pt1(30, 86); PlayerMover *mover1 = new PlayerMover(); - scene->_hotspot7.addMover(mover1, &pt1, this); + scene->_miranda.addMover(mover1, &pt1, this); ADD_PLAYER_MOVER_NULL(scene->_hotspot5, 3, 86); break; } case 4: - ADD_MOVER(scene->_hotspot7, -30, 86); + ADD_MOVER(scene->_miranda, -30, 86); ADD_MOVER(scene->_hotspot5, -40, 86); break; case 5: @@ -105,7 +105,7 @@ void Scene4000::Action1::signal() { scene->_stripManager.start(4430, this); break; case 6: - ADD_PLAYER_MOVER_THIS(scene->_hotspot4, 277, 175); + ADD_PLAYER_MOVER_THIS(scene->_olo, 277, 175); ADD_PLAYER_MOVER_NULL(_globals->_player, 258, 187); break; case 7: @@ -135,19 +135,19 @@ void Scene4000::Action2::signal() { scene->_hotspot5._moveDiff.x = 5; scene->_hotspot5.setPosition(Common::Point(-8, 88)); - scene->_hotspot3.setAction(&scene->_sequenceManager3, NULL, 4003, &scene->_hotspot5, NULL); - scene->_hotspot7.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_hotspot7, NULL); + 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->_hotspot3.remove(); - ADD_MOVER(scene->_hotspot9, scene->_hotspot5._position.x + 30, scene->_hotspot5._position.y - 10); + scene->_lander.remove(); + ADD_MOVER(scene->_guardRock, scene->_hotspot5._position.x + 30, scene->_hotspot5._position.y - 10); break; case 2: - _globals->_player.checkAngle(&scene->_hotspot9); - scene->_hotspot5.checkAngle(&scene->_hotspot9); - scene->_hotspot7.checkAngle(&scene->_hotspot9); + _globals->_player.checkAngle(&scene->_guardRock); + scene->_hotspot5.checkAngle(&scene->_guardRock); + scene->_miranda.checkAngle(&scene->_guardRock); scene->_stripManager.start(4000, this); break; case 3: @@ -166,9 +166,9 @@ void Scene4000::Action2::signal() { scene->_stripManager.start(4010, this); break; case 6: - ADD_PLAYER_MOVER_NULL(scene->_hotspot9, 230, 149); + ADD_PLAYER_MOVER_NULL(scene->_guardRock, 230, 149); ADD_PLAYER_MOVER(210, 136); - ADD_PLAYER_MOVER_NULL(scene->_hotspot7, 210, 133); + ADD_PLAYER_MOVER_NULL(scene->_miranda, 210, 133); break; case 7: _globals->_sceneManager.changeScene(4045); @@ -210,11 +210,11 @@ void Scene4000::Action4::signal() { _globals->_player.animate(ANIM_MODE_4, 2, 1, this); break; case 2: - scene->_hotspot6.postInit(); - scene->_hotspot6.setVisage(4000); - scene->_hotspot6.setStrip(7); - scene->_hotspot6.setFrame(3); - scene->_hotspot6.setPosition(Common::Point(268, 44)); + scene->_rope.postInit(); + scene->_rope.setVisage(4000); + scene->_rope.setStrip(7); + scene->_rope.setFrame(3); + scene->_rope.setPosition(Common::Point(268, 44)); _globals->_inventory._rope._sceneNumber = 4000; _globals->_events.setCursor(CURSOR_USE); @@ -270,22 +270,22 @@ void Scene4000::Action6::signal() { setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL); if (!_globals->getFlag(36)) - scene->_hotspot7.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_hotspot7, NULL); + scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL); break; case 2: _globals->_player.disableControl(); - ADD_MOVER(scene->_hotspot9, _globals->_player._position.x + 30, _globals->_player._position.y - 5); + 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->_hotspot9, 292, 138); + ADD_MOVER_NULL(scene->_guardRock, 292, 138); ADD_PLAYER_MOVER(283, 147); if (!_globals->getFlag(36)) { - ADD_PLAYER_MOVER_NULL(scene->_hotspot7, 280, 150); + ADD_PLAYER_MOVER_NULL(scene->_miranda, 280, 150); } break; case 5: @@ -301,7 +301,7 @@ void Scene4000::Action7::signal() { case 0: _globals->_player.disableControl(); - scene->_hotspot6.setFrame(1); + scene->_rope.setFrame(1); ADD_MOVER(_globals->_player, 247, 53); break; case 1: @@ -325,7 +325,7 @@ void Scene4000::Action8::signal() { case 0: _globals->_player.disableControl(); if (_globals->getFlag(41)) - scene->_hotspot6.setFrame(2); + scene->_rope.setFrame(2); ADD_MOVER(_globals->_player, 289, 53); break; @@ -343,9 +343,9 @@ void Scene4000::Action8::signal() { break; case 3: _globals->_soundHandler.startSound(170); - scene->_hotspot27.setVisage(4000); - scene->_hotspot27.setStrip(6); - scene->_hotspot27.animate(ANIM_MODE_2, NULL); + scene->_smoke2.setVisage(4000); + scene->_smoke2.setStrip(6); + scene->_smoke2.animate(ANIM_MODE_2, NULL); setDelay(60); break; case 4: @@ -388,7 +388,7 @@ void Scene4000::Action11::signal() { switch (_actionIndex++) { case 0: _globals->_player.disableControl(); - ADD_MOVER(scene->_hotspot3, -30, 70); + ADD_MOVER(scene->_lander, -30, 70); break; case 1: setDelay(60); @@ -403,23 +403,23 @@ void Scene4000::Action11::signal() { setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL); - scene->_hotspot7.setPosition(Common::Point(-210, 139)); - scene->_hotspot7.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_hotspot7, NULL); - scene->_hotspot3.setAction(&scene->_sequenceManager3, NULL, 4003, &scene->_hotspot5, 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->_hotspot4, 263, 187); - scene->_hotspot4.animate(ANIM_MODE_1, NULL); + ADD_MOVER(scene->_olo, 263, 187); + scene->_olo.animate(ANIM_MODE_1, NULL); break; case 5: scene->_soundHandler1.proc3(); scene->_hotspot11.remove(); ADD_MOVER(_globals->_player, 340, 163); - ADD_MOVER_NULL(scene->_hotspot7, 340, 169); + ADD_MOVER_NULL(scene->_miranda, 340, 169); ADD_MOVER_NULL(scene->_hotspot5, 340, 165); break; case 6: @@ -444,7 +444,7 @@ void Scene4000::Action12::signal() { _globals->setFlag(32); if (scene->_stripManager._field2E8 == 275) { _globals->setFlag(82); - ADD_MOVER_NULL(scene->_hotspot9, 292, 138); + ADD_MOVER_NULL(scene->_guardRock, 292, 138); ADD_PLAYER_MOVER(283, 147); } else { setDelay(30); @@ -454,11 +454,11 @@ void Scene4000::Action12::signal() { if (scene->_stripManager._field2E8 == 275) { _globals->_sceneManager.changeScene(4100); } else { - ADD_PLAYER_MOVER_THIS(scene->_hotspot9, 300, 132); + ADD_PLAYER_MOVER_THIS(scene->_guardRock, 300, 132); } break; case 4: - scene->_hotspot9.hide(); + scene->_guardRock.hide(); scene->_stripManager.start(4020, this); break; case 5: @@ -480,7 +480,7 @@ void Scene4000::Action13::signal() { case 1: scene->_soundHandler2.startSound(151); scene->_soundHandler2.proc5(true); - ADD_MOVER(scene->_hotspot3, -30, 70); + ADD_MOVER(scene->_lander, -30, 70); break; case 2: scene->_soundHandler2.proc4(); @@ -491,7 +491,7 @@ void Scene4000::Action13::signal() { /*--------------------------------------------------------------------------*/ -void Scene4000::Hotspot7::doAction(int action) { +void Scene4000::Miranda::doAction(int action) { Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (action) { @@ -577,7 +577,7 @@ void Scene4000::Hotspot8::doAction(int action) { } } -void Scene4000::Hotspot9::doAction(int action) { +void Scene4000::GuardRock::doAction(int action) { switch (action) { case OBJECT_STUNNER: SceneItem::display2(4000, 28); @@ -594,7 +594,7 @@ void Scene4000::Hotspot9::doAction(int action) { } } -void Scene4000::Hotspot10::doAction(int action) { +void Scene4000::Ladder::doAction(int action) { Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (action) { @@ -608,7 +608,7 @@ void Scene4000::Hotspot10::doAction(int action) { scene->setAction(&scene->_sequenceManager1, scene, 4005, &_globals->_player, NULL); } else { scene->_sceneMode = 4004; - scene->setAction(&scene->_sequenceManager1, scene, 4004, &_globals->_player, &scene->_hotspot10, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 4004, &_globals->_player, &scene->_ladder, NULL); } break; default: @@ -617,7 +617,7 @@ void Scene4000::Hotspot10::doAction(int action) { } } -void Scene4000::Hotspot12::doAction(int action) { +void Scene4000::TheTech::doAction(int action) { Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (action) { @@ -635,7 +635,7 @@ void Scene4000::Hotspot12::doAction(int action) { SceneItem::display2(4000, 37); else { _globals->_player.disableControl(); - if (_globals->_sceneObjects->contains(&scene->_hotspot7)) + if (_globals->_sceneObjects->contains(&scene->_miranda)) _globals->clearFlag(96); scene->_sceneMode = 4012; @@ -683,12 +683,12 @@ void Scene4000::Hotspot::doAction(int action) { case OBJECT_LADDER: _globals->_player.disableControl(); - scene->_hotspot10.postInit(); - scene->_hotspot10.setVisage(4000); - scene->_hotspot10.setStrip(5); - scene->_hotspot10.setPosition(Common::Point(245, 147)); - scene->_hotspot10.hide(); - _globals->_sceneItems.push_front(&scene->_hotspot10); + 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); @@ -696,7 +696,7 @@ void Scene4000::Hotspot::doAction(int action) { } scene->_sceneMode = 4004; - scene->setAction(&scene->_sequenceManager1, scene, 4011, &_globals->_player, &scene->_hotspot10, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 4011, &_globals->_player, &scene->_ladder, NULL); break; default: SceneHotspot::doAction(action); @@ -786,10 +786,10 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_speakerSText); _stripManager.addSpeaker(&_speakerMText); - _speakerCHFText._npc = &_hotspot9; + _speakerCHFText._npc = &_guardRock; _speakerSText._npc = &_hotspot5; - _speakerMText._npc = &_hotspot7; - _speakerPText._npc = &_hotspot4; + _speakerMText._npc = &_miranda; + _speakerPText._npc = &_olo; _speakerQText._npc = &_globals->_player; _hotspot13.setBounds(Rect(263, 41, 278, 55)); @@ -808,20 +808,20 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _hotspot20._sceneRegionId = 18; _hotspot25._sceneRegionId = 17; - _hotspot1.postInit(); - _hotspot1.setVisage(4000); - _hotspot1.setPriority2(1); - _hotspot1.setFrame(2); - _hotspot1.setPosition(Common::Point(242, 59)); - _hotspot1.animate(ANIM_MODE_2, NULL); - - _hotspot27.postInit(); - _hotspot27.setVisage(4000); - _hotspot27.setStrip(2); - _hotspot27.setPriority2(1); - _hotspot27.setFrame(2); - _hotspot27.setPosition(Common::Point(299, 59)); - _hotspot27.animate(ANIM_MODE_2, NULL); + _smoke1.postInit(); + _smoke1.setVisage(4000); + _smoke1.setPriority2(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.setPriority2(1); + _smoke2.setFrame(2); + _smoke2.setPosition(Common::Point(299, 59)); + _smoke2.animate(ANIM_MODE_2, NULL); if (_globals->_inventory._ladder._sceneNumber != 4000) { _hotspot8.postInit(); @@ -833,12 +833,12 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _hotspot8.setAction(&_action9); } - _hotspot12.postInit(); - _hotspot12.setVisage(4000); - _hotspot12.setStrip(3); - _hotspot12.setFrame(3); - _hotspot12.setPriority2(200); - _hotspot12.setPosition(Common::Point(281, 176)); + _theTech.postInit(); + _theTech.setVisage(4000); + _theTech.setStrip(3); + _theTech.setFrame(3); + _theTech.setPriority2(200); + _theTech.setPosition(Common::Point(281, 176)); if (_globals->getFlag(34)) { _soundHandler1.startSound(156); @@ -860,14 +860,14 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _globals->_player.setPosition(Common::Point(-28, 86)); if (!_globals->getFlag(36) && !_globals->getFlag(43)) { - _hotspot7.postInit(); - _hotspot7.setVisage(2701); - _hotspot7.animate(ANIM_MODE_1, NULL); - _hotspot7.setObjectWrapper(new SceneObjectWrapper()); - _hotspot7._moveDiff = Common::Point(4, 2); - _hotspot7.setPosition(Common::Point(-210, 139)); - - _globals->_sceneItems.push_back(&_hotspot7); + _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); } switch (_globals->_sceneManager._previousScene) { @@ -875,11 +875,11 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _globals->_soundHandler.startSound(155); if (_globals->_inventory._ale._sceneNumber == 1) { - _hotspot9.postInit(); - _hotspot9.setVisage(4001); - _hotspot9.animate(ANIM_MODE_1, NULL); - _hotspot9.setObjectWrapper(new SceneObjectWrapper()); - _hotspot9.setPosition(Common::Point(314, 132)); + _guardRock.postInit(); + _guardRock.setVisage(4001); + _guardRock.animate(ANIM_MODE_1, NULL); + _guardRock.setObjectWrapper(new SceneObjectWrapper()); + _guardRock.setPosition(Common::Point(314, 132)); setAction(&_action6); } else { @@ -888,7 +888,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager1, this, 4001, &_globals->_player, NULL); if (!_globals->getFlag(36) && !_globals->getFlag(43)) - _hotspot7.setAction(&_sequenceManager2, NULL, 4002, &_hotspot7, NULL); + _miranda.setAction(&_sequenceManager2, NULL, 4002, &_miranda, NULL); } if (_globals->getFlag(42)) @@ -898,13 +898,13 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { break; case 4010: - _hotspot7.setPosition(Common::Point(-210, 139)); + _miranda.setPosition(Common::Point(-210, 139)); - _hotspot9.postInit(); - _hotspot9.setVisage(4001); - _hotspot9.animate(ANIM_MODE_1, NULL); - _hotspot9.setObjectWrapper(new SceneObjectWrapper()); - _hotspot9.setPosition(Common::Point(314, 132)); + _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); @@ -923,14 +923,14 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _globals->_player.setPosition(Common::Point(260, 185)); if (!_globals->getFlag(36) && !_globals->getFlag(43)) - _hotspot7.setPosition(Common::Point(246, 146)); + _miranda.setPosition(Common::Point(246, 146)); if (_globals->getFlag(96)) { - _hotspot4.postInit(); - _hotspot4.setVisage(4006); - _hotspot4.animate(ANIM_MODE_1, NULL); - _hotspot4.setObjectWrapper(new SceneObjectWrapper()); - _hotspot4.setPosition(Common::Point(290, 163)); + _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) { @@ -947,15 +947,15 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _globals->_player.disableControl(); if (!_globals->getFlag(96)) { - _hotspot4.postInit(); - _hotspot4.setVisage(4006); - _hotspot4.animate(ANIM_MODE_1, NULL); - _hotspot4.setObjectWrapper(new SceneObjectWrapper()); - _hotspot4.setPosition(Common::Point(195, 128)); + _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(); - _hotspot4.addMover(mover, &pt, NULL); + _olo.addMover(mover, &pt, NULL); } _sceneMode = 4003; @@ -963,7 +963,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { } else if (_globals->getFlag(96)) { _globals->_player.disableControl(); _sceneMode = 4013; - setAction(&_sequenceManager1, this, 4013, &_hotspot4, NULL); + setAction(&_sequenceManager1, this, 4013, &_olo, NULL); } _globals->clearFlag(96); @@ -982,16 +982,16 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _globals->_player.setPosition(Common::Point(208, 153)); if (!_globals->getFlag(36) && !_globals->getFlag(43)) - _hotspot7.setPosition(Common::Point(246, 146)); + _miranda.setPosition(Common::Point(246, 146)); if (_globals->getFlag(39)) { _globals->clearFlag(39); - _hotspot4.postInit(); - _hotspot4.setVisage(4006); - _hotspot4.animate(ANIM_MODE_1, NULL); - _hotspot4.setObjectWrapper(new SceneObjectWrapper()); - _hotspot4.setPosition(Common::Point(219, 150)); + _olo.postInit(); + _olo.setVisage(4006); + _olo.animate(ANIM_MODE_1, NULL); + _olo.setObjectWrapper(new SceneObjectWrapper()); + _olo.setPosition(Common::Point(219, 150)); _globals->_player.disableControl(); setAction(&_sequenceManager1, this, 4010, &_globals->_player, NULL); @@ -1000,12 +1000,12 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { if (_globals->_stripNum == 4000) { _globals->_stripNum = 0; - _hotspot9.postInit(); - _hotspot9.setVisage(4001); - _hotspot9.animate(ANIM_MODE_1, NULL); - _hotspot9.setObjectWrapper(new SceneObjectWrapper()); - _hotspot9.setPosition(Common::Point(231, 159)); - _hotspot9.setStrip(4); + _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); } @@ -1045,29 +1045,29 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { } if (!_globals->getFlag(36) && !_globals->getFlag(43)) - _hotspot7.setPosition(Common::Point(246, 146)); + _miranda.setPosition(Common::Point(246, 146)); break; default: _globals->_soundHandler.startSound(155); - _hotspot3.postInit(); - _hotspot3.setVisage(4002); - _hotspot3._moveDiff = Common::Point(10, 10); - _hotspot3.setPosition(Common::Point(-100, 80)); - _hotspot3.changeZoom(-1); - _hotspot3.setPosition(Common::Point(130, -1)); - _hotspot3.animate(ANIM_MODE_2, NULL); + _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) { - _hotspot4.postInit(); - _hotspot4.setVisage(4006); - _hotspot4.setPosition(Common::Point(235, 153)); + _olo.postInit(); + _olo.setVisage(4006); + _olo.setPosition(Common::Point(235, 153)); - _hotspot9.postInit(); - _hotspot9.setVisage(4001); - _hotspot9.setStrip(3); - _hotspot9.setPosition(Common::Point(255, 153)); + _guardRock.postInit(); + _guardRock.setVisage(4001); + _guardRock.setStrip(3); + _guardRock.setPosition(Common::Point(255, 153)); setAction(&_action11); _globals->_inventory._ladder._sceneNumber = 4100; @@ -1090,32 +1090,32 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _hotspot2.setPosition(Common::Point(182, 146)); _hotspot2.setAction(&_action10); } - - _hotspot7.setPosition(Common::Point(-210, 139)); + _miranda.setPosition(Common::Point(-210, 139)); setAction(&_action13); } + break; } if (_globals->_inventory._ladder._sceneNumber == 4000) { - _hotspot10.postInit(); - _hotspot10.setVisage(4000); - _hotspot10.setStrip(5); - _hotspot10.setPosition(Common::Point(245, 147)); + _ladder.postInit(); + _ladder.setVisage(4000); + _ladder.setStrip(5); + _ladder.setPosition(Common::Point(245, 147)); - _globals->_sceneItems.push_back(&_hotspot10); + _globals->_sceneItems.push_back(&_ladder); } if (_globals->_inventory._rope._sceneNumber == 4000) { - _hotspot6.postInit(); - _hotspot6.setVisage(4000); - _hotspot6.setStrip(7); - _hotspot6.setPriority2(1); - _hotspot6.setPosition(Common::Point(268, 44)); + _rope.postInit(); + _rope.setVisage(4000); + _rope.setStrip(7); + _rope.setPriority2(1); + _rope.setPosition(Common::Point(268, 44)); } _globals->_sceneItems.addItems(&_hotspot8, &_hotspot17, &_hotspot18, &_hotspot14, &_hotspot15, - &_hotspot16, &_hotspot12, &_hotspot13, &_hotspot21, &_hotspot20, &_hotspot22, &_hotspot23, + &_hotspot16, &_theTech, &_hotspot13, &_hotspot21, &_hotspot20, &_hotspot22, &_hotspot23, &_hotspot24, &_hotspot25, &_hotspot19, &_hotspot26, NULL); } @@ -1154,21 +1154,21 @@ void Scene4000::signal() { break; case 4010: _globals->setFlag(38); - _hotspot4.remove(); + _olo.remove(); break; case 4012: - _globals->_player.checkAngle(&_hotspot12); + _globals->_player.checkAngle(&_theTech); _globals->_sceneManager.changeScene(4025); break; case 4013: _globals->_player.enableControl(); - _hotspot4.remove(); + _olo.remove(); break; case 4014: _globals->_sceneManager.changeScene(4250); break; case 4015: - ADD_MOVER_NULL(_hotspot7, 0, _hotspot7._position.y - 5); + ADD_MOVER_NULL(_miranda, 0, _miranda._position.y - 5); break; } } @@ -1192,19 +1192,19 @@ void Scene4000::dispatch() { _hotspot5.setPriority2(94); } - if (_globals->_sceneObjects->contains(&_hotspot7)) { - if (!_hotspot7._mover) - _hotspot7.checkAngle(&_globals->_player); + if (_globals->_sceneObjects->contains(&_miranda)) { + if (!_miranda._mover) + _miranda.checkAngle(&_globals->_player); if (!_action && _globals->_player.getRegionIndex() == 23) { - ADD_MOVER_NULL(_hotspot7, 204, 186); + ADD_MOVER_NULL(_miranda, 204, 186); } - if ((_hotspot7.getRegionIndex() == 10) || (_hotspot7.getRegionIndex() == 6)) - _hotspot7.setPriority2(200); - if (_hotspot7.getRegionIndex() == 11) - _hotspot7.setPriority2(-1); - if (_hotspot7.getRegionIndex() == 5) - _hotspot7.setPriority2(94); + if ((_miranda.getRegionIndex() == 10) || (_miranda.getRegionIndex() == 6)) + _miranda.setPriority2(200); + if (_miranda.getRegionIndex() == 11) + _miranda.setPriority2(-1); + if (_miranda.getRegionIndex() == 5) + _miranda.setPriority2(94); } if (!_action) { @@ -1225,13 +1225,13 @@ void Scene4000::dispatch() { if ((_globals->_player._position.x > 5) && (_globals->_player._position.y < 100)) { _globals->_player.disableControl(); - if (!_globals->_sceneObjects->contains(&_hotspot7) || (_hotspot7._position.y <= 100)) { + 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, &_hotspot7, NULL); + setAction(&_sequenceManager1, this, 4015, &_globals->_player, &_miranda, NULL); } } } @@ -2357,14 +2357,15 @@ void Scene4100::Action3::signal() { switch (_actionIndex++) { case 0: _globals->clearFlag(43); - _globals->clearFlag(36); + _globals->setFlag(36); setDelay(15); break; case 1: scene->_stripManager.start(4505, this); break; case 2: - scene->setAction(&scene->_action2); + setAction(&scene->_action2, this); + break; case 3: scene->_stripManager.start(4510, this); break; @@ -2374,6 +2375,8 @@ void Scene4100::Action3::signal() { case 5: _globals->_sceneManager.changeScene(4150); break; + default: + break; } } @@ -2396,6 +2399,7 @@ void Scene4100::Action4::signal() { _globals->clearFlag(43); _globals->setFlag(42); scene->_stripManager.start(4119, this); + break; case 4: setDelay(15); break; @@ -2417,14 +2421,14 @@ void Scene4100::Action5::signal() { case 1: if (_globals->_inventory._ladder._sceneNumber == 4100) { _globals->_inventory._ladder._sceneNumber = 1; - scene->_hotspot6.remove(); + scene->_ladder.remove(); } else { - scene->_hotspot6.postInit(); - scene->_hotspot6.setVisage(4101); - scene->_hotspot6.setPosition(Common::Point(49, 144)); + scene->_ladder.postInit(); + scene->_ladder.setVisage(4101); + scene->_ladder.setPosition(Common::Point(49, 144)); _globals->_inventory._ladder._sceneNumber = 4100; - _globals->_sceneItems.push_front(&scene->_hotspot6); + _globals->_sceneItems.push_front(&scene->_ladder); } _globals->_player.enableControl(); @@ -2456,20 +2460,26 @@ void Scene4100::Hotspot1::doAction(int action) { Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; switch (action) { - case CURSOR_LOOK: - SceneItem::display2(4100, _globals->getFlag(42) ? 24 : 12); - break; 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 (_globals->_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)) @@ -2502,7 +2512,7 @@ void Scene4100::Hotspot2::doAction(int action) { } } -void Scene4100::Hotspot5::doAction(int action) { +void Scene4100::Miranda::doAction(int action) { Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; switch (action) { @@ -2519,7 +2529,7 @@ void Scene4100::Hotspot5::doAction(int action) { } } -void Scene4100::Hotspot6::doAction(int action) { +void Scene4100::Ladder::doAction(int action) { Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene; switch (action) { @@ -2612,26 +2622,26 @@ void Scene4100::postInit(SceneObjectList *OwnerList) { _hotspot4.setStrip2(2); _hotspot4.setPosition(Common::Point(152, 167)); - if (_globals->getFlag(36)) { + if (!_globals->getFlag(36)) { _hotspot1.setVisage(4105); _hotspot1.setStrip(1); _hotspot1.setFrame(4); } else if (!_globals->getFlag(43)) { - _hotspot5.postInit(); - _hotspot5.setVisage(4102); - _hotspot5.setStrip2(3); - _hotspot5.setFrame(2); - _hotspot5.setPosition(Common::Point(65, 188)); + _miranda.postInit(); + _miranda.setVisage(4102); + _miranda.setStrip2(3); + _miranda.setFrame(2); + _miranda.setPosition(Common::Point(65, 188)); - _globals->_sceneItems.push_back(&_hotspot5); + _globals->_sceneItems.push_back(&_miranda); } if (_globals->_inventory._ladder._sceneNumber == 4100) { - _hotspot6.postInit(); - _hotspot6.setVisage(4101); - _hotspot6.setPosition(Common::Point(49, 144)); + _ladder.postInit(); + _ladder.setVisage(4101); + _ladder.setPosition(Common::Point(49, 144)); - _globals->_sceneItems.push_back(&_hotspot6); + _globals->_sceneItems.push_back(&_ladder); } _hotspot14.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)); diff --git a/engines/tsage/ringworld_scenes5.h b/engines/tsage/ringworld_scenes5.h index b1b85c9c59..ee943a847f 100644 --- a/engines/tsage/ringworld_scenes5.h +++ b/engines/tsage/ringworld_scenes5.h @@ -89,7 +89,7 @@ class Scene4000 : public Scene { }; /* Hotspots */ - class Hotspot7 : public SceneObject { + class Miranda : public SceneObject { public: virtual void doAction(int action); }; @@ -103,15 +103,15 @@ class Scene4000 : public Scene { } virtual void doAction(int action); }; - class Hotspot9 : public SceneObject { + class GuardRock : public SceneObject { public: virtual void doAction(int action); }; - class Hotspot10 : public SceneObject { + class Ladder : public SceneObject { public: virtual void doAction(int action); }; - class Hotspot12 : public SceneObject { + class TheTech : public SceneObject { public: virtual void doAction(int action); }; @@ -151,13 +151,13 @@ public: SpeakerCHFR _speakerCHFR; SpeakerQL _speakerQL; SpeakerCHFText _speakerCHFText; - SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5, _hotspot6; - Hotspot7 _hotspot7; + SceneObject _smoke1, _hotspot2, _lander, _olo, _hotspot5, _rope; + Miranda _miranda; Hotspot8 _hotspot8; - Hotspot9 _hotspot9; - Hotspot10 _hotspot10; + GuardRock _guardRock; + Ladder _ladder; DisplayHotspot _hotspot11; - Hotspot12 _hotspot12; + TheTech _theTech; Hotspot13 _hotspot13; Hotspot _hotspot14, _hotspot15, _hotspot16; Hotspot17 _hotspot17; @@ -165,7 +165,7 @@ public: DisplayHotspot _hotspot19, _hotspot20, _hotspot21, _hotspot22; Hotspot23 _hotspot23; DisplayHotspot _hotspot24, _hotspot25, _hotspot26; - SceneObject _hotspot27; + SceneObject _smoke2; Action1 _action1; Action2 _action2; Action3 _action3; @@ -395,11 +395,11 @@ class Scene4100 : public Scene { public: virtual void doAction(int action); }; - class Hotspot5 : public SceneObject { + class Miranda : public SceneObject { public: virtual void doAction(int action); }; - class Hotspot6 : public SceneObject { + class Ladder : public SceneObject { public: virtual void doAction(int action); }; @@ -425,8 +425,8 @@ public: Hotspot1 _hotspot1; Hotspot2 _hotspot2; DisplayHotspot _hotspot3, _hotspot4; - Hotspot5 _hotspot5; - Hotspot6 _hotspot6; + Miranda _miranda; + Ladder _ladder; DisplayHotspot _hotspot7, _hotspot8, _hotspot9, _hotspot10; DisplayHotspot _hotspot11, _hotspot12, _hotspot13; Hotspot14 _hotspot14; diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index 594d30fa3c..8b07767f22 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -151,13 +151,13 @@ Common::Error Saver::save(int slot, const Common::String &saveName) { } Common::Error Saver::restore(int slot) { - assert(!getMacroSaveFlag()); + assert(!getMacroRestoreFlag()); // Signal any objects registered for notification _loadNotifiers.notify(false); // Set fields - _macroSaveFlag = true; + _macroRestoreFlag = true; _saveSlot = slot; _unresolvedPtrs.clear(); @@ -335,7 +335,7 @@ bool Saver::savegamesExist() const { */ int Saver::blockIndexOf(SavedObject *p) { int objIndex = 1; - SynchronisedList<SavedObject *>::iterator iObj; + Common::List<SavedObject *>::iterator iObj; for (iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) { SavedObject *iObjP = *iObj; @@ -347,6 +347,25 @@ int Saver::blockIndexOf(SavedObject *p) { } /** + * Returns the number of objects in the object list registry + */ +int Saver::getObjectCount() const { + return _objList.size(); +} + +/** + * List any currently active objects + */ +void Saver::listObjects() { + Common::List<SavedObject *>::iterator i; + int count = 1; + + for (i = _objList.begin(); i != _objList.end(); ++i, ++count) + debug("%d - %s", count, (*i)->getClassName().c_str()); + debugN("\n"); +} + +/** * Returns the pointer associated with the specified object index */ void Saver::resolveLoadPointers() { @@ -358,12 +377,14 @@ void Saver::resolveLoadPointers() { int objIndex = 1; for (SynchronisedList<SavedObject *>::iterator iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) { Common::List<SavedObjectRef>::iterator iPtr; + SavedObject *pObj = *iObj; for (iPtr = _unresolvedPtrs.begin(); iPtr != _unresolvedPtrs.end(); ) { SavedObjectRef &r = *iPtr; if (r._objIndex == objIndex) { // Found an unresolved pointer to this object - *r._savedObject = *iObj; + SavedObject **objPP = r._savedObject; + *objPP = pObj; iPtr = _unresolvedPtrs.erase(iPtr); } else { ++iPtr; diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index 945d144ae5..c45271b8fc 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -54,8 +54,8 @@ struct tSageSavegameHeader { // FIXME: workaround to supress spurious strict-alias warnings on older GCC // versions. this should be resolved with the savegame rewrite #define SYNC_POINTER(x) do { \ - SavedObject *y = (SavedObject *)x; \ - s.syncPointer(&y); \ + SavedObject **y = (SavedObject **)((void *)&x); \ + s.syncPointer(y); \ } while (false) #define SYNC_ENUM(FIELD, TYPE) int v_##FIELD = (int)FIELD; s.syncAsUint16LE(v_##FIELD); \ @@ -176,7 +176,7 @@ typedef SavedObject *(*SavedObjectFactory)(const Common::String &className); class Saver { private: - SynchronisedList<SavedObject *> _objList; + Common::List<SavedObject *> _objList; FunctionList<bool> _saveNotifiers; FunctionList<bool> _loadNotifiers; Common::List<SaveListener *> _listeners; @@ -212,6 +212,8 @@ public: bool getMacroSaveFlag() const { return _macroSaveFlag; } bool getMacroRestoreFlag() const { return _macroRestoreFlag; } int blockIndexOf(SavedObject *p); + int getObjectCount() const; + void listObjects(); }; extern Saver *_saver; diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 748e8662fd..8454c7ebd4 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -27,6 +27,7 @@ #include "tsage/globals.h" #include "tsage/ringworld_logic.h" #include "tsage/tsage.h" +#include "tsage/saveload.h" namespace tSage { @@ -39,6 +40,7 @@ SceneManager::SceneManager() { _fadeMode = FADEMODE_GRADUAL; _scrollerRect = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); _saver->addListener(this); + _objectCount = 0; } SceneManager::~SceneManager() { @@ -107,6 +109,12 @@ void SceneManager::sceneChange() { // Free any regions disposeRegions(); + // Ensure that the same number of objects are registered now as when the scene started + if (_objectCount > 0) { + assert(_objectCount == _saver->getObjectCount()); + } + _objectCount = _saver->getObjectCount(); + // Instantiate and set the new scene _scene = getNewScene(); _scene->postInit(); @@ -240,7 +248,7 @@ Scene::~Scene() { void Scene::synchronise(Serialiser &s) { s.syncAsSint32LE(_field12); - s.syncAsSint32LE(_sceneNumber); + s.syncAsSint32LE(_screenNumber); s.syncAsSint32LE(_activeScreenNumber); s.syncAsSint32LE(_sceneMode); _backgroundBounds.synchronise(s); @@ -273,7 +281,7 @@ void Scene::dispatch() { void Scene::loadScene(int sceneNum) { warning("loadScene(%d)", sceneNum); - _sceneNumber = sceneNum; + _screenNumber = sceneNum; if (_globals->_scenePalette.loadPalette(sceneNum)) _globals->_sceneManager._hasPalette = true; diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h index 1a6f92745d..0ac906728f 100644 --- a/engines/tsage/scenes.h +++ b/engines/tsage/scenes.h @@ -39,7 +39,7 @@ private: void drawAltObjects(); public: int _field12; - int _sceneNumber; + int _screenNumber; int _activeScreenNumber; int _sceneMode; StripManager _stripManager; @@ -88,6 +88,7 @@ public: int _sceneLoadCount; Rect _scrollerRect; SceneObjectList _altSceneObjects; + int _objectCount; public: SceneManager(); virtual ~SceneManager(); |