aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorathrxx2011-04-21 20:29:25 +0200
committerathrxx2011-04-21 20:29:25 +0200
commit204644b001d85612742426b5731b8149b0a24f2e (patch)
tree8e19872f056e773335536b5cb6a70d3e3f55f75f
parentb0008d2d33c394fbba358c08b032c5872e6a909d (diff)
parent44e79c70fa2908e0abdb7c9effa1dd039404a520 (diff)
downloadscummvm-rg350-204644b001d85612742426b5731b8149b0a24f2e.tar.gz
scummvm-rg350-204644b001d85612742426b5731b8149b0a24f2e.tar.bz2
scummvm-rg350-204644b001d85612742426b5731b8149b0a24f2e.zip
Merge branch 'master' of https://github.com/scummvm/scummvm
-rw-r--r--backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp2
-rw-r--r--backends/module.mk5
-rw-r--r--backends/platform/dc/Makefile2
-rw-r--r--backends/platform/dc/dc.h17
-rw-r--r--backends/platform/dc/dcmain.cpp3
-rw-r--r--backends/platform/dc/module.mk2
-rw-r--r--backends/platform/dc/plugins.cpp (renamed from backends/plugins/dc/dc-provider.cpp)45
-rw-r--r--backends/platform/gph/gph-backend.cpp21
-rw-r--r--backends/platform/gph/gph-sdl.h1
-rw-r--r--backends/platform/openpandora/op-backend.cpp17
-rw-r--r--backends/platform/openpandora/op-sdl.h1
-rw-r--r--backends/platform/symbian/AdaptAllMMPs.pl3
-rw-r--r--backends/platform/symbian/mmp/scummvm_base.mmp.in4
-rw-r--r--backends/platform/symbian/src/portdefs.h5
-rw-r--r--backends/plugins/dc/dc-provider.h42
-rw-r--r--common/stream.cpp1
-rw-r--r--common/substream.h2
-rw-r--r--engines/gob/save/savefile.cpp2
-rw-r--r--engines/hugo/mouse.cpp1
-rw-r--r--engines/hugo/parser.cpp3
-rw-r--r--engines/lure/menu.cpp2
-rw-r--r--engines/mohawk/myst_stacks/selenitic.cpp5
-rw-r--r--engines/sci/engine/script.cpp2
-rw-r--r--engines/tsage/converse.cpp6
-rw-r--r--engines/tsage/core.cpp11
-rw-r--r--engines/tsage/core.h1
-rw-r--r--engines/tsage/dialogs.cpp5
-rw-r--r--engines/tsage/ringworld_scenes1.cpp193
-rw-r--r--engines/tsage/ringworld_scenes1.h24
-rw-r--r--engines/tsage/ringworld_scenes10.cpp2
-rw-r--r--engines/tsage/ringworld_scenes2.cpp33
-rw-r--r--engines/tsage/ringworld_scenes3.cpp4
-rw-r--r--engines/tsage/ringworld_scenes5.cpp416
-rw-r--r--engines/tsage/ringworld_scenes5.h28
-rw-r--r--engines/tsage/saveload.cpp29
-rw-r--r--engines/tsage/saveload.h8
-rw-r--r--engines/tsage/scenes.cpp12
-rw-r--r--engines/tsage/scenes.h3
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();