aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--audio/mididrv.cpp1
-rw-r--r--backends/keymapper/keymapper.cpp2
-rw-r--r--backends/midi/windows.cpp40
-rw-r--r--backends/platform/dc/dc.h2
-rw-r--r--backends/platform/iphone/iphone_common.h43
-rw-r--r--backends/platform/iphone/iphone_main.mm3
-rw-r--r--backends/platform/iphone/iphone_video.h26
-rw-r--r--backends/platform/iphone/iphone_video.mm564
-rw-r--r--backends/platform/iphone/osys_events.cpp50
-rw-r--r--backends/platform/iphone/osys_main.cpp21
-rw-r--r--backends/platform/iphone/osys_main.h36
-rw-r--r--backends/platform/iphone/osys_video.cpp432
-rw-r--r--backends/platform/iphone/osys_video.mm485
-rw-r--r--backends/platform/maemo/maemo-common.h9
-rw-r--r--backends/platform/maemo/maemo.cpp11
-rw-r--r--base/commandLine.cpp3
-rw-r--r--base/main.cpp4
-rw-r--r--common/gui_options.cpp132
-rw-r--r--common/gui_options.h88
-rw-r--r--common/language.cpp107
-rw-r--r--common/language.h80
-rw-r--r--common/localization.h2
-rw-r--r--common/module.mk4
-rw-r--r--common/platform.cpp107
-rw-r--r--common/platform.h80
-rw-r--r--common/rendermode.cpp81
-rw-r--r--common/rendermode.h67
-rw-r--r--common/util.cpp317
-rw-r--r--common/util.h180
-rwxr-xr-xconfigure7
-rw-r--r--dists/win32/ScummVM.iss2
-rw-r--r--engines/advancedDetector.h2
-rw-r--r--engines/agi/agi.h1
-rw-r--r--engines/cge/bitmap.cpp8
-rw-r--r--engines/cge/cge.cpp1
-rw-r--r--engines/cge/cge.h3
-rw-r--r--engines/cge/events.cpp1
-rw-r--r--engines/dreamweb/detection.cpp10
-rw-r--r--engines/dreamweb/detection_tables.h4
-rw-r--r--engines/dreamweb/dreamweb.cpp14
-rw-r--r--engines/dreamweb/dreamweb.h57
-rw-r--r--engines/dreamweb/keypad.cpp114
-rw-r--r--engines/dreamweb/monitor.cpp60
-rw-r--r--engines/dreamweb/newplace.cpp38
-rw-r--r--engines/dreamweb/people.cpp2
-rw-r--r--engines/dreamweb/print.cpp4
-rw-r--r--engines/dreamweb/saveload.cpp42
-rw-r--r--engines/dreamweb/sound.cpp7
-rw-r--r--engines/dreamweb/structs.h6
-rw-r--r--engines/dreamweb/stubs.cpp115
-rw-r--r--engines/dreamweb/titles.cpp27
-rw-r--r--engines/dreamweb/use.cpp4
-rw-r--r--engines/dreamweb/vgagrafx.cpp5
-rw-r--r--engines/engine.h2
-rw-r--r--engines/game.cpp1
-rw-r--r--engines/game.h3
-rw-r--r--engines/gob/databases.h2
-rw-r--r--engines/gob/minigames/geisha/meter.cpp2
-rw-r--r--engines/kyra/chargen.cpp10
-rw-r--r--engines/kyra/detection.cpp2
-rw-r--r--engines/kyra/detection_tables.h8
-rw-r--r--engines/kyra/eobcommon.cpp18
-rw-r--r--engines/kyra/eobcommon.h2
-rw-r--r--engines/kyra/gui_eob.cpp19
-rw-r--r--engines/kyra/kyra_hof.cpp2
-rw-r--r--engines/kyra/kyra_lok.cpp7
-rw-r--r--engines/kyra/kyra_mr.cpp2
-rw-r--r--engines/kyra/kyra_rpg.cpp6
-rw-r--r--engines/kyra/kyra_v1.cpp15
-rw-r--r--engines/kyra/kyra_v1.h5
-rw-r--r--engines/kyra/lol.cpp2
-rw-r--r--engines/kyra/magic_eob.cpp2
-rw-r--r--engines/kyra/saveload_eob.cpp2
-rw-r--r--engines/kyra/screen.cpp23
-rw-r--r--engines/kyra/screen.h10
-rw-r--r--engines/kyra/screen_eob.cpp37
-rw-r--r--engines/kyra/screen_eob.h3
-rw-r--r--engines/queen/input.h2
-rw-r--r--engines/queen/queen.cpp1
-rw-r--r--engines/queen/resource.h3
-rw-r--r--engines/scumm/detection.h3
-rw-r--r--engines/scumm/detection_tables.h1
-rw-r--r--engines/scumm/gfx.cpp7
-rw-r--r--engines/scumm/gfxARM.s4
-rw-r--r--engines/scumm/help.h1
-rw-r--r--engines/scumm/scumm.h2
-rw-r--r--engines/sword1/animation.cpp147
-rw-r--r--engines/sword1/animation.h13
-rw-r--r--engines/sword1/detection.cpp1
-rw-r--r--engines/sword1/sword1.cpp5
-rw-r--r--engines/sword2/animation.cpp140
-rw-r--r--engines/sword2/animation.h17
-rw-r--r--engines/sword2/function.cpp4
-rw-r--r--engines/sword2/sword2.cpp4
-rw-r--r--engines/sword25/util/lua/scummvm_file.cpp2
-rw-r--r--engines/tinsel/background.cpp38
-rw-r--r--engines/tinsel/bg.cpp98
-rw-r--r--engines/tinsel/cursor.cpp298
-rw-r--r--engines/tinsel/dialogs.cpp2249
-rw-r--r--engines/tinsel/drives.cpp38
-rw-r--r--engines/tinsel/events.cpp86
-rw-r--r--engines/tinsel/font.cpp32
-rw-r--r--engines/tinsel/graphics.cpp4
-rw-r--r--engines/tinsel/handle.cpp108
-rw-r--r--engines/tinsel/heapmem.cpp66
-rw-r--r--engines/tinsel/mareels.cpp34
-rw-r--r--engines/tinsel/move.cpp40
-rw-r--r--engines/tinsel/music.cpp72
-rw-r--r--engines/tinsel/palette.cpp132
-rw-r--r--engines/tinsel/pcode.cpp98
-rw-r--r--engines/tinsel/pdisplay.cpp54
-rw-r--r--engines/tinsel/play.cpp50
-rw-r--r--engines/tinsel/rince.cpp92
-rw-r--r--engines/tinsel/saveload.cpp155
-rw-r--r--engines/tinsel/savescn.cpp140
-rw-r--r--engines/tinsel/scene.cpp60
-rw-r--r--engines/tinsel/sched.cpp64
-rw-r--r--engines/tinsel/scroll.cpp292
-rw-r--r--engines/tinsel/scroll.h6
-rw-r--r--engines/tinsel/sound.cpp34
-rw-r--r--engines/tinsel/strres.cpp56
-rw-r--r--engines/tinsel/strres.h2
-rw-r--r--engines/tinsel/sysvar.cpp20
-rw-r--r--engines/tinsel/text.cpp8
-rw-r--r--engines/tinsel/timers.cpp50
-rw-r--r--engines/tinsel/tinlib.cpp108
-rw-r--r--engines/tinsel/tinsel.cpp172
-rw-r--r--engines/tinsel/token.cpp28
-rw-r--r--engines/touche/graphics.h2
-rw-r--r--engines/tsage/blue_force/blueforce_logic.cpp8
-rw-r--r--engines/tsage/blue_force/blueforce_scenes1.cpp40
-rw-r--r--engines/tsage/blue_force/blueforce_scenes1.h4
-rw-r--r--engines/tsage/blue_force/blueforce_scenes2.cpp42
-rw-r--r--engines/tsage/blue_force/blueforce_scenes3.cpp8
-rw-r--r--engines/tsage/blue_force/blueforce_scenes4.cpp16
-rw-r--r--engines/tsage/blue_force/blueforce_scenes5.cpp62
-rw-r--r--engines/tsage/blue_force/blueforce_scenes5.h2
-rw-r--r--engines/tsage/blue_force/blueforce_scenes6.cpp10
-rw-r--r--engines/tsage/blue_force/blueforce_scenes8.cpp34
-rw-r--r--engines/tsage/blue_force/blueforce_scenes9.cpp6
-rw-r--r--engines/tsage/core.cpp6
-rw-r--r--engines/tsage/core.h2
-rw-r--r--engines/tsage/debugger.cpp6
-rw-r--r--engines/tsage/events.h28
-rw-r--r--engines/tsage/globals.cpp2
-rw-r--r--engines/tsage/globals.h1
-rw-r--r--engines/tsage/graphics.cpp6
-rw-r--r--engines/tsage/resources.cpp156
-rw-r--r--engines/tsage/resources.h9
-rw-r--r--engines/tsage/ringworld2/ringworld2_dialogs.cpp2
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp413
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.h83
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes0.cpp224
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes0.h14
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.cpp876
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.h20
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes2.cpp48
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes3.cpp230
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes3.h12
-rw-r--r--engines/tsage/ringworld2/ringworld2_speakers.cpp150
-rw-r--r--engines/tsage/scenes.cpp6
-rw-r--r--engines/tsage/staticres.cpp4
-rw-r--r--engines/tsage/tsage.h3
-rw-r--r--engines/tsage/user_interface.cpp2
-rw-r--r--graphics/sjis.h2
-rw-r--r--gui/dialog.cpp20
-rw-r--r--gui/launcher.cpp1
-rw-r--r--gui/object.cpp20
-rw-r--r--gui/object.h2
-rw-r--r--gui/options.cpp48
-rw-r--r--gui/options.h4
-rw-r--r--gui/themes/scummclassic.zipbin86033 -> 86033 bytes
-rw-r--r--gui/themes/scummmodern.zipbin1441316 -> 1441312 bytes
-rw-r--r--gui/themes/scummmodern/scummmodern_gfx.stx2
-rw-r--r--gui/widgets/edittext.cpp2
-rw-r--r--video/module.mk1
-rw-r--r--video/psx_decoder.cpp697
-rw-r--r--video/psx_decoder.h128
179 files changed, 7049 insertions, 5254 deletions
diff --git a/NEWS b/NEWS
index 8ce67091ad..7f4070424b 100644
--- a/NEWS
+++ b/NEWS
@@ -29,6 +29,8 @@ For a more comprehensive changelog of the latest experimental code, see:
- Changed "F5 (menu)" gesture to open up the global main menu instead.
- Added support for custom cursor palettes, this makes the moderm theme use
the red pointer cursor for example.
+ - Added aspect ratio correction feature.
+ - Implemented 16 bits per pixel support for games.
Windows port:
- Changed default savegames location for Windows NT4/2000/XP/Vista/7.
diff --git a/audio/mididrv.cpp b/audio/mididrv.cpp
index 6817791c6b..0518915e81 100644
--- a/audio/mididrv.cpp
+++ b/audio/mididrv.cpp
@@ -22,6 +22,7 @@
#include "common/config-manager.h"
#include "common/error.h"
+#include "common/gui_options.h"
#include "common/str.h"
#include "common/system.h"
#include "common/textconsole.h"
diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp
index aafdd604a2..189f862469 100644
--- a/backends/keymapper/keymapper.cpp
+++ b/backends/keymapper/keymapper.cpp
@@ -119,7 +119,7 @@ void Keymapper::cleanupGameKeymaps() {
// the game specific (=deleted) ones.
Stack<MapRecord> newStack;
- for (int i = 0; i < _activeMaps.size(); i++) {
+ for (Stack<MapRecord>::size_type i = 0; i < _activeMaps.size(); i++) {
if (_activeMaps[i].global)
newStack.push(_activeMaps[i]);
}
diff --git a/backends/midi/windows.cpp b/backends/midi/windows.cpp
index 828411cd22..f4c5431d6e 100644
--- a/backends/midi/windows.cpp
+++ b/backends/midi/windows.cpp
@@ -177,13 +177,49 @@ MusicDevices WindowsMusicPlugin::getDevices() const {
int numDevs = midiOutGetNumDevs();
MIDIOUTCAPS tmp;
+ Common::StringArray deviceNames;
for (int i = 0; i < numDevs; i++) {
if (midiOutGetDevCaps(i, &tmp, sizeof(MIDIOUTCAPS)) != MMSYSERR_NOERROR)
break;
+ deviceNames.push_back(tmp.szPname);
+ }
+
+ // Check for non-unique device names. This may happen if someone has devices with identical
+ // names (e. g. more than one USB device of the exact same hardware type). It seems that this
+ // does happen in reality sometimes. We generate index numbers for these devices.
+ // This is not an ideal solution, since this index could change whenever another USB
+ // device gets plugged in or removed, switched off or just plugged into a different port.
+ // Unfortunately midiOutGetDevCaps() does not generate any other unique information
+ // that could be used. Our index numbers which match the device order should at least be
+ // a little more stable than just using the midiOutGetDevCaps() device ID, since a missing
+ // device (e.g. switched off) should actually not be harmful to our indices (as it would be
+ // when using the device IDs). The cases where users have devices with identical names should
+ // be rare enough anyway.
+ Common::Array<int> nonUniqueIndex;
+ for (int i = 0; i < numDevs; i++) {
+ int match = -1;
+ for (int ii = 0; ii < i; ii++) {
+ if (deviceNames[i] == deviceNames[ii]) {
+ if (nonUniqueIndex[ii] == -1)
+ nonUniqueIndex[ii] = 0;
+ if (++match == 0)
+ ++match;
+ }
+ }
+ nonUniqueIndex.push_back(match);
+ }
+
+ // We now add the index number to the non-unique device names to make them unique.
+ for (int i = 0; i < numDevs; i++) {
+ if (nonUniqueIndex[i] != -1)
+ deviceNames[i] = Common::String::format("%s - #%.02d", deviceNames[i].c_str(), nonUniqueIndex[i]);
+ }
+
+ for (Common::StringArray::iterator i = deviceNames.begin(); i != deviceNames.end(); ++i)
// There is no way to detect the "MusicType" so I just set it to MT_GM
// The user will have to manually select his MT32 type device and his GM type device.
- devices.push_back(MusicDevice(this, tmp.szPname, MT_GM));
- }
+ devices.push_back(MusicDevice(this, *i, MT_GM));
+
return devices;
}
diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h
index 2e32ff3eb4..8ca48bf19e 100644
--- a/backends/platform/dc/dc.h
+++ b/backends/platform/dc/dc.h
@@ -29,6 +29,8 @@
#include "backends/audiocd/default/default-audiocd.h"
#include "backends/fs/fs-factory.h"
#include "audio/mixer_intern.h"
+#include "common/language.h"
+#include "common/platform.h"
#ifdef DYNAMIC_MODULES
#include "backends/plugins/dynamic-plugin.h"
#endif
diff --git a/backends/platform/iphone/iphone_common.h b/backends/platform/iphone/iphone_common.h
index 5a46a6dde6..19e4f2ce9b 100644
--- a/backends/platform/iphone/iphone_common.h
+++ b/backends/platform/iphone/iphone_common.h
@@ -23,6 +23,8 @@
#ifndef BACKENDS_PLATFORM_IPHONE_IPHONE_COMMON_H
#define BACKENDS_PLATFORM_IPHONE_IPHONE_COMMON_H
+#include "graphics/surface.h"
+
enum InputEvent {
kInputMouseDown,
kInputMouseUp,
@@ -55,21 +57,40 @@ enum GraphicsModes {
kGraphicsModeNone = 1
};
+struct VideoContext {
+ VideoContext() : asprectRatioCorrection(), screenWidth(), screenHeight(), overlayVisible(false),
+ overlayWidth(), overlayHeight(), mouseX(), mouseY(),
+ mouseHotspotX(), mouseHotspotY(), mouseWidth(), mouseHeight(),
+ mouseIsVisible(), graphicsMode(kGraphicsModeLinear), shakeOffsetY() {
+ }
+
+ // Game screen state
+ bool asprectRatioCorrection;
+ uint screenWidth, screenHeight;
+ Graphics::Surface screenTexture;
+
+ // Overlay state
+ bool overlayVisible;
+ uint overlayWidth, overlayHeight;
+ Graphics::Surface overlayTexture;
+
+ // Mouse cursor state
+ uint mouseX, mouseY;
+ int mouseHotspotX, mouseHotspotY;
+ uint mouseWidth, mouseHeight;
+ bool mouseIsVisible;
+ Graphics::Surface mouseTexture;
+
+ // Misc state
+ GraphicsModes graphicsMode;
+ int shakeOffsetY;
+};
+
// On the ObjC side
-void iPhone_setGraphicsMode(GraphicsModes mode);
-void iPhone_updateScreen(int mouseX, int mouseY);
-void iPhone_updateScreenRect(unsigned short *screen, int x1, int y1, int x2, int y2);
-void iPhone_updateOverlayRect(unsigned short *screen, int x1, int y1, int x2, int y2);
-void iPhone_initSurface(int width, int height);
-void iPhone_setShakeOffset(int offset);
+void iPhone_updateScreen();
bool iPhone_fetchEvent(int *outEvent, int *outX, int *outY);
const char *iPhone_getDocumentsDir();
bool iPhone_isHighResDevice();
-int iPhone_getScreenHeight();
-int iPhone_getScreenWidth();
-void iPhone_enableOverlay(int state);
-void iPhone_showCursor(int state);
-void iPhone_setMouseCursor(unsigned short *buffer, int width, int height, int hotspotX, int hotspotY);
uint getSizeNextPOT(uint size);
diff --git a/backends/platform/iphone/iphone_main.mm b/backends/platform/iphone/iphone_main.mm
index 1559ef8a6e..20406e6342 100644
--- a/backends/platform/iphone/iphone_main.mm
+++ b/backends/platform/iphone/iphone_main.mm
@@ -20,6 +20,9 @@
*
*/
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
#include <UIKit/UIKit.h>
#include <Foundation/NSThread.h>
diff --git a/backends/platform/iphone/iphone_video.h b/backends/platform/iphone/iphone_video.h
index 43a643ab4a..55a4acb7c7 100644
--- a/backends/platform/iphone/iphone_video.h
+++ b/backends/platform/iphone/iphone_video.h
@@ -32,9 +32,11 @@
#include <OpenGLES/ES1/glext.h>
#include "iphone_keyboard.h"
+#include "iphone_common.h"
@interface iPhoneView : UIView {
- void *_screenSurface;
+ VideoContext _videoContext;
+
NSMutableArray *_events;
SoftKeyboard *_keyboardView;
@@ -47,19 +49,33 @@
UIDeviceOrientation _orientation;
+ GLint _renderBufferWidth;
+ GLint _renderBufferHeight;
+
GLfloat _gameScreenVertCoords[4 * 2];
GLfloat _gameScreenTexCoords[4 * 2];
+ CGRect _gameScreenRect;
GLfloat _overlayVertCoords[4 * 2];
GLfloat _overlayTexCoords[4 * 2];
+ CGRect _overlayRect;
+
+ GLfloat _mouseVertCoords[4 * 2];
+ GLfloat _mouseTexCoords[4 * 2];
+ GLint _mouseHotspotX, _mouseHotspotY;
+ GLint _mouseWidth, _mouseHeight;
+ GLfloat _mouseScaleX, _mouseScaleY;
+
+ int _scaledShakeOffsetY;
}
- (id)initWithFrame:(struct CGRect)frame;
-- (void)drawRect:(CGRect)frame;
+- (VideoContext *)getVideoContext;
-- (void *)getSurface;
+- (void)drawRect:(CGRect)frame;
+- (void)createScreenTexture;
- (void)initSurface;
- (void)setViewTransformation;
@@ -71,6 +87,8 @@
- (void)updateMouseSurface;
- (void)clearColorBuffer;
+- (void)notifyMouseMove;
+- (void)updateMouseCursorScaling;
- (void)updateMouseCursor;
- (id)getEvent;
@@ -83,4 +101,6 @@
@end
+extern iPhoneView *g_iPhoneViewInstance;
+
#endif
diff --git a/backends/platform/iphone/iphone_video.mm b/backends/platform/iphone/iphone_video.mm
index 86365cbefe..04aaf59b21 100644
--- a/backends/platform/iphone/iphone_video.mm
+++ b/backends/platform/iphone/iphone_video.mm
@@ -20,49 +20,22 @@
*
*/
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
#include "iphone_video.h"
-#include "iphone_common.h"
-static iPhoneView *sharedInstance = nil;
-static GraphicsModes _graphicsMode = kGraphicsModeLinear;
-static int _width = 0;
-static int _height = 0;
+#include "graphics/colormasks.h"
+
+iPhoneView *g_iPhoneViewInstance = nil;
static int _fullWidth;
static int _fullHeight;
-static CGRect _gameScreenRect;
-
-static char *_gameScreenTextureBuffer = 0;
-static int _gameScreenTextureWidth = 0;
-static int _gameScreenTextureHeight = 0;
-
-static char *_overlayTexBuffer = 0;
-static int _overlayTexWidth = 0;
-static int _overlayTexHeight = 0;
-static int _overlayWidth = 0;
-static int _overlayHeight = 0;
-static CGRect _overlayRect;
static int _needsScreenUpdate = 0;
-static int _overlayIsEnabled = 0;
static UITouch *_firstTouch = NULL;
static UITouch *_secondTouch = NULL;
-static unsigned short *_mouseCursor = NULL;
-static int _mouseCursorHeight = 0;
-static int _mouseCursorWidth = 0;
-static int _mouseCursorHotspotX = 0;
-static int _mouseCursorHotspotY = 0;
-static int _mouseX = 0;
-static int _mouseY = 0;
-static int _mouseCursorEnabled = 0;
-
-static GLint _renderBufferWidth;
-static GLint _renderBufferHeight;
-
-static int _shakeOffsetY;
-static int _scaledShakeOffsetY;
-
#if 0
static long lastTick = 0;
static int frames = 0;
@@ -83,83 +56,20 @@ int printOglError(const char *file, int line) {
return retCode;
}
-void iPhone_setGraphicsMode(GraphicsModes mode) {
- _graphicsMode = mode;
-
- [sharedInstance performSelectorOnMainThread:@selector(setGraphicsMode) withObject:nil waitUntilDone: YES];
-}
-
-void iPhone_showCursor(int state) {
- _mouseCursorEnabled = state;
-}
-
-void iPhone_setMouseCursor(unsigned short *buffer, int width, int height, int hotspotX, int hotspotY) {
- _mouseCursor = buffer;
-
- _mouseCursorWidth = width;
- _mouseCursorHeight = height;
-
- _mouseCursorHotspotX = hotspotX;
- _mouseCursorHotspotY = hotspotY;
-
- [sharedInstance performSelectorOnMainThread:@selector(updateMouseCursor) withObject:nil waitUntilDone: YES];
-}
-
-void iPhone_enableOverlay(int state) {
- _overlayIsEnabled = state;
-
- [sharedInstance performSelectorOnMainThread:@selector(clearColorBuffer) withObject:nil waitUntilDone: YES];
-}
-
-int iPhone_getScreenHeight() {
- return _overlayHeight;
-}
-
-int iPhone_getScreenWidth() {
- return _overlayWidth;
-}
-
bool iPhone_isHighResDevice() {
return _fullHeight > 480;
}
-void iPhone_updateScreen(int mouseX, int mouseY) {
+void iPhone_updateScreen() {
//printf("Mouse: (%i, %i)\n", mouseX, mouseY);
-
- _mouseX = mouseX;
- _mouseY = mouseY;
-
if (!_needsScreenUpdate) {
_needsScreenUpdate = 1;
- [sharedInstance performSelectorOnMainThread:@selector(updateSurface) withObject:nil waitUntilDone: NO];
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(updateSurface) withObject:nil waitUntilDone: NO];
}
}
-void iPhone_updateScreenRect(unsigned short *screen, int x1, int y1, int x2, int y2) {
- for (int y = y1; y < y2; ++y)
- memcpy(&_gameScreenTextureBuffer[(y * _gameScreenTextureWidth + x1) * 2], &screen[y * _width + x1], (x2 - x1) * 2);
-}
-
-void iPhone_updateOverlayRect(unsigned short *screen, int x1, int y1, int x2, int y2) {
- //printf("Overlaywidth: %u, fullwidth %u\n", _overlayWidth, _fullWidth);
- for (int y = y1; y < y2; ++y)
- memcpy(&_overlayTexBuffer[(y * _overlayTexWidth + x1) * 2], &screen[y * _overlayWidth + x1], (x2 - x1) * 2);
-}
-
-void iPhone_initSurface(int width, int height) {
- _width = width;
- _height = height;
- _shakeOffsetY = 0;
- [sharedInstance performSelectorOnMainThread:@selector(initSurface) withObject:nil waitUntilDone: YES];
-}
-
-void iPhone_setShakeOffset(int offset) {
- _shakeOffsetY = offset;
- [sharedInstance performSelectorOnMainThread:@selector(setViewTransformation) withObject:nil waitUntilDone: YES];
-}
-
bool iPhone_fetchEvent(int *outEvent, int *outX, int *outY) {
- id event = [sharedInstance getEvent];
+ id event = [g_iPhoneViewInstance getEvent];
if (event == nil) {
return false;
}
@@ -196,92 +106,16 @@ const char *iPhone_getDocumentsDir() {
return [documentsDirectory UTF8String];
}
-/**
- * Converts portrait mode coordinates into rotated mode coordinates.
- */
-static bool convertToRotatedCoords(UIDeviceOrientation orientation, CGPoint point, CGPoint *result) {
- switch (orientation) {
- case UIDeviceOrientationLandscapeLeft:
- result->x = point.y;
- result->y = _renderBufferWidth - point.x;
- return true;
-
- case UIDeviceOrientationLandscapeRight:
- result->x = _renderBufferHeight - point.y;
- result->y = point.x;
- return true;
-
- case UIDeviceOrientationPortrait:
- result->x = point.x;
- result->y = point.y;
- return true;
-
- default:
- return false;
- }
-}
-
-static bool getMouseCoords(UIDeviceOrientation orientation, CGPoint point, int *x, int *y) {
- if (!convertToRotatedCoords(orientation, point, &point))
- return false;
-
- CGRect *area;
- int width, height, offsetY;
- if (_overlayIsEnabled) {
- area = &_overlayRect;
- width = _overlayWidth;
- height = _overlayHeight;
- offsetY = _shakeOffsetY;
- } else {
- area = &_gameScreenRect;
- width = _width;
- height = _height;
- offsetY = _scaledShakeOffsetY;
- }
-
- point.x = (point.x - CGRectGetMinX(*area)) / CGRectGetWidth(*area);
- point.y = (point.y - CGRectGetMinY(*area)) / CGRectGetHeight(*area);
-
- *x = (int)(point.x * width);
- // offsetY describes the translation of the screen in the upward direction,
- // thus we need to add it here.
- *y = (int)(point.y * height + offsetY);
-
- // Clip coordinates
- if (*x < 0 || *x > CGRectGetWidth(*area) || *y < 0 || *y > CGRectGetHeight(*area))
- return false;
-
- return true;
-}
-
-static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
- if (!tex)
- return;
-
- glBindTexture(GL_TEXTURE_2D, tex); printOpenGLError();
-
- GLint filter = GL_LINEAR;
-
- switch (mode) {
- case kGraphicsModeLinear:
- filter = GL_LINEAR;
- break;
-
- case kGraphicsModeNone:
- filter = GL_NEAREST;
- break;
- }
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); printOpenGLError();
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); printOpenGLError();
-}
-
@implementation iPhoneView
+ (Class)layerClass {
return [CAEAGLLayer class];
}
+- (VideoContext *)getVideoContext {
+ return &_videoContext;
+}
+
- (void)createContext {
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
@@ -317,20 +151,18 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
return;
}
- _overlayHeight = _renderBufferWidth;
- _overlayWidth = _renderBufferHeight;
- _overlayTexWidth = getSizeNextPOT(_overlayHeight);
- _overlayTexHeight = getSizeNextPOT(_overlayWidth);
+ _videoContext.overlayHeight = _renderBufferWidth;
+ _videoContext.overlayWidth = _renderBufferHeight;
+ uint overlayTextureWidth = getSizeNextPOT(_videoContext.overlayHeight);
+ uint overlayTextureHeight = getSizeNextPOT(_videoContext.overlayWidth);
// Since the overlay size won't change the whole run, we can
// precalculate the texture coordinates for the overlay texture here
// and just use it later on.
- _overlayTexCoords[2] = _overlayTexCoords[6] = _overlayWidth / (GLfloat)_overlayTexWidth;
- _overlayTexCoords[5] = _overlayTexCoords[7] = _overlayHeight / (GLfloat)_overlayTexHeight;
+ _overlayTexCoords[2] = _overlayTexCoords[6] = _videoContext.overlayWidth / (GLfloat)overlayTextureWidth;
+ _overlayTexCoords[5] = _overlayTexCoords[7] = _videoContext.overlayHeight / (GLfloat)overlayTextureHeight;
- int textureSize = _overlayTexWidth * _overlayTexHeight * 2;
- _overlayTexBuffer = (char *)malloc(textureSize);
- memset(_overlayTexBuffer, 0, textureSize);
+ _videoContext.overlayTexture.create(overlayTextureWidth, overlayTextureHeight, Graphics::createPixelFormat<5551>());
glViewport(0, 0, _renderBufferWidth, _renderBufferHeight); printOpenGLError();
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); printOpenGLError();
@@ -356,13 +188,15 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
_fullWidth = (int)frame.size.width;
_fullHeight = (int)frame.size.height;
- sharedInstance = self;
+ g_iPhoneViewInstance = self;
_keyboardView = nil;
_screenTexture = 0;
_overlayTexture = 0;
_mouseCursorTexture = 0;
+ _scaledShakeOffsetY = 0;
+
_gameScreenVertCoords[0] = _gameScreenVertCoords[1] =
_gameScreenVertCoords[2] = _gameScreenVertCoords[3] =
_gameScreenVertCoords[4] = _gameScreenVertCoords[5] =
@@ -383,6 +217,16 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
_overlayTexCoords[4] = _overlayTexCoords[5] =
_overlayTexCoords[6] = _overlayTexCoords[7] = 0;
+ _mouseVertCoords[0] = _mouseVertCoords[1] =
+ _mouseVertCoords[2] = _mouseVertCoords[3] =
+ _mouseVertCoords[4] = _mouseVertCoords[5] =
+ _mouseVertCoords[6] = _mouseVertCoords[7] = 0;
+
+ _mouseTexCoords[0] = _mouseTexCoords[1] =
+ _mouseTexCoords[2] = _mouseTexCoords[3] =
+ _mouseTexCoords[4] = _mouseTexCoords[5] =
+ _mouseTexCoords[6] = _mouseTexCoords[7] = 0;
+
// Initialize the OpenGL ES context
[self createContext];
@@ -396,12 +240,9 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[_keyboardView dealloc];
}
- free(_gameScreenTextureBuffer);
- free(_overlayTexBuffer);
-}
-
-- (void *)getSurface {
- return _screenSurface;
+ _videoContext.screenTexture.free();
+ _videoContext.overlayTexture.free();
+ _videoContext.mouseTexture.free();
}
- (void)drawRect:(CGRect)frame {
@@ -419,10 +260,32 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
#endif
}
+- (void)setFilterModeForTexture:(GLuint)tex {
+ if (!tex)
+ return;
+
+ glBindTexture(GL_TEXTURE_2D, tex); printOpenGLError();
+
+ GLint filter = GL_LINEAR;
+
+ switch (_videoContext.graphicsMode) {
+ case kGraphicsModeLinear:
+ filter = GL_LINEAR;
+ break;
+
+ case kGraphicsModeNone:
+ filter = GL_NEAREST;
+ break;
+ }
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); printOpenGLError();
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); printOpenGLError();
+}
+
- (void)setGraphicsMode {
- setFilterModeForTexture(_screenTexture, _graphicsMode);
- setFilterModeForTexture(_overlayTexture, _graphicsMode);
- setFilterModeForTexture(_mouseCursorTexture, _graphicsMode);
+ [self setFilterModeForTexture:_screenTexture];
+ [self setFilterModeForTexture:_overlayTexture];
+ [self setFilterModeForTexture:_mouseCursorTexture];
}
- (void)updateSurface {
@@ -435,10 +298,10 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[self updateMainSurface];
- if (_overlayIsEnabled)
+ if (_videoContext.overlayVisible)
[self updateOverlaySurface];
- if (_mouseCursorEnabled)
+ if (_videoContext.mouseIsVisible)
[self updateMouseSurface];
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _viewRenderbuffer); printOpenGLError();
@@ -446,17 +309,70 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
}
+- (void)notifyMouseMove {
+ const GLint mouseX = (GLint)(_videoContext.mouseX * _mouseScaleX) - _mouseHotspotX;
+ const GLint mouseY = (GLint)(_videoContext.mouseY * _mouseScaleY) - _mouseHotspotY;
+
+ _mouseVertCoords[0] = _mouseVertCoords[4] = mouseX;
+ _mouseVertCoords[1] = _mouseVertCoords[3] = mouseY;
+ _mouseVertCoords[2] = _mouseVertCoords[6] = mouseX + _mouseWidth;
+ _mouseVertCoords[5] = _mouseVertCoords[7] = mouseY + _mouseHeight;
+}
+
+- (void)updateMouseCursorScaling {
+ CGRect *rect;
+ int maxWidth, maxHeight;
+
+ if (!_videoContext.overlayVisible) {
+ rect = &_gameScreenRect;
+ maxWidth = _videoContext.screenWidth;
+ maxHeight = _videoContext.screenHeight;
+ } else {
+ rect = &_overlayRect;
+ maxWidth = _videoContext.overlayWidth;
+ maxHeight = _videoContext.overlayHeight;
+ }
+
+ if (!maxWidth || !maxHeight) {
+ printf("WARNING: updateMouseCursorScaling called when screen was not ready (%d)!\n", _videoContext.overlayVisible);
+ return;
+ }
+
+ _mouseScaleX = CGRectGetWidth(*rect) / (GLfloat)maxWidth;
+ _mouseScaleY = CGRectGetHeight(*rect) / (GLfloat)maxHeight;
+
+ _mouseWidth = (GLint)(_videoContext.mouseWidth * _mouseScaleX);
+ _mouseHeight = (GLint)(_videoContext.mouseHeight * _mouseScaleY);
+
+ _mouseHotspotX = (GLint)(_videoContext.mouseHotspotX * _mouseScaleX);
+ _mouseHotspotY = (GLint)(_videoContext.mouseHotspotY * _mouseScaleY);
+
+ // We subtract the screen offset to the hotspot here to simplify the
+ // screen offset handling in the mouse code. Note the subtraction here
+ // makes sure that the offset actually gets added to the mouse position,
+ // since the hotspot offset is substracted from the position.
+ _mouseHotspotX -= (GLint)CGRectGetMinX(*rect);
+ _mouseHotspotY -= (GLint)CGRectGetMinY(*rect);
+
+ // FIXME: For now we also adapt the mouse position here. In reality we
+ // would be better off to also adjust the event position when switching
+ // from overlay to game screen or vica versa.
+ [self notifyMouseMove];
+}
+
- (void)updateMouseCursor {
if (_mouseCursorTexture == 0) {
glGenTextures(1, &_mouseCursorTexture); printOpenGLError();
- setFilterModeForTexture(_mouseCursorTexture, _graphicsMode);
+ [self setFilterModeForTexture:_mouseCursorTexture];
}
- glBindTexture(GL_TEXTURE_2D, _mouseCursorTexture); printOpenGLError();
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, getSizeNextPOT(_mouseCursorWidth), getSizeNextPOT(_mouseCursorHeight), 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, _mouseCursor); printOpenGLError();
+ [self updateMouseCursorScaling];
- free(_mouseCursor);
- _mouseCursor = NULL;
+ _mouseTexCoords[2] = _mouseTexCoords[6] = _videoContext.mouseWidth / (GLfloat)_videoContext.mouseTexture.w;
+ _mouseTexCoords[5] = _mouseTexCoords[7] = _videoContext.mouseHeight / (GLfloat)_videoContext.mouseTexture.h;
+
+ glBindTexture(GL_TEXTURE_2D, _mouseCursorTexture); printOpenGLError();
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _videoContext.mouseTexture.w, _videoContext.mouseTexture.h, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, _videoContext.mouseTexture.pixels); printOpenGLError();
}
- (void)updateMainSurface {
@@ -468,7 +384,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
// Unfortunately we have to update the whole texture every frame, since glTexSubImage2D is actually slower in all cases
// due to the iPhone internals having to convert the whole texture back from its internal format when used.
// In the future we could use several tiled textures instead.
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, _gameScreenTextureWidth, _gameScreenTextureHeight, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, _gameScreenTextureBuffer); printOpenGLError();
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, _videoContext.screenTexture.w, _videoContext.screenTexture.h, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, _videoContext.screenTexture.pixels); printOpenGLError();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); printOpenGLError();
}
@@ -477,147 +393,83 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
glTexCoordPointer(2, GL_FLOAT, 0, _overlayTexCoords); printOpenGLError();
glBindTexture(GL_TEXTURE_2D, _overlayTexture); printOpenGLError();
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _overlayTexWidth, _overlayTexHeight, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, _overlayTexBuffer); printOpenGLError();
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _videoContext.overlayTexture.w, _videoContext.overlayTexture.h, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, _videoContext.overlayTexture.pixels); printOpenGLError();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); printOpenGLError();
}
- (void)updateMouseSurface {
- int width = _mouseCursorWidth;
- int height = _mouseCursorHeight;
-
- int mouseX = _mouseX;
- int mouseY = _mouseY;
-
- int hotspotX = _mouseCursorHotspotX;
- int hotspotY = _mouseCursorHotspotY;
-
- CGRect *rect;
- int maxWidth, maxHeight;
-
- if (!_overlayIsEnabled) {
- rect = &_gameScreenRect;
- maxWidth = _width;
- maxHeight = _height;
- } else {
- rect = &_overlayRect;
- maxWidth = _overlayWidth;
- maxHeight = _overlayHeight;
- }
-
- const GLfloat scaleX = CGRectGetWidth(*rect) / (GLfloat)maxWidth;
- const GLfloat scaleY = CGRectGetHeight(*rect) / (GLfloat)maxHeight;
-
- mouseX = (int)(mouseX * scaleX);
- mouseY = (int)(mouseY * scaleY);
- hotspotX = (int)(hotspotX * scaleX);
- hotspotY = (int)(hotspotY * scaleY);
- width = (int)(width * scaleX);
- height = (int)(height * scaleY);
-
- mouseX -= hotspotX;
- mouseY -= hotspotY;
-
- mouseX += (int)CGRectGetMinX(*rect);
- mouseY += (int)CGRectGetMinY(*rect);
-
- GLfloat vertices[] = {
- // Top left
- mouseX , mouseY,
- // Top right
- mouseX + width, mouseY,
- // Bottom left
- mouseX , mouseY + height,
- // Bottom right
- mouseX + width, mouseY + height
- };
-
- //printf("Cursor: width %u height %u\n", _mouseCursorWidth, _mouseCursorHeight);
-
- float texWidth = _mouseCursorWidth / (float)getSizeNextPOT(_mouseCursorWidth);
- float texHeight = _mouseCursorHeight / (float)getSizeNextPOT(_mouseCursorHeight);
-
- const GLfloat texCoords[] = {
- // Top left
- 0 , 0,
- // Top right
- texWidth, 0,
- // Bottom left
- 0 , texHeight,
- // Bottom right
- texWidth, texHeight
- };
-
- glVertexPointer(2, GL_FLOAT, 0, vertices); printOpenGLError();
- glTexCoordPointer(2, GL_FLOAT, 0, texCoords); printOpenGLError();
+ glVertexPointer(2, GL_FLOAT, 0, _mouseVertCoords); printOpenGLError();
+ glTexCoordPointer(2, GL_FLOAT, 0, _mouseTexCoords); printOpenGLError();
glBindTexture(GL_TEXTURE_2D, _mouseCursorTexture); printOpenGLError();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); printOpenGLError();
}
-- (void)initSurface {
- _gameScreenTextureWidth = getSizeNextPOT(_width);
- _gameScreenTextureHeight = getSizeNextPOT(_height);
-
- _gameScreenTexCoords[2] = _gameScreenTexCoords[6] = _width / (GLfloat)_gameScreenTextureWidth;
- _gameScreenTexCoords[5] = _gameScreenTexCoords[7] = _height / (GLfloat)_gameScreenTextureHeight;
+- (void)setUpOrientation:(UIDeviceOrientation)orientation width:(int *)width height:(int *)height {
+ _orientation = orientation;
- _orientation = [[UIDevice currentDevice] orientation];
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ // We always force the origin (0,0) to be in the upper left corner.
switch (_orientation) {
- case UIDeviceOrientationLandscapeLeft:
case UIDeviceOrientationLandscapeRight:
- case UIDeviceOrientationPortrait:
+ glRotatef( 90, 0, 0, 1); printOpenGLError();
+ glOrthof(0, _renderBufferHeight, _renderBufferWidth, 0, 0, 1); printOpenGLError();
+
+ *width = _renderBufferHeight;
+ *height = _renderBufferWidth;
+ break;
+
+ case UIDeviceOrientationLandscapeLeft:
+ glRotatef(-90, 0, 0, 1); printOpenGLError();
+ glOrthof(0, _renderBufferHeight, _renderBufferWidth, 0, 0, 1); printOpenGLError();
+
+ *width = _renderBufferHeight;
+ *height = _renderBufferWidth;
break;
+ case UIDeviceOrientationPortrait:
default:
+ // We must force the portrait orientation here, since we might not know
+ // the real orientation.
_orientation = UIDeviceOrientationPortrait;
- }
-
- //printf("Window: (%d, %d), Surface: (%d, %d), Texture(%d, %d)\n", _fullWidth, _fullHeight, _width, _height, _gameScreenTextureWidth, _gameScreenTextureHeight);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
+ glOrthof(0, _renderBufferWidth, _renderBufferHeight, 0, 0, 1); printOpenGLError();
- int screenWidth, screenHeight;
+ *width = _renderBufferWidth;
+ *height = _renderBufferHeight;
+ break;
+ }
+}
- // Set the origin (0,0) depending on the rotation mode.
- if (_orientation == UIDeviceOrientationLandscapeRight) {
- glRotatef( 90, 0, 0, 1); printOpenGLError();
- glOrthof(0, _renderBufferHeight, _renderBufferWidth, 0, 0, 1); printOpenGLError();
+- (void)createScreenTexture {
+ const uint screenTexWidth = getSizeNextPOT(_videoContext.screenWidth);
+ const uint screenTexHeight = getSizeNextPOT(_videoContext.screenHeight);
- screenWidth = _renderBufferHeight;
- screenHeight = _renderBufferWidth;
- } else if (_orientation == UIDeviceOrientationLandscapeLeft) {
- glRotatef(-90, 0, 0, 1); printOpenGLError();
- glOrthof(0, _renderBufferHeight, _renderBufferWidth, 0, 0, 1); printOpenGLError();
+ _gameScreenTexCoords[2] = _gameScreenTexCoords[6] = _videoContext.screenWidth / (GLfloat)screenTexWidth;
+ _gameScreenTexCoords[5] = _gameScreenTexCoords[7] = _videoContext.screenHeight / (GLfloat)screenTexHeight;
- screenWidth = _renderBufferHeight;
- screenHeight = _renderBufferWidth;
- } else if (_orientation == UIDeviceOrientationPortrait) {
- glOrthof(0, _renderBufferWidth, _renderBufferHeight, 0, 0, 1); printOpenGLError();
+ _videoContext.screenTexture.create(screenTexWidth, screenTexHeight, Graphics::createPixelFormat<565>());
+}
- screenWidth = _renderBufferWidth;
- screenHeight = _renderBufferHeight;
- }
+- (void)initSurface {
+ int screenWidth, screenHeight;
+ [self setUpOrientation:[[UIDevice currentDevice] orientation] width:&screenWidth height:&screenHeight];
if (_screenTexture > 0) {
glDeleteTextures(1, &_screenTexture); printOpenGLError();
}
glGenTextures(1, &_screenTexture); printOpenGLError();
- setFilterModeForTexture(_screenTexture, _graphicsMode);
+ [self setFilterModeForTexture:_screenTexture];
if (_overlayTexture > 0) {
glDeleteTextures(1, &_overlayTexture); printOpenGLError();
}
glGenTextures(1, &_overlayTexture); printOpenGLError();
- setFilterModeForTexture(_overlayTexture, _graphicsMode);
-
- free(_gameScreenTextureBuffer);
- int textureSize = _gameScreenTextureWidth * _gameScreenTextureHeight * 2;
- _gameScreenTextureBuffer = (char *)malloc(textureSize);
- memset(_gameScreenTextureBuffer, 0, textureSize);
+ [self setFilterModeForTexture:_overlayTexture];
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _viewRenderbuffer); printOpenGLError();
@@ -628,10 +480,19 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[[_keyboardView inputView] removeFromSuperview];
}
+ GLfloat adjustedWidth = _videoContext.screenWidth;
+ GLfloat adjustedHeight = _videoContext.screenHeight;
+ if (_videoContext.asprectRatioCorrection) {
+ if (_videoContext.screenWidth == 320 && _videoContext.screenHeight == 200)
+ adjustedHeight = 240;
+ else if (_videoContext.screenWidth == 640 && _videoContext.screenHeight == 400)
+ adjustedHeight = 480;
+ }
+
float overlayPortraitRatio;
if (_orientation == UIDeviceOrientationLandscapeLeft || _orientation == UIDeviceOrientationLandscapeRight) {
- GLfloat gameScreenRatio = (GLfloat)_width / (GLfloat)_height;
+ GLfloat gameScreenRatio = adjustedWidth / adjustedHeight;
GLfloat screenRatio = (GLfloat)screenWidth / (GLfloat)screenHeight;
// These are the width/height according to the portrait layout!
@@ -660,7 +521,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
_gameScreenRect = CGRectMake(xOffset, yOffset, rectWidth, rectHeight);
overlayPortraitRatio = 1.0f;
} else {
- float ratio = (float)_height / (float)_width;
+ GLfloat ratio = adjustedHeight / adjustedWidth;
int height = (int)(screenWidth * ratio);
//printf("Making rect (%u, %u)\n", screenWidth, height);
_gameScreenRect = CGRectMake(0, 0, screenWidth, height);
@@ -674,7 +535,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[self addSubview:[_keyboardView inputView]];
[self addSubview: _keyboardView];
[[_keyboardView inputView] becomeFirstResponder];
- overlayPortraitRatio = (_overlayHeight * ratio) / _overlayWidth;
+ overlayPortraitRatio = (_videoContext.overlayHeight * ratio) / _videoContext.overlayWidth;
}
_overlayRect = CGRectMake(0, 0, screenWidth, screenHeight * overlayPortraitRatio);
@@ -688,6 +549,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
_overlayVertCoords[5] = _overlayVertCoords[7] = CGRectGetMaxY(_overlayRect);
[self setViewTransformation];
+ [self updateMouseCursorScaling];
}
- (void)setViewTransformation {
@@ -698,7 +560,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
// Scale the shake offset according to the overlay size. We need this to
// adjust the overlay mouse click coordinates when an offset is set.
- _scaledShakeOffsetY = (int)(_shakeOffsetY / (GLfloat)_height * CGRectGetHeight(_overlayRect));
+ _scaledShakeOffsetY = (int)(_videoContext.shakeOffsetY / (GLfloat)_videoContext.screenHeight * CGRectGetHeight(_overlayRect));
// Apply the shakeing to the output screen.
glTranslatef(0, -_scaledShakeOffsetY, 0);
@@ -732,6 +594,64 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[_events addObject: event];
}
+/**
+ * Converts portrait mode coordinates into rotated mode coordinates.
+ */
+- (bool)convertToRotatedCoords:(CGPoint)point result:(CGPoint *)result {
+ switch (_orientation) {
+ case UIDeviceOrientationLandscapeLeft:
+ result->x = point.y;
+ result->y = _renderBufferWidth - point.x;
+ return true;
+
+ case UIDeviceOrientationLandscapeRight:
+ result->x = _renderBufferHeight - point.y;
+ result->y = point.x;
+ return true;
+
+ case UIDeviceOrientationPortrait:
+ result->x = point.x;
+ result->y = point.y;
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+- (bool)getMouseCoords:(CGPoint)point eventX:(int *)x eventY:(int *)y {
+ if (![self convertToRotatedCoords:point result:&point])
+ return false;
+
+ CGRect *area;
+ int width, height, offsetY;
+ if (_videoContext.overlayVisible) {
+ area = &_overlayRect;
+ width = _videoContext.overlayWidth;
+ height = _videoContext.overlayHeight;
+ offsetY = _scaledShakeOffsetY;
+ } else {
+ area = &_gameScreenRect;
+ width = _videoContext.screenWidth;
+ height = _videoContext.screenHeight;
+ offsetY = _videoContext.shakeOffsetY;
+ }
+
+ point.x = (point.x - CGRectGetMinX(*area)) / CGRectGetWidth(*area);
+ point.y = (point.y - CGRectGetMinY(*area)) / CGRectGetHeight(*area);
+
+ *x = (int)(point.x * width);
+ // offsetY describes the translation of the screen in the upward direction,
+ // thus we need to add it here.
+ *y = (int)(point.y * height + offsetY);
+
+ // Clip coordinates
+ if (*x < 0 || *x > width || *y < 0 || *y > height)
+ return false;
+
+ return true;
+}
+
- (void)deviceOrientationChanged:(UIDeviceOrientation)orientation {
switch (orientation) {
case UIDeviceOrientationLandscapeLeft:
@@ -762,7 +682,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
case 1: {
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
- if (!getMouseCoords(_orientation, point, &x, &y))
+ if (![self getMouseCoords:point eventX:&x eventY:&y])
return;
_firstTouch = touch;
@@ -780,7 +700,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
case 2: {
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
- if (!getMouseCoords(_orientation, point, &x, &y))
+ if (![self getMouseCoords:point eventX:&x eventY:&y])
return;
_secondTouch = touch;
@@ -804,7 +724,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
for (UITouch *touch in touches) {
if (touch == _firstTouch) {
CGPoint point = [touch locationInView:self];
- if (!getMouseCoords(_orientation, point, &x, &y))
+ if (![self getMouseCoords:point eventX:&x eventY:&y])
return;
[self addEvent:
@@ -817,7 +737,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
];
} else if (touch == _secondTouch) {
CGPoint point = [touch locationInView:self];
- if (!getMouseCoords(_orientation, point, &x, &y))
+ if (![self getMouseCoords:point eventX:&x eventY:&y])
return;
[self addEvent:
@@ -840,7 +760,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
case 1: {
UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
CGPoint point = [touch locationInView:self];
- if (!getMouseCoords(_orientation, point, &x, &y))
+ if (![self getMouseCoords:point eventX:&x eventY:&y])
return;
[self addEvent:
@@ -857,7 +777,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
case 2: {
UITouch *touch = [[allTouches allObjects] objectAtIndex:1];
CGPoint point = [touch locationInView:self];
- if (!getMouseCoords(_orientation, point, &x, &y))
+ if (![self getMouseCoords:point eventX:&x eventY:&y])
return;
[self addEvent:
diff --git a/backends/platform/iphone/osys_events.cpp b/backends/platform/iphone/osys_events.cpp
index c167da35e6..85efbda208 100644
--- a/backends/platform/iphone/osys_events.cpp
+++ b/backends/platform/iphone/osys_events.cpp
@@ -122,8 +122,8 @@ bool OSystem_IPHONE::handleEvent_mouseDown(Common::Event &event, int x, int y) {
if (_mouseClickAndDragEnabled) {
event.type = Common::EVENT_LBUTTONDOWN;
- event.mouse.x = _mouseX;
- event.mouse.y = _mouseY;
+ event.mouse.x = _videoContext->mouseX;
+ event.mouse.y = _videoContext->mouseY;
return true;
} else {
_lastMouseDown = getMillis();
@@ -140,17 +140,17 @@ bool OSystem_IPHONE::handleEvent_mouseUp(Common::Event &event, int x, int y) {
return false;
} else if (_mouseClickAndDragEnabled) {
event.type = Common::EVENT_LBUTTONUP;
- event.mouse.x = _mouseX;
- event.mouse.y = _mouseY;
+ event.mouse.x = _videoContext->mouseX;
+ event.mouse.y = _videoContext->mouseY;
} else {
if (getMillis() - _lastMouseDown < 250) {
event.type = Common::EVENT_LBUTTONDOWN;
- event.mouse.x = _mouseX;
- event.mouse.y = _mouseY;
+ event.mouse.x = _videoContext->mouseX;
+ event.mouse.y = _videoContext->mouseY;
_queuedInputEvent.type = Common::EVENT_LBUTTONUP;
- _queuedInputEvent.mouse.x = _mouseX;
- _queuedInputEvent.mouse.y = _mouseY;
+ _queuedInputEvent.mouse.x = _videoContext->mouseX;
+ _queuedInputEvent.mouse.y = _videoContext->mouseY;
_lastMouseTap = getMillis();
_queuedEventTime = _lastMouseTap + kQueuedInputEventDelay;
} else
@@ -167,12 +167,12 @@ bool OSystem_IPHONE::handleEvent_secondMouseDown(Common::Event &event, int x, in
if (_mouseClickAndDragEnabled) {
event.type = Common::EVENT_LBUTTONUP;
- event.mouse.x = _mouseX;
- event.mouse.y = _mouseY;
+ event.mouse.x = _videoContext->mouseX;
+ event.mouse.y = _videoContext->mouseY;
_queuedInputEvent.type = Common::EVENT_RBUTTONDOWN;
- _queuedInputEvent.mouse.x = _mouseX;
- _queuedInputEvent.mouse.y = _mouseY;
+ _queuedInputEvent.mouse.x = _videoContext->mouseX;
+ _queuedInputEvent.mouse.y = _videoContext->mouseY;
} else
return false;
@@ -184,7 +184,7 @@ bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int
if (curTime - _lastSecondaryDown < 400) {
//printf("Right tap!\n");
- if (curTime - _lastSecondaryTap < 400 && !_overlayVisible) {
+ if (curTime - _lastSecondaryTap < 400 && !_videoContext->overlayVisible) {
//printf("Right escape!\n");
event.type = Common::EVENT_KEYDOWN;
_queuedInputEvent.type = Common::EVENT_KEYUP;
@@ -197,11 +197,11 @@ bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int
} else if (!_mouseClickAndDragEnabled) {
//printf("Rightclick!\n");
event.type = Common::EVENT_RBUTTONDOWN;
- event.mouse.x = _mouseX;
- event.mouse.y = _mouseY;
+ event.mouse.x = _videoContext->mouseX;
+ event.mouse.y = _videoContext->mouseY;
_queuedInputEvent.type = Common::EVENT_RBUTTONUP;
- _queuedInputEvent.mouse.x = _mouseX;
- _queuedInputEvent.mouse.y = _mouseY;
+ _queuedInputEvent.mouse.x = _videoContext->mouseX;
+ _queuedInputEvent.mouse.y = _videoContext->mouseY;
_lastSecondaryTap = curTime;
_queuedEventTime = curTime + kQueuedInputEventDelay;
} else {
@@ -211,8 +211,8 @@ bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int
}
if (_mouseClickAndDragEnabled) {
event.type = Common::EVENT_RBUTTONUP;
- event.mouse.x = _mouseX;
- event.mouse.y = _mouseY;
+ event.mouse.x = _videoContext->mouseX;
+ event.mouse.y = _videoContext->mouseY;
}
return true;
@@ -234,11 +234,11 @@ bool OSystem_IPHONE::handleEvent_mouseDragged(Common::Event &event, int x, int y
_lastPadX = x;
_lastPadY = y;
- mouseNewPosX = (int)(_mouseX - deltaX / 0.5f);
- mouseNewPosY = (int)(_mouseY - deltaY / 0.5f);
+ mouseNewPosX = (int)(_videoContext->mouseX - deltaX / 0.5f);
+ mouseNewPosY = (int)(_videoContext->mouseY - deltaY / 0.5f);
- int widthCap = _overlayVisible ? _overlayWidth : _screenWidth;
- int heightCap = _overlayVisible ? _overlayHeight : _screenHeight;
+ int widthCap = _videoContext->overlayVisible ? _videoContext->overlayWidth : _videoContext->screenWidth;
+ int heightCap = _videoContext->overlayVisible ? _videoContext->overlayHeight : _videoContext->screenHeight;
if (mouseNewPosX < 0)
mouseNewPosX = 0;
@@ -350,10 +350,10 @@ void OSystem_IPHONE::handleEvent_orientationChanged(int orientation) {
if (_screenOrientation != newOrientation) {
_screenOrientation = newOrientation;
- iPhone_initSurface(_screenWidth, _screenHeight);
+ updateOutputSurface();
dirtyFullScreen();
- if (_overlayVisible)
+ if (_videoContext->overlayVisible)
dirtyFullOverlayScreen();
updateScreen();
}
diff --git a/backends/platform/iphone/osys_main.cpp b/backends/platform/iphone/osys_main.cpp
index 2bdc09c9ce..f3e0d97b97 100644
--- a/backends/platform/iphone/osys_main.cpp
+++ b/backends/platform/iphone/osys_main.cpp
@@ -55,26 +55,28 @@ SoundProc OSystem_IPHONE::s_soundCallback = NULL;
void *OSystem_IPHONE::s_soundParam = NULL;
OSystem_IPHONE::OSystem_IPHONE() :
- _mixer(NULL), _gameScreenRaw(NULL),
- _overlayVisible(false), _gameScreenConverted(NULL),
- _mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0), _queuedEventTime(0),
+ _mixer(NULL), _lastMouseTap(0), _queuedEventTime(0),
_mouseNeedTextureUpdate(false), _secondaryTapped(false), _lastSecondaryTap(0),
_screenOrientation(kScreenOrientationFlippedLandscape), _mouseClickAndDragEnabled(false),
_gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false),
_mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0),
- _overlayHeight(0), _overlayWidth(0), _overlayBuffer(0), _mouseCursorPaletteEnabled(false),
- _currentGraphicsMode(kGraphicsModeLinear) {
+ _mouseCursorPaletteEnabled(false) {
_queuedInputEvent.type = Common::EVENT_INVALID;
_touchpadModeEnabled = !iPhone_isHighResDevice();
_fsFactory = new POSIXFilesystemFactory();
+ initVideoContext();
}
OSystem_IPHONE::~OSystem_IPHONE() {
AudioQueueDispose(s_AudioQueue.queue, true);
delete _mixer;
- free(_gameScreenRaw);
- free(_gameScreenConverted);
+ // Prevent accidental freeing of the screen texture here. This needs to be
+ // checked since we might use the screen texture as framebuffer in the case
+ // of hi-color games for example.
+ if (_framebuffer.pixels == _videoContext->screenTexture.pixels)
+ _framebuffer.free();
+ _mouseBuffer.free();
}
int OSystem_IPHONE::timerHandler(int t) {
@@ -120,6 +122,9 @@ void OSystem_IPHONE::setFeatureState(Feature f, bool enable) {
_mouseCursorPaletteEnabled = enable;
}
break;
+ case kFeatureAspectRatioCorrection:
+ _videoContext->asprectRatioCorrection = enable;
+ break;
default:
break;
@@ -130,6 +135,8 @@ bool OSystem_IPHONE::getFeatureState(Feature f) {
switch (f) {
case kFeatureCursorPalette:
return _mouseCursorPaletteEnabled;
+ case kFeatureAspectRatioCorrection:
+ return _videoContext->asprectRatioCorrection;
default:
return false;
diff --git a/backends/platform/iphone/osys_main.h b/backends/platform/iphone/osys_main.h
index e4b3d358d5..5d0f60c34c 100644
--- a/backends/platform/iphone/osys_main.h
+++ b/backends/platform/iphone/osys_main.h
@@ -59,39 +59,27 @@ protected:
static SoundProc s_soundCallback;
static void *s_soundParam;
- int _currentGraphicsMode;
-
Audio::MixerImpl *_mixer;
- Graphics::Surface _framebuffer;
- byte *_gameScreenRaw;
- OverlayColor *_overlayBuffer;
- uint16 _overlayHeight;
- uint16 _overlayWidth;
+ VideoContext *_videoContext;
- uint16 *_gameScreenConverted;
+ Graphics::Surface _framebuffer;
// For use with the game texture
uint16 _gamePalette[256];
// For use with the mouse texture
uint16 _gamePaletteRGBA5551[256];
- bool _overlayVisible;
- uint16 _screenWidth;
- uint16 _screenHeight;
struct timeval _startTime;
uint32 _timeSuspended;
- bool _mouseVisible;
bool _mouseCursorPaletteEnabled;
uint16 _mouseCursorPalette[256];
- byte *_mouseBuf;
- byte _mouseKeyColor;
- uint _mouseWidth, _mouseHeight;
- uint _mouseX, _mouseY;
- int _mouseHotspotX, _mouseHotspotY;
+ Graphics::Surface _mouseBuffer;
+ uint16 _mouseKeyColor;
bool _mouseDirty;
bool _mouseNeedTextureUpdate;
+
long _lastMouseDown;
long _lastMouseTap;
long _queuedEventTime;
@@ -133,9 +121,18 @@ public:
virtual bool setGraphicsMode(int mode);
virtual int getGraphicsMode() const;
virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format);
+
+ virtual void beginGFXTransaction();
+ virtual TransactionError endGFXTransaction();
+
virtual int16 getHeight();
virtual int16 getWidth();
+#ifdef USE_RGB_COLOR
+ virtual Graphics::PixelFormat getScreenFormat() const { return _framebuffer.format; }
+ virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const;
+#endif
+
virtual PaletteManager *getPaletteManager() { return this; }
protected:
// PaletteManager API
@@ -192,13 +189,14 @@ public:
virtual void logMessage(LogMessageType::Type type, const char *message);
protected:
+ void initVideoContext();
+ void updateOutputSurface();
+
void internUpdateScreen();
void dirtyFullScreen();
void dirtyFullOverlayScreen();
void suspendLoop();
void drawDirtyRect(const Common::Rect &dirtyRect);
- void drawDirtyOverlayRect(const Common::Rect &dirtyRect);
- void updateHardwareSurfaceForRect(const Common::Rect &updatedRect);
void updateMouseTexture();
static void AQBufferCallback(void *in, AudioQueueRef inQ, AudioQueueBufferRef outQB);
static int timerHandler(int t);
diff --git a/backends/platform/iphone/osys_video.cpp b/backends/platform/iphone/osys_video.cpp
deleted file mode 100644
index e26c360c82..0000000000
--- a/backends/platform/iphone/osys_video.cpp
+++ /dev/null
@@ -1,432 +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.
- *
- */
-
-// Disable symbol overrides so that we can use system headers.
-#define FORBIDDEN_SYMBOL_ALLOW_ALL
-
-#include "osys_main.h"
-
-const OSystem::GraphicsMode *OSystem_IPHONE::getSupportedGraphicsModes() const {
- return s_supportedGraphicsModes;
-}
-
-
-int OSystem_IPHONE::getDefaultGraphicsMode() const {
- return kGraphicsModeLinear;
-}
-
-bool OSystem_IPHONE::setGraphicsMode(int mode) {
- switch (mode) {
- case kGraphicsModeNone:
- case kGraphicsModeLinear:
- _currentGraphicsMode = mode;
- iPhone_setGraphicsMode((GraphicsModes)mode);
- return true;
-
- default:
- return false;
- }
-}
-
-int OSystem_IPHONE::getGraphicsMode() const {
- return _currentGraphicsMode;
-}
-
-void OSystem_IPHONE::initSize(uint width, uint height, const Graphics::PixelFormat *format) {
- //printf("initSize(%i, %i)\n", width, height);
-
- _screenWidth = width;
- _screenHeight = height;
-
- free(_gameScreenRaw);
-
- _gameScreenRaw = (byte *)malloc(width * height);
- bzero(_gameScreenRaw, width * height);
-
- //free(_overlayBuffer);
-
- int fullSize = _screenWidth * _screenHeight * sizeof(OverlayColor);
- //_overlayBuffer = (OverlayColor *)malloc(fullSize);
- clearOverlay();
-
- free(_gameScreenConverted);
-
- _gameScreenConverted = (uint16 *)malloc(fullSize);
- bzero(_gameScreenConverted, fullSize);
-
- iPhone_initSurface(width, height);
-
- if (_overlayBuffer == NULL) {
- _overlayHeight = iPhone_getScreenHeight();
- _overlayWidth = iPhone_getScreenWidth();
-
- printf("Overlay: (%u x %u)\n", _overlayWidth, _overlayHeight);
- _overlayBuffer = new OverlayColor[_overlayHeight * _overlayWidth];
- }
-
- _fullScreenIsDirty = false;
- dirtyFullScreen();
- _mouseVisible = false;
- _mouseCursorPaletteEnabled = false;
- _screenChangeCount++;
- updateScreen();
-}
-
-int16 OSystem_IPHONE::getHeight() {
- return _screenHeight;
-}
-
-int16 OSystem_IPHONE::getWidth() {
- return _screenWidth;
-}
-
-void OSystem_IPHONE::setPalette(const byte *colors, uint start, uint num) {
- assert(start + num <= 256);
- const byte *b = colors;
-
- for (uint i = start; i < start + num; ++i) {
- _gamePalette[i] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(b[0], b[1], b[2]);
- _gamePaletteRGBA5551[i] = Graphics::RGBToColor<Graphics::ColorMasks<5551> >(b[0], b[1], b[2]);
- b += 3;
- }
-
- dirtyFullScreen();
-}
-
-void OSystem_IPHONE::grabPalette(byte *colors, uint start, uint num) {
- assert(start + num <= 256);
- byte *b = colors;
-
- for (uint i = start; i < start + num; ++i) {
- Graphics::colorToRGB<Graphics::ColorMasks<565> >(_gamePalette[i], b[0], b[1], b[2]);
- b += 3;
- }
-}
-
-void OSystem_IPHONE::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) {
- //printf("copyRectToScreen(%i, %i, %i, %i)\n", x, y, w, h);
- //Clip the coordinates
- if (x < 0) {
- w += x;
- buf -= x;
- x = 0;
- }
-
- if (y < 0) {
- h += y;
- buf -= y * pitch;
- y = 0;
- }
-
- if (w > _screenWidth - x) {
- w = _screenWidth - x;
- }
-
- if (h > _screenHeight - y) {
- h = _screenHeight - y;
- }
-
- if (w <= 0 || h <= 0)
- return;
-
- if (!_fullScreenIsDirty) {
- _dirtyRects.push_back(Common::Rect(x, y, x + w, y + h));
- }
-
-
- byte *dst = _gameScreenRaw + y * _screenWidth + x;
- if (_screenWidth == pitch && pitch == w)
- memcpy(dst, buf, h * w);
- else {
- do {
- memcpy(dst, buf, w);
- buf += pitch;
- dst += _screenWidth;
- } while (--h);
- }
-}
-
-void OSystem_IPHONE::updateScreen() {
- //printf("updateScreen(): %i dirty rects.\n", _dirtyRects.size());
-
- if (_dirtyRects.size() == 0 && _dirtyOverlayRects.size() == 0 && !_mouseDirty)
- return;
-
- internUpdateScreen();
- _mouseDirty = false;
- _fullScreenIsDirty = false;
- _fullScreenOverlayIsDirty = false;
-
- iPhone_updateScreen(_mouseX, _mouseY);
-}
-
-void OSystem_IPHONE::internUpdateScreen() {
- if (_mouseNeedTextureUpdate) {
- updateMouseTexture();
- _mouseNeedTextureUpdate = false;
- }
-
- while (_dirtyRects.size()) {
- Common::Rect dirtyRect = _dirtyRects.remove_at(_dirtyRects.size() - 1);
-
- //printf("Drawing: (%i, %i) -> (%i, %i)\n", dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
- drawDirtyRect(dirtyRect);
- updateHardwareSurfaceForRect(dirtyRect);
- }
-
- if (_overlayVisible) {
- while (_dirtyOverlayRects.size()) {
- Common::Rect dirtyRect = _dirtyOverlayRects.remove_at(_dirtyOverlayRects.size() - 1);
-
- //printf("Drawing: (%i, %i) -> (%i, %i)\n", dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
- drawDirtyOverlayRect(dirtyRect);
- }
- }
-}
-
-void OSystem_IPHONE::drawDirtyRect(const Common::Rect &dirtyRect) {
- int h = dirtyRect.bottom - dirtyRect.top;
- int w = dirtyRect.right - dirtyRect.left;
-
- byte *src = &_gameScreenRaw[dirtyRect.top * _screenWidth + dirtyRect.left];
- uint16 *dst = &_gameScreenConverted[dirtyRect.top * _screenWidth + dirtyRect.left];
- for (int y = h; y > 0; y--) {
- for (int x = w; x > 0; x--)
- *dst++ = _gamePalette[*src++];
-
- dst += _screenWidth - w;
- src += _screenWidth - w;
- }
-}
-
-void OSystem_IPHONE::drawDirtyOverlayRect(const Common::Rect &dirtyRect) {
- iPhone_updateOverlayRect(_overlayBuffer, dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
-}
-
-void OSystem_IPHONE::updateHardwareSurfaceForRect(const Common::Rect &updatedRect) {
- iPhone_updateScreenRect(_gameScreenConverted, updatedRect.left, updatedRect.top, updatedRect.right, updatedRect.bottom);
-}
-
-Graphics::Surface *OSystem_IPHONE::lockScreen() {
- //printf("lockScreen()\n");
-
- _framebuffer.pixels = _gameScreenRaw;
- _framebuffer.w = _screenWidth;
- _framebuffer.h = _screenHeight;
- _framebuffer.pitch = _screenWidth;
- _framebuffer.format = Graphics::PixelFormat::createFormatCLUT8();
-
- return &_framebuffer;
-}
-
-void OSystem_IPHONE::unlockScreen() {
- //printf("unlockScreen()\n");
- dirtyFullScreen();
-}
-
-void OSystem_IPHONE::setShakePos(int shakeOffset) {
- //printf("setShakePos(%i)\n", shakeOffset);
- iPhone_setShakeOffset(shakeOffset);
- // HACK: We use this to force a redraw.
- _mouseDirty = true;
-}
-
-void OSystem_IPHONE::showOverlay() {
- //printf("showOverlay()\n");
- _overlayVisible = true;
- dirtyFullOverlayScreen();
- updateScreen();
- iPhone_enableOverlay(true);
-}
-
-void OSystem_IPHONE::hideOverlay() {
- //printf("hideOverlay()\n");
- _overlayVisible = false;
- _dirtyOverlayRects.clear();
- dirtyFullScreen();
- iPhone_enableOverlay(false);
-}
-
-void OSystem_IPHONE::clearOverlay() {
- //printf("clearOverlay()\n");
- bzero(_overlayBuffer, _overlayWidth * _overlayHeight * sizeof(OverlayColor));
- dirtyFullOverlayScreen();
-}
-
-void OSystem_IPHONE::grabOverlay(OverlayColor *buf, int pitch) {
- //printf("grabOverlay()\n");
- int h = _overlayHeight;
- OverlayColor *src = _overlayBuffer;
-
- do {
- memcpy(buf, src, _overlayWidth * sizeof(OverlayColor));
- src += _overlayWidth;
- buf += pitch;
- } while (--h);
-}
-
-void OSystem_IPHONE::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) {
- //printf("copyRectToOverlay(buf, pitch=%i, x=%i, y=%i, w=%i, h=%i)\n", pitch, x, y, w, h);
-
- //Clip the coordinates
- if (x < 0) {
- w += x;
- buf -= x;
- x = 0;
- }
-
- if (y < 0) {
- h += y;
- buf -= y * pitch;
- y = 0;
- }
-
- if (w > _overlayWidth - x)
- w = _overlayWidth - x;
-
- if (h > _overlayHeight - y)
- h = _overlayHeight - y;
-
- if (w <= 0 || h <= 0)
- return;
-
- if (!_fullScreenOverlayIsDirty) {
- _dirtyOverlayRects.push_back(Common::Rect(x, y, x + w, y + h));
- }
-
- OverlayColor *dst = _overlayBuffer + (y * _overlayWidth + x);
- if (_overlayWidth == pitch && pitch == w)
- memcpy(dst, buf, h * w * sizeof(OverlayColor));
- else {
- do {
- memcpy(dst, buf, w * sizeof(OverlayColor));
- buf += pitch;
- dst += _overlayWidth;
- } while (--h);
- }
-}
-
-int16 OSystem_IPHONE::getOverlayHeight() {
- return _overlayHeight;
-}
-
-int16 OSystem_IPHONE::getOverlayWidth() {
- return _overlayWidth;
-}
-
-bool OSystem_IPHONE::showMouse(bool visible) {
- bool last = _mouseVisible;
- _mouseVisible = visible;
- iPhone_showCursor(visible);
- _mouseDirty = true;
-
- return last;
-}
-
-void OSystem_IPHONE::warpMouse(int x, int y) {
- //printf("warpMouse()\n");
-
- _mouseX = x;
- _mouseY = y;
- _mouseDirty = true;
-}
-
-void OSystem_IPHONE::dirtyFullScreen() {
- if (!_fullScreenIsDirty) {
- _dirtyRects.clear();
- _dirtyRects.push_back(Common::Rect(0, 0, _screenWidth, _screenHeight));
- _fullScreenIsDirty = true;
- }
-}
-
-void OSystem_IPHONE::dirtyFullOverlayScreen() {
- if (!_fullScreenOverlayIsDirty) {
- _dirtyOverlayRects.clear();
- _dirtyOverlayRects.push_back(Common::Rect(0, 0, _overlayWidth, _overlayHeight));
- _fullScreenOverlayIsDirty = true;
- }
-}
-
-void OSystem_IPHONE::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, int cursorTargetScale, const Graphics::PixelFormat *format) {
- //printf("setMouseCursor(%i, %i, scale %u)\n", hotspotX, hotspotY, cursorTargetScale);
-
- if (_mouseBuf != NULL && (_mouseWidth != w || _mouseHeight != h)) {
- free(_mouseBuf);
- _mouseBuf = NULL;
- }
-
- if (_mouseBuf == NULL)
- _mouseBuf = (byte *)malloc(w * h);
-
- _mouseWidth = w;
- _mouseHeight = h;
-
- _mouseHotspotX = hotspotX;
- _mouseHotspotY = hotspotY;
-
- _mouseKeyColor = (byte)keycolor;
-
- memcpy(_mouseBuf, buf, w * h);
-
- _mouseDirty = true;
- _mouseNeedTextureUpdate = true;
-}
-
-void OSystem_IPHONE::setCursorPalette(const byte *colors, uint start, uint num) {
- assert(start + num <= 256);
-
- for (uint i = start; i < start + num; ++i, colors += 3)
- _mouseCursorPalette[i] = Graphics::RGBToColor<Graphics::ColorMasks<5551> >(colors[0], colors[1], colors[2]);
-
- // FIXME: This is just stupid, our client code seems to assume that this
- // automatically enables the cursor palette.
- _mouseCursorPaletteEnabled = true;
-
- if (_mouseCursorPaletteEnabled)
- _mouseDirty = _mouseNeedTextureUpdate = true;
-}
-
-void OSystem_IPHONE::updateMouseTexture() {
- int texWidth = getSizeNextPOT(_mouseWidth);
- int texHeight = getSizeNextPOT(_mouseHeight);
- int bufferSize = texWidth * texHeight * sizeof(int16);
- uint16 *mouseBuf = (uint16 *)malloc(bufferSize);
- memset(mouseBuf, 0, bufferSize);
-
- const uint16 *palette;
- if (_mouseCursorPaletteEnabled)
- palette = _mouseCursorPalette;
- else
- palette = _gamePaletteRGBA5551;
-
- for (uint x = 0; x < _mouseWidth; ++x) {
- for (uint y = 0; y < _mouseHeight; ++y) {
- const byte color = _mouseBuf[y * _mouseWidth + x];
- if (color != _mouseKeyColor)
- mouseBuf[y * texWidth + x] = palette[color] | 0x1;
- else
- mouseBuf[y * texWidth + x] = 0x0;
- }
- }
-
- iPhone_setMouseCursor(mouseBuf, _mouseWidth, _mouseHeight, _mouseHotspotX, _mouseHotspotY);
-}
diff --git a/backends/platform/iphone/osys_video.mm b/backends/platform/iphone/osys_video.mm
new file mode 100644
index 0000000000..2b5e78bd35
--- /dev/null
+++ b/backends/platform/iphone/osys_video.mm
@@ -0,0 +1,485 @@
+/* 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.
+ *
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "osys_main.h"
+#include "iphone_video.h"
+
+#include "graphics/conversion.h"
+
+void OSystem_IPHONE::initVideoContext() {
+ _videoContext = [g_iPhoneViewInstance getVideoContext];
+}
+
+const OSystem::GraphicsMode *OSystem_IPHONE::getSupportedGraphicsModes() const {
+ return s_supportedGraphicsModes;
+}
+
+int OSystem_IPHONE::getDefaultGraphicsMode() const {
+ return kGraphicsModeLinear;
+}
+
+bool OSystem_IPHONE::setGraphicsMode(int mode) {
+ switch (mode) {
+ case kGraphicsModeNone:
+ case kGraphicsModeLinear:
+ _videoContext->graphicsMode = (GraphicsModes)mode;
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+int OSystem_IPHONE::getGraphicsMode() const {
+ return _videoContext->graphicsMode;
+}
+
+#ifdef USE_RGB_COLOR
+Common::List<Graphics::PixelFormat> OSystem_IPHONE::getSupportedFormats() const {
+ Common::List<Graphics::PixelFormat> list;
+ // RGB565
+ list.push_back(Graphics::createPixelFormat<565>());
+ // CLUT8
+ list.push_back(Graphics::PixelFormat::createFormatCLUT8());
+ return list;
+}
+#endif
+
+void OSystem_IPHONE::initSize(uint width, uint height, const Graphics::PixelFormat *format) {
+ //printf("initSize(%u, %u, %p)\n", width, height, (const void *)format);
+
+ _videoContext->screenWidth = width;
+ _videoContext->screenHeight = height;
+ _videoContext->shakeOffsetY = 0;
+
+ // In case we use the screen texture as frame buffer we reset the pixels
+ // pointer here to avoid freeing the screen texture.
+ if (_framebuffer.pixels == _videoContext->screenTexture.pixels)
+ _framebuffer.pixels = 0;
+
+ // Create the screen texture right here. We need to do this here, since
+ // when a game requests hi-color mode, we actually set the framebuffer
+ // to the texture buffer to avoid an additional copy step.
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(createScreenTexture) withObject:nil waitUntilDone: YES];
+
+ if (!format || format->bytesPerPixel == 1) {
+ _framebuffer.create(width, height, Graphics::PixelFormat::createFormatCLUT8());
+ } else {
+#if 0
+ printf("bytesPerPixel: %u RGBAlosses: %u,%u,%u,%u RGBAshifts: %u,%u,%u,%u\n", format->bytesPerPixel,
+ format->rLoss, format->gLoss, format->bLoss, format->aLoss,
+ format->rShift, format->gShift, format->bShift, format->aShift);
+#endif
+ assert(_videoContext->screenTexture.format == *format);
+ // We directly draw on the screen texture in hi-color mode. Thus
+ // we copy over its settings here and just replace the width and
+ // height to avoid any problems.
+ _framebuffer = _videoContext->screenTexture;
+ _framebuffer.w = width;
+ _framebuffer.h = height;
+ }
+
+ _fullScreenIsDirty = false;
+ dirtyFullScreen();
+ _mouseCursorPaletteEnabled = false;
+}
+
+void OSystem_IPHONE::beginGFXTransaction() {
+}
+
+OSystem::TransactionError OSystem_IPHONE::endGFXTransaction() {
+ _screenChangeCount++;
+ updateOutputSurface();
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(setGraphicsMode) withObject:nil waitUntilDone: YES];
+
+ // TODO: Can we return better error codes?
+ return kTransactionSuccess;
+}
+
+void OSystem_IPHONE::updateOutputSurface() {
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(initSurface) withObject:nil waitUntilDone: YES];
+}
+
+int16 OSystem_IPHONE::getHeight() {
+ return _videoContext->screenHeight;
+}
+
+int16 OSystem_IPHONE::getWidth() {
+ return _videoContext->screenWidth;
+}
+
+void OSystem_IPHONE::setPalette(const byte *colors, uint start, uint num) {
+ assert(start + num <= 256);
+ const byte *b = colors;
+
+ for (uint i = start; i < start + num; ++i) {
+ _gamePalette[i] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(b[0], b[1], b[2]);
+ _gamePaletteRGBA5551[i] = Graphics::RGBToColor<Graphics::ColorMasks<5551> >(b[0], b[1], b[2]);
+ b += 3;
+ }
+
+ dirtyFullScreen();
+}
+
+void OSystem_IPHONE::grabPalette(byte *colors, uint start, uint num) {
+ assert(start + num <= 256);
+ byte *b = colors;
+
+ for (uint i = start; i < start + num; ++i) {
+ Graphics::colorToRGB<Graphics::ColorMasks<565> >(_gamePalette[i], b[0], b[1], b[2]);
+ b += 3;
+ }
+}
+
+void OSystem_IPHONE::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) {
+ //printf("copyRectToScreen(%i, %i, %i, %i)\n", x, y, w, h);
+ //Clip the coordinates
+ if (x < 0) {
+ w += x;
+ buf -= x;
+ x = 0;
+ }
+
+ if (y < 0) {
+ h += y;
+ buf -= y * pitch;
+ y = 0;
+ }
+
+ if (w > (int)_framebuffer.w - x) {
+ w = _framebuffer.w - x;
+ }
+
+ if (h > (int)_framebuffer.h - y) {
+ h = _framebuffer.h - y;
+ }
+
+ if (w <= 0 || h <= 0)
+ return;
+
+ if (!_fullScreenIsDirty) {
+ _dirtyRects.push_back(Common::Rect(x, y, x + w, y + h));
+ }
+
+ byte *dst = (byte *)_framebuffer.getBasePtr(x, y);
+ if (_framebuffer.pitch == pitch && _framebuffer.w == w) {
+ memcpy(dst, buf, h * pitch);
+ } else {
+ do {
+ memcpy(dst, buf, w * _framebuffer.format.bytesPerPixel);
+ buf += pitch;
+ dst += _framebuffer.pitch;
+ } while (--h);
+ }
+}
+
+void OSystem_IPHONE::updateScreen() {
+ //printf("updateScreen(): %i dirty rects.\n", _dirtyRects.size());
+
+ if (_dirtyRects.size() == 0 && _dirtyOverlayRects.size() == 0 && !_mouseDirty)
+ return;
+
+ internUpdateScreen();
+ _mouseDirty = false;
+ _fullScreenIsDirty = false;
+ _fullScreenOverlayIsDirty = false;
+
+ iPhone_updateScreen();
+}
+
+void OSystem_IPHONE::internUpdateScreen() {
+ if (_mouseNeedTextureUpdate) {
+ updateMouseTexture();
+ _mouseNeedTextureUpdate = false;
+ }
+
+ while (_dirtyRects.size()) {
+ Common::Rect dirtyRect = _dirtyRects.remove_at(_dirtyRects.size() - 1);
+
+ //printf("Drawing: (%i, %i) -> (%i, %i)\n", dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
+ drawDirtyRect(dirtyRect);
+ // TODO: Implement dirty rect code
+ //updateHardwareSurfaceForRect(dirtyRect);
+ }
+
+ if (_videoContext->overlayVisible) {
+ // TODO: Implement dirty rect code
+ _dirtyOverlayRects.clear();
+ /*while (_dirtyOverlayRects.size()) {
+ Common::Rect dirtyRect = _dirtyOverlayRects.remove_at(_dirtyOverlayRects.size() - 1);
+
+ //printf("Drawing: (%i, %i) -> (%i, %i)\n", dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
+ drawDirtyOverlayRect(dirtyRect);
+ }*/
+ }
+}
+
+void OSystem_IPHONE::drawDirtyRect(const Common::Rect &dirtyRect) {
+ // We only need to do a color look up for CLUT8
+ if (_framebuffer.format.bytesPerPixel != 1)
+ return;
+
+ int h = dirtyRect.bottom - dirtyRect.top;
+ int w = dirtyRect.right - dirtyRect.left;
+
+ const byte *src = (const byte *)_framebuffer.getBasePtr(dirtyRect.left, dirtyRect.top);
+ byte *dstRaw = (byte *)_videoContext->screenTexture.getBasePtr(dirtyRect.left, dirtyRect.top);
+
+ // When we use CLUT8 do a color look up
+ for (int y = h; y > 0; y--) {
+ uint16 *dst = (uint16 *)dstRaw;
+ for (int x = w; x > 0; x--)
+ *dst++ = _gamePalette[*src++];
+
+ dstRaw += _videoContext->screenTexture.pitch;
+ src += _framebuffer.pitch - w;
+ }
+}
+
+Graphics::Surface *OSystem_IPHONE::lockScreen() {
+ //printf("lockScreen()\n");
+ return &_framebuffer;
+}
+
+void OSystem_IPHONE::unlockScreen() {
+ //printf("unlockScreen()\n");
+ dirtyFullScreen();
+}
+
+void OSystem_IPHONE::setShakePos(int shakeOffset) {
+ //printf("setShakePos(%i)\n", shakeOffset);
+ _videoContext->shakeOffsetY = shakeOffset;
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(setViewTransformation) withObject:nil waitUntilDone: YES];
+ // HACK: We use this to force a redraw.
+ _mouseDirty = true;
+}
+
+void OSystem_IPHONE::showOverlay() {
+ //printf("showOverlay()\n");
+ _videoContext->overlayVisible = true;
+ dirtyFullOverlayScreen();
+ updateScreen();
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(updateMouseCursorScaling) withObject:nil waitUntilDone: YES];
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(clearColorBuffer) withObject:nil waitUntilDone: YES];
+}
+
+void OSystem_IPHONE::hideOverlay() {
+ //printf("hideOverlay()\n");
+ _videoContext->overlayVisible = false;
+ _dirtyOverlayRects.clear();
+ dirtyFullScreen();
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(updateMouseCursorScaling) withObject:nil waitUntilDone: YES];
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(clearColorBuffer) withObject:nil waitUntilDone: YES];
+}
+
+void OSystem_IPHONE::clearOverlay() {
+ //printf("clearOverlay()\n");
+ bzero(_videoContext->overlayTexture.getBasePtr(0, 0), _videoContext->overlayTexture.h * _videoContext->overlayTexture.pitch);
+ dirtyFullOverlayScreen();
+}
+
+void OSystem_IPHONE::grabOverlay(OverlayColor *buf, int pitch) {
+ //printf("grabOverlay()\n");
+ int h = _videoContext->overlayHeight;
+
+ const byte *src = (const byte *)_videoContext->overlayTexture.getBasePtr(0, 0);
+ do {
+ memcpy(buf, src, _videoContext->overlayWidth * sizeof(OverlayColor));
+ src += _videoContext->overlayTexture.pitch;
+ buf += pitch;
+ } while (--h);
+}
+
+void OSystem_IPHONE::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) {
+ //printf("copyRectToOverlay(buf, pitch=%i, x=%i, y=%i, w=%i, h=%i)\n", pitch, x, y, w, h);
+
+ //Clip the coordinates
+ if (x < 0) {
+ w += x;
+ buf -= x;
+ x = 0;
+ }
+
+ if (y < 0) {
+ h += y;
+ buf -= y * pitch;
+ y = 0;
+ }
+
+ if (w > (int)_videoContext->overlayWidth - x)
+ w = _videoContext->overlayWidth - x;
+
+ if (h > (int)_videoContext->overlayHeight - y)
+ h = _videoContext->overlayHeight - y;
+
+ if (w <= 0 || h <= 0)
+ return;
+
+ if (!_fullScreenOverlayIsDirty) {
+ _dirtyOverlayRects.push_back(Common::Rect(x, y, x + w, y + h));
+ }
+
+ byte *dst = (byte *)_videoContext->overlayTexture.getBasePtr(x, y);
+ do {
+ memcpy(dst, buf, w * sizeof(OverlayColor));
+ buf += pitch;
+ dst += _videoContext->overlayTexture.pitch;
+ } while (--h);
+}
+
+int16 OSystem_IPHONE::getOverlayHeight() {
+ return _videoContext->overlayHeight;
+}
+
+int16 OSystem_IPHONE::getOverlayWidth() {
+ return _videoContext->overlayWidth;
+}
+
+bool OSystem_IPHONE::showMouse(bool visible) {
+ bool last = _videoContext->mouseIsVisible;
+ _videoContext->mouseIsVisible = visible;
+ _mouseDirty = true;
+
+ return last;
+}
+
+void OSystem_IPHONE::warpMouse(int x, int y) {
+ //printf("warpMouse()\n");
+ _videoContext->mouseX = x;
+ _videoContext->mouseY = y;
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(notifyMouseMove) withObject:nil waitUntilDone: YES];
+ _mouseDirty = true;
+}
+
+void OSystem_IPHONE::dirtyFullScreen() {
+ if (!_fullScreenIsDirty) {
+ _dirtyRects.clear();
+ _dirtyRects.push_back(Common::Rect(0, 0, _videoContext->screenWidth, _videoContext->screenHeight));
+ _fullScreenIsDirty = true;
+ }
+}
+
+void OSystem_IPHONE::dirtyFullOverlayScreen() {
+ if (!_fullScreenOverlayIsDirty) {
+ _dirtyOverlayRects.clear();
+ _dirtyOverlayRects.push_back(Common::Rect(0, 0, _videoContext->overlayWidth, _videoContext->overlayHeight));
+ _fullScreenOverlayIsDirty = true;
+ }
+}
+
+void OSystem_IPHONE::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, int cursorTargetScale, const Graphics::PixelFormat *format) {
+ //printf("setMouseCursor(%i, %i, scale %u)\n", hotspotX, hotspotY, cursorTargetScale);
+
+ const Graphics::PixelFormat pixelFormat = format ? *format : Graphics::PixelFormat::createFormatCLUT8();
+#if 0
+ printf("bytesPerPixel: %u RGBAlosses: %u,%u,%u,%u RGBAshifts: %u,%u,%u,%u\n", pixelFormat.bytesPerPixel,
+ pixelFormat.rLoss, pixelFormat.gLoss, pixelFormat.bLoss, pixelFormat.aLoss,
+ pixelFormat.rShift, pixelFormat.gShift, pixelFormat.bShift, pixelFormat.aShift);
+#endif
+ assert(pixelFormat.bytesPerPixel == 1 || pixelFormat.bytesPerPixel == 2);
+
+ if (_mouseBuffer.w != w || _mouseBuffer.h != h || _mouseBuffer.format != pixelFormat || !_mouseBuffer.pixels)
+ _mouseBuffer.create(w, h, pixelFormat);
+
+ _videoContext->mouseWidth = w;
+ _videoContext->mouseHeight = h;
+
+ _videoContext->mouseHotspotX = hotspotX;
+ _videoContext->mouseHotspotY = hotspotY;
+
+ _mouseKeyColor = keycolor;
+
+ memcpy(_mouseBuffer.getBasePtr(0, 0), buf, h * _mouseBuffer.pitch);
+
+ _mouseDirty = true;
+ _mouseNeedTextureUpdate = true;
+}
+
+void OSystem_IPHONE::setCursorPalette(const byte *colors, uint start, uint num) {
+ assert(start + num <= 256);
+
+ for (uint i = start; i < start + num; ++i, colors += 3)
+ _mouseCursorPalette[i] = Graphics::RGBToColor<Graphics::ColorMasks<5551> >(colors[0], colors[1], colors[2]);
+
+ // FIXME: This is just stupid, our client code seems to assume that this
+ // automatically enables the cursor palette.
+ _mouseCursorPaletteEnabled = true;
+
+ if (_mouseCursorPaletteEnabled)
+ _mouseDirty = _mouseNeedTextureUpdate = true;
+}
+
+void OSystem_IPHONE::updateMouseTexture() {
+ uint texWidth = getSizeNextPOT(_videoContext->mouseWidth);
+ uint texHeight = getSizeNextPOT(_videoContext->mouseHeight);
+
+ Graphics::Surface &mouseTexture = _videoContext->mouseTexture;
+ if (mouseTexture.w != texWidth || mouseTexture.h != texHeight)
+ mouseTexture.create(texWidth, texHeight, Graphics::createPixelFormat<5551>());
+
+ if (_mouseBuffer.format.bytesPerPixel == 1) {
+ const uint16 *palette;
+ if (_mouseCursorPaletteEnabled)
+ palette = _mouseCursorPalette;
+ else
+ palette = _gamePaletteRGBA5551;
+
+ uint16 *mouseBuf = (uint16 *)mouseTexture.getBasePtr(0, 0);
+ for (uint x = 0; x < _videoContext->mouseWidth; ++x) {
+ for (uint y = 0; y < _videoContext->mouseHeight; ++y) {
+ const byte color = *(const byte *)_mouseBuffer.getBasePtr(x, y);
+ if (color != _mouseKeyColor)
+ mouseBuf[y * texWidth + x] = palette[color] | 0x1;
+ else
+ mouseBuf[y * texWidth + x] = 0x0;
+ }
+ }
+ } else {
+ if (crossBlit((byte *)mouseTexture.getBasePtr(0, 0), (const byte *)_mouseBuffer.getBasePtr(0, 0), mouseTexture.pitch,
+ _mouseBuffer.pitch, _mouseBuffer.w, _mouseBuffer.h, mouseTexture.format, _mouseBuffer.format)) {
+ if (!_mouseBuffer.format.aBits()) {
+ // Apply color keying since the original cursor had no alpha channel.
+ const uint16 *src = (const uint16 *)_mouseBuffer.getBasePtr(0, 0);
+ uint8 *dstRaw = (uint8 *)mouseTexture.getBasePtr(0, 0);
+
+ for (uint y = 0; y < _mouseBuffer.h; ++y, dstRaw += mouseTexture.pitch) {
+ uint16 *dst = (uint16 *)dstRaw;
+ for (uint x = 0; x < _mouseBuffer.w; ++x, ++dst) {
+ if (*src++ == _mouseKeyColor)
+ *dst &= ~1;
+ else
+ *dst |= 1;
+ }
+ }
+ }
+ } else {
+ // TODO: Log this!
+ // Make the cursor all transparent... we really need a better fallback ;-).
+ memset(mouseTexture.getBasePtr(0, 0), 0, mouseTexture.h * mouseTexture.pitch);
+ }
+ }
+
+ [g_iPhoneViewInstance performSelectorOnMainThread:@selector(updateMouseCursor) withObject:nil waitUntilDone: YES];
+}
diff --git a/backends/platform/maemo/maemo-common.h b/backends/platform/maemo/maemo-common.h
index 453c70c45f..0442b9c0ae 100644
--- a/backends/platform/maemo/maemo-common.h
+++ b/backends/platform/maemo/maemo-common.h
@@ -43,15 +43,6 @@ struct Model {
bool hasMenuKey;
};
-static const Model models[] = {
- {"SU-18", kModelType770, "770", false, true},
- {"RX-34", kModelTypeN800, "N800", false, true},
- {"RX-44", kModelTypeN810, "N810", true, true},
- {"RX-48", kModelTypeN810, "N810W", true, true},
- {"RX-51", kModelTypeN900, "N900", true, false},
- {0, kModelTypeInvalid, 0, true, true}
-};
-
enum CustomEventType {
kEventClickMode = 1,
kEventInvalid = 0
diff --git a/backends/platform/maemo/maemo.cpp b/backends/platform/maemo/maemo.cpp
index 209e527e3f..a127926eb0 100644
--- a/backends/platform/maemo/maemo.cpp
+++ b/backends/platform/maemo/maemo.cpp
@@ -156,10 +156,19 @@ void OSystem_SDL_Maemo::setWindowCaption(const char *caption) {
setXWindowName(cap.c_str());
}
+static const Model models[] = {
+ {"SU-18", kModelType770, "770", false, true},
+ {"RX-34", kModelTypeN800, "N800", false, true},
+ {"RX-44", kModelTypeN810, "N810", true, true},
+ {"RX-48", kModelTypeN810, "N810W", true, true},
+ {"RX-51", kModelTypeN900, "N900", true, false},
+ {0, kModelTypeInvalid, 0, true, true}
+};
+
const Maemo::Model OSystem_SDL_Maemo::detectModel() {
Common::String deviceHwId = Common::String(getenv("SCUMMVM_MAEMO_DEVICE"));
const Model *model;
- for (model = models; model->hwId; model++) {
+ for (model = models; model->hwId; ++model) {
if (deviceHwId.equals(model->hwId))
return *model;
}
diff --git a/base/commandLine.cpp b/base/commandLine.cpp
index aa589ed15f..08838167e9 100644
--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -33,9 +33,10 @@
#include "base/version.h"
#include "common/config-manager.h"
+#include "common/fs.h"
+#include "common/rendermode.h"
#include "common/system.h"
#include "common/textconsole.h"
-#include "common/fs.h"
#include "gui/ThemeEngine.h"
diff --git a/base/main.cpp b/base/main.cpp
index 5311b6fd78..5e9f1d4f25 100644
--- a/base/main.cpp
+++ b/base/main.cpp
@@ -264,9 +264,7 @@ static void setupKeymapper(OSystem &system) {
Keymapper *mapper = system.getEventManager()->getKeymapper();
- HardwareKeySet *keySet;
-
- keySet = system.getHardwareKeySet();
+ HardwareKeySet *keySet = system.getHardwareKeySet();
// Query backend for hardware keys and register them
mapper->registerHardwareKeySet(keySet);
diff --git a/common/gui_options.cpp b/common/gui_options.cpp
new file mode 100644
index 0000000000..5b7d939dc4
--- /dev/null
+++ b/common/gui_options.cpp
@@ -0,0 +1,132 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/gui_options.h"
+
+#include "common/config-manager.h"
+#include "common/str.h"
+
+namespace Common {
+
+const struct GameOpt {
+ const char *option;
+ const char *desc;
+} g_gameOptions[] = {
+ { GUIO_NOSUBTITLES, "sndNoSubs" },
+ { GUIO_NOMUSIC, "sndNoMusic" },
+ { GUIO_NOSPEECH, "sndNoSpeech" },
+ { GUIO_NOSFX, "sndNoSFX" },
+ { GUIO_NOMIDI, "sndNoMIDI" },
+
+ { GUIO_NOLAUNCHLOAD, "launchNoLoad" },
+
+ { GUIO_MIDIPCSPK, "midiPCSpk" },
+ { GUIO_MIDICMS, "midiCMS" },
+ { GUIO_MIDIPCJR, "midiPCJr" },
+ { GUIO_MIDIADLIB, "midiAdLib" },
+ { GUIO_MIDIC64, "midiC64" },
+ { GUIO_MIDIAMIGA, "midiAmiga" },
+ { GUIO_MIDIAPPLEIIGS,"midiAppleIIgs" },
+ { GUIO_MIDITOWNS, "midiTowns" },
+ { GUIO_MIDIPC98, "midiPC98" },
+ { GUIO_MIDIMT32, "midiMt32" },
+ { GUIO_MIDIGM, "midiGM" },
+
+ { GUIO_NOASPECT, "noAspect" },
+ { GUIO_EGAUNDITHER, "egaUndither" },
+
+ { GUIO_RENDERHERCGREEN, "hercGreen" },
+ { GUIO_RENDERHERCAMBER, "hercAmber" },
+ { GUIO_RENDERCGA, "cga" },
+ { GUIO_RENDEREGA, "ega" },
+ { GUIO_RENDERVGA, "vga" },
+ { GUIO_RENDERAMIGA, "amiga" },
+ { GUIO_RENDERFMTOWNS, "fmtowns" },
+ { GUIO_RENDERPC9821, "pc9821" },
+ { GUIO_RENDERPC9801, "pc9801" },
+
+ { GUIO_NONE, 0 }
+};
+
+bool checkGameGUIOption(const String &option, const String &str) {
+ for (int i = 0; g_gameOptions[i].desc; i++) {
+ if (option.contains(g_gameOptions[i].option)) {
+ if (str.contains(g_gameOptions[i].desc))
+ return true;
+ else
+ return false;
+ }
+ }
+ return false;
+}
+
+bool checkGameGUIOptionLanguage(Language lang, const String &str) {
+ if (!str.contains("lang_")) // If no languages are specified
+ return true;
+
+ if (str.contains(getGameGUIOptionsDescriptionLanguage(lang)))
+ return true;
+
+ return false;
+}
+
+const String getGameGUIOptionsDescriptionLanguage(Language lang) {
+ if (lang == UNK_LANG)
+ return "";
+
+ return String("lang_") + getLanguageDescription(lang);
+}
+
+String parseGameGUIOptions(const String &str) {
+ String res;
+
+ for (int i = 0; g_gameOptions[i].desc; i++)
+ if (str.contains(g_gameOptions[i].desc))
+ res += g_gameOptions[i].option;
+
+ return res;
+}
+
+const String getGameGUIOptionsDescription(const String &options) {
+ String res;
+
+ for (int i = 0; g_gameOptions[i].desc; i++)
+ if (options.contains(g_gameOptions[i].option[0]))
+ res += String(g_gameOptions[i].desc) + " ";
+
+ res.trim();
+
+ return res;
+}
+
+void updateGameGUIOptions(const String &options, const String &langOption) {
+ const String newOptionString = getGameGUIOptionsDescription(options) + " " + langOption;
+
+ if ((!options.empty() && !ConfMan.hasKey("guioptions")) ||
+ (ConfMan.hasKey("guioptions") && ConfMan.get("guioptions") != newOptionString)) {
+ ConfMan.set("guioptions", newOptionString);
+ ConfMan.flushToDisk();
+ }
+}
+
+
+} // End of namespace Common
diff --git a/common/gui_options.h b/common/gui_options.h
new file mode 100644
index 0000000000..5649f1103d
--- /dev/null
+++ b/common/gui_options.h
@@ -0,0 +1,88 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef COMMON_GUI_OPTIONS_H
+#define COMMON_GUI_OPTIONS_H
+
+#include "common/language.h"
+
+#define GUIO_NONE "\000"
+#define GUIO_NOSUBTITLES "\001"
+#define GUIO_NOMUSIC "\002"
+#define GUIO_NOSPEECH "\003"
+#define GUIO_NOSFX "\004"
+#define GUIO_NOMIDI "\005"
+#define GUIO_NOLAUNCHLOAD "\006"
+
+#define GUIO_MIDIPCSPK "\007"
+#define GUIO_MIDICMS "\010"
+#define GUIO_MIDIPCJR "\011"
+#define GUIO_MIDIADLIB "\012"
+#define GUIO_MIDIC64 "\013"
+#define GUIO_MIDIAMIGA "\014"
+#define GUIO_MIDIAPPLEIIGS "\015"
+#define GUIO_MIDITOWNS "\016"
+#define GUIO_MIDIPC98 "\017"
+#define GUIO_MIDIMT32 "\020"
+#define GUIO_MIDIGM "\021"
+
+#define GUIO_NOASPECT "\022"
+#define GUIO_EGAUNDITHER "\023"
+
+#define GUIO_RENDERHERCGREEN "\030"
+#define GUIO_RENDERHERCAMBER "\031"
+#define GUIO_RENDERCGA "\032"
+#define GUIO_RENDEREGA "\033"
+#define GUIO_RENDERVGA "\034"
+#define GUIO_RENDERAMIGA "\035"
+#define GUIO_RENDERFMTOWNS "\036"
+#define GUIO_RENDERPC9821 "\037"
+#define GUIO_RENDERPC9801 "\040"
+
+#define GUIO0() (GUIO_NONE)
+#define GUIO1(a) (a)
+#define GUIO2(a,b) (a b)
+#define GUIO3(a,b,c) (a b c)
+#define GUIO4(a,b,c,d) (a b c d)
+#define GUIO5(a,b,c,d,e) (a b c d e)
+#define GUIO6(a,b,c,d,e,f) (a b c d e f)
+
+namespace Common {
+
+
+bool checkGameGUIOption(const String &option, const String &str);
+bool checkGameGUIOptionLanguage(Common::Language lang, const String &str);
+String parseGameGUIOptions(const String &str);
+const String getGameGUIOptionsDescription(const String &options);
+const String getGameGUIOptionsDescriptionLanguage(Common::Language lang);
+
+/**
+ * Updates the GUI options of the current config manager
+ * domain, when they differ to the ones passed as
+ * parameter.
+ */
+void updateGameGUIOptions(const String &options, const String &langOption);
+
+
+} // End of namespace Common
+
+#endif
diff --git a/common/language.cpp b/common/language.cpp
new file mode 100644
index 0000000000..1de01b0207
--- /dev/null
+++ b/common/language.cpp
@@ -0,0 +1,107 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "common/language.h"
+#include "common/str.h"
+
+namespace Common {
+
+const LanguageDescription g_languages[] = {
+ { "zh-cn", "zh_CN", "Chinese (China)", ZH_CNA },
+ { "zh", "zh_TW", "Chinese (Taiwan)", ZH_TWN },
+ { "cz", "cs_CZ", "Czech", CZ_CZE },
+ { "nl", "nl_NL", "Dutch", NL_NLD },
+ { "en", "en", "English", EN_ANY }, // Generic English (when only one game version exist)
+ { "gb", "en_GB", "English (GB)", EN_GRB },
+ { "us", "en_US", "English (US)", EN_USA },
+ { "fr", "fr_FR", "French", FR_FRA },
+ { "de", "de_DE", "German", DE_DEU },
+ { "gr", "el_GR", "Greek", GR_GRE },
+ { "he", "he_IL", "Hebrew", HE_ISR },
+ { "hb", "he_IL", "Hebrew", HE_ISR }, // Deprecated
+ { "hr", "hr_HR", "Croatian", HR_HRV },
+ { "hu", "hu_HU", "Hungarian", HU_HUN },
+ { "it", "it_IT", "Italian", IT_ITA },
+ { "jp", "ja_JP", "Japanese", JA_JPN },
+ { "kr", "ko_KR", "Korean", KO_KOR },
+ { "nb", "nb_NO", "Norwegian Bokm\xE5l", NB_NOR }, // TODO Someone should verify the unix locale
+ { "pl", "pl_PL", "Polish", PL_POL },
+ { "br", "pt_BR", "Portuguese", PT_BRA },
+ { "ru", "ru_RU", "Russian", RU_RUS },
+ { "es", "es_ES", "Spanish", ES_ESP },
+ { "se", "sv_SE", "Swedish", SE_SWE },
+ { 0, 0, 0, UNK_LANG }
+};
+
+Language parseLanguage(const String &str) {
+ if (str.empty())
+ return UNK_LANG;
+
+ const LanguageDescription *l = g_languages;
+ for (; l->code; ++l) {
+ if (str.equalsIgnoreCase(l->code))
+ return l->id;
+ }
+
+ return UNK_LANG;
+}
+
+Language parseLanguageFromLocale(const char *locale) {
+ if (!locale || !*locale)
+ return UNK_LANG;
+
+ const LanguageDescription *l = g_languages;
+ for (; l->code; ++l) {
+ if (!strcmp(l->unixLocale, locale))
+ return l->id;
+ }
+
+ return UNK_LANG;
+}
+
+const char *getLanguageCode(Language id) {
+ const LanguageDescription *l = g_languages;
+ for (; l->code; ++l) {
+ if (l->id == id)
+ return l->code;
+ }
+ return 0;
+}
+
+const char *getLanguageLocale(Language id) {
+ const LanguageDescription *l = g_languages;
+ for (; l->code; ++l) {
+ if (l->id == id)
+ return l->unixLocale;
+ }
+ return 0;
+}
+
+const char *getLanguageDescription(Language id) {
+ const LanguageDescription *l = g_languages;
+ for (; l->code; ++l) {
+ if (l->id == id)
+ return l->description;
+ }
+ return 0;
+}
+
+} // End of namespace Common
diff --git a/common/language.h b/common/language.h
new file mode 100644
index 0000000000..b83f0d34fd
--- /dev/null
+++ b/common/language.h
@@ -0,0 +1,80 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef COMMON_LANGUAGE_H
+#define COMMON_LANGUAGE_H
+
+#include "common/scummsys.h"
+
+namespace Common {
+
+class String;
+
+/**
+ * List of game language.
+ */
+enum Language {
+ ZH_CNA,
+ ZH_TWN,
+ CZ_CZE,
+ NL_NLD,
+ EN_ANY, // Generic English (when only one game version exist)
+ EN_GRB,
+ EN_USA,
+ FR_FRA,
+ DE_DEU,
+ GR_GRE,
+ HE_ISR,
+ HR_HRV,
+ HU_HUN,
+ IT_ITA,
+ JA_JPN,
+ KO_KOR,
+ NB_NOR,
+ PL_POL,
+ PT_BRA,
+ RU_RUS,
+ ES_ESP,
+ SE_SWE,
+
+ UNK_LANG = -1 // Use default language (i.e. none specified)
+};
+
+struct LanguageDescription {
+ const char *code;
+ const char *unixLocale;
+ const char *description;
+ Language id;
+};
+
+extern const LanguageDescription g_languages[];
+
+
+/** Convert a string containing a language name into a Language enum value. */
+extern Language parseLanguage(const String &str);
+extern Language parseLanguageFromLocale(const char *locale);
+extern const char *getLanguageCode(Language id);
+extern const char *getLanguageLocale(Language id);
+extern const char *getLanguageDescription(Language id);
+
+} // End of namespace Common
+
+#endif
diff --git a/common/localization.h b/common/localization.h
index 3945cf5fab..e908485b99 100644
--- a/common/localization.h
+++ b/common/localization.h
@@ -22,7 +22,7 @@
#ifndef COMMON_LOCALIZATION_H
#define COMMON_LOCALIZATION_H
-#include "common/util.h"
+#include "common/language.h"
#include "common/keyboard.h"
namespace Common {
diff --git a/common/module.mk b/common/module.mk
index ae5e41cb8c..b4928fabda 100644
--- a/common/module.mk
+++ b/common/module.mk
@@ -12,16 +12,20 @@ MODULE_OBJS := \
EventRecorder.o \
file.o \
fs.o \
+ gui_options.o \
hashmap.o \
iff_container.o \
+ language.o \
localization.o \
macresman.o \
memorypool.o \
md5.o \
mutex.o \
+ platform.o \
quicktime.o \
random.o \
rational.o \
+ rendermode.o \
str.o \
stream.o \
system.o \
diff --git a/common/platform.cpp b/common/platform.cpp
new file mode 100644
index 0000000000..9986048b48
--- /dev/null
+++ b/common/platform.cpp
@@ -0,0 +1,107 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "common/platform.h"
+#include "common/str.h"
+
+namespace Common {
+
+const PlatformDescription g_platforms[] = {
+ { "2gs", "2gs", "2gs", "Apple IIgs", kPlatformApple2GS },
+ { "3do", "3do", "3do", "3DO", kPlatform3DO },
+ { "acorn", "acorn", "acorn", "Acorn", kPlatformAcorn },
+ { "amiga", "ami", "amiga", "Amiga", kPlatformAmiga },
+ { "atari", "atari-st", "st", "Atari ST", kPlatformAtariST },
+ { "c64", "c64", "c64", "Commodore 64", kPlatformC64 },
+ { "pc", "dos", "ibm", "DOS", kPlatformPC },
+ { "pc98", "pc98", "pc98", "PC-98", kPlatformPC98 },
+ { "wii", "wii", "wii", "Nintendo Wii", kPlatformWii },
+ { "coco3", "coco3", "coco3", "CoCo3", kPlatformCoCo3 },
+
+ // The 'official' spelling seems to be "FM-TOWNS" (e.g. in the Indy4 demo).
+ // However, on the net many variations can be seen, like "FMTOWNS",
+ // "FM TOWNS", "FmTowns", etc.
+ { "fmtowns", "towns", "fm", "FM-TOWNS", kPlatformFMTowns },
+
+ { "linux", "linux", "linux", "Linux", kPlatformLinux },
+ { "macintosh", "mac", "mac", "Macintosh", kPlatformMacintosh },
+ { "pce", "pce", "pce", "PC-Engine", kPlatformPCEngine },
+ { "nes", "nes", "nes", "NES", kPlatformNES },
+ { "segacd", "segacd", "sega", "SegaCD", kPlatformSegaCD },
+ { "windows", "win", "win", "Windows", kPlatformWindows },
+ { "playstation", "psx", "psx", "Sony PlayStation", kPlatformPSX },
+ { "cdi", "cdi", "cdi", "Philips CD-i", kPlatformCDi },
+ { "ios", "ios", "ios", "Apple iOS", kPlatformIOS },
+
+ { 0, 0, 0, "Default", kPlatformUnknown }
+};
+
+Platform parsePlatform(const String &str) {
+ if (str.empty())
+ return kPlatformUnknown;
+
+ // Handle some special case separately, for compatibility with old config
+ // files.
+ if (str == "1")
+ return kPlatformAmiga;
+ else if (str == "2")
+ return kPlatformAtariST;
+ else if (str == "3")
+ return kPlatformMacintosh;
+
+ const PlatformDescription *l = g_platforms;
+ for (; l->code; ++l) {
+ if (str.equalsIgnoreCase(l->code) || str.equalsIgnoreCase(l->code2) || str.equalsIgnoreCase(l->abbrev))
+ return l->id;
+ }
+
+ return kPlatformUnknown;
+}
+
+
+const char *getPlatformCode(Platform id) {
+ const PlatformDescription *l = g_platforms;
+ for (; l->code; ++l) {
+ if (l->id == id)
+ return l->code;
+ }
+ return 0;
+}
+
+const char *getPlatformAbbrev(Platform id) {
+ const PlatformDescription *l = g_platforms;
+ for (; l->code; ++l) {
+ if (l->id == id)
+ return l->abbrev;
+ }
+ return 0;
+}
+
+const char *getPlatformDescription(Platform id) {
+ const PlatformDescription *l = g_platforms;
+ for (; l->code; ++l) {
+ if (l->id == id)
+ return l->description;
+ }
+ return l->description;
+}
+
+} // End of namespace Common
diff --git a/common/platform.h b/common/platform.h
new file mode 100644
index 0000000000..1891c7096d
--- /dev/null
+++ b/common/platform.h
@@ -0,0 +1,80 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef COMMON_PLATFORM_H
+#define COMMON_PLATFORM_H
+
+#include "common/scummsys.h"
+
+namespace Common {
+
+class String;
+
+/**
+ * List of game platforms. Specifying a platform for a target can be used to
+ * give the game engines a hint for which platform the game data file are.
+ * This may be optional or required, depending on the game engine and the
+ * game in question.
+ */
+enum Platform {
+ kPlatformPC,
+ kPlatformAmiga,
+ kPlatformAtariST,
+ kPlatformMacintosh,
+ kPlatformFMTowns,
+ kPlatformWindows,
+ kPlatformNES,
+ kPlatformC64,
+ kPlatformCoCo3,
+ kPlatformLinux,
+ kPlatformAcorn,
+ kPlatformSegaCD,
+ kPlatform3DO,
+ kPlatformPCEngine,
+ kPlatformApple2GS,
+ kPlatformPC98,
+ kPlatformWii,
+ kPlatformPSX,
+ kPlatformCDi,
+ kPlatformIOS,
+
+ kPlatformUnknown = -1
+};
+
+struct PlatformDescription {
+ const char *code;
+ const char *code2;
+ const char *abbrev;
+ const char *description;
+ Platform id;
+};
+
+extern const PlatformDescription g_platforms[];
+
+/** Convert a string containing a platform name into a Platform enum value. */
+extern Platform parsePlatform(const String &str);
+extern const char *getPlatformCode(Platform id);
+extern const char *getPlatformAbbrev(Platform id);
+extern const char *getPlatformDescription(Platform id);
+
+} // End of namespace Common
+
+#endif
diff --git a/common/rendermode.cpp b/common/rendermode.cpp
new file mode 100644
index 0000000000..62b67faee5
--- /dev/null
+++ b/common/rendermode.cpp
@@ -0,0 +1,81 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/rendermode.h"
+
+#include "common/str.h"
+#include "common/translation.h"
+
+
+namespace Common {
+
+
+const RenderModeDescription g_renderModes[] = {
+ // I18N: Hercules is graphics card name
+ { "hercGreen", _s("Hercules Green"), kRenderHercG },
+ { "hercAmber", _s("Hercules Amber"), kRenderHercA },
+ { "cga", "CGA", kRenderCGA },
+ { "ega", "EGA", kRenderEGA },
+ { "vga", "VGA", kRenderVGA },
+ { "amiga", "Amiga", kRenderAmiga },
+ { "fmtowns", "FM-Towns", kRenderFMTowns },
+ { "pc9821", "PC-9821 (256 Colors)", kRenderPC9821 },
+ { "pc9801", "PC-9801 (16 Colors)", kRenderPC9801 },
+ {0, 0, kRenderDefault}
+};
+
+DECLARE_TRANSLATION_ADDITIONAL_CONTEXT("Hercules Green", "lowres")
+DECLARE_TRANSLATION_ADDITIONAL_CONTEXT("Hercules Amber", "lowres")
+
+RenderMode parseRenderMode(const String &str) {
+ if (str.empty())
+ return kRenderDefault;
+
+ const RenderModeDescription *l = g_renderModes;
+ for (; l->code; ++l) {
+ if (str.equalsIgnoreCase(l->code))
+ return l->id;
+ }
+
+ return kRenderDefault;
+}
+
+const char *getRenderModeCode(RenderMode id) {
+ const RenderModeDescription *l = g_renderModes;
+ for (; l->code; ++l) {
+ if (l->id == id)
+ return l->code;
+ }
+ return 0;
+}
+
+const char *getRenderModeDescription(RenderMode id) {
+ const RenderModeDescription *l = g_renderModes;
+ for (; l->code; ++l) {
+ if (l->id == id)
+ return l->description;
+ }
+ return 0;
+}
+
+
+} // End of namespace Common
diff --git a/common/rendermode.h b/common/rendermode.h
new file mode 100644
index 0000000000..c2fece77ee
--- /dev/null
+++ b/common/rendermode.h
@@ -0,0 +1,67 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef COMMON_RENDERMODE_H
+#define COMMON_RENDERMODE_H
+
+#include "common/scummsys.h"
+
+namespace Common {
+
+class String;
+
+/**
+ * List of render modes. It specifies which original graphics mode
+ * to use. Some targets used postprocessing dithering routines for
+ * reducing color depth of final image which let it to be rendered on
+ * such low-level adapters as CGA or Hercules.
+ */
+enum RenderMode {
+ kRenderDefault = 0,
+ kRenderVGA = 1,
+ kRenderEGA = 2,
+ kRenderCGA = 3,
+ kRenderHercG = 4,
+ kRenderHercA = 5,
+ kRenderAmiga = 6,
+ kRenderFMTowns = 7,
+ kRenderPC9821 = 8,
+ kRenderPC9801 = 9
+};
+
+struct RenderModeDescription {
+ const char *code;
+ const char *description;
+ RenderMode id;
+};
+
+extern const RenderModeDescription g_renderModes[];
+
+/** Convert a string containing a render mode name into a RenderingMode enum value. */
+extern RenderMode parseRenderMode(const String &str);
+extern const char *getRenderModeCode(RenderMode id);
+extern const char *getRenderModeDescription(RenderMode id);
+
+
+} // End of namespace Common
+
+#endif
diff --git a/common/util.cpp b/common/util.cpp
index 05d29fac94..4d9ff11c5c 100644
--- a/common/util.cpp
+++ b/common/util.cpp
@@ -29,8 +29,6 @@
#include "common/util.h"
-#include "common/translation.h"
-#include "common/config-manager.h"
#include "common/debug.h"
namespace Common {
@@ -112,321 +110,6 @@ bool parseBool(const String &val, bool &valAsBool) {
#pragma mark -
-const LanguageDescription g_languages[] = {
- { "zh-cn", "zh_CN", "Chinese (China)", ZH_CNA },
- { "zh", "zh_TW", "Chinese (Taiwan)", ZH_TWN },
- { "cz", "cs_CZ", "Czech", CZ_CZE },
- { "nl", "nl_NL", "Dutch", NL_NLD },
- { "en", "en", "English", EN_ANY }, // Generic English (when only one game version exist)
- { "gb", "en_GB", "English (GB)", EN_GRB },
- { "us", "en_US", "English (US)", EN_USA },
- { "fr", "fr_FR", "French", FR_FRA },
- { "de", "de_DE", "German", DE_DEU },
- { "gr", "el_GR", "Greek", GR_GRE },
- { "he", "he_IL", "Hebrew", HE_ISR },
- { "hb", "he_IL", "Hebrew", HE_ISR }, // Deprecated
- { "hr", "hr_HR", "Croatian", HR_HRV },
- { "hu", "hu_HU", "Hungarian", HU_HUN },
- { "it", "it_IT", "Italian", IT_ITA },
- { "jp", "ja_JP", "Japanese", JA_JPN },
- { "kr", "ko_KR", "Korean", KO_KOR },
- { "nb", "nb_NO", "Norwegian Bokm\xE5l", NB_NOR }, // TODO Someone should verify the unix locale
- { "pl", "pl_PL", "Polish", PL_POL },
- { "br", "pt_BR", "Portuguese", PT_BRA },
- { "ru", "ru_RU", "Russian", RU_RUS },
- { "es", "es_ES", "Spanish", ES_ESP },
- { "se", "sv_SE", "Swedish", SE_SWE },
- { 0, 0, 0, UNK_LANG }
-};
-
-Language parseLanguage(const String &str) {
- if (str.empty())
- return UNK_LANG;
-
- const LanguageDescription *l = g_languages;
- for (; l->code; ++l) {
- if (str.equalsIgnoreCase(l->code))
- return l->id;
- }
-
- return UNK_LANG;
-}
-
-Language parseLanguageFromLocale(const char *locale) {
- if (!locale || !*locale)
- return UNK_LANG;
-
- const LanguageDescription *l = g_languages;
- for (; l->code; ++l) {
- if (!strcmp(l->unixLocale, locale))
- return l->id;
- }
-
- return UNK_LANG;
-}
-
-const char *getLanguageCode(Language id) {
- const LanguageDescription *l = g_languages;
- for (; l->code; ++l) {
- if (l->id == id)
- return l->code;
- }
- return 0;
-}
-
-const char *getLanguageLocale(Language id) {
- const LanguageDescription *l = g_languages;
- for (; l->code; ++l) {
- if (l->id == id)
- return l->unixLocale;
- }
- return 0;
-}
-
-const char *getLanguageDescription(Language id) {
- const LanguageDescription *l = g_languages;
- for (; l->code; ++l) {
- if (l->id == id)
- return l->description;
- }
- return 0;
-}
-
-
-#pragma mark -
-
-
-const PlatformDescription g_platforms[] = {
- { "2gs", "2gs", "2gs", "Apple IIgs", kPlatformApple2GS },
- { "3do", "3do", "3do", "3DO", kPlatform3DO },
- { "acorn", "acorn", "acorn", "Acorn", kPlatformAcorn },
- { "amiga", "ami", "amiga", "Amiga", kPlatformAmiga },
- { "atari", "atari-st", "st", "Atari ST", kPlatformAtariST },
- { "c64", "c64", "c64", "Commodore 64", kPlatformC64 },
- { "pc", "dos", "ibm", "DOS", kPlatformPC },
- { "pc98", "pc98", "pc98", "PC-98", kPlatformPC98 },
- { "wii", "wii", "wii", "Nintendo Wii", kPlatformWii },
- { "coco3", "coco3", "coco3", "CoCo3", kPlatformCoCo3 },
-
- // The 'official' spelling seems to be "FM-TOWNS" (e.g. in the Indy4 demo).
- // However, on the net many variations can be seen, like "FMTOWNS",
- // "FM TOWNS", "FmTowns", etc.
- { "fmtowns", "towns", "fm", "FM-TOWNS", kPlatformFMTowns },
-
- { "linux", "linux", "linux", "Linux", kPlatformLinux },
- { "macintosh", "mac", "mac", "Macintosh", kPlatformMacintosh },
- { "pce", "pce", "pce", "PC-Engine", kPlatformPCEngine },
- { "nes", "nes", "nes", "NES", kPlatformNES },
- { "segacd", "segacd", "sega", "SegaCD", kPlatformSegaCD },
- { "windows", "win", "win", "Windows", kPlatformWindows },
- { "playstation", "psx", "psx", "Sony PlayStation", kPlatformPSX },
- { "cdi", "cdi", "cdi", "Philips CD-i", kPlatformCDi },
- { "ios", "ios", "ios", "Apple iOS", kPlatformIOS },
-
- { 0, 0, 0, "Default", kPlatformUnknown }
-};
-
-Platform parsePlatform(const String &str) {
- if (str.empty())
- return kPlatformUnknown;
-
- // Handle some special case separately, for compatibility with old config
- // files.
- if (str == "1")
- return kPlatformAmiga;
- else if (str == "2")
- return kPlatformAtariST;
- else if (str == "3")
- return kPlatformMacintosh;
-
- const PlatformDescription *l = g_platforms;
- for (; l->code; ++l) {
- if (str.equalsIgnoreCase(l->code) || str.equalsIgnoreCase(l->code2) || str.equalsIgnoreCase(l->abbrev))
- return l->id;
- }
-
- return kPlatformUnknown;
-}
-
-
-const char *getPlatformCode(Platform id) {
- const PlatformDescription *l = g_platforms;
- for (; l->code; ++l) {
- if (l->id == id)
- return l->code;
- }
- return 0;
-}
-
-const char *getPlatformAbbrev(Platform id) {
- const PlatformDescription *l = g_platforms;
- for (; l->code; ++l) {
- if (l->id == id)
- return l->abbrev;
- }
- return 0;
-}
-
-const char *getPlatformDescription(Platform id) {
- const PlatformDescription *l = g_platforms;
- for (; l->code; ++l) {
- if (l->id == id)
- return l->description;
- }
- return l->description;
-}
-
-
-#pragma mark -
-
-
-const RenderModeDescription g_renderModes[] = {
- // I18N: Hercules is graphics card name
- { "hercGreen", _s("Hercules Green"), kRenderHercG },
- { "hercAmber", _s("Hercules Amber"), kRenderHercA },
- { "cga", "CGA", kRenderCGA },
- { "ega", "EGA", kRenderEGA },
- { "vga", "VGA", kRenderVGA },
- { "amiga", "Amiga", kRenderAmiga },
- { "fmtowns", "FM-Towns", kRenderFMTowns },
- { "pc98", "PC-98", kRenderPC98 },
- {0, 0, kRenderDefault}
-};
-
-DECLARE_TRANSLATION_ADDITIONAL_CONTEXT("Hercules Green", "lowres")
-DECLARE_TRANSLATION_ADDITIONAL_CONTEXT("Hercules Amber", "lowres")
-
-RenderMode parseRenderMode(const String &str) {
- if (str.empty())
- return kRenderDefault;
-
- const RenderModeDescription *l = g_renderModes;
- for (; l->code; ++l) {
- if (str.equalsIgnoreCase(l->code))
- return l->id;
- }
-
- return kRenderDefault;
-}
-
-const char *getRenderModeCode(RenderMode id) {
- const RenderModeDescription *l = g_renderModes;
- for (; l->code; ++l) {
- if (l->id == id)
- return l->code;
- }
- return 0;
-}
-
-const char *getRenderModeDescription(RenderMode id) {
- const RenderModeDescription *l = g_renderModes;
- for (; l->code; ++l) {
- if (l->id == id)
- return l->description;
- }
- return 0;
-}
-
-const struct GameOpt {
- const char *option;
- const char *desc;
-} g_gameOptions[] = {
- { GUIO_NOSUBTITLES, "sndNoSubs" },
- { GUIO_NOMUSIC, "sndNoMusic" },
- { GUIO_NOSPEECH, "sndNoSpeech" },
- { GUIO_NOSFX, "sndNoSFX" },
- { GUIO_NOMIDI, "sndNoMIDI" },
-
- { GUIO_NOLAUNCHLOAD, "launchNoLoad" },
-
- { GUIO_MIDIPCSPK, "midiPCSpk" },
- { GUIO_MIDICMS, "midiCMS" },
- { GUIO_MIDIPCJR, "midiPCJr" },
- { GUIO_MIDIADLIB, "midiAdLib" },
- { GUIO_MIDIC64, "midiC64" },
- { GUIO_MIDIAMIGA, "midiAmiga" },
- { GUIO_MIDIAPPLEIIGS,"midiAppleIIgs" },
- { GUIO_MIDITOWNS, "midiTowns" },
- { GUIO_MIDIPC98, "midiPC98" },
- { GUIO_MIDIMT32, "midiMt32" },
- { GUIO_MIDIGM, "midiGM" },
-
- { GUIO_NOASPECT, "noAspect" },
- { GUIO_EGAUNDITHER, "egaUndither" },
-
- { GUIO_RENDERHERCGREEN, "hercGreen" },
- { GUIO_RENDERHERCAMBER, "hercAmber" },
- { GUIO_RENDERCGA, "cga" },
- { GUIO_RENDEREGA, "ega" },
- { GUIO_RENDERVGA, "vga" },
- { GUIO_RENDERAMIGA, "amiga" },
- { GUIO_RENDERFMTOWNS, "fmtowns" },
- { GUIO_RENDERPC98, "pc98" },
-
- { GUIO_NONE, 0 }
-};
-
-bool checkGameGUIOption(const String &option, const String &str) {
- for (int i = 0; g_gameOptions[i].desc; i++) {
- if (option.contains(g_gameOptions[i].option)) {
- if (str.contains(g_gameOptions[i].desc))
- return true;
- else
- return false;
- }
- }
- return false;
-}
-
-bool checkGameGUIOptionLanguage(Language lang, const String &str) {
- if (!str.contains("lang_")) // If no languages are specified
- return true;
-
- if (str.contains(getGameGUIOptionsDescriptionLanguage(lang)))
- return true;
-
- return false;
-}
-
-const String getGameGUIOptionsDescriptionLanguage(Language lang) {
- if (lang == UNK_LANG)
- return "";
-
- return String(String("lang_") + getLanguageDescription(lang));
-}
-
-String parseGameGUIOptions(const String &str) {
- Common::String res;
-
- for (int i = 0; g_gameOptions[i].desc; i++)
- if (str.contains(g_gameOptions[i].desc))
- res += g_gameOptions[i].option;
-
- return res;
-}
-
-const String getGameGUIOptionsDescription(const String &options) {
- String res;
-
- for (int i = 0; g_gameOptions[i].desc; i++)
- if (options.contains(g_gameOptions[i].option[0]))
- res += String(g_gameOptions[i].desc) + " ";
-
- res.trim();
-
- return res;
-}
-
-void updateGameGUIOptions(const String &options, const String &langOption) {
- const String newOptionString = getGameGUIOptionsDescription(options) + " " + langOption;
-
- if ((!options.empty() && !ConfMan.hasKey("guioptions")) ||
- (ConfMan.hasKey("guioptions") && ConfMan.get("guioptions") != newOptionString)) {
- ConfMan.set("guioptions", newOptionString);
- ConfMan.flushToDisk();
- }
-}
-
#define ENSURE_ASCII_CHAR(c) \
if (c < 0 || c > 127) \
return false
diff --git a/common/util.h b/common/util.h
index b6f63702d4..b90be0675b 100644
--- a/common/util.h
+++ b/common/util.h
@@ -25,7 +25,6 @@
#include "common/scummsys.h"
#include "common/str.h"
-
/**
* Check whether a given pointer is aligned correctly.
* Note that 'alignment' must be a power of two!
@@ -78,46 +77,6 @@ template<typename T> inline void SWAP(T &a, T &b) { T tmp = a; a = b; b = tmp; }
# define SCUMMVM_CURRENT_FUNCTION "<unknown>"
#endif
-#define GUIO_NONE "\000"
-#define GUIO_NOSUBTITLES "\001"
-#define GUIO_NOMUSIC "\002"
-#define GUIO_NOSPEECH "\003"
-#define GUIO_NOSFX "\004"
-#define GUIO_NOMIDI "\005"
-#define GUIO_NOLAUNCHLOAD "\006"
-
-#define GUIO_MIDIPCSPK "\007"
-#define GUIO_MIDICMS "\010"
-#define GUIO_MIDIPCJR "\011"
-#define GUIO_MIDIADLIB "\012"
-#define GUIO_MIDIC64 "\013"
-#define GUIO_MIDIAMIGA "\014"
-#define GUIO_MIDIAPPLEIIGS "\015"
-#define GUIO_MIDITOWNS "\016"
-#define GUIO_MIDIPC98 "\017"
-#define GUIO_MIDIMT32 "\020"
-#define GUIO_MIDIGM "\021"
-
-#define GUIO_NOASPECT "\022"
-#define GUIO_EGAUNDITHER "\023"
-
-#define GUIO_RENDERHERCGREEN "\030"
-#define GUIO_RENDERHERCAMBER "\031"
-#define GUIO_RENDERCGA "\032"
-#define GUIO_RENDEREGA "\033"
-#define GUIO_RENDERVGA "\034"
-#define GUIO_RENDERAMIGA "\035"
-#define GUIO_RENDERFMTOWNS "\036"
-#define GUIO_RENDERPC98 "\037"
-
-#define GUIO0() (GUIO_NONE)
-#define GUIO1(a) (a)
-#define GUIO2(a,b) (a b)
-#define GUIO3(a,b,c) (a b c)
-#define GUIO4(a,b,c,d) (a b c d)
-#define GUIO5(a,b,c,d,e) (a b c d e)
-#define GUIO6(a,b,c,d,e,f) (a b c d e f)
-
namespace Common {
/**
@@ -206,145 +165,6 @@ bool isSpace(int c);
*/
bool isUpper(int c);
-
-/**
- * List of game language.
- */
-enum Language {
- ZH_CNA,
- ZH_TWN,
- CZ_CZE,
- NL_NLD,
- EN_ANY, // Generic English (when only one game version exist)
- EN_GRB,
- EN_USA,
- FR_FRA,
- DE_DEU,
- GR_GRE,
- HE_ISR,
- HR_HRV,
- HU_HUN,
- IT_ITA,
- JA_JPN,
- KO_KOR,
- NB_NOR,
- PL_POL,
- PT_BRA,
- RU_RUS,
- ES_ESP,
- SE_SWE,
-
- UNK_LANG = -1 // Use default language (i.e. none specified)
-};
-
-struct LanguageDescription {
- const char *code;
- const char *unixLocale;
- const char *description;
- Language id;
-};
-
-extern const LanguageDescription g_languages[];
-
-
-/** Convert a string containing a language name into a Language enum value. */
-extern Language parseLanguage(const String &str);
-extern Language parseLanguageFromLocale(const char *locale);
-extern const char *getLanguageCode(Language id);
-extern const char *getLanguageLocale(Language id);
-extern const char *getLanguageDescription(Language id);
-
-/**
- * List of game platforms. Specifying a platform for a target can be used to
- * give the game engines a hint for which platform the game data file are.
- * This may be optional or required, depending on the game engine and the
- * game in question.
- */
-enum Platform {
- kPlatformPC,
- kPlatformAmiga,
- kPlatformAtariST,
- kPlatformMacintosh,
- kPlatformFMTowns,
- kPlatformWindows,
- kPlatformNES,
- kPlatformC64,
- kPlatformCoCo3,
- kPlatformLinux,
- kPlatformAcorn,
- kPlatformSegaCD,
- kPlatform3DO,
- kPlatformPCEngine,
- kPlatformApple2GS,
- kPlatformPC98,
- kPlatformWii,
- kPlatformPSX,
- kPlatformCDi,
- kPlatformIOS,
-
- kPlatformUnknown = -1
-};
-
-struct PlatformDescription {
- const char *code;
- const char *code2;
- const char *abbrev;
- const char *description;
- Platform id;
-};
-
-extern const PlatformDescription g_platforms[];
-
-/** Convert a string containing a platform name into a Platform enum value. */
-extern Platform parsePlatform(const String &str);
-extern const char *getPlatformCode(Platform id);
-extern const char *getPlatformAbbrev(Platform id);
-extern const char *getPlatformDescription(Platform id);
-
-/**
- * List of render modes. It specifies which original graphics mode
- * to use. Some targets used postprocessing dithering routines for
- * reducing color depth of final image which let it to be rendered on
- * such low-level adapters as CGA or Hercules.
- */
-enum RenderMode {
- kRenderDefault = 0,
- kRenderVGA = 1,
- kRenderEGA = 2,
- kRenderCGA = 3,
- kRenderHercG = 4,
- kRenderHercA = 5,
- kRenderAmiga = 6,
- kRenderFMTowns = 7,
- kRenderPC98 = 8
-};
-
-struct RenderModeDescription {
- const char *code;
- const char *description;
- RenderMode id;
-};
-
-extern const RenderModeDescription g_renderModes[];
-
-/** Convert a string containing a render mode name into a RenderingMode enum value. */
-extern RenderMode parseRenderMode(const String &str);
-extern const char *getRenderModeCode(RenderMode id);
-extern const char *getRenderModeDescription(RenderMode id);
-
-bool checkGameGUIOption(const String &option, const String &str);
-bool checkGameGUIOptionLanguage(Language lang, const String &str);
-String parseGameGUIOptions(const String &str);
-const String getGameGUIOptionsDescription(const String &options);
-const String getGameGUIOptionsDescriptionLanguage(Language lang);
-
-/**
- * Updates the GUI options of the current config manager
- * domain, when they differ to the ones passed as
- * parameter.
- */
-void updateGameGUIOptions(const String &options, const String &langOption);
-
} // End of namespace Common
#endif
diff --git a/configure b/configure
index 27f56da6da..7cb3987027 100755
--- a/configure
+++ b/configure
@@ -2366,8 +2366,10 @@ if test -n "$_host"; then
iphone)
DEFINES="$DEFINES -DIPHONE"
_backend="iphone"
- _build_hq_scalers=no
+ _build_scalers=no
+ _mt32emu=no
_seq_midi=no
+ _timidity=no
;;
m68k-atari-mint)
DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
@@ -2639,7 +2641,6 @@ case $_backend in
gph)
;;
iphone)
- OBJCFLAGS="$OBJCFLAGS --std=c99"
LIBS="$LIBS -lobjc -framework UIKit -framework CoreGraphics -framework OpenGLES"
LIBS="$LIBS -framework QuartzCore -framework GraphicsServices -framework CoreFoundation"
LIBS="$LIBS -framework Foundation -framework AudioToolbox -framework CoreAudio"
@@ -2756,7 +2757,7 @@ esac
# Enable 16bit support only for backends which support it
#
case $_backend in
- android | bada | dingux | dreamcast | gph | maemo | openpandora | psp | samsungtv | sdl | webos | wii)
+ android | bada | dingux | dreamcast | gph | iphone | maemo | openpandora | psp | samsungtv | sdl | webos | wii)
if test "$_16bit" = auto ; then
_16bit=yes
else
diff --git a/dists/win32/ScummVM.iss b/dists/win32/ScummVM.iss
index 36088911d4..d0448c5620 100644
--- a/dists/win32/ScummVM.iss
+++ b/dists/win32/ScummVM.iss
@@ -45,6 +45,7 @@ Name: {group}\ScummVM; Filename: {app}\scummvm.exe; WorkingDir: {app}; Comment:
Name: {group}\ScummVM (noconsole); Filename: {app}\scummvm.exe; Parameters: "--no-console"; WorkingDir: {app}; Comment: scummvm; Flags: createonlyiffileexists; IconIndex: 0
Name: {group}\Authors; Filename: {app}\AUTHORS.txt; WorkingDir: {app}; Comment: AUTHORS; Flags: createonlyiffileexists
Name: {group}\Copying; Filename: {app}\COPYING.txt; WorkingDir: {app}; Comment: COPYING; Flags: createonlyiffileexists
+Name: {group}\Copying.FREEFONT; Filename: {app}\COPYING.FREEFONT.txt; WorkingDir: {app}; Comment: COPYING.FREEFONT; Flags: createonlyiffileexists
Name: {group}\Copying.LGPL; Filename: {app}\COPYING.LGPL.txt; WorkingDir: {app}; Comment: COPYING.LGPL; Flags: createonlyiffileexists
Name: {group}\Copyright; Filename: {app}\COPYRIGHT.txt; WorkingDir: {app}; Comment: COPYRIGHT; Flags: createonlyiffileexists
;NEWS
@@ -83,6 +84,7 @@ Name: "{userappdata}\ScummVM\Saved Games"; MinVersion: 0, 1
[Files]
Source: AUTHORS.txt; DestDir: {app}; Flags: ignoreversion
Source: COPYING.txt; DestDir: {app}; Flags: ignoreversion
+Source: COPYING.FREEFONT.txt; DestDir: {app}; Flags: ignoreversion
Source: COPYING.LGPL.txt; DestDir: {app}; Flags: ignoreversion
Source: COPYRIGHT.txt; DestDir: {app}; Flags: ignoreversion
;NEWS
diff --git a/engines/advancedDetector.h b/engines/advancedDetector.h
index c31c8bd66e..3bb00618b1 100644
--- a/engines/advancedDetector.h
+++ b/engines/advancedDetector.h
@@ -26,6 +26,8 @@
#include "engines/metaengine.h"
#include "engines/engine.h"
+#include "common/gui_options.h" // FIXME: Temporary hack?
+
namespace Common {
class Error;
class FSList;
diff --git a/engines/agi/agi.h b/engines/agi/agi.h
index ea3afa5ca3..55b4805022 100644
--- a/engines/agi/agi.h
+++ b/engines/agi/agi.h
@@ -28,6 +28,7 @@
#include "common/util.h"
#include "common/file.h"
#include "common/rect.h"
+#include "common/rendermode.h"
#include "common/stack.h"
#include "common/system.h"
diff --git a/engines/cge/bitmap.cpp b/engines/cge/bitmap.cpp
index 4b5034756c..37f4eb070e 100644
--- a/engines/cge/bitmap.cpp
+++ b/engines/cge/bitmap.cpp
@@ -198,7 +198,7 @@ BitmapPtr Bitmap::code() {
if ((pix == kPixelTransp) != skip || cnt >= 0x3FF0) { // end of block
cnt |= (skip) ? kBmpSKP : kBmpCPY;
if (_v)
- *cp = TO_LE_16(cnt); // store block description uint16
+ WRITE_LE_UINT16(cp, cnt); // store block description uint16
cp = (uint16 *) im;
im += 2;
@@ -220,7 +220,7 @@ BitmapPtr Bitmap::code() {
} else {
cnt |= kBmpCPY;
if (_v)
- *cp = TO_LE_16(cnt);
+ WRITE_LE_UINT16(cp, cnt);
cp = (uint16 *) im;
im += 2;
@@ -232,13 +232,13 @@ BitmapPtr Bitmap::code() {
if (cnt && ! skip) {
cnt |= kBmpCPY;
if (_v)
- *cp = TO_LE_16(cnt);
+ WRITE_LE_UINT16(cp, cnt);
cp = (uint16 *) im;
im += 2;
}
if (_v)
- *cp = TO_LE_16(kBmpEOI);
+ WRITE_LE_UINT16(cp, kBmpEOI);
cp = (uint16 *) im;
im += 2;
}
diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp
index 34e7d3f2f9..875ac34cd0 100644
--- a/engines/cge/cge.cpp
+++ b/engines/cge/cge.cpp
@@ -28,6 +28,7 @@
#include "common/EventRecorder.h"
#include "common/file.h"
#include "common/fs.h"
+#include "engines/advancedDetector.h"
#include "engines/util.h"
#include "cge/cge.h"
#include "cge/vga13h.h"
diff --git a/engines/cge/cge.h b/engines/cge/cge.h
index d324b293fa..4ebc836ee0 100644
--- a/engines/cge/cge.h
+++ b/engines/cge/cge.h
@@ -31,11 +31,12 @@
#include "engines/engine.h"
#include "gui/debugger.h"
#include "graphics/surface.h"
-#include "engines/advancedDetector.h"
#include "cge/console.h"
#include "cge/bitmap.h"
#include "cge/sound.h"
+struct ADGameDescription;
+
namespace CGE {
class Console;
diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp
index 7c98f00b7b..3c561c5659 100644
--- a/engines/cge/events.cpp
+++ b/engines/cge/events.cpp
@@ -30,6 +30,7 @@
#include "gui/message.h"
#include "common/config-manager.h"
#include "common/events.h"
+#include "engines/advancedDetector.h"
#include "cge/events.h"
#include "cge/events.h"
#include "cge/text.h"
diff --git a/engines/dreamweb/detection.cpp b/engines/dreamweb/detection.cpp
index b891c2a3ea..9d3797db03 100644
--- a/engines/dreamweb/detection.cpp
+++ b/engines/dreamweb/detection.cpp
@@ -25,6 +25,8 @@
#include "common/algorithm.h"
#include "common/system.h"
+#include "engines/advancedDetector.h"
+
#include "graphics/thumbnail.h"
#include "dreamweb/dreamweb.h"
@@ -215,4 +217,12 @@ bool DreamWebEngine::canSaveGameStateCurrently() {
return false;
}
+Common::Language DreamWebEngine::getLanguage() const {
+ return _gameDescription->desc.language;
+}
+
+bool DreamWebEngine::isCD() {
+ return _gameDescription->desc.flags & ADGF_CD;
+}
+
} // End of namespace DreamWeb
diff --git a/engines/dreamweb/detection_tables.h b/engines/dreamweb/detection_tables.h
index 75f5786268..216e6715dc 100644
--- a/engines/dreamweb/detection_tables.h
+++ b/engines/dreamweb/detection_tables.h
@@ -25,6 +25,10 @@
namespace DreamWeb {
+struct DreamWebGameDescription {
+ ADGameDescription desc;
+};
+
static const DreamWebGameDescription gameDescriptions[] = {
// International floppy release
{
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
index 0a5deb4657..9c02cd74ad 100644
--- a/engines/dreamweb/dreamweb.cpp
+++ b/engines/dreamweb/dreamweb.cpp
@@ -30,6 +30,8 @@
#include "common/timer.h"
#include "common/util.h"
+#include "engines/advancedDetector.h"
+
#include "graphics/palette.h"
#include "graphics/surface.h"
@@ -60,7 +62,7 @@ DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gam
_channel0 = 0;
_channel1 = 0;
- _language = gameDesc->desc.language;
+ _datafilePrefix = "DREAMWEB.";
_openChangeSize = kInventx+(4*kItempicsize);
_quitRequested = false;
@@ -477,10 +479,9 @@ uint8 DreamWebEngine::modifyChar(uint8 c) const {
if (c < 128)
return c;
- switch(_language) {
+ switch(getLanguage()) {
case Common::DE_DEU:
- switch(c)
- {
+ switch(c) {
case 129:
return 'Z' + 3;
case 132:
@@ -528,11 +529,8 @@ uint8 DreamWebEngine::modifyChar(uint8 c) const {
}
}
-bool DreamWebEngine::isCD() {
- return _gameDescription->desc.flags & ADGF_CD;
-}
-
bool DreamWebEngine::hasSpeech() {
return isCD() && _hasSpeech;
}
+
} // End of namespace DreamWeb
diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h
index 38016e5897..e80b5538ad 100644
--- a/engines/dreamweb/dreamweb.h
+++ b/engines/dreamweb/dreamweb.h
@@ -34,7 +34,6 @@
#include "audio/audiostream.h"
#include "audio/mixer.h"
-#include "engines/advancedDetector.h"
#include "engines/engine.h"
#include "dreamweb/console.h"
@@ -76,6 +75,7 @@ const unsigned int kSymbolx = 64;
const unsigned int kSymboly = 56;
const unsigned int kLengthofvars = 68;
const unsigned int kFrameBlocksize = 2080;
+const unsigned int kGraphicsFileFrameSize = 347; // ceil(2080 / sizeof(Frame))
const unsigned int kNumexobjects = 114;
const unsigned int kNumExTexts = kNumexobjects + 2;
const uint16 kExtextlen = 18000;
@@ -98,9 +98,7 @@ enum {
kDebugSaveLoad = (1 << 1)
};
-struct DreamWebGameDescription {
- ADGameDescription desc;
-};
+struct DreamWebGameDescription;
class DreamWebEngine : public Engine {
private:
@@ -144,16 +142,18 @@ public:
void quit();
- void loadSounds(uint bank, const Common::String &file);
+ void loadSounds(uint bank, const Common::String &suffix);
bool loadSpeech(const Common::String &filename);
void enableSavingOrLoading(bool enable = true) { _enableSavingOrLoading = enable; }
- Common::Language getLanguage() const { return _language; }
+ Common::Language getLanguage() const;
uint8 modifyChar(uint8 c) const;
void stopSound(uint8 channel);
+ const Common::String& getDatafilePrefix() { return _datafilePrefix; };
+
private:
void keyPressed(uint16 ascii);
void setSpeed(uint speed);
@@ -162,12 +162,12 @@ private:
const DreamWebGameDescription *_gameDescription;
Common::RandomSource _rnd;
+ Common::String _datafilePrefix;
uint _speed;
bool _turbo;
uint _oldMouseState;
bool _enableSavingOrLoading;
- Common::Language _language;
struct Sample {
uint offset;
@@ -265,13 +265,28 @@ protected:
TextFile _puzzleText;
TextFile _commandText;
- // graphics files
- GraphicsFile _tempGraphics;
- GraphicsFile _tempGraphics2;
- GraphicsFile _tempGraphics3;
+ // local graphics files
+ GraphicsFile _keypadGraphics;
+ GraphicsFile _menuGraphics;
+ GraphicsFile _menuGraphics2;
+ GraphicsFile _folderGraphics;
+ GraphicsFile _folderGraphics2;
+ GraphicsFile _folderGraphics3;
+ GraphicsFile _folderCharset;
+ GraphicsFile _symbolGraphics;
+ GraphicsFile _diaryGraphics;
+ GraphicsFile _diaryCharset;
+ GraphicsFile _monitorGraphics;
+ GraphicsFile _monitorCharset;
+ GraphicsFile _newplaceGraphics;
+ GraphicsFile _newplaceGraphics2;
+ GraphicsFile _newplaceGraphics3;
+ GraphicsFile _cityGraphics;
+ GraphicsFile _saveGraphics;
+
+ // global graphics files
GraphicsFile _icons1;
GraphicsFile _icons2;
- GraphicsFile _tempCharset;
GraphicsFile _charset1;
GraphicsFile _mainSprites;
const GraphicsFile *_currentCharset;
@@ -793,19 +808,15 @@ public:
const uint8 *getTextInFile1(uint16 index);
uint8 findNextColon(const uint8 **string);
void allocateBuffers();
- void loadTextFile(TextFile &file, const char *fileName);
- void loadGraphicsFile(GraphicsFile &file, const char *fileName);
+ void loadTextFile(TextFile &file, const char *suffix);
+ void loadGraphicsFile(GraphicsFile &file, const char *suffix);
void loadGraphicsSegment(GraphicsFile &file, Common::File &inFile, unsigned int len);
void loadTextSegment(TextFile &file, Common::File &inFile, unsigned int len);
- void loadIntoTemp(const char *fileName);
- void loadIntoTemp2(const char *fileName);
- void loadIntoTemp3(const char *fileName);
- void loadTempCharset(const char *fileName);
void loadTravelText();
- void loadTempText(const char *fileName);
+ void loadTempText(const char *suffix);
void sortOutMap();
void loadRoomData(const Room &room, bool skipDat);
- void useTempCharset();
+ void useTempCharset(GraphicsFile *charset);
void useCharset1();
void printMessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered);
void printMessage2(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered, uint8 count);
@@ -848,11 +859,7 @@ public:
bool isItWorn(const DynObject *object);
bool compare(uint8 index, uint8 flag, const char id[4]);
void hangOnW(uint16 frameCount);
- void getRidOfTemp();
void getRidOfTempText();
- void getRidOfTemp2();
- void getRidOfTemp3();
- void getRidOfTempCharset();
void getRidOfAll();
void placeSetObject(uint8 index);
void removeSetObject(uint8 index);
@@ -1129,7 +1136,7 @@ public:
void doShake();
void vSync();
void setMode();
- void showPCX(const Common::String &name);
+ void showPCX(const Common::String &suffix);
void showFrameInternal(const uint8 *pSrc, uint16 x, uint16 y, uint8 effectsFlag, uint8 width, uint8 height);
void showFrame(const GraphicsFile &frameData, uint16 x, uint16 y, uint16 frameNumber, uint8 effectsFlag, uint8 *width, uint8 *height);
void showFrame(const GraphicsFile &frameData, uint16 x, uint16 y, uint16 frameNumber, uint8 effectsFlag);
diff --git a/engines/dreamweb/keypad.cpp b/engines/dreamweb/keypad.cpp
index 2a31652ace..2ab5835997 100644
--- a/engines/dreamweb/keypad.cpp
+++ b/engines/dreamweb/keypad.cpp
@@ -93,7 +93,7 @@ void DreamWebEngine::enterCode(uint8 digit0, uint8 digit1, uint8 digit2, uint8 d
}
}
_manIsOffScreen = 0;
- getRidOfTemp();
+ _keypadGraphics.clear();
restoreReels();
redrawMainScrn();
workToScreenM();
@@ -108,7 +108,7 @@ bool DreamWebEngine::isItRight(uint8 digit0, uint8 digit1, uint8 digit2, uint8 d
}
void DreamWebEngine::loadKeypad() {
- loadIntoTemp("DREAMWEB.G02");
+ loadGraphicsFile(_keypadGraphics, "G02");
}
void DreamWebEngine::quitKey() {
@@ -185,8 +185,8 @@ void DreamWebEngine::buttonPress(uint8 buttonId) {
}
void DreamWebEngine::showOuterPad() {
- showFrame(_tempGraphics, kKeypadx-3, kKeypady-4, 1, 0);
- showFrame(_tempGraphics, kKeypadx+74, kKeypady+76, 37, 0);
+ showFrame(_keypadGraphics, kKeypadx-3, kKeypady-4, 1, 0);
+ showFrame(_keypadGraphics, kKeypadx+74, kKeypady+76, 37, 0);
}
void DreamWebEngine::showKeypad() {
@@ -214,7 +214,7 @@ void DreamWebEngine::showKeypad() {
}
if ((_lightCount >= 60) && (_lightCount < 100))
--frameIndex;
- showFrame(_tempGraphics, kKeypadx+60, y, frameIndex, 0);
+ showFrame(_keypadGraphics, kKeypadx+60, y, frameIndex, 0);
}
}
@@ -225,7 +225,7 @@ void DreamWebEngine::singleKey(uint8 key, uint16 x, uint16 y) {
key -= 11;
}
key -= 20;
- showFrame(_tempGraphics, x, y, key, 0);
+ showFrame(_keypadGraphics, x, y, key, 0);
}
void DreamWebEngine::dumpKeypad() {
@@ -241,9 +241,9 @@ void DreamWebEngine::useMenu() {
_vars._newObs = 0;
drawFloor();
printSprites();
- showFrame(_tempGraphics2, kMenux-48, kMenuy-4, 4, 0);
+ showFrame(_menuGraphics2, kMenux-48, kMenuy-4, 4, 0);
getUnderMenu();
- showFrame(_tempGraphics2, kMenux+54, kMenuy+72, 5, 0);
+ showFrame(_menuGraphics2, kMenux+54, kMenuy+72, 5, 0);
workToScreenM();
_getBack = 0;
do {
@@ -265,8 +265,8 @@ void DreamWebEngine::useMenu() {
} while ((_getBack != 1) && !_quitRequested);
_manIsOffScreen = 0;
redrawMainScrn();
- getRidOfTemp();
- getRidOfTemp2();
+ _menuGraphics.clear();
+ _menuGraphics2.clear();
restoreReels();
workToScreenM();
}
@@ -289,12 +289,12 @@ void DreamWebEngine::showMenu() {
++_menuCount;
if (_menuCount == 37*2)
_menuCount = 0;
- showFrame(_tempGraphics, kMenux, kMenuy, _menuCount / 2, 0);
+ showFrame(_menuGraphics, kMenux, kMenuy, _menuCount / 2, 0);
}
void DreamWebEngine::loadMenu() {
- loadIntoTemp("DREAMWEB.S02"); // sprite name 3
- loadIntoTemp2("DREAMWEB.G07"); // mon. graphics 2
+ loadGraphicsFile(_menuGraphics, "S02"); // sprite name 3
+ loadGraphicsFile(_menuGraphics2, "G07"); // mon. graphics 2
}
void DreamWebEngine::viewFolder() {
@@ -317,10 +317,10 @@ void DreamWebEngine::viewFolder() {
checkFolderCoords();
} while (_getBack == 0);
_manIsOffScreen = 0;
- getRidOfTemp();
- getRidOfTemp2();
- getRidOfTemp3();
- getRidOfTempCharset();
+ _folderGraphics.clear();
+ _folderGraphics2.clear();
+ _folderGraphics3.clear();
+ _folderCharset.clear();
restoreAll();
redrawMainScrn();
workToScreenM();
@@ -394,22 +394,22 @@ void DreamWebEngine::checkFolderCoords() {
}
void DreamWebEngine::loadFolder() {
- loadIntoTemp("DREAMWEB.G09"); // folder graphics 1
- loadIntoTemp2("DREAMWEB.G10"); // folder graphics 2
- loadIntoTemp3("DREAMWEB.G11"); // folder graphics 3
- loadTempCharset("DREAMWEB.C02"); // character set 3
- loadTempText("DREAMWEB.T50"); // folder text
+ loadGraphicsFile(_folderGraphics, "G09"); // folder graphics 1
+ loadGraphicsFile(_folderGraphics2, "G10"); // folder graphics 2
+ loadGraphicsFile(_folderGraphics3, "G11"); // folder graphics 3
+ loadGraphicsFile(_folderCharset, "C02"); // character set 3
+ loadTempText("T50"); // folder text
}
void DreamWebEngine::showFolder() {
_commandType = 255;
if (_folderPage) {
- useTempCharset();
+ useTempCharset(&_folderCharset);
createPanel2();
- showFrame(_tempGraphics, 0, 0, 0, 0);
- showFrame(_tempGraphics, 143, 0, 1, 0);
- showFrame(_tempGraphics, 0, 92, 2, 0);
- showFrame(_tempGraphics, 143, 92, 3, 0);
+ showFrame(_folderGraphics, 0, 0, 0, 0);
+ showFrame(_folderGraphics, 143, 0, 1, 0);
+ showFrame(_folderGraphics, 0, 92, 2, 0);
+ showFrame(_folderGraphics, 143, 92, 3, 0);
folderExit();
if (_folderPage != 1)
showLeftPage();
@@ -419,25 +419,25 @@ void DreamWebEngine::showFolder() {
underTextLine();
} else {
createPanel2();
- showFrame(_tempGraphics3, 143-28, 0, 0, 0);
- showFrame(_tempGraphics3, 143-28, 92, 1, 0);
+ showFrame(_folderGraphics3, 143-28, 0, 0, 0);
+ showFrame(_folderGraphics3, 143-28, 92, 1, 0);
folderExit();
underTextLine();
}
}
void DreamWebEngine::folderExit() {
- showFrame(_tempGraphics2, 296, 178, 6, 0);
+ showFrame(_folderGraphics2, 296, 178, 6, 0);
}
void DreamWebEngine::showLeftPage() {
- showFrame(_tempGraphics2, 0, 12, 3, 0);
+ showFrame(_folderGraphics2, 0, 12, 3, 0);
uint16 y = 12+5;
for (size_t i = 0; i < 9; ++i) {
- showFrame(_tempGraphics2, 0, y, 4, 0);
+ showFrame(_folderGraphics2, 0, y, 4, 0);
y += 16;
}
- showFrame(_tempGraphics2, 0, y, 5, 0);
+ showFrame(_folderGraphics2, 0, y, 5, 0);
_lineSpacing = 8;
_charShift = 91;
_kerning = 1;
@@ -464,14 +464,14 @@ void DreamWebEngine::showLeftPage() {
}
void DreamWebEngine::showRightPage() {
- showFrame(_tempGraphics2, 143, 12, 0, 0);
+ showFrame(_folderGraphics2, 143, 12, 0, 0);
uint16 y = 12+37;
for (size_t i = 0; i < 7; ++i) {
- showFrame(_tempGraphics2, 143, y, 1, 0);
+ showFrame(_folderGraphics2, 143, y, 1, 0);
y += 16;
}
- showFrame(_tempGraphics2, 143, y, 2, 0);
+ showFrame(_folderGraphics2, 143, y, 2, 0);
_lineSpacing = 8;
_kerning = 1;
uint8 pageIndex = _folderPage - 1;
@@ -491,7 +491,7 @@ void DreamWebEngine::showRightPage() {
void DreamWebEngine::enterSymbol() {
_manIsOffScreen = 1;
getRidOfReels();
- loadIntoTemp("DREAMWEB.G12"); // symbol graphics
+ loadGraphicsFile(_symbolGraphics, "G12"); // symbol graphics
_symbolTopX = 24;
_symbolTopDir = 0;
_symbolBotX = 24;
@@ -529,7 +529,7 @@ void DreamWebEngine::enterSymbol() {
turnAnyPathOn(0, _roomNum + 12);
_manIsOffScreen = 0;
redrawMainScrn();
- getRidOfTemp();
+ _symbolGraphics.clear();
restoreReels();
workToScreenM();
playChannel1(13);
@@ -539,7 +539,7 @@ void DreamWebEngine::enterSymbol() {
turnAnyPathOff(0, _roomNum + 12);
_manIsOffScreen = 0;
redrawMainScrn();
- getRidOfTemp();
+ _symbolGraphics.clear();
restoreReels();
workToScreenM();
}
@@ -616,19 +616,19 @@ void DreamWebEngine::dumpSymbol() {
}
void DreamWebEngine::showSymbol() {
- showFrame(_tempGraphics, kSymbolx, kSymboly, 12, 0);
+ showFrame(_symbolGraphics, kSymbolx, kSymboly, 12, 0);
- showFrame(_tempGraphics, _symbolTopX + kSymbolx-44, kSymboly+20, _symbolTopNum, 32);
+ showFrame(_symbolGraphics, _symbolTopX + kSymbolx-44, kSymboly+20, _symbolTopNum, 32);
uint8 nextTopSymbol = nextSymbol(_symbolTopNum);
- showFrame(_tempGraphics, _symbolTopX + kSymbolx+5, kSymboly+20, nextTopSymbol, 32);
+ showFrame(_symbolGraphics, _symbolTopX + kSymbolx+5, kSymboly+20, nextTopSymbol, 32);
uint8 nextNextTopSymbol = nextSymbol(nextTopSymbol);
- showFrame(_tempGraphics, _symbolTopX + kSymbolx+54, kSymboly+20, nextNextTopSymbol, 32);
+ showFrame(_symbolGraphics, _symbolTopX + kSymbolx+54, kSymboly+20, nextNextTopSymbol, 32);
- showFrame(_tempGraphics, _symbolBotX + kSymbolx-44, kSymboly+49, 6 + _symbolBotNum, 32);
+ showFrame(_symbolGraphics, _symbolBotX + kSymbolx-44, kSymboly+49, 6 + _symbolBotNum, 32);
uint8 nextBotSymbol = nextSymbol(_symbolBotNum);
- showFrame(_tempGraphics, _symbolBotX + kSymbolx+5, kSymboly+49, 6 + nextBotSymbol, 32);
+ showFrame(_symbolGraphics, _symbolBotX + kSymbolx+5, kSymboly+49, 6 + nextBotSymbol, 32);
uint8 nextNextBotSymbol = nextSymbol(nextBotSymbol);
- showFrame(_tempGraphics, _symbolBotX + kSymbolx+54, kSymboly+49, 6 + nextNextBotSymbol, 32);
+ showFrame(_symbolGraphics, _symbolBotX + kSymbolx+54, kSymboly+49, 6 + nextNextBotSymbol, 32);
}
uint8 DreamWebEngine::nextSymbol(uint8 symbol) {
@@ -716,9 +716,9 @@ void DreamWebEngine::updateSymbolBot() {
void DreamWebEngine::useDiary() {
getRidOfReels();
- loadIntoTemp("DREAMWEB.G14");
- loadTempText("DREAMWEB.T51");
- loadTempCharset("DREAMWEB.C02");
+ loadGraphicsFile(_diaryGraphics, "G14");
+ loadTempText("T51");
+ loadGraphicsFile(_diaryCharset, "C02");
createPanel();
showIcon();
showDiary();
@@ -751,9 +751,9 @@ void DreamWebEngine::useDiary() {
} while (!_getBack && !_quitRequested);
- getRidOfTemp();
+ _diaryGraphics.clear();
getRidOfTempText();
- getRidOfTempCharset();
+ _diaryCharset.clear();
restoreReels();
_manIsOffScreen = 0;
redrawMainScrn();
@@ -761,8 +761,8 @@ void DreamWebEngine::useDiary() {
}
void DreamWebEngine::showDiary() {
- showFrame(_tempGraphics, kDiaryx, kDiaryy + 37, 1, 0);
- showFrame(_tempGraphics, kDiaryx + 176, kDiaryy + 108, 2, 0);
+ showFrame(_diaryGraphics, kDiaryx, kDiaryy + 37, 1, 0);
+ showFrame(_diaryGraphics, kDiaryx + 176, kDiaryy + 108, 2, 0);
}
void DreamWebEngine::showDiaryKeys() {
@@ -776,10 +776,10 @@ void DreamWebEngine::showDiaryKeys() {
if (_pressed == 'N') {
byte frame = (_pressCount == 1) ? 3 : 4;
- showFrame(_tempGraphics, kDiaryx + 94, kDiaryy + 97, frame, 0);
+ showFrame(_diaryGraphics, kDiaryx + 94, kDiaryy + 97, frame, 0);
} else {
byte frame = (_pressCount == 1) ? 5 : 6;
- showFrame(_tempGraphics, kDiaryx + 151, kDiaryy + 71, frame, 0);
+ showFrame(_diaryGraphics, kDiaryx + 151, kDiaryy + 71, frame, 0);
}
if (_pressCount == 1)
@@ -847,9 +847,9 @@ void DreamWebEngine::diaryKeyN() {
}
void DreamWebEngine::showDiaryPage() {
- showFrame(_tempGraphics, kDiaryx, kDiaryy, 0, 0);
+ showFrame(_diaryGraphics, kDiaryx, kDiaryy, 0, 0);
_kerning = 1;
- useTempCharset();
+ useTempCharset(&_diaryCharset);
_charShift = 91+91;
const uint8 *string = getTextInFile1(_diaryPage);
uint16 y = kDiaryy + 16;
diff --git a/engines/dreamweb/monitor.cpp b/engines/dreamweb/monitor.cpp
index d2f6b376ae..cdef60e94d 100644
--- a/engines/dreamweb/monitor.cpp
+++ b/engines/dreamweb/monitor.cpp
@@ -54,11 +54,11 @@ void DreamWebEngine::useMon() {
showIcon();
drawFloor();
getRidOfAll();
- loadIntoTemp("DREAMWEB.G03"); // mon. graphic name
+ loadGraphicsFile(_monitorGraphics, "G03"); // mon. graphic name
loadPersonal();
loadNews();
loadCart();
- loadTempCharset("DREAMWEB.C01"); // character set 2
+ loadGraphicsFile(_monitorCharset, "C01"); // character set 2
printOuterMon();
initialMonCols();
printLogo();
@@ -89,8 +89,8 @@ void DreamWebEngine::useMon() {
if (_quitRequested) //TODO : Check why it crashes when put before the execcommand
break;
} while (!stop);
- getRidOfTemp();
- getRidOfTempCharset();
+ _monitorGraphics.clear();
+ _monitorCharset.clear();
_textFile1.clear();
_textFile2.clear();
@@ -188,14 +188,14 @@ void DreamWebEngine::monitorLogo() {
}
void DreamWebEngine::printLogo() {
- showFrame(_tempGraphics, 56, 32, 0, 0);
+ showFrame(_monitorGraphics, 56, 32, 0, 0);
showCurrentFile();
}
void DreamWebEngine::input() {
memset(_inputLine, 0, 64);
_curPos = 0;
- printChar(_tempCharset, _monAdX, _monAdY, '>', 0, NULL, NULL);
+ printChar(_monitorCharset, _monAdX, _monAdY, '>', 0, NULL, NULL);
multiDump(_monAdX, _monAdY, 6, 8);
_monAdX += 6;
_cursLocX = _monAdX;
@@ -227,7 +227,7 @@ void DreamWebEngine::input() {
continue;
multiGet(_mapStore + _curPos * 256, _monAdX, _monAdY, 8, 8);
uint8 charWidth;
- printChar(_tempCharset, _monAdX, _monAdY, currentKey, 0, &charWidth, NULL);
+ printChar(_monitorCharset, _monAdX, _monAdY, currentKey, 0, &charWidth, NULL);
_inputLine[_curPos * 2 + 1] = charWidth;
_monAdX += charWidth;
++_curPos;
@@ -266,7 +266,7 @@ void DreamWebEngine::printCurs() {
multiGet(_textUnder, x, y, 6, height);
++_mainTimer;
if ((_mainTimer & 16) == 0)
- showFrame(_tempCharset, x, y, '/' - 32, 0);
+ showFrame(_monitorCharset, x, y, '/' - 32, 0);
multiDump(x - 6, y, 12, height);
}
@@ -302,17 +302,17 @@ void DreamWebEngine::showCurrentFile() {
while (*currentFile) {
char c = *currentFile++;
c = modifyChar(c);
- printChar(_tempCharset, &x, 37, c, 0, NULL, NULL);
+ printChar(_monitorCharset, &x, 37, c, 0, NULL, NULL);
}
}
void DreamWebEngine::accessLightOn() {
- showFrame(_tempGraphics, 74, 182, 8, 0);
+ showFrame(_monitorGraphics, 74, 182, 8, 0);
multiDump(74, 182, 12, 8);
}
void DreamWebEngine::accessLightOff() {
- showFrame(_tempGraphics, 74, 182, 7, 0);
+ showFrame(_monitorGraphics, 74, 182, 7, 0);
multiDump(74, 182, 12, 8);
}
@@ -345,22 +345,22 @@ void DreamWebEngine::netError() {
}
void DreamWebEngine::powerLightOn() {
- showFrame(_tempGraphics, 257+4, 182, 6, 0);
+ showFrame(_monitorGraphics, 257+4, 182, 6, 0);
multiDump(257+4, 182, 12, 8);
}
void DreamWebEngine::powerLightOff() {
- showFrame(_tempGraphics, 257+4, 182, 5, 0);
+ showFrame(_monitorGraphics, 257+4, 182, 5, 0);
multiDump(257+4, 182, 12, 8);
}
void DreamWebEngine::lockLightOn() {
- showFrame(_tempGraphics, 56, 182, 10, 0);
+ showFrame(_monitorGraphics, 56, 182, 10, 0);
multiDump(58, 182, 12, 8);
}
void DreamWebEngine::lockLightOff() {
- showFrame(_tempGraphics, 56, 182, 9, 0);
+ showFrame(_monitorGraphics, 56, 182, 9, 0);
multiDump(58, 182, 12, 8);
}
@@ -375,29 +375,29 @@ void DreamWebEngine::turnOnPower() {
}
void DreamWebEngine::printOuterMon() {
- showFrame(_tempGraphics, 40, 32, 1, 0);
- showFrame(_tempGraphics, 264, 32, 2, 0);
- showFrame(_tempGraphics, 40, 12, 3, 0);
- showFrame(_tempGraphics, 40, 164, 4, 0);
+ showFrame(_monitorGraphics, 40, 32, 1, 0);
+ showFrame(_monitorGraphics, 264, 32, 2, 0);
+ showFrame(_monitorGraphics, 40, 12, 3, 0);
+ showFrame(_monitorGraphics, 40, 164, 4, 0);
}
void DreamWebEngine::loadPersonal() {
if (_vars._location == 0 || _vars._location == 42)
- loadTextFile(_textFile1, "DREAMWEB.T01"); // monitor file 1
+ loadTextFile(_textFile1, "T01"); // monitor file 1
else
- loadTextFile(_textFile1, "DREAMWEB.T02"); // monitor file 2
+ loadTextFile(_textFile1, "T02"); // monitor file 2
}
void DreamWebEngine::loadNews() {
// textfile2 holds information accessible by anyone
if (_vars._newsItem == 0)
- loadTextFile(_textFile2, "DREAMWEB.T10"); // monitor file 10
+ loadTextFile(_textFile2, "T10"); // monitor file 10
else if (_vars._newsItem == 1)
- loadTextFile(_textFile2, "DREAMWEB.T11"); // monitor file 11
+ loadTextFile(_textFile2, "T11"); // monitor file 11
else if (_vars._newsItem == 2)
- loadTextFile(_textFile2, "DREAMWEB.T12"); // monitor file 12
+ loadTextFile(_textFile2, "T12"); // monitor file 12
else
- loadTextFile(_textFile2, "DREAMWEB.T13"); // monitor file 13
+ loadTextFile(_textFile2, "T13"); // monitor file 13
}
void DreamWebEngine::loadCart() {
@@ -408,15 +408,15 @@ void DreamWebEngine::loadCart() {
cartridgeId = getExAd(cartridgeIndex)->objId[3] + 1;
if (cartridgeId == 0)
- loadTextFile(_textFile3, "DREAMWEB.T20"); // monitor file 20
+ loadTextFile(_textFile3, "T20"); // monitor file 20
else if (cartridgeId == 1)
- loadTextFile(_textFile3, "DREAMWEB.T21"); // monitor file 21
+ loadTextFile(_textFile3, "T21"); // monitor file 21
else if (cartridgeId == 2)
- loadTextFile(_textFile3, "DREAMWEB.T22"); // monitor file 22
+ loadTextFile(_textFile3, "T22"); // monitor file 22
else if (cartridgeId == 3)
- loadTextFile(_textFile3, "DREAMWEB.T23"); // monitor file 23
+ loadTextFile(_textFile3, "T23"); // monitor file 23
else
- loadTextFile(_textFile3, "DREAMWEB.T24"); // monitor file 24
+ loadTextFile(_textFile3, "T24"); // monitor file 24
}
void DreamWebEngine::showKeys() {
diff --git a/engines/dreamweb/newplace.cpp b/engines/dreamweb/newplace.cpp
index 8083055da6..529c45bd4a 100644
--- a/engines/dreamweb/newplace.cpp
+++ b/engines/dreamweb/newplace.cpp
@@ -41,7 +41,7 @@ void DreamWebEngine::selectLocation() {
_pointerFrame = 22;
readCityPic();
showCity();
- getRidOfTemp();
+ _cityGraphics.clear();
readDestIcon();
loadTravelText();
showPanel();
@@ -89,17 +89,17 @@ void DreamWebEngine::selectLocation() {
_getBack = 0;
}
- getRidOfTemp();
- getRidOfTemp2();
- getRidOfTemp3();
+ _newplaceGraphics.clear();
+ _newplaceGraphics2.clear();
+ _newplaceGraphics3.clear();
_travelText.clear();
}
void DreamWebEngine::showCity() {
clearWork();
- showFrame(_tempGraphics, 57, 32, 0, 0);
- showFrame(_tempGraphics, 120+57, 32, 1, 0);
+ showFrame(_cityGraphics, 57, 32, 0, 0);
+ showFrame(_cityGraphics, 120+57, 32, 1, 0);
}
void DreamWebEngine::lookAtPlace() {
@@ -113,10 +113,10 @@ void DreamWebEngine::lookAtPlace() {
delPointer();
delTextLine();
getUnderCentre();
- showFrame(_tempGraphics3, 60, 72, 0, 0);
- showFrame(_tempGraphics3, 60, 72 + 55, 4, 0);
+ showFrame(_newplaceGraphics3, 60, 72, 0, 0);
+ showFrame(_newplaceGraphics3, 60, 72 + 55, 4, 0);
if (_foreignRelease)
- showFrame(_tempGraphics3, 60, 72+55+21, 4, 0);
+ showFrame(_newplaceGraphics3, 60, 72+55+21, 4, 0);
const uint8 *string = (const uint8 *)_travelText.getString(_destPos);
findNextColon(&string);
@@ -143,21 +143,21 @@ void DreamWebEngine::locationPic() {
byte picture = roomPics[_destPos];
if (picture >= 6)
- showFrame(_tempGraphics2, 104, 138 + 14, picture - 6, 0); // Second slot
+ showFrame(_newplaceGraphics2, 104, 138 + 14, picture - 6, 0); // Second slot
else
- showFrame(_tempGraphics, 104, 138 + 14, picture + 4, 0);
+ showFrame(_newplaceGraphics, 104, 138 + 14, picture + 4, 0);
if (_destPos == _realLocation)
- showFrame(_tempGraphics, 104, 140 + 14, 3, 0); // Currently in this location
+ showFrame(_newplaceGraphics, 104, 140 + 14, 3, 0); // Currently in this location
const uint8 *string = (const uint8 *)_travelText.getString(_destPos);
printDirect(string, 50, 20, 241, 241 & 1);
}
void DreamWebEngine::showArrows() {
- showFrame(_tempGraphics, 116 - 12, 16, 0, 0);
- showFrame(_tempGraphics, 226 + 12, 16, 1, 0);
- showFrame(_tempGraphics, 280, 14, 2, 0);
+ showFrame(_newplaceGraphics, 116 - 12, 16, 0, 0);
+ showFrame(_newplaceGraphics, 226 + 12, 16, 1, 0);
+ showFrame(_newplaceGraphics, 280, 14, 2, 0);
}
void DreamWebEngine::nextDest() {
@@ -259,13 +259,13 @@ void DreamWebEngine::resetLocation(uint8 index) {
}
void DreamWebEngine::readDestIcon() {
- loadIntoTemp("DREAMWEB.G05");
- loadIntoTemp2("DREAMWEB.G06");
- loadIntoTemp3("DREAMWEB.G08");
+ loadGraphicsFile(_newplaceGraphics, "G05");
+ loadGraphicsFile(_newplaceGraphics2, "G06");
+ loadGraphicsFile(_newplaceGraphics3, "G08");
}
void DreamWebEngine::readCityPic() {
- loadIntoTemp("DREAMWEB.G04");
+ loadGraphicsFile(_cityGraphics, "G04");
}
} // End of namespace DreamWeb
diff --git a/engines/dreamweb/people.cpp b/engines/dreamweb/people.cpp
index 1b8ee1b4de..316a1689c9 100644
--- a/engines/dreamweb/people.cpp
+++ b/engines/dreamweb/people.cpp
@@ -178,7 +178,7 @@ void DreamWebEngine::madman(ReelRoutine &routine) {
return;
}
if (newReelPointer == 10) {
- loadTempText("DREAMWEB.T82");
+ loadTempText("T82");
_vars._combatCount = (uint8)-1;
_speechCount = 0;
}
diff --git a/engines/dreamweb/print.cpp b/engines/dreamweb/print.cpp
index 24e0183a07..a6b93a5590 100644
--- a/engines/dreamweb/print.cpp
+++ b/engines/dreamweb/print.cpp
@@ -210,7 +210,7 @@ const char *DreamWebEngine::monPrint(const char *string) {
bool done = false;
while (!done) {
- uint16 count = getNumber(_tempCharset, (const uint8 *)iterator, 166, false, &x);
+ uint16 count = getNumber(_monitorCharset, (const uint8 *)iterator, 166, false, &x);
do {
char c = *iterator++;
if (c == ':')
@@ -226,7 +226,7 @@ const char *DreamWebEngine::monPrint(const char *string) {
break;
}
c = modifyChar(c);
- printChar(_tempCharset, &x, _monAdY, c, 0, NULL, NULL);
+ printChar(_monitorCharset, &x, _monAdY, c, 0, NULL, NULL);
_cursLocX = x;
_cursLocY = _monAdY;
_mainTimer = 1;
diff --git a/engines/dreamweb/saveload.cpp b/engines/dreamweb/saveload.cpp
index 4779d0baef..a526c8a3bc 100644
--- a/engines/dreamweb/saveload.cpp
+++ b/engines/dreamweb/saveload.cpp
@@ -178,7 +178,7 @@ void DreamWebEngine::doLoad(int savegameId) {
// If we reach this point, loadPosition() has just been called.
// Among other things, it will have filled g_MadeUpRoomDat.
- getRidOfTemp();
+ _saveGraphics.clear();
startLoading(g_madeUpRoomDat);
loadRoomsSample();
@@ -270,7 +270,7 @@ void DreamWebEngine::saveGame() {
descbuf[++desclen] = 1;
// TODO: The below is copied from actualsave
- getRidOfTemp();
+ _saveGraphics.clear();
restoreAll(); // reels
_textAddressX = 13;
_textAddressY = 182;
@@ -360,7 +360,7 @@ void DreamWebEngine::doSaveLoad() {
_textAddressY = 182;
_textLen = 240;
if (_getBack != 4) {
- getRidOfTemp();
+ _saveGraphics.clear();
restoreAll();
redrawMainScrn();
workToScreenM();
@@ -388,16 +388,16 @@ void DreamWebEngine::getBackToOps() {
}
void DreamWebEngine::showMainOps() {
- showFrame(_tempGraphics, kOpsx+10, kOpsy+10, 8, 0);
- showFrame(_tempGraphics, kOpsx+59, kOpsy+30, 7, 0);
- showFrame(_tempGraphics, kOpsx+128+4, kOpsy+12, 1, 0);
+ showFrame(_saveGraphics, kOpsx+10, kOpsy+10, 8, 0);
+ showFrame(_saveGraphics, kOpsx+59, kOpsy+30, 7, 0);
+ showFrame(_saveGraphics, kOpsx+128+4, kOpsy+12, 1, 0);
}
void DreamWebEngine::showDiscOps() {
- showFrame(_tempGraphics, kOpsx+128+4, kOpsy+12, 1, 0);
- showFrame(_tempGraphics, kOpsx+10, kOpsy+10, 9, 0);
- showFrame(_tempGraphics, kOpsx+59, kOpsy+30, 10, 0);
- showFrame(_tempGraphics, kOpsx+176+2, kOpsy+60-4, 5, 0);
+ showFrame(_saveGraphics, kOpsx+128+4, kOpsy+12, 1, 0);
+ showFrame(_saveGraphics, kOpsx+10, kOpsy+10, 9, 0);
+ showFrame(_saveGraphics, kOpsx+59, kOpsy+30, 10, 0);
+ showFrame(_saveGraphics, kOpsx+176+2, kOpsy+60-4, 5, 0);
}
void DreamWebEngine::discOps() {
@@ -450,7 +450,7 @@ void DreamWebEngine::actualSave() {
savePosition(slot, desc);
- getRidOfTemp();
+ _saveGraphics.clear();
restoreAll(); // reels
_textAddressX = 13;
_textAddressY = 182;
@@ -703,12 +703,12 @@ void DreamWebEngine::loadOld() {
void DreamWebEngine::showDecisions() {
createPanel2();
showOpBox();
- showFrame(_tempGraphics, kOpsx + 17, kOpsy + 13, 6, 0);
+ showFrame(_saveGraphics, kOpsx + 17, kOpsy + 13, 6, 0);
underTextLine();
}
void DreamWebEngine::loadSaveBox() {
- loadIntoTemp("DREAMWEB.G08");
+ loadGraphicsFile(_saveGraphics, "G08");
}
// show savegame names (original interface), and set kCursorpos
@@ -822,37 +822,37 @@ void DreamWebEngine::selectSlot() {
void DreamWebEngine::showSlots() {
showFrame(_icons1, kOpsx + 158, kOpsy - 11, 12, 0);
showFrame(_icons1, kOpsx + 158 + 18 * _saveLoadPage, kOpsy - 11, 13 + _saveLoadPage, 0);
- showFrame(_tempGraphics, kOpsx + 7, kOpsy + 8, 2, 0);
+ showFrame(_saveGraphics, kOpsx + 7, kOpsy + 8, 2, 0);
uint16 y = kOpsy + 11;
for (int slot = 0; slot < 7; slot++) {
if (slot == _currentSlot)
- showFrame(_tempGraphics, kOpsx + 10, y, 3, 0);
+ showFrame(_saveGraphics, kOpsx + 10, y, 3, 0);
y += 10;
}
}
void DreamWebEngine::showOpBox() {
- showFrame(_tempGraphics, kOpsx, kOpsy, 0, 0);
+ showFrame(_saveGraphics, kOpsx, kOpsy, 0, 0);
// This call displays half of the ops dialog in the CD version. It's not
// in the floppy version, and if it's called, a stray red dot is shown in
// the game dialogs.
if (isCD())
- showFrame(_tempGraphics, kOpsx, kOpsy + 55, 4, 0);
+ showFrame(_saveGraphics, kOpsx, kOpsy + 55, 4, 0);
}
void DreamWebEngine::showLoadOps() {
- showFrame(_tempGraphics, kOpsx + 128 + 4, kOpsy + 12, 1, 0);
- showFrame(_tempGraphics, kOpsx + 176 + 2, kOpsy + 60 - 4, 5, 0);
+ showFrame(_saveGraphics, kOpsx + 128 + 4, kOpsy + 12, 1, 0);
+ showFrame(_saveGraphics, kOpsx + 176 + 2, kOpsy + 60 - 4, 5, 0);
printMessage(kOpsx + 104, kOpsy + 14, 55, 101, (101 & 1));
}
void DreamWebEngine::showSaveOps() {
- showFrame(_tempGraphics, kOpsx + 128 + 4, kOpsy + 12, 1, 0);
- showFrame(_tempGraphics, kOpsx + 176 + 2, kOpsy + 60 - 4, 5, 0);
+ showFrame(_saveGraphics, kOpsx + 128 + 4, kOpsy + 12, 1, 0);
+ showFrame(_saveGraphics, kOpsx + 176 + 2, kOpsy + 60 - 4, 5, 0);
printMessage(kOpsx + 104, kOpsy + 14, 54, 101, (101 & 1));
}
diff --git a/engines/dreamweb/sound.cpp b/engines/dreamweb/sound.cpp
index b79be28cea..b51527a8cd 100644
--- a/engines/dreamweb/sound.cpp
+++ b/engines/dreamweb/sound.cpp
@@ -89,7 +89,7 @@ void DreamWebEngine::loadRoomsSample() {
return; // loaded already
assert(sample < 100);
- Common::String sampleName = Common::String::format("DREAMWEB.V%02d", sample);
+ Common::String sampleSuffix = Common::String::format("V%02d", sample);
_currentSample = sample;
uint8 ch0 = _channel0Playing;
@@ -98,7 +98,7 @@ void DreamWebEngine::loadRoomsSample() {
uint8 ch1 = _channel1Playing;
if (ch1 >= 12)
cancelCh1();
- loadSounds(1, sampleName.c_str());
+ loadSounds(1, sampleSuffix.c_str());
}
} // End of namespace DreamWeb
@@ -240,7 +240,8 @@ void DreamWebEngine::soundHandler() {
}
-void DreamWebEngine::loadSounds(uint bank, const Common::String &filename) {
+void DreamWebEngine::loadSounds(uint bank, const Common::String &suffix) {
+ Common::String filename = getDatafilePrefix() + suffix;
debug(1, "loadSounds(%u, %s)", bank, filename.c_str());
Common::File file;
if (!file.open(filename)) {
diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h
index cedf2b6d76..24b67e317a 100644
--- a/engines/dreamweb/structs.h
+++ b/engines/dreamweb/structs.h
@@ -339,9 +339,9 @@ struct TextFile {
};
struct GraphicsFile {
- GraphicsFile() : _data(0) { }
+ GraphicsFile() : _data(0), _frames(0) { }
- Frame _frames[347];
+ Frame *_frames;
uint8 *_data;
const uint8 *getFrameData(unsigned int i) const {
@@ -351,6 +351,8 @@ struct GraphicsFile {
return _data + _frames[i].ptr();
}
void clear() {
+ delete[] _frames;
+ _frames = 0;
delete[] _data;
_data = 0;
}
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index 5f8ea53ada..8e63774317 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -510,12 +510,27 @@ void DreamWebEngine::dreamwebFinalize() {
_icons1.clear();
_icons2.clear();
_charset1.clear();
- _tempGraphics.clear();
- _tempGraphics2.clear();
- _tempGraphics3.clear();
- _tempCharset.clear();
_mainSprites.clear();
+ // clear local graphics, just in case
+ _keypadGraphics.clear();
+ _menuGraphics.clear();
+ _menuGraphics2.clear();
+ _folderGraphics.clear();
+ _folderGraphics2.clear();
+ _folderGraphics3.clear();
+ _folderCharset.clear();
+ _symbolGraphics.clear();
+ _diaryGraphics.clear();
+ _diaryCharset.clear();
+ _monitorGraphics.clear();
+ _monitorCharset.clear();
+ _newplaceGraphics.clear();
+ _newplaceGraphics2.clear();
+ _newplaceGraphics3.clear();
+ _cityGraphics.clear();
+ _saveGraphics.clear();
+
_exFrames.clear();
_exText.clear();
@@ -564,7 +579,7 @@ void DreamWebEngine::dreamweb() {
readSetData();
_wonGame = false;
- loadSounds(0, "DREAMWEB.V99"); // basic sample
+ loadSounds(0, "V99"); // basic sample
bool firstLoop = true;
@@ -713,8 +728,8 @@ void DreamWebEngine::dreamweb() {
}
}
-void DreamWebEngine::loadTextFile(TextFile &file, const char *fileName)
-{
+void DreamWebEngine::loadTextFile(TextFile &file, const char *suffix) {
+ Common::String fileName = getDatafilePrefix() + suffix;
FileHeader header;
Common::File f;
@@ -819,7 +834,8 @@ void DreamWebEngine::switchRyanOff() {
_vars._ryanOn = 1;
}
-void DreamWebEngine::loadGraphicsFile(GraphicsFile &file, const char *fileName) {
+void DreamWebEngine::loadGraphicsFile(GraphicsFile &file, const char *suffix) {
+ Common::String fileName = getDatafilePrefix() + suffix;
FileHeader header;
Common::File f;
@@ -828,17 +844,18 @@ void DreamWebEngine::loadGraphicsFile(GraphicsFile &file, const char *fileName)
uint16 sizeInBytes = header.len(0);
assert(sizeInBytes >= kFrameBlocksize);
- delete[] file._data;
+ file.clear();
file._data = new uint8[sizeInBytes - kFrameBlocksize];
-
+ file._frames = new Frame[kGraphicsFileFrameSize];
f.read((uint8 *)file._frames, kFrameBlocksize);
f.read(file._data, sizeInBytes - kFrameBlocksize);
}
void DreamWebEngine::loadGraphicsSegment(GraphicsFile &file, Common::File &inFile, unsigned int len) {
assert(len >= kFrameBlocksize);
- delete[] file._data;
+ file.clear();
file._data = new uint8[len - kFrameBlocksize];
+ file._frames = new Frame[kGraphicsFileFrameSize];
inFile.read((uint8 *)file._frames, kFrameBlocksize);
inFile.read(file._data, len - kFrameBlocksize);
}
@@ -852,22 +869,6 @@ void DreamWebEngine::loadTextSegment(TextFile &file, Common::File &inFile, unsig
inFile.read((uint8 *)file._text, len - headerSize);
}
-void DreamWebEngine::loadIntoTemp(const char *fileName) {
- loadGraphicsFile(_tempGraphics, fileName);
-}
-
-void DreamWebEngine::loadIntoTemp2(const char *fileName) {
- loadGraphicsFile(_tempGraphics2, fileName);
-}
-
-void DreamWebEngine::loadIntoTemp3(const char *fileName) {
- loadGraphicsFile(_tempGraphics3, fileName);
-}
-
-void DreamWebEngine::loadTempCharset(const char *fileName) {
- loadGraphicsFile(_tempCharset, fileName);
-}
-
void DreamWebEngine::hangOnCurs(uint16 frameCount) {
for (uint16 i = 0; i < frameCount; ++i) {
printCurs();
@@ -1991,16 +1992,16 @@ void DreamWebEngine::loadRoom() {
}
void DreamWebEngine::readSetData() {
- loadGraphicsFile(_charset1, "DREAMWEB.C00");
- loadGraphicsFile(_icons1, "DREAMWEB.G00");
- loadGraphicsFile(_icons2, "DREAMWEB.G01");
- loadGraphicsFile(_mainSprites, "DREAMWEB.S00");
- loadTextFile(_puzzleText, "DREAMWEB.T80");
- loadTextFile(_commandText, "DREAMWEB.T84");
+ loadGraphicsFile(_charset1, "C00");
+ loadGraphicsFile(_icons1, "G00");
+ loadGraphicsFile(_icons2, "G01");
+ loadGraphicsFile(_mainSprites, "S00");
+ loadTextFile(_puzzleText, "T80");
+ loadTextFile(_commandText, "T84");
useCharset1();
// FIXME: Why is this commented out?
- //openFile("DREAMWEB.VOL");
+ //openFile(getDatafilePrefix() + "VOL");
//uint8 *volumeTab = getSegment(data.word(kSoundbuffer)).ptr(16384, 0);
//readFromFile(volumeTab, 2048-256);
//closeFile();
@@ -2065,30 +2066,14 @@ void DreamWebEngine::useCharset1() {
_currentCharset = &_charset1;
}
-void DreamWebEngine::useTempCharset() {
- _currentCharset = &_tempCharset;
-}
-
-void DreamWebEngine::getRidOfTemp() {
- _tempGraphics.clear();
+void DreamWebEngine::useTempCharset(GraphicsFile *charset) {
+ _currentCharset = charset;
}
void DreamWebEngine::getRidOfTempText() {
_textFile1.clear();
}
-void DreamWebEngine::getRidOfTemp2() {
- _tempGraphics2.clear();
-}
-
-void DreamWebEngine::getRidOfTemp3() {
- _tempGraphics3.clear();
-}
-
-void DreamWebEngine::getRidOfTempCharset() {
- _tempCharset.clear();
-}
-
void DreamWebEngine::getRidOfAll() {
delete[] _backdropBlocks;
_backdropBlocks = 0;
@@ -2251,11 +2236,11 @@ const uint8 *DreamWebEngine::getTextInFile1(uint16 index) {
}
void DreamWebEngine::loadTravelText() {
- loadTextFile(_travelText, "DREAMWEB.T81"); // location descs
+ loadTextFile(_travelText, "T81"); // location descs
}
-void DreamWebEngine::loadTempText(const char *fileName) {
- loadTextFile(_textFile1, fileName);
+void DreamWebEngine::loadTempText(const char *suffix) {
+ loadTextFile(_textFile1, suffix);
}
void DreamWebEngine::drawFloor() {
@@ -2274,6 +2259,7 @@ void DreamWebEngine::drawFloor() {
void DreamWebEngine::allocateBuffers() {
_exFrames.clear();
_exFrames._data = new uint8[kExframeslen];
+ _exFrames._frames = new Frame[kGraphicsFileFrameSize];
_exText.clear();
_exText._text = new char[kExtextlen];
}
@@ -2765,7 +2751,7 @@ void DreamWebEngine::decide() {
} while (!_getBack);
if (_getBack != 4)
- getRidOfTemp(); // room not loaded
+ _saveGraphics.clear(); // room not loaded
_textAddressX = 13;
_textAddressY = 182;
@@ -2794,16 +2780,17 @@ void DreamWebEngine::showGun() {
_roomsSample = 34;
loadRoomsSample();
_volume = 0;
- loadIntoTemp("DREAMWEB.G13");
+ GraphicsFile graphics;
+ loadGraphicsFile(graphics, "G13");
createPanel2();
- showFrame(_tempGraphics, 100, 4, 0, 0);
- showFrame(_tempGraphics, 158, 106, 1, 0);
+ showFrame(graphics, 100, 4, 0, 0);
+ showFrame(graphics, 158, 106, 1, 0);
workToScreen();
- getRidOfTemp();
+ graphics.clear();
fadeScreenUp();
hangOn(160);
playChannel0(12, 0);
- loadTempText("DREAMWEB.T83");
+ loadTempText("T83");
rollEndCreditsGameLost();
getRidOfTempText();
}
@@ -3018,7 +3005,7 @@ void DreamWebEngine::lookAtCard() {
getRidOfReels();
loadKeypad();
createPanel2();
- showFrame(_tempGraphics, 160, 80, 42, 128);
+ showFrame(_keypadGraphics, 160, 80, 42, 128);
const uint8 *obText = getObTextStart();
findNextColon(&obText);
findNextColon(&obText);
@@ -3028,12 +3015,12 @@ void DreamWebEngine::lookAtCard() {
workToScreenM();
hangOnW(280);
createPanel2();
- showFrame(_tempGraphics, 160, 80, 42, 128);
+ showFrame(_keypadGraphics, 160, 80, 42, 128);
printDirect(obText, 36, 130, 241, 241 & 1);
workToScreenM();
hangOnW(200);
_manIsOffScreen = 0;
- getRidOfTemp();
+ _keypadGraphics.clear();
restoreReels();
putBackObStuff();
}
diff --git a/engines/dreamweb/titles.cpp b/engines/dreamweb/titles.cpp
index 8ca5aa70b3..f7486ce687 100644
--- a/engines/dreamweb/titles.cpp
+++ b/engines/dreamweb/titles.cpp
@@ -26,7 +26,7 @@
namespace DreamWeb {
void DreamWebEngine::endGame() {
- loadTempText("DREAMWEB.T83");
+ loadTempText("T83");
monkSpeaking();
if (_quitRequested)
return;
@@ -40,9 +40,10 @@ void DreamWebEngine::endGame() {
void DreamWebEngine::monkSpeaking() {
_roomsSample = 35;
loadRoomsSample();
- loadIntoTemp("DREAMWEB.G15");
+ GraphicsFile graphics;
+ loadGraphicsFile(graphics, "G15");
clearWork();
- showFrame(_tempGraphics, 160, 72, 0, 128); // show monk
+ showFrame(graphics, 160, 72, 0, 128); // show monk
workToScreen();
_volume = 7;
_volumeDirection = -1;
@@ -74,7 +75,7 @@ void DreamWebEngine::monkSpeaking() {
printResult = printDirect(&string, 36, &y, 239, 239 & 1);
workToScreen();
clearWork();
- showFrame(_tempGraphics, 160, 72, 0, 128); // show monk
+ showFrame(graphics, 160, 72, 0, 128); // show monk
hangOnP(240);
if (_quitRequested)
return;
@@ -86,7 +87,7 @@ void DreamWebEngine::monkSpeaking() {
_volumeTo = 7;
fadeScreenDowns();
hangOn(300);
- getRidOfTemp();
+ graphics.clear();
}
void DreamWebEngine::gettingShot() {
@@ -103,7 +104,7 @@ void DreamWebEngine::gettingShot() {
void DreamWebEngine::bibleQuote() {
initGraphics(640, 480, true);
- showPCX("DREAMWEB.I00");
+ showPCX("I00");
fadeScreenUps();
hangOne(80);
@@ -140,7 +141,7 @@ void DreamWebEngine::hangOne(uint16 delay) {
}
void DreamWebEngine::intro() {
- loadTempText("DREAMWEB.T82");
+ loadTempText("T82");
loadPalFromIFF();
setMode();
_newLocation = 50;
@@ -291,7 +292,7 @@ void DreamWebEngine::realCredits() {
initGraphics(640, 480, true);
hangOn(35);
- showPCX("DREAMWEB.I01");
+ showPCX("I01");
playChannel0(12, 0);
hangOne(2);
@@ -317,7 +318,7 @@ void DreamWebEngine::realCredits() {
return; // "realcreditsearly"
}
- showPCX("DREAMWEB.I02");
+ showPCX("I02");
playChannel0(12, 0);
hangOne(2);
@@ -342,7 +343,7 @@ void DreamWebEngine::realCredits() {
return; // "realcreditsearly"
}
- showPCX("DREAMWEB.I03");
+ showPCX("I03");
playChannel0(12, 0);
hangOne(2);
@@ -367,7 +368,7 @@ void DreamWebEngine::realCredits() {
return; // "realcreditsearly"
}
- showPCX("DREAMWEB.I04");
+ showPCX("I04");
playChannel0(12, 0);
hangOne(2);
@@ -392,7 +393,7 @@ void DreamWebEngine::realCredits() {
return; // "realcreditsearly"
}
- showPCX("DREAMWEB.I05");
+ showPCX("I05");
playChannel0(12, 0);
hangOne(2);
@@ -417,7 +418,7 @@ void DreamWebEngine::realCredits() {
return; // "realcreditsearly"
}
- showPCX("DREAMWEB.I06");
+ showPCX("I06");
fadeScreenUps();
hangOne(60);
diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp
index fc0398c7b9..e59843539f 100644
--- a/engines/dreamweb/use.cpp
+++ b/engines/dreamweb/use.cpp
@@ -1501,7 +1501,7 @@ void DreamWebEngine::useCashCard() {
showExit();
showMan();
uint16 y = (!_foreignRelease) ? 120 : 120 - 3;
- showFrame(_tempGraphics, 114, y, 39, 0);
+ showFrame(_keypadGraphics, 114, y, 39, 0);
const uint8 *obText = getObTextStart();
findNextColon(&obText);
findNextColon(&obText);
@@ -1517,7 +1517,7 @@ void DreamWebEngine::useCashCard() {
_charShift = 0;
workToScreenM();
hangOnP(400);
- getRidOfTemp();
+ _keypadGraphics.clear();
restoreReels();
putBackObStuff();
}
diff --git a/engines/dreamweb/vgagrafx.cpp b/engines/dreamweb/vgagrafx.cpp
index 26b5e60b9d..be7d210999 100644
--- a/engines/dreamweb/vgagrafx.cpp
+++ b/engines/dreamweb/vgagrafx.cpp
@@ -153,7 +153,8 @@ void DreamWebEngine::setMode() {
initGraphics(320, 200, false);
}
-void DreamWebEngine::showPCX(const Common::String &name) {
+void DreamWebEngine::showPCX(const Common::String &suffix) {
+ Common::String name = getDatafilePrefix() + suffix;
Common::File pcxFile;
if (!pcxFile.open(name)) {
@@ -408,7 +409,7 @@ bool DreamWebEngine::pixelCheckSet(const ObjPos *pos, uint8 x, uint8 y) {
void DreamWebEngine::loadPalFromIFF() {
Common::File palFile;
uint8* buf = new uint8[2000];
- palFile.open("DREAMWEB.PAL");
+ palFile.open(getDatafilePrefix() + "PAL");
palFile.read(buf, 2000);
palFile.close();
diff --git a/engines/engine.h b/engines/engine.h
index a020dc4951..4f4223384a 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -24,6 +24,8 @@
#include "common/scummsys.h"
#include "common/str.h"
+#include "common/language.h"
+#include "common/platform.h"
class OSystem;
diff --git a/engines/game.cpp b/engines/game.cpp
index be15240745..4bfd8f3bf2 100644
--- a/engines/game.cpp
+++ b/engines/game.cpp
@@ -21,6 +21,7 @@
*/
#include "engines/game.h"
+#include "common/gui_options.h"
const PlainGameDescriptor *findPlainGameDescriptor(const char *gameid, const PlainGameDescriptor *list) {
diff --git a/engines/game.h b/engines/game.h
index d5136936bc..3417203ea7 100644
--- a/engines/game.h
+++ b/engines/game.h
@@ -26,7 +26,8 @@
#include "common/array.h"
#include "common/hash-str.h"
#include "common/str.h"
-#include "common/util.h"
+#include "common/language.h"
+#include "common/platform.h"
/**
* A simple structure used to map gameids (like "monkey", "sword1", ...) to
diff --git a/engines/gob/databases.h b/engines/gob/databases.h
index fb65d8cf96..cde123e6a8 100644
--- a/engines/gob/databases.h
+++ b/engines/gob/databases.h
@@ -26,7 +26,7 @@
#include "common/str.h"
#include "common/hashmap.h"
#include "common/hash-str.h"
-#include "common/util.h"
+#include "common/language.h"
#include "gob/dbase.h"
diff --git a/engines/gob/minigames/geisha/meter.cpp b/engines/gob/minigames/geisha/meter.cpp
index 335622c5df..e3b9bd1ccf 100644
--- a/engines/gob/minigames/geisha/meter.cpp
+++ b/engines/gob/minigames/geisha/meter.cpp
@@ -101,7 +101,7 @@ void Meter::update() {
_surface->fill(_backColor);
- int32 n = floor((((float) _width) / _maxValue * _value) + 0.5);
+ int32 n = (int32)floor((((float) _width) / _maxValue * _value) + 0.5);
if (n <= 0)
return;
diff --git a/engines/kyra/chargen.cpp b/engines/kyra/chargen.cpp
index 73f5fccb92..54e1abcc2c 100644
--- a/engines/kyra/chargen.cpp
+++ b/engines/kyra/chargen.cpp
@@ -1496,7 +1496,7 @@ TransferPartyWiz::~TransferPartyWiz() {
}
bool TransferPartyWiz::start() {
- _screen->copyPage(0, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12);
+ _screen->copyPage(0, _vm->_useHiResDithering ? 1 : 12);
if (!selectAndLoadTransferFile())
return false;
@@ -1536,7 +1536,7 @@ bool TransferPartyWiz::start() {
bool TransferPartyWiz::selectAndLoadTransferFile() {
do {
- _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 0);
+ _screen->copyPage(_vm->_useHiResDithering ? 1 : 12, 0);
if (transferFileDialogue(_vm->_savegameFilename))
break;
} while (_vm->_gui->confirmDialogue2(15, 68, 1));
@@ -1566,7 +1566,7 @@ bool TransferPartyWiz::selectAndLoadTransferFile() {
return false;
Common::String target = _vm->_gui->transferTargetMenu(eobTargets);
- _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 0);
+ _screen->copyPage(_vm->_useHiResDithering ? 1 : 12, 0);
if (target.empty())
return true;
@@ -1579,10 +1579,10 @@ bool TransferPartyWiz::selectAndLoadTransferFile() {
return true;
}
- _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 0);
+ _screen->copyPage(_vm->_useHiResDithering ? 1 : 12, 0);
bool result = _vm->_gui->transferFileMenu(target, dest);
- _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 0);
+ _screen->copyPage(_vm->_useHiResDithering ? 1 : 12, 0);
return result;
}
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp
index 1a4fd3bd9d..46dfec84ff 100644
--- a/engines/kyra/detection.cpp
+++ b/engines/kyra/detection.cpp
@@ -140,6 +140,8 @@ bool KyraMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGame
*engine = new Kyra::EoBEngine(syst, flags);
break;
case Kyra::GI_EOB2:
+ if (Common::parseRenderMode(ConfMan.get("render_mode")) == Common::kRenderEGA)
+ flags.useHiRes = true;
*engine = new Kyra::DarkMoonEngine(syst, flags);
break;
#endif // ENABLE_EOB
diff --git a/engines/kyra/detection_tables.h b/engines/kyra/detection_tables.h
index 44e604c44d..204c49cd2c 100644
--- a/engines/kyra/detection_tables.h
+++ b/engines/kyra/detection_tables.h
@@ -297,7 +297,7 @@ const KYRAGameDescription adGameDescs[] = {
Common::JA_JPN,
Common::kPlatformPC98,
ADGF_NO_FLAGS,
- GUIO3(GUIO_NOSPEECH, GUIO_MIDIPC98, GUIO_RENDERPC98)
+ GUIO4(GUIO_NOSPEECH, GUIO_MIDIPC98, GUIO_RENDERPC9821, GUIO_RENDERPC9801)
},
KYRA1_TOWNS_SJIS_FLAGS
},
@@ -743,7 +743,7 @@ const KYRAGameDescription adGameDescs[] = {
Common::EN_ANY,
Common::kPlatformPC98,
ADGF_CD,
- GUIO3(GUIO_NOSPEECH, GUIO_MIDIPC98, GUIO_RENDERPC98)
+ GUIO3(GUIO_NOSPEECH, GUIO_MIDIPC98, GUIO_RENDERPC9821)
},
KYRA2_TOWNS_FLAGS
},
@@ -755,7 +755,7 @@ const KYRAGameDescription adGameDescs[] = {
Common::JA_JPN,
Common::kPlatformPC98,
ADGF_CD,
- GUIO3(GUIO_NOSPEECH, GUIO_MIDIPC98, GUIO_RENDERPC98)
+ GUIO3(GUIO_NOSPEECH, GUIO_MIDIPC98, GUIO_RENDERPC9821)
},
KYRA2_TOWNS_SJIS_FLAGS
},
@@ -1418,7 +1418,7 @@ const KYRAGameDescription adGameDescs[] = {
Common::JA_JPN,
Common::kPlatformPC98,
ADGF_NO_FLAGS,
- GUIO3(GUIO_NOSPEECH, GUIO_MIDIPC98, GUIO_RENDERPC98)
+ GUIO3(GUIO_NOSPEECH, GUIO_MIDIPC98, GUIO_RENDERPC9801)
},
LOL_PC98_SJIS_FLAGS
},
diff --git a/engines/kyra/eobcommon.cpp b/engines/kyra/eobcommon.cpp
index ff53ba8b0a..1489e4f1f5 100644
--- a/engines/kyra/eobcommon.cpp
+++ b/engines/kyra/eobcommon.cpp
@@ -57,6 +57,8 @@ EoBCoreEngine::EoBCoreEngine(OSystem *system, const GameFlags &flags)
_configMouse = true;
_loading = false;
+ _useHiResDithering = false;
+
_envAudioTimer = 0;
_flashShapeTimer = 0;
_drawSceneTimer = 0;
@@ -369,9 +371,11 @@ Common::Error EoBCoreEngine::init() {
if (ConfMan.hasKey("render_mode"))
_configRenderMode = Common::parseRenderMode(ConfMan.get("render_mode"));
+ _useHiResDithering = (_configRenderMode == Common::kRenderEGA && _flags.useHiRes);
+
_screen = new Screen_EoB(this, _system);
assert(_screen);
- _screen->setResolution(_flags.useHiResOverlay || (_flags.gameID == GI_EOB2 && _configRenderMode == Common::kRenderEGA));
+ _screen->setResolution();
//MidiDriverType midiDriver = MidiDriver::detectDevice(MDT_PCSPK | MDT_ADLIB);
_sound = new SoundAdLibPC(this, _mixer);
@@ -390,7 +394,7 @@ Common::Error EoBCoreEngine::init() {
if (!_staticres->init())
error("_staticres->init() failed");
- if (!_screen->init(_flags.gameID == GI_EOB2 && _configRenderMode == Common::kRenderEGA))
+ if (!_screen->init())
error("screen()->init() failed");
if (ConfMan.hasKey("save_slot")) {
@@ -413,6 +417,12 @@ Common::Error EoBCoreEngine::init() {
_screen->loadFont(Screen::FID_6_FNT, "FONT6.FNT");
_screen->loadFont(Screen::FID_8_FNT, "FONT8.FNT");
+ if (_useHiResDithering) {
+ _vcnBlockWidth <<= 1;
+ _vcnBlockHeight <<= 1;
+ SWAP(_vcnFlip0, _vcnFlip1);
+ }
+
Common::Error err = KyraRpgEngine::init();
if (err.getCode() != Common::kNoError)
return err;
@@ -1738,7 +1748,7 @@ void EoBCoreEngine::seq_portal() {
bool EoBCoreEngine::checkPassword() {
char answ[20];
Screen::FontId of = _screen->setFont(Screen::FID_8_FNT);
- _screen->copyPage(0, (_screen->getPageScaleFactor(0) == 2) ? 4 : 10);
+ _screen->copyPage(0, _useHiResDithering ? 4 : 10);
_screen->setScreenDim(13);
gui_drawBox(_screen->_curDim->sx << 3, _screen->_curDim->sy, _screen->_curDim->w << 3, _screen->_curDim->h, guiSettings()->colors.frame1, guiSettings()->colors.frame2, -1);
@@ -1765,7 +1775,7 @@ bool EoBCoreEngine::checkPassword() {
_screen->modifyScreenDim(13, _screen->_curDim->sx - 1, _screen->_curDim->sy - 2, _screen->_curDim->w + 2, _screen->_curDim->h + 16);
_screen->setFont(of);
- _screen->copyPage((_screen->getPageScaleFactor(0) == 2) ? 4 : 10, 0);
+ _screen->copyPage(_useHiResDithering ? 4 : 10, 0);
return true;
}
diff --git a/engines/kyra/eobcommon.h b/engines/kyra/eobcommon.h
index 38be2a64e8..050fe2b794 100644
--- a/engines/kyra/eobcommon.h
+++ b/engines/kyra/eobcommon.h
@@ -845,6 +845,8 @@ protected:
const uint8 *_cgaMappingLevel[5];
const uint8 *_cgaLevelMappingIndex;
+ bool _useHiResDithering;
+
// Default parameters will import all present original save files and push them to the top of the save dialog.
bool importOriginalSaveFile(int destSlot, const char *sourceFile = 0);
Common::String readOriginalSaveFile(Common::String &file);
diff --git a/engines/kyra/gui_eob.cpp b/engines/kyra/gui_eob.cpp
index eadfd10d1e..e8e69d5b1f 100644
--- a/engines/kyra/gui_eob.cpp
+++ b/engines/kyra/gui_eob.cpp
@@ -777,11 +777,11 @@ int EoBCoreEngine::clickedCamp(Button *button) {
}
_screen->copyPage(0, 7);
- _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12, Screen::CR_NO_P_CHECK);
+ _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, _useHiResDithering ? 1 : 12, Screen::CR_NO_P_CHECK);
_gui->runCampMenu();
- _screen->copyRegion(0, 0, 0, 120, 176, 24, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12, 2, Screen::CR_NO_P_CHECK);
+ _screen->copyRegion(0, 0, 0, 120, 176, 24, _useHiResDithering ? 1 : 12, 2, Screen::CR_NO_P_CHECK);
_screen->setScreenDim(cd);
drawScene(0);
@@ -1170,7 +1170,7 @@ int EoBCoreEngine::clickedSceneSpecial(Button *button) {
int EoBCoreEngine::clickedSpellbookAbort(Button *button) {
_updateFlags = 0;
- _screen->copyRegion(0, 0, 64, 121, 112, 56, (_screen->getPageScaleFactor(0) == 2) ? 4 : 10, 0, Screen::CR_NO_P_CHECK);
+ _screen->copyRegion(0, 0, 64, 121, 112, 56, _useHiResDithering ? 4 : 10, 0, Screen::CR_NO_P_CHECK);
_screen->updateScreen();
gui_drawCompass(true);
gui_toggleButtons();
@@ -2172,7 +2172,7 @@ void GUI_EoB::runCampMenu() {
if (cnt > 4) {
_vm->dropCharacter(selectCharacterDialogue(53));
_vm->gui_drawPlayField(false);
- _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12, Screen::CR_NO_P_CHECK);
+ _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, _vm->_useHiResDithering ? 1 : 12, Screen::CR_NO_P_CHECK);
_screen->setFont(Screen::FID_6_FNT);
_vm->gui_drawAllCharPortraitsWithStats();
_screen->setFont(Screen::FID_8_FNT);
@@ -2607,7 +2607,7 @@ Common::String GUI_EoB::transferTargetMenu(Common::Array<Common::String> &target
break;
} while (_saveSlotIdTemp[slot] == -1);
- _screen->copyRegion(72, 14, 72, 14, 176, 144, (_screen->getPageScaleFactor(0) == 2) ? 7 : 12, 0, Screen::CR_NO_P_CHECK);
+ _screen->copyRegion(72, 14, 72, 14, 176, 144, _vm->_useHiResDithering ? 7 : 12, 0, Screen::CR_NO_P_CHECK);
_screen->modifyScreenDim(11, xo, yo, dm->w, dm->h);
return (slot < 6) ? _savegameList[_savegameOffset + slot] : Common::String();
@@ -2648,7 +2648,14 @@ bool GUI_EoB::transferFileMenu(Common::String &targetName, Common::String &selec
void GUI_EoB::createScreenThumbnail(Graphics::Surface &dst) {
uint8 *screenPal = new uint8[768];
_screen->getRealPalette(0, screenPal);
- ::createThumbnail(&dst, _screen->getCPagePtr(7), Screen::SCREEN_W, Screen::SCREEN_H, screenPal);
+ uint16 width = Screen::SCREEN_W;
+ uint16 height = Screen::SCREEN_H;
+ if (_vm->_useHiResDithering) {
+ width <<= 1;
+ height <<= 1;
+ }
+
+ ::createThumbnail(&dst, _screen->getCPagePtr(7), width, height, screenPal);
delete[] screenPal;
}
diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp
index b07e3a4965..0ba173d9d0 100644
--- a/engines/kyra/kyra_hof.cpp
+++ b/engines/kyra/kyra_hof.cpp
@@ -221,7 +221,7 @@ void KyraEngine_HoF::pauseEngineIntern(bool pause) {
Common::Error KyraEngine_HoF::init() {
_screen = new Screen_HoF(this, _system);
assert(_screen);
- _screen->setResolution(_flags.useHiResOverlay);
+ _screen->setResolution();
_debugger = new Debugger_HoF(this);
assert(_debugger);
diff --git a/engines/kyra/kyra_lok.cpp b/engines/kyra/kyra_lok.cpp
index e8a2c02e6e..ece4a0daba 100644
--- a/engines/kyra/kyra_lok.cpp
+++ b/engines/kyra/kyra_lok.cpp
@@ -167,12 +167,12 @@ KyraEngine_LoK::~KyraEngine_LoK() {
}
Common::Error KyraEngine_LoK::init() {
- if (_flags.platform == Common::kPlatformPC98 && _flags.useHiResOverlay && ConfMan.getBool("16_color"))
+ if (Common::parseRenderMode(ConfMan.get("render_mode")) == Common::kRenderPC9801)
_screen = new Screen_LoK_16(this, _system);
else
_screen = new Screen_LoK(this, _system);
assert(_screen);
- _screen->setResolution(_flags.useHiResOverlay);
+ _screen->setResolution();
_debugger = new Debugger_LoK(this);
assert(_debugger);
@@ -960,9 +960,6 @@ void KyraEngine_LoK::registerDefaultSettings() {
// Most settings already have sensible defaults. This one, however, is
// specific to the Kyra engine.
ConfMan.registerDefault("walkspeed", 2);
-
- if (_flags.platform == Common::kPlatformPC98 && _flags.useHiResOverlay)
- ConfMan.registerDefault("16_color", false);
}
void KyraEngine_LoK::readSettings() {
diff --git a/engines/kyra/kyra_mr.cpp b/engines/kyra/kyra_mr.cpp
index 38f473a619..39ed0d038a 100644
--- a/engines/kyra/kyra_mr.cpp
+++ b/engines/kyra/kyra_mr.cpp
@@ -203,7 +203,7 @@ KyraEngine_MR::~KyraEngine_MR() {
Common::Error KyraEngine_MR::init() {
_screen = new Screen_MR(this, _system);
assert(_screen);
- _screen->setResolution(_flags.useHiResOverlay);
+ _screen->setResolution();
_debugger = new Debugger_v2(this);
assert(_debugger);
diff --git a/engines/kyra/kyra_rpg.cpp b/engines/kyra/kyra_rpg.cpp
index 121731e394..8857f64f7e 100644
--- a/engines/kyra/kyra_rpg.cpp
+++ b/engines/kyra/kyra_rpg.cpp
@@ -171,12 +171,6 @@ Common::Error KyraRpgEngine::init() {
_wllWallFlags = new uint8[256];
memset(_wllWallFlags, 0, 256);
- if (_flags.gameID == GI_EOB2 && _configRenderMode == Common::kRenderEGA) {
- _vcnBlockWidth <<= 1;
- _vcnBlockHeight <<= 1;
- SWAP(_vcnFlip0, _vcnFlip1);
- }
-
_blockDrawingBuffer = new uint16[1320];
memset(_blockDrawingBuffer, 0, 1320 * sizeof(uint16));
uint32 swbSize = 22 * _vcnBlockWidth * 2 * 15 * _vcnBlockHeight;
diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp
index 7c67af2f13..2672618c67 100644
--- a/engines/kyra/kyra_v1.cpp
+++ b/engines/kyra/kyra_v1.cpp
@@ -233,19 +233,16 @@ KyraEngine_v1::~KyraEngine_v1() {
Common::Point KyraEngine_v1::getMousePos() {
Common::Point mouse = _eventMan->getMousePos();
- if (_flags.useHiResOverlay) {
+ if (_flags.useHiRes) {
mouse.x >>= 1;
mouse.y >>= 1;
}
- mouse.x /= screen()->getPageScaleFactor(0);
- mouse.y /= screen()->getPageScaleFactor(0);
-
return mouse;
}
void KyraEngine_v1::setMousePos(int x, int y) {
- if (_flags.useHiResOverlay) {
+ if (_flags.useHiRes) {
x <<= 1;
y <<= 1;
}
@@ -312,12 +309,10 @@ int KyraEngine_v1::checkInput(Button *buttonList, bool mainLoop, int eventFlag)
case Common::EVENT_LBUTTONUP: {
_mouseX = event.mouse.x;
_mouseY = event.mouse.y;
- if (_flags.useHiResOverlay) {
+ if (_flags.useHiRes) {
_mouseX >>= 1;
_mouseY >>= 1;
}
- _mouseX /= screen()->getPageScaleFactor(0);
- _mouseY /= screen()->getPageScaleFactor(0);
keys = (event.type == Common::EVENT_LBUTTONDOWN ? 199 : (200 | 0x800));
breakLoop = true;
} break;
@@ -326,12 +321,10 @@ int KyraEngine_v1::checkInput(Button *buttonList, bool mainLoop, int eventFlag)
case Common::EVENT_RBUTTONUP: {
_mouseX = event.mouse.x;
_mouseY = event.mouse.y;
- if (_flags.useHiResOverlay) {
+ if (_flags.useHiRes) {
_mouseX >>= 1;
_mouseY >>= 1;
}
- _mouseX /= screen()->getPageScaleFactor(0);
- _mouseY /= screen()->getPageScaleFactor(0);
keys = (event.type == Common::EVENT_RBUTTONDOWN ? 201 : (202 | 0x800));
breakLoop = true;
} break;
diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h
index 95d58d4ab2..11173a45c7 100644
--- a/engines/kyra/kyra_v1.h
+++ b/engines/kyra/kyra_v1.h
@@ -28,8 +28,9 @@
#include "common/array.h"
#include "common/error.h"
#include "common/events.h"
-#include "common/random.h"
#include "common/hashmap.h"
+#include "common/random.h"
+#include "common/rendermode.h"
#include "audio/mixer.h"
@@ -118,7 +119,7 @@ struct GameFlags {
bool useAltShapeHeader : 1; // alternative shape header (uses 2 bytes more, those are unused though)
bool isTalkie : 1;
bool isOldFloppy : 1;
- bool useHiResOverlay : 1;
+ bool useHiRes : 1;
bool use16ColorMode : 1;
bool useDigSound : 1;
bool useInstallerPackage : 1;
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp
index 022a878e0a..38e9d33259 100644
--- a/engines/kyra/lol.cpp
+++ b/engines/kyra/lol.cpp
@@ -364,7 +364,7 @@ GUI *LoLEngine::gui() const {
Common::Error LoLEngine::init() {
_screen = new Screen_LoL(this, _system);
assert(_screen);
- _screen->setResolution(_flags.useHiResOverlay);
+ _screen->setResolution();
_debugger = new Debugger_LoL(this);
assert(_debugger);
diff --git a/engines/kyra/magic_eob.cpp b/engines/kyra/magic_eob.cpp
index b2949ce1d5..985286854b 100644
--- a/engines/kyra/magic_eob.cpp
+++ b/engines/kyra/magic_eob.cpp
@@ -60,7 +60,7 @@ void EoBCoreEngine::useMagicBookOrSymbol(int charIndex, int type) {
}
if (!_updateFlags)
- _screen->copyRegion(64, 121, 0, 0, 112, 56, 0, (_screen->getPageScaleFactor(0) == 2) ? 4 : 10, Screen::CR_NO_P_CHECK);
+ _screen->copyRegion(64, 121, 0, 0, 112, 56, 0, _useHiResDithering ? 4 : 10, Screen::CR_NO_P_CHECK);
_updateFlags = 1;
gui_setPlayFieldButtons();
gui_drawSpellbook();
diff --git a/engines/kyra/saveload_eob.cpp b/engines/kyra/saveload_eob.cpp
index 4a446aa3f3..f7d7d95b57 100644
--- a/engines/kyra/saveload_eob.cpp
+++ b/engines/kyra/saveload_eob.cpp
@@ -298,7 +298,7 @@ Common::Error EoBCoreEngine::loadGameState(int slot) {
useMagicBookOrSymbol(_openBookChar, _openBookType);
}
- _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, (_screen->getPageScaleFactor(0) == 2) ? 1 : 12, Screen::CR_NO_P_CHECK);
+ _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, _useHiResDithering ? 1 : 12, Screen::CR_NO_P_CHECK);
gui_toggleButtons();
setHandItem(_itemInHand);
diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp
index ef6333b350..d3b4d6f943 100644
--- a/engines/kyra/screen.cpp
+++ b/engines/kyra/screen.cpp
@@ -106,8 +106,9 @@ bool Screen::init() {
memset(_fonts, 0, sizeof(_fonts));
- if (_vm->gameFlags().useHiResOverlay) {
- _useOverlays = true;
+ _useOverlays = (_vm->gameFlags().useHiRes && _renderMode != Common::kRenderEGA);
+
+ if (_useOverlays) {
_useSJIS = (_vm->gameFlags().lang == Common::JA_JPN);
_sjisInvisibleColor = (_vm->game() == GI_KYRA1) ? 0x80 : 0xF6;
@@ -226,7 +227,7 @@ bool Screen::enableScreenDebug(bool enable) {
if (_debugEnabled != enable) {
_debugEnabled = enable;
- setResolution(_vm->gameFlags().useHiResOverlay);
+ setResolution();
_forceFullUpdate = true;
updateScreen();
}
@@ -234,14 +235,14 @@ bool Screen::enableScreenDebug(bool enable) {
return temp;
}
-void Screen::setResolution(bool hiRes) {
+void Screen::setResolution() {
byte palette[3*256];
_system->getPaletteManager()->grabPalette(palette, 0, 256);
int width = 320, height = 200;
bool defaultTo1xScaler = false;
- if (hiRes) {
+ if (_vm->gameFlags().useHiRes) {
defaultTo1xScaler = true;
height = 400;
@@ -466,11 +467,6 @@ const uint8 *Screen::getCPagePtr(int pageNum) const {
return _pagePtrs[pageNum];
}
-int Screen::getPageScaleFactor(int pageNum) {
- assert(pageNum < SCREEN_PAGE_NUM);
- return _pageScaleFactor[pageNum];
-}
-
uint8 *Screen::getPageRect(int pageNum, int x, int y, int w, int h) {
assert(pageNum < SCREEN_PAGE_NUM);
if (pageNum == 0 || pageNum == 1)
@@ -1226,7 +1222,7 @@ bool Screen::loadFont(FontId fontId, const char *filename) {
fnt = new AMIGAFont();
#ifdef ENABLE_EOB
else if (_vm->game() == GI_EOB1 || _vm->game() == GI_EOB2)
- fnt = new OldDOSFont(_renderMode, (_vm->game() == GI_EOB2) && (_renderMode == Common::kRenderEGA));
+ fnt = new OldDOSFont(_renderMode, _vm->gameFlags().useHiRes);
#endif // ENABLE_EOB
else
fnt = new DOSFont();
@@ -2896,21 +2892,20 @@ void Screen::setMouseCursor(int x, int y, const byte *shape) {
if (_vm->gameFlags().useAltShapeHeader)
shape -= 2;
- if (_vm->gameFlags().useHiResOverlay) {
+ if (_vm->gameFlags().useHiRes) {
x <<= 1;
y <<= 1;
mouseWidth <<= 1;
mouseHeight <<= 1;
}
-
uint8 *cursor = new uint8[mouseHeight * mouseWidth];
fillRect(0, 0, mouseWidth, mouseHeight, _cursorColorKey, 8);
drawShape(8, shape, 0, 0, 0, 0);
int xOffset = 0;
- if (_vm->gameFlags().useHiResOverlay) {
+ if (_vm->gameFlags().useHiRes) {
xOffset = mouseWidth;
scale2x(getPagePtr(8) + mouseWidth, SCREEN_W, getPagePtr(8), SCREEN_W, mouseWidth, mouseHeight);
postProcessCursor(getPagePtr(8) + mouseWidth, mouseWidth, mouseHeight, SCREEN_W);
diff --git a/engines/kyra/screen.h b/engines/kyra/screen.h
index 18c0aa90f7..b064c72bb0 100644
--- a/engines/kyra/screen.h
+++ b/engines/kyra/screen.h
@@ -28,6 +28,7 @@
#include "common/list.h"
#include "common/array.h"
#include "common/rect.h"
+#include "common/rendermode.h"
#include "common/stream.h"
class OSystem;
@@ -168,6 +169,7 @@ private:
Common::RenderMode _renderMode;
bool _useHiResEGADithering;
+ bool _useLoResEGA;
static uint16 *_cgaDitheringTable;
static int _numRef;
@@ -398,7 +400,7 @@ public:
// init
virtual bool init();
- virtual void setResolution(bool hiRes = false);
+ virtual void setResolution();
void updateScreen();
@@ -433,8 +435,6 @@ public:
virtual void setPagePixel(int pageNum, int x, int y, uint8 color);
const uint8 *getCPagePtr(int pageNum) const;
- int getPageScaleFactor(int pageNum);
-
uint8 *getPageRect(int pageNum, int x, int y, int w, int h);
// palette handling
@@ -453,7 +453,7 @@ public:
void enableInterfacePalette(bool e);
void setInterfacePalette(const Palette &pal, uint8 r, uint8 g, uint8 b);
- void getRealPalette(int num, uint8 *dst);
+ virtual void getRealPalette(int num, uint8 *dst);
Palette &getPalette(int num);
void copyPalette(const int dst, const int src);
@@ -580,6 +580,8 @@ protected:
bool _useOverlays;
bool _useSJIS;
bool _use16ColorMode;
+ bool _useHiResEGADithering;
+ bool _useLoResEGA;
bool _isAmiga;
Common::RenderMode _renderMode;
diff --git a/engines/kyra/screen_eob.cpp b/engines/kyra/screen_eob.cpp
index 38521d757c..9fae729bc4 100644
--- a/engines/kyra/screen_eob.cpp
+++ b/engines/kyra/screen_eob.cpp
@@ -55,7 +55,7 @@ Screen_EoB::Screen_EoB(EoBCoreEngine *vm, OSystem *system) : Screen(vm, system,
_egaPixelValueTable = 0;
_cgaMappingDefault = 0;
_cgaDitheringTables[0] = _cgaDitheringTables[1] = 0;
- _useHiResEGADithering = false;
+ _useLoResEGA = _useHiResEGADithering = false;
}
Screen_EoB::~Screen_EoB() {
@@ -69,12 +69,8 @@ Screen_EoB::~Screen_EoB() {
}
bool Screen_EoB::init() {
- return init(false);
-}
-
-bool Screen_EoB::init(bool useHiResEGADithering) {
// Define hi-res pages for EGA mode in EOB II
- if (useHiResEGADithering) {
+ if (_vm->gameFlags().useHiRes) {
for (int i = 0; i < 8; i++)
_pageScaleFactor[i] = 2;
}
@@ -99,15 +95,16 @@ bool Screen_EoB::init(bool useHiResEGADithering) {
_dsTempPage = new uint8[12000];
- if (_renderMode == Common::kRenderEGA) {
- _useHiResEGADithering = useHiResEGADithering;
+ if (_vm->gameFlags().useHiRes && _renderMode == Common::kRenderEGA) {
+ _useHiResEGADithering = true;
_egaDitheringTable = new uint8[256];
_egaPixelValueTable = new uint8[256];
for (int i = 0; i < 256; i++) {
_egaDitheringTable[i] = i & 0x0f;
_egaPixelValueTable[i] = i & 0x0f;
}
-
+ } else if (_renderMode == Common::kRenderEGA) {
+ _useLoResEGA = true;
} else if (_renderMode == Common::kRenderCGA) {
_cgaMappingDefault = _vm->staticres()->loadRawData(kEoB1CgaMappingDefault, temp);
_cgaDitheringTables[0] = new uint16[256];
@@ -425,6 +422,21 @@ void Screen_EoB::setScreenPalette(const Palette &pal) {
}
}
+void Screen_EoB::getRealPalette(int num, uint8 *dst) {
+ if (_renderMode == Common::kRenderCGA || _renderMode == Common::kRenderEGA) {
+ const uint8 *pal = _screenPalette->getData();
+ for (int i = 0; i < 16; ++i) {
+ dst[0] = (pal[0] << 2) | (pal[0] & 3);
+ dst[1] = (pal[1] << 2) | (pal[1] & 3);
+ dst[2] = (pal[2] << 2) | (pal[2] & 3);
+ dst += 3;
+ pal += 3;
+ }
+ } else {
+ Screen::getRealPalette(num, dst);
+ }
+}
+
uint8 *Screen_EoB::encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool encode8bit, const uint8 *cgaMapping) {
uint8 *shp = 0;
uint16 shapesize = 0;
@@ -432,7 +444,7 @@ uint8 *Screen_EoB::encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool enco
uint8 *srcLineStart = getPagePtr(_curPage | 1) + y * 320 + (x << 3);
uint8 *src = srcLineStart;
- if (_renderMode == Common::kRenderEGA && !_useHiResEGADithering)
+ if (_useLoResEGA)
encode8bit = false;
if (_renderMode == Common::kRenderCGA) {
@@ -556,7 +568,7 @@ uint8 *Screen_EoB::encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool enco
*dst++ = (w & 0xff);
*dst++ = (h & 0xff);
- if (_renderMode == Common::kRenderEGA && !_useHiResEGADithering) {
+ if (_useLoResEGA) {
for (int i = 0; i < 16; i++)
dst[i] = i;
} else {
@@ -1538,6 +1550,7 @@ OldDOSFont::OldDOSFont(Common::RenderMode mode, bool useHiResEGADithering) : _re
_data = 0;
_width = _height = _numGlyphs = 0;
_bitmapOffsets = 0;
+ _useLoResEGA = (_renderMode == Common::kRenderEGA && !_useHiResEGADithering);
_numRef++;
if (!_cgaDitheringTable && _numRef == 1) {
@@ -1664,7 +1677,7 @@ void OldDOSFont::drawChar(uint16 c, byte *dst, int pitch) const {
uint16 cgaMask1 = cgaColorMask[color1 & 3];
uint16 cgaMask2 = cgaColorMask[color2 & 3];
- if (_renderMode == Common::kRenderCGA || (_renderMode == Common::kRenderEGA && !_useHiResEGADithering)) {
+ if (_renderMode == Common::kRenderCGA || _useLoResEGA) {
color1 &= 0x0f;
color2 &= 0x0f;
}
diff --git a/engines/kyra/screen_eob.h b/engines/kyra/screen_eob.h
index 2bcfbd8f60..fc40cfe903 100644
--- a/engines/kyra/screen_eob.h
+++ b/engines/kyra/screen_eob.h
@@ -36,7 +36,6 @@ public:
virtual ~Screen_EoB();
bool init();
- bool init(bool useHiResEGADithering);
void setClearScreenDim(int dim);
void clearCurDim();
@@ -60,6 +59,7 @@ public:
void setPagePixel(int pageNum, int x, int y, uint8 color);
void setScreenPalette(const Palette &pal);
+ void getRealPalette(int num, uint8 *dst);
uint8 *encodeShape(uint16 x, uint16 y, uint16 w, uint16 h, bool encode8bit = false, const uint8 *cgaMapping = 0);
void drawShape(uint8 pageNum, const uint8 *shapeData, int x, int y, int sd = -1, int flags = 0, ...);
@@ -116,7 +116,6 @@ private:
uint8 *_egaDitheringTable;
uint8 *_egaPixelValueTable;
- bool _useHiResEGADithering;
static const uint8 _egaMatchTable[];
static const ScreenDim _screenDimTable[];
diff --git a/engines/queen/input.h b/engines/queen/input.h
index 0aa04dd026..b3bf811cd1 100644
--- a/engines/queen/input.h
+++ b/engines/queen/input.h
@@ -23,7 +23,7 @@
#ifndef QUEEN_INPUT_H
#define QUEEN_INPUT_H
-#include "common/util.h"
+#include "common/language.h"
#include "common/rect.h"
#include "common/events.h"
#include "queen/defs.h"
diff --git a/engines/queen/queen.cpp b/engines/queen/queen.cpp
index c610ef9921..d17268e16b 100644
--- a/engines/queen/queen.cpp
+++ b/engines/queen/queen.cpp
@@ -25,6 +25,7 @@
#include "common/config-manager.h"
#include "common/file.h"
#include "common/fs.h"
+#include "common/gui_options.h"
#include "common/savefile.h"
#include "common/system.h"
#include "common/events.h"
diff --git a/engines/queen/resource.h b/engines/queen/resource.h
index ef8e463631..7317ec5134 100644
--- a/engines/queen/resource.h
+++ b/engines/queen/resource.h
@@ -25,7 +25,8 @@
#include "common/file.h"
#include "common/str-array.h"
-#include "common/util.h"
+#include "common/language.h"
+#include "common/platform.h"
#include "queen/defs.h"
namespace Queen {
diff --git a/engines/scumm/detection.h b/engines/scumm/detection.h
index ad8b3cec12..b6dfa757bb 100644
--- a/engines/scumm/detection.h
+++ b/engines/scumm/detection.h
@@ -23,7 +23,8 @@
#ifndef SCUMM_DETECTION_H
#define SCUMM_DETECTION_H
-#include "common/util.h"
+#include "common/language.h"
+#include "common/platform.h"
namespace Scumm {
diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h
index 844ac3e5c4..22708de2d3 100644
--- a/engines/scumm/detection_tables.h
+++ b/engines/scumm/detection_tables.h
@@ -24,6 +24,7 @@
#define SCUMM_DETECTION_TABLES_H
#include "engines/obsolete.h"
+#include "common/gui_options.h"
#include "common/rect.h"
#include "common/util.h"
diff --git a/engines/scumm/gfx.cpp b/engines/scumm/gfx.cpp
index 48ccdfd1cf..2cf4a429db 100644
--- a/engines/scumm/gfx.cpp
+++ b/engines/scumm/gfx.cpp
@@ -680,11 +680,10 @@ void ScummEngine::drawStripToScreen(VirtScreen *vs, int x, int width, int top, i
srcPtr += vsPitch;
textPtr += _textSurface.pitch - width * m;
}
- }
+ } else {
#ifdef USE_ARM_GFX_ASM
- asmDrawStripToScreen(height, width, text, src, _compositeBuf, vs->pitch, width, _textSurface.pitch);
+ asmDrawStripToScreen(height, width, text, src, _compositeBuf, vs->pitch, width, _textSurface.pitch);
#else
- else {
// We blit four pixels at a time, for improved performance.
const uint32 *src32 = (const uint32 *)src;
uint32 *dst32 = (uint32 *)_compositeBuf;
@@ -715,8 +714,8 @@ void ScummEngine::drawStripToScreen(VirtScreen *vs, int x, int width, int top, i
src32 += vsPitch;
text32 += textPitch;
}
- }
#endif
+ }
src = _compositeBuf;
pitch = width * vs->format.bytesPerPixel;
diff --git a/engines/scumm/gfxARM.s b/engines/scumm/gfxARM.s
index 92f8951466..9238888831 100644
--- a/engines/scumm/gfxARM.s
+++ b/engines/scumm/gfxARM.s
@@ -59,10 +59,6 @@ _asmDrawStripToScreen:
CMP r1,#4 @ If width<4
BLT end @ return
- @ Width &= ~4 ? What''s that about then? Width &= ~3 I could have
- @ understood...
- BIC r1,r1,#4
-
SUB r5,r5,r1 @ vsPitch -= width
SUB r6,r6,r1 @ vmScreenWidth -= width
SUB r7,r7,r1 @ textSurfacePitch -= width
diff --git a/engines/scumm/help.h b/engines/scumm/help.h
index 5ba6bdc65c..a3948566c4 100644
--- a/engines/scumm/help.h
+++ b/engines/scumm/help.h
@@ -24,6 +24,7 @@
#define SCUMM_HELP_H
#include "common/str.h"
+#include "common/platform.h"
namespace Scumm {
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 2f1e536f0a..cacf8c214e 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -24,6 +24,7 @@
#define SCUMM_H
#include "engines/engine.h"
+
#include "common/endian.h"
#include "common/events.h"
#include "common/file.h"
@@ -31,6 +32,7 @@
#include "common/keyboard.h"
#include "common/random.h"
#include "common/rect.h"
+#include "common/rendermode.h"
#include "common/str.h"
#include "common/textconsole.h"
#include "graphics/surface.h"
diff --git a/engines/sword1/animation.cpp b/engines/sword1/animation.cpp
index e274e02cfd..1e2964054a 100644
--- a/engines/sword1/animation.cpp
+++ b/engines/sword1/animation.cpp
@@ -37,6 +37,11 @@
#include "gui/message.h"
+#include "video/psx_decoder.h"
+#include "video/smk_decoder.h"
+
+#include "engines/util.h"
+
namespace Sword1 {
static const char *const sequenceList[20] = {
@@ -62,6 +67,31 @@ static const char *const sequenceList[20] = {
"credits", // 19 CD2 credits, to follow "finale" sequence
};
+// This is the list of the names of the PlayStation videos
+// TODO: fight.str, flashy.str,
+static const char *const sequenceListPSX[20] = {
+ "e_ferr1",
+ "ladder1",
+ "steps1",
+ "sewer1",
+ "e_intro1",
+ "river1",
+ "truck1",
+ "grave1",
+ "montfcn1",
+ "tapesty1",
+ "ireland1",
+ "e_fin1",
+ "e_hist1",
+ "spanish1",
+ "well1",
+ "candle1",
+ "geodrop1",
+ "vulture1",
+ "", // demo video not present
+ "" // credits are not a video
+};
+
///////////////////////////////////////////////////////////////////////////////
// Basic movie player
///////////////////////////////////////////////////////////////////////////////
@@ -150,6 +180,21 @@ bool MoviePlayer::load(uint32 id) {
case kVideoDecoderSMK:
filename = Common::String::format("%s.smk", sequenceList[id]);
break;
+ case kVideoDecoderPSX:
+ filename = Common::String::format("%s.str", (_vm->_systemVars.isDemo) ? sequenceList[id] : sequenceListPSX[id]);
+
+ // Need to switch to true color
+ initGraphics(g_system->getWidth(), g_system->getHeight(), true, 0);
+
+ // Need to load here in case it fails in which case we'd need
+ // to go back to paletted mode
+ if (_decoder->loadFile(filename)) {
+ return true;
+ } else {
+ initGraphics(g_system->getWidth(), g_system->getHeight(), true);
+ return false;
+ }
+ break;
}
return _decoder->loadFile(filename.c_str());
@@ -187,6 +232,11 @@ void MoviePlayer::play() {
}
void MoviePlayer::performPostProcessing(byte *screen) {
+ // TODO: We don't support the PSX stream videos yet
+ // nor using the PSX fonts to display subtitles.
+ if (_vm->isPsx())
+ return;
+
if (!_movieTexts.empty()) {
if (_decoder->getCurFrame() == _movieTexts.front()._startFrame) {
_textMan->makeTextSprite(2, (const uint8 *)_movieTexts.front()._text.c_str(), 600, LETTER_COL);
@@ -215,10 +265,10 @@ void MoviePlayer::performPostProcessing(byte *screen) {
for (x = 0; x < _textWidth; x++) {
switch (src[x]) {
case BORDER_COL:
- dst[x] = findBlackPalIndex();
+ dst[x] = getBlackColor();
break;
case LETTER_COL:
- dst[x] = findTextColorPalIndex();
+ dst[x] = findTextColor();
break;
}
}
@@ -238,12 +288,12 @@ void MoviePlayer::performPostProcessing(byte *screen) {
for (y = 0; y < _textHeight; y++) {
if (_textY + y < frameY || _textY + y >= frameY + frameHeight) {
- memset(dst + _textX, findBlackPalIndex(), _textWidth);
+ memset(dst + _textX, getBlackColor(), _textWidth);
} else {
if (frameX > _textX)
- memset(dst + _textX, findBlackPalIndex(), frameX - _textX);
+ memset(dst + _textX, getBlackColor(), frameX - _textX);
if (frameX + frameWidth < _textX + _textWidth)
- memset(dst + frameX + frameWidth, findBlackPalIndex(), _textX + _textWidth - (frameX + frameWidth));
+ memset(dst + frameX + frameWidth, getBlackColor(), _textX + _textWidth - (frameX + frameWidth));
}
dst += _system->getWidth();
@@ -255,14 +305,19 @@ void MoviePlayer::performPostProcessing(byte *screen) {
}
bool MoviePlayer::playVideo() {
+ bool skipped = false;
uint16 x = (g_system->getWidth() - _decoder->getWidth()) / 2;
uint16 y = (g_system->getHeight() - _decoder->getHeight()) / 2;
- while (!_vm->shouldQuit() && !_decoder->endOfVideo()) {
+ while (!_vm->shouldQuit() && !_decoder->endOfVideo() && !skipped) {
if (_decoder->needsUpdate()) {
const Graphics::Surface *frame = _decoder->decodeNextFrame();
- if (frame)
- _vm->_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, x, y, frame->w, frame->h);
+ if (frame) {
+ if (_decoderType == kVideoDecoderPSX)
+ drawFramePSX(frame);
+ else
+ _vm->_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, x, y, frame->w, frame->h);
+ }
if (_decoder->hasDirtyPalette()) {
_decoder->setSystemPalette();
@@ -362,19 +417,40 @@ bool MoviePlayer::playVideo() {
Common::Event event;
while (_vm->_system->getEventManager()->pollEvent(event))
if ((event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE) || event.type == Common::EVENT_LBUTTONUP)
- return false;
+ skipped = true;
_vm->_system->delayMillis(10);
}
- return !_vm->shouldQuit();
+ if (_decoderType == kVideoDecoderPSX) {
+ // Need to jump back to paletted color
+ initGraphics(g_system->getWidth(), g_system->getHeight(), true);
+ }
+
+ return !_vm->shouldQuit() && !skipped;
}
-byte MoviePlayer::findBlackPalIndex() {
- return _black;
+uint32 MoviePlayer::getBlackColor() {
+ return (_decoderType == kVideoDecoderPSX) ? g_system->getScreenFormat().RGBToColor(0x00, 0x00, 0x00) : _black;
}
-
-byte MoviePlayer::findTextColorPalIndex() {
+
+uint32 MoviePlayer::findTextColor() {
+ if (_decoderType == kVideoDecoderPSX) {
+ // We're in true color mode, so return the actual colors
+ switch (_textColor) {
+ case 1:
+ return g_system->getScreenFormat().RGBToColor(248, 252, 248);
+ case 2:
+ return g_system->getScreenFormat().RGBToColor(184, 188, 184);
+ case 3:
+ return g_system->getScreenFormat().RGBToColor(200, 120, 184);
+ case 4:
+ return g_system->getScreenFormat().RGBToColor(80, 152, 184);
+ }
+
+ return g_system->getScreenFormat().RGBToColor(0xFF, 0xFF, 0xFF);
+ }
+
switch (_textColor) {
case 1:
return _c1Color;
@@ -413,6 +489,23 @@ void MoviePlayer::convertColor(byte r, byte g, byte b, float &h, float &s, float
}
}
+void MoviePlayer::drawFramePSX(const Graphics::Surface *frame) {
+ // The PSX videos have half resolution
+
+ Graphics::Surface scaledFrame;
+ scaledFrame.create(frame->w, frame->h * 2, frame->format);
+
+ for (int y = 0; y < scaledFrame.h; y++)
+ memcpy(scaledFrame.getBasePtr(0, y), frame->getBasePtr(0, y / 2), scaledFrame.w * scaledFrame.format.bytesPerPixel);
+
+ uint16 x = (g_system->getWidth() - scaledFrame.w) / 2;
+ uint16 y = (g_system->getHeight() - scaledFrame.h) / 2;
+
+ _vm->_system->copyRectToScreen((byte *)scaledFrame.pixels, scaledFrame.pitch, x, y, scaledFrame.w, scaledFrame.h);
+
+ scaledFrame.free();
+}
+
DXADecoderWithSound::DXADecoderWithSound(Audio::Mixer *mixer, Audio::SoundHandle *bgSoundHandle)
: _mixer(mixer), _bgSoundHandle(bgSoundHandle) {
}
@@ -432,6 +525,24 @@ MoviePlayer *makeMoviePlayer(uint32 id, SwordEngine *vm, Text *textMan, ResMan *
Common::String filename;
Audio::SoundHandle *bgSoundHandle = new Audio::SoundHandle;
+ // For the PSX version, we'll try the PlayStation stream files
+ if (vm->isPsx()) {
+ // The demo uses the normal file names
+ filename = ((vm->_systemVars.isDemo) ? Common::String(sequenceList[id]) : Common::String(sequenceListPSX[id])) + ".str";
+
+ if (Common::File::exists(filename)) {
+#ifdef USE_RGB_COLOR
+ // All BS1 PSX videos run the videos at 2x speed
+ Video::VideoDecoder *psxDecoder = new Video::PSXStreamDecoder(Video::PSXStreamDecoder::kCD2x);
+ return new MoviePlayer(vm, textMan, resMan, snd, system, bgSoundHandle, psxDecoder, kVideoDecoderPSX);
+#else
+ GUI::MessageDialog dialog(Common::String::format(_("PSX stream cutscene '%s' cannot be played in paletted mode"), filename.c_str()), _("OK"));
+ dialog.runModal();
+ return 0;
+#endif
+ }
+ }
+
filename = Common::String::format("%s.smk", sequenceList[id]);
if (Common::File::exists(filename)) {
@@ -461,9 +572,11 @@ MoviePlayer *makeMoviePlayer(uint32 id, SwordEngine *vm, Text *textMan, ResMan *
return NULL;
}
- Common::String buf = Common::String::format(_("Cutscene '%s' not found"), sequenceList[id]);
- GUI::MessageDialog dialog(buf, _("OK"));
- dialog.runModal();
+ if (!vm->isPsx() || scumm_stricmp(sequenceList[id], "enddemo") != 0) {
+ Common::String buf = Common::String::format(_("Cutscene '%s' not found"), sequenceList[id]);
+ GUI::MessageDialog dialog(buf, _("OK"));
+ dialog.runModal();
+ }
return NULL;
}
diff --git a/engines/sword1/animation.h b/engines/sword1/animation.h
index c436607211..f64b03dd1b 100644
--- a/engines/sword1/animation.h
+++ b/engines/sword1/animation.h
@@ -24,7 +24,6 @@
#define SWORD1_ANIMATION_H
#include "video/dxa_decoder.h"
-#include "video/smk_decoder.h"
#include "video/video_decoder.h"
#include "common/list.h"
@@ -38,7 +37,8 @@ namespace Sword1 {
enum DecoderType {
kVideoDecoderDXA = 0,
- kVideoDecoderSMK = 1
+ kVideoDecoderSMK = 1,
+ kVideoDecoderPSX = 2
};
class MovieText {
@@ -83,8 +83,8 @@ protected:
Common::List<MovieText> _movieTexts;
int _textX, _textY, _textWidth, _textHeight;
int _textColor;
- byte _black;
- byte _c1Color, _c2Color, _c3Color, _c4Color;
+ uint32 _black;
+ uint32 _c1Color, _c2Color, _c3Color, _c4Color;
DecoderType _decoderType;
Video::VideoDecoder *_decoder;
@@ -93,9 +93,10 @@ protected:
bool playVideo();
void performPostProcessing(byte *screen);
+ void drawFramePSX(const Graphics::Surface *frame);
- byte findBlackPalIndex();
- byte findTextColorPalIndex();
+ uint32 getBlackColor();
+ uint32 findTextColor();
void convertColor(byte r, byte g, byte b, float &h, float &s, float &v);
};
diff --git a/engines/sword1/detection.cpp b/engines/sword1/detection.cpp
index 2214e72067..087dcd09d8 100644
--- a/engines/sword1/detection.cpp
+++ b/engines/sword1/detection.cpp
@@ -25,6 +25,7 @@
#include "base/plugins.h"
#include "common/fs.h"
+#include "common/gui_options.h"
#include "common/savefile.h"
#include "common/system.h"
#include "graphics/thumbnail.h"
diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp
index 865e025786..75e8f72d9d 100644
--- a/engines/sword1/sword1.cpp
+++ b/engines/sword1/sword1.cpp
@@ -62,8 +62,9 @@ SwordEngine::SwordEngine(OSystem *syst)
SearchMan.addSubDirectoryMatching(gameDataDir, "speech");
SearchMan.addSubDirectoryMatching(gameDataDir, "video");
SearchMan.addSubDirectoryMatching(gameDataDir, "smackshi");
- SearchMan.addSubDirectoryMatching(gameDataDir, "english");//PSX Demo
- SearchMan.addSubDirectoryMatching(gameDataDir, "italian");//PSX Demo
+ SearchMan.addSubDirectoryMatching(gameDataDir, "streams"); // PSX videos
+ SearchMan.addSubDirectoryMatching(gameDataDir, "english"); // PSX Demo
+ SearchMan.addSubDirectoryMatching(gameDataDir, "italian"); // PSX Demo
_console = new SwordConsole(this);
}
diff --git a/engines/sword2/animation.cpp b/engines/sword2/animation.cpp
index 80b4809722..e77ae98163 100644
--- a/engines/sword2/animation.cpp
+++ b/engines/sword2/animation.cpp
@@ -40,6 +40,11 @@
#include "gui/message.h"
+#include "video/smk_decoder.h"
+#include "video/psx_decoder.h"
+
+#include "engines/util.h"
+
namespace Sword2 {
///////////////////////////////////////////////////////////////////////////////
@@ -66,6 +71,10 @@ MoviePlayer::~MoviePlayer() {
* @param id the id of the file
*/
bool MoviePlayer::load(const char *name) {
+ // This happens when quitting during the "eye" cutscene.
+ if (_vm->shouldQuit())
+ return false;
+
if (_decoderType == kVideoDecoderDXA)
_bgSoundStream = Audio::SeekableAudioStream::openStreamFile(name);
else
@@ -81,16 +90,26 @@ bool MoviePlayer::load(const char *name) {
case kVideoDecoderSMK:
filename = Common::String::format("%s.smk", name);
break;
+ case kVideoDecoderPSX:
+ filename = Common::String::format("%s.str", name);
+
+ // Need to switch to true color
+ initGraphics(640, 480, true, 0);
+
+ // Need to load here in case it fails in which case we'd need
+ // to go back to paletted mode
+ if (_decoder->loadFile(filename)) {
+ return true;
+ } else {
+ initGraphics(640, 480, true);
+ return false;
+ }
}
return _decoder->loadFile(filename.c_str());
}
void MoviePlayer::play(MovieText *movieTexts, uint32 numMovieTexts, uint32 leadIn, uint32 leadOut) {
- // This happens when quitting during the "eye" cutscene.
- if (_vm->shouldQuit())
- return;
-
_leadOutFrame = _decoder->getFrameCount();
if (_leadOutFrame > 60)
_leadOutFrame -= 60;
@@ -120,6 +139,11 @@ void MoviePlayer::play(MovieText *movieTexts, uint32 numMovieTexts, uint32 leadI
while (_snd->isSoundHandleActive(*_bgSoundHandle))
_system->delayMillis(100);
+
+ if (_decoderType == kVideoDecoderPSX) {
+ // Need to jump back to paletted color
+ initGraphics(640, 480, true);
+ }
}
void MoviePlayer::openTextObject(uint32 index) {
@@ -165,7 +189,7 @@ void MoviePlayer::openTextObject(uint32 index) {
}
}
-void MoviePlayer::closeTextObject(uint32 index, byte *screen, uint16 pitch) {
+void MoviePlayer::closeTextObject(uint32 index, Graphics::Surface *screen, uint16 pitch) {
if (index < _numMovieTexts) {
MovieText *text = &_movieTexts[index];
@@ -180,23 +204,23 @@ void MoviePlayer::closeTextObject(uint32 index, byte *screen, uint16 pitch) {
int frameWidth = _decoder->getWidth();
int frameHeight = _decoder->getHeight();
+
+ if (_decoderType == kVideoDecoderPSX)
+ frameHeight *= 2;
+
int frameX = (_system->getWidth() - frameWidth) / 2;
int frameY = (_system->getHeight() - frameHeight) / 2;
- byte black = findBlackPalIndex();
-
- byte *dst = screen + _textY * pitch;
+ uint32 black = getBlackColor();
for (int y = 0; y < text->_textSprite.h; y++) {
if (_textY + y < frameY || _textY + y >= frameY + frameHeight) {
- memset(dst + _textX, black, text->_textSprite.w);
+ screen->hLine(_textX, _textY + y, _textX + text->_textSprite.w, black);
} else {
if (frameX > _textX)
- memset(dst + _textX, black, frameX - _textX);
+ screen->hLine(_textX, _textY + y, frameX, black);
if (frameX + frameWidth < _textX + text->_textSprite.w)
- memset(dst + frameX + frameWidth, black, _textX + text->_textSprite.w - (frameX + frameWidth));
+ screen->hLine(frameX + frameWidth, _textY + y, text->_textSprite.w, black);
}
-
- dst += pitch;
}
}
@@ -206,11 +230,24 @@ void MoviePlayer::closeTextObject(uint32 index, byte *screen, uint16 pitch) {
}
}
-void MoviePlayer::drawTextObject(uint32 index, byte *screen, uint16 pitch) {
+#define PUT_PIXEL(c) \
+ switch (screen->format.bytesPerPixel) { \
+ case 1: \
+ *dst = (c); \
+ break; \
+ case 2: \
+ WRITE_UINT16(dst, (c)); \
+ break; \
+ case 4: \
+ WRITE_UINT32(dst, (c)); \
+ break; \
+ }
+
+void MoviePlayer::drawTextObject(uint32 index, Graphics::Surface *screen, uint16 pitch) {
MovieText *text = &_movieTexts[index];
- byte white = findWhitePalIndex();
- byte black = findBlackPalIndex();
+ uint32 white = getWhiteColor();
+ uint32 black = getBlackColor();
if (text->_textMem && _textSurface) {
byte *src = text->_textSprite.data;
@@ -226,17 +263,20 @@ void MoviePlayer::drawTextObject(uint32 index, byte *screen, uint16 pitch) {
src = psxSpriteBuffer;
}
- byte *dst = screen + _textY * pitch + _textX;
-
for (int y = 0; y < height; y++) {
+ byte *dst = (byte *)screen->getBasePtr(_textX, _textY + y);
+
for (int x = 0; x < width; x++) {
- if (src[x] == 1)
- dst[x] = black;
- else if (src[x] == 255)
- dst[x] = white;
+ if (src[x] == 1) {
+ PUT_PIXEL(black);
+ } else if (src[x] == 255) {
+ PUT_PIXEL(white);
+ }
+
+ dst += screen->format.bytesPerPixel;
}
+
src += width;
- dst += pitch;
}
// Free buffer used to resize psx sprite
@@ -245,7 +285,9 @@ void MoviePlayer::drawTextObject(uint32 index, byte *screen, uint16 pitch) {
}
}
-void MoviePlayer::performPostProcessing(byte *screen, uint16 pitch) {
+#undef PUT_PIXEL
+
+void MoviePlayer::performPostProcessing(Graphics::Surface *screen, uint16 pitch) {
MovieText *text;
int frame = _decoder->getCurFrame();
@@ -286,8 +328,12 @@ bool MoviePlayer::playVideo() {
while (!_vm->shouldQuit() && !_decoder->endOfVideo()) {
if (_decoder->needsUpdate()) {
const Graphics::Surface *frame = _decoder->decodeNextFrame();
- if (frame)
- _vm->_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, x, y, frame->w, frame->h);
+ if (frame) {
+ if (_decoderType == kVideoDecoderPSX)
+ drawFramePSX(frame);
+ else
+ _vm->_system->copyRectToScreen((byte *)frame->pixels, frame->pitch, x, y, frame->w, frame->h);
+ }
if (_decoder->hasDirtyPalette()) {
_decoder->setSystemPalette();
@@ -319,7 +365,7 @@ bool MoviePlayer::playVideo() {
}
Graphics::Surface *screen = _vm->_system->lockScreen();
- performPostProcessing((byte *)screen->pixels, screen->pitch);
+ performPostProcessing(screen, screen->pitch);
_vm->_system->unlockScreen();
_vm->_system->updateScreen();
}
@@ -335,12 +381,29 @@ bool MoviePlayer::playVideo() {
return !_vm->shouldQuit();
}
-byte MoviePlayer::findBlackPalIndex() {
- return _black;
+uint32 MoviePlayer::getBlackColor() {
+ return (_decoderType == kVideoDecoderPSX) ? g_system->getScreenFormat().RGBToColor(0x00, 0x00, 0x00) : _black;
}
-byte MoviePlayer::findWhitePalIndex() {
- return _white;
+uint32 MoviePlayer::getWhiteColor() {
+ return (_decoderType == kVideoDecoderPSX) ? g_system->getScreenFormat().RGBToColor(0xFF, 0xFF, 0xFF) : _white;
+}
+
+void MoviePlayer::drawFramePSX(const Graphics::Surface *frame) {
+ // The PSX videos have half resolution
+
+ Graphics::Surface scaledFrame;
+ scaledFrame.create(frame->w, frame->h * 2, frame->format);
+
+ for (int y = 0; y < scaledFrame.h; y++)
+ memcpy(scaledFrame.getBasePtr(0, y), frame->getBasePtr(0, y / 2), scaledFrame.w * scaledFrame.format.bytesPerPixel);
+
+ uint16 x = (g_system->getWidth() - scaledFrame.w) / 2;
+ uint16 y = (g_system->getHeight() - scaledFrame.h) / 2;
+
+ _vm->_system->copyRectToScreen((byte *)scaledFrame.pixels, scaledFrame.pitch, x, y, scaledFrame.w, scaledFrame.h);
+
+ scaledFrame.free();
}
DXADecoderWithSound::DXADecoderWithSound(Audio::Mixer *mixer, Audio::SoundHandle *bgSoundHandle)
@@ -358,10 +421,23 @@ uint32 DXADecoderWithSound::getElapsedTime() const {
// Factory function for creating the appropriate cutscene player
///////////////////////////////////////////////////////////////////////////////
-MoviePlayer *makeMoviePlayer(const char *name, Sword2Engine *vm, Audio::Mixer *snd, OSystem *system) {
+MoviePlayer *makeMoviePlayer(const char *name, Sword2Engine *vm, Audio::Mixer *snd, OSystem *system, uint32 frameCount) {
Common::String filename;
Audio::SoundHandle *bgSoundHandle = new Audio::SoundHandle;
+ filename = Common::String::format("%s.str", name);
+
+ if (Common::File::exists(filename)) {
+#ifdef USE_RGB_COLOR
+ Video::VideoDecoder *psxDecoder = new Video::PSXStreamDecoder(Video::PSXStreamDecoder::kCD2x, frameCount);
+ return new MoviePlayer(vm, snd, system, bgSoundHandle, psxDecoder, kVideoDecoderPSX);
+#else
+ GUI::MessageDialog dialog(_("PSX cutscenes found but ScummVM has been built without RGB color support"), _("OK"));
+ dialog.runModal();
+ return NULL;
+#endif
+ }
+
filename = Common::String::format("%s.smk", name);
if (Common::File::exists(filename)) {
diff --git a/engines/sword2/animation.h b/engines/sword2/animation.h
index 1f5fced03b..3ef8dac754 100644
--- a/engines/sword2/animation.h
+++ b/engines/sword2/animation.h
@@ -26,7 +26,6 @@
#define SWORD2_ANIMATION_H
#include "video/dxa_decoder.h"
-#include "video/smk_decoder.h"
#include "video/video_decoder.h"
#include "audio/mixer.h"
@@ -36,7 +35,8 @@ namespace Sword2 {
enum DecoderType {
kVideoDecoderDXA = 0,
- kVideoDecoderSMK = 1
+ kVideoDecoderSMK = 1,
+ kVideoDecoderPSX = 2
};
struct MovieText {
@@ -93,18 +93,19 @@ protected:
uint32 _leadOut;
int _leadOutFrame;
- void performPostProcessing(byte *screen, uint16 pitch);
+ void performPostProcessing(Graphics::Surface *screen, uint16 pitch);
bool playVideo();
+ void drawFramePSX(const Graphics::Surface *frame);
void openTextObject(uint32 index);
- void closeTextObject(uint32 index, byte *screen, uint16 pitch);
- void drawTextObject(uint32 index, byte *screen, uint16 pitch);
+ void closeTextObject(uint32 index, Graphics::Surface *screen, uint16 pitch);
+ void drawTextObject(uint32 index, Graphics::Surface *screen, uint16 pitch);
- byte findBlackPalIndex();
- byte findWhitePalIndex();
+ uint32 getBlackColor();
+ uint32 getWhiteColor();
};
-MoviePlayer *makeMoviePlayer(const char *name, Sword2Engine *vm, Audio::Mixer *snd, OSystem *system);
+MoviePlayer *makeMoviePlayer(const char *name, Sword2Engine *vm, Audio::Mixer *snd, OSystem *system, uint32 frameCount);
} // End of namespace Sword2
diff --git a/engines/sword2/function.cpp b/engines/sword2/function.cpp
index 60ee6176a4..836b252d6c 100644
--- a/engines/sword2/function.cpp
+++ b/engines/sword2/function.cpp
@@ -2137,7 +2137,9 @@ int32 Logic::fnPlaySequence(int32 *params) {
// pause sfx during sequence
_vm->_sound->pauseFx();
- _moviePlayer = makeMoviePlayer(filename, _vm, _vm->_mixer, _vm->_system);
+ uint32 frameCount = Sword2Engine::isPsx() ? params[1] : 0;
+
+ _moviePlayer = makeMoviePlayer(filename, _vm, _vm->_mixer, _vm->_system, frameCount);
if (_moviePlayer && _moviePlayer->load(filename)) {
_moviePlayer->play(_sequenceTextList, _sequenceTextLines, _smackerLeadIn, _smackerLeadOut);
diff --git a/engines/sword2/sword2.cpp b/engines/sword2/sword2.cpp
index 3b7965259c..c395186570 100644
--- a/engines/sword2/sword2.cpp
+++ b/engines/sword2/sword2.cpp
@@ -25,9 +25,10 @@
#include "base/plugins.h"
#include "common/config-manager.h"
+#include "common/events.h"
#include "common/file.h"
#include "common/fs.h"
-#include "common/events.h"
+#include "common/gui_options.h"
#include "common/savefile.h"
#include "common/system.h"
#include "common/textconsole.h"
@@ -255,6 +256,7 @@ Sword2Engine::Sword2Engine(OSystem *syst) : Engine(syst), _rnd("sword2") {
SearchMan.addSubDirectoryMatching(gameDataDir, "sword2");
SearchMan.addSubDirectoryMatching(gameDataDir, "video");
SearchMan.addSubDirectoryMatching(gameDataDir, "smacks");
+ SearchMan.addSubDirectoryMatching(gameDataDir, "streams"); // PSX video
if (!scumm_stricmp(ConfMan.get("gameid").c_str(), "sword2demo") || !scumm_stricmp(ConfMan.get("gameid").c_str(), "sword2psxdemo"))
_features = GF_DEMO;
diff --git a/engines/sword25/util/lua/scummvm_file.cpp b/engines/sword25/util/lua/scummvm_file.cpp
index 33053a71cb..b5f1388129 100644
--- a/engines/sword25/util/lua/scummvm_file.cpp
+++ b/engines/sword25/util/lua/scummvm_file.cpp
@@ -22,7 +22,7 @@
#include "sword25/util/lua/scummvm_file.h"
#include "common/config-manager.h"
-#include "common/util.h"
+#include "common/language.h"
namespace Sword25 {
diff --git a/engines/tinsel/background.cpp b/engines/tinsel/background.cpp
index 72397db97f..8e3fc50f12 100644
--- a/engines/tinsel/background.cpp
+++ b/engines/tinsel/background.cpp
@@ -34,7 +34,7 @@ namespace Tinsel {
// FIXME: Avoid non-const global vars
// current background
-const BACKGND *pCurBgnd = NULL;
+const BACKGND *g_pCurBgnd = NULL;
/**
* Called to initialize a background.
@@ -46,7 +46,7 @@ void InitBackground(const BACKGND *pBgnd) {
PLAYFIELD *pPlayfield; // pointer to current playfield
// set current background
- pCurBgnd = pBgnd;
+ g_pCurBgnd = pBgnd;
// init background sky color
SetBgndColor(pBgnd->rgbSkyColor);
@@ -83,13 +83,13 @@ void PlayfieldSetPos(int which, int newXpos, int newYpos) {
PLAYFIELD *pPlayfield; // pointer to relavent playfield
// make sure there is a background
- assert(pCurBgnd != NULL);
+ assert(g_pCurBgnd != NULL);
// make sure the playfield number is in range
- assert(which >= 0 && which < pCurBgnd->numPlayfields);
+ assert(which >= 0 && which < g_pCurBgnd->numPlayfields);
// get playfield pointer
- pPlayfield = pCurBgnd->fieldArray + which;
+ pPlayfield = g_pCurBgnd->fieldArray + which;
// set new integer position
pPlayfield->fieldX = intToFrac(newXpos);
@@ -110,13 +110,13 @@ void PlayfieldGetPos(int which, int *pXpos, int *pYpos) {
PLAYFIELD *pPlayfield; // pointer to relavent playfield
// make sure there is a background
- assert(pCurBgnd != NULL);
+ assert(g_pCurBgnd != NULL);
// make sure the playfield number is in range
- assert(which >= 0 && which < pCurBgnd->numPlayfields);
+ assert(which >= 0 && which < g_pCurBgnd->numPlayfields);
// get playfield pointer
- pPlayfield = pCurBgnd->fieldArray + which;
+ pPlayfield = g_pCurBgnd->fieldArray + which;
// get current integer position
*pXpos = fracToInt(pPlayfield->fieldX);
@@ -132,13 +132,13 @@ int PlayfieldGetCenterX(int which) {
PLAYFIELD *pPlayfield; // pointer to relavent playfield
// make sure there is a background
- assert(pCurBgnd != NULL);
+ assert(g_pCurBgnd != NULL);
// make sure the playfield number is in range
- assert(which >= 0 && which < pCurBgnd->numPlayfields);
+ assert(which >= 0 && which < g_pCurBgnd->numPlayfields);
// get playfield pointer
- pPlayfield = pCurBgnd->fieldArray + which;
+ pPlayfield = g_pCurBgnd->fieldArray + which;
// get current integer position
return fracToInt(pPlayfield->fieldX) + SCREEN_WIDTH/2;
@@ -153,13 +153,13 @@ OBJECT **GetPlayfieldList(int which) {
PLAYFIELD *pPlayfield; // pointer to relavent playfield
// make sure there is a background
- assert(pCurBgnd != NULL);
+ assert(g_pCurBgnd != NULL);
// make sure the playfield number is in range
- assert(which >= 0 && which < pCurBgnd->numPlayfields);
+ assert(which >= 0 && which < g_pCurBgnd->numPlayfields);
// get playfield pointer
- pPlayfield = pCurBgnd->fieldArray + which;
+ pPlayfield = g_pCurBgnd->fieldArray + which;
// return the display list pointer for this playfield
return &pPlayfield->pDispList;
@@ -177,13 +177,13 @@ void DrawBackgnd() {
int prevX, prevY; // save interger part of position
Common::Point ptWin; // window top left
- if (pCurBgnd == NULL)
+ if (g_pCurBgnd == NULL)
return; // no current background
// scroll each background playfield
- for (i = 0; i < pCurBgnd->numPlayfields; i++) {
+ for (i = 0; i < g_pCurBgnd->numPlayfields; i++) {
// get pointer to correct playfield
- pPlay = pCurBgnd->fieldArray + i;
+ pPlay = g_pCurBgnd->fieldArray + i;
// save integer part of position
prevX = fracToInt(pPlay->fieldX);
@@ -220,11 +220,11 @@ void DrawBackgnd() {
for (RectList::const_iterator r = clipRects.begin(); r != clipRects.end(); ++r) {
// clear the clip rectangle on the virtual screen
// for each background playfield
- for (i = 0; i < pCurBgnd->numPlayfields; i++) {
+ for (i = 0; i < g_pCurBgnd->numPlayfields; i++) {
Common::Rect rcPlayClip; // clip rect for this playfield
// get pointer to correct playfield
- pPlay = pCurBgnd->fieldArray + i;
+ pPlay = g_pCurBgnd->fieldArray + i;
// convert fixed point window pos to a int
ptWin.x = fracToInt(pPlay->fieldX);
diff --git a/engines/tinsel/bg.cpp b/engines/tinsel/bg.cpp
index cf692e16ea..72ba05f0b9 100644
--- a/engines/tinsel/bg.cpp
+++ b/engines/tinsel/bg.cpp
@@ -47,59 +47,59 @@ namespace Tinsel {
#define MAX_BG 10
// FIXME: Avoid non-const global vars
-static SCNHANDLE hBgPal = 0; // Background's palette
-static POBJECT pBG[MAX_BG];
-static ANIM thisAnim[MAX_BG]; // used by BGmainProcess()
-static int BGspeed = 0;
-static SCNHANDLE hBackground = 0; // Current scene handle - stored in case of Save_Scene()
-static bool bDoFadeIn = false;
-static int bgReels;
+static SCNHANDLE g_hBgPal = 0; // Background's palette
+static POBJECT g_pBG[MAX_BG];
+static ANIM g_thisAnim[MAX_BG]; // used by BGmainProcess()
+static int g_BGspeed = 0;
+static SCNHANDLE g_hBackground = 0; // Current scene handle - stored in case of Save_Scene()
+static bool g_bDoFadeIn = false;
+static int g_bgReels;
/**
* GetBgObject
*/
OBJECT *GetBgObject() {
- return pBG[0];
+ return g_pBG[0];
}
/**
* BackPal
*/
SCNHANDLE BgPal() {
- return hBgPal;
+ return g_hBgPal;
}
/**
* SetDoFadeIn
*/
void SetDoFadeIn(bool tf) {
- bDoFadeIn = tf;
+ g_bDoFadeIn = tf;
}
/**
* Called before scene change.
*/
void DropBackground() {
- pBG[0] = NULL; // No background
+ g_pBG[0] = NULL; // No background
if (!TinselV2)
- hBgPal = 0; // No background palette
+ g_hBgPal = 0; // No background palette
}
/**
* Return the width of the current background.
*/
int BgWidth() {
- assert(pBG[0]);
- return MultiRightmost(pBG[0]) + 1;
+ assert(g_pBG[0]);
+ return MultiRightmost(g_pBG[0]) + 1;
}
/**
* Return the height of the current background.
*/
int BgHeight() {
- assert(pBG[0]);
- return MultiLowest(pBG[0]) + 1;
+ assert(g_pBG[0]);
+ return MultiLowest(g_pBG[0]) + 1;
}
/**
@@ -117,7 +117,7 @@ static void BGmainProcess(CORO_PARAM, const void *param) {
const MULTI_INIT *pmi;
// get the stuff copied to process when it was created
- if (pBG[0] == NULL) {
+ if (g_pBG[0] == NULL) {
/*** At start of scene ***/
if (!TinselV2) {
@@ -127,40 +127,40 @@ static void BGmainProcess(CORO_PARAM, const void *param) {
pmi = (const MULTI_INIT *)LockMem(FROM_LE_32(pReel->mobj));
// Initialize and insert the object, and initialize its script.
- pBG[0] = MultiInitObject(pmi);
- MultiInsertObject(GetPlayfieldList(FIELD_WORLD), pBG[0]);
- InitStepAnimScript(&thisAnim[0], pBG[0], FROM_LE_32(pReel->script), BGspeed);
- bgReels = 1;
+ g_pBG[0] = MultiInitObject(pmi);
+ MultiInsertObject(GetPlayfieldList(FIELD_WORLD), g_pBG[0]);
+ InitStepAnimScript(&g_thisAnim[0], g_pBG[0], FROM_LE_32(pReel->script), g_BGspeed);
+ g_bgReels = 1;
} else {
/*** At start of scene ***/
- pFilm = (const FILM *)LockMem(hBackground);
- bgReels = FROM_LE_32(pFilm->numreels);
+ pFilm = (const FILM *)LockMem(g_hBackground);
+ g_bgReels = FROM_LE_32(pFilm->numreels);
int i;
- for (i = 0; i < bgReels; i++) {
+ for (i = 0; i < g_bgReels; i++) {
// Get the MULTI_INIT structure
pmi = (PMULTI_INIT) LockMem(FROM_LE_32(pFilm->reels[i].mobj));
// Initialize and insert the object, and initialize its script.
- pBG[i] = MultiInitObject(pmi);
- MultiInsertObject(GetPlayfieldList(FIELD_WORLD), pBG[i]);
- MultiSetZPosition(pBG[i], 0);
- InitStepAnimScript(&thisAnim[i], pBG[i], FROM_LE_32(pFilm->reels[i].script), BGspeed);
+ g_pBG[i] = MultiInitObject(pmi);
+ MultiInsertObject(GetPlayfieldList(FIELD_WORLD), g_pBG[i]);
+ MultiSetZPosition(g_pBG[i], 0);
+ InitStepAnimScript(&g_thisAnim[i], g_pBG[i], FROM_LE_32(pFilm->reels[i].script), g_BGspeed);
if (i > 0)
- pBG[i-1]->pSlave = pBG[i];
+ g_pBG[i-1]->pSlave = g_pBG[i];
}
}
- if (bDoFadeIn) {
+ if (g_bDoFadeIn) {
FadeInFast(NULL);
- bDoFadeIn = false;
+ g_bDoFadeIn = false;
} else if (TinselV2)
PokeInTagColor();
for (;;) {
- for (int i = 0; i < bgReels; i++) {
- if (StepAnimScript(&thisAnim[i]) == ScriptFinished)
+ for (int i = 0; i < g_bgReels; i++) {
+ if (StepAnimScript(&g_thisAnim[i]) == ScriptFinished)
error("Background animation has finished");
}
@@ -170,16 +170,16 @@ static void BGmainProcess(CORO_PARAM, const void *param) {
// New background during scene
if (!TinselV2) {
pReel = (const FREEL *)param;
- InitStepAnimScript(&thisAnim[0], pBG[0], FROM_LE_32(pReel->script), BGspeed);
- StepAnimScript(&thisAnim[0]);
+ InitStepAnimScript(&g_thisAnim[0], g_pBG[0], FROM_LE_32(pReel->script), g_BGspeed);
+ StepAnimScript(&g_thisAnim[0]);
} else {
- pFilm = (const FILM *)LockMem(hBackground);
- assert(bgReels == (int32)FROM_LE_32(pFilm->numreels));
+ pFilm = (const FILM *)LockMem(g_hBackground);
+ assert(g_bgReels == (int32)FROM_LE_32(pFilm->numreels));
// Just re-initialize the scripts.
- for (int i = 0; i < bgReels; i++) {
- InitStepAnimScript(&thisAnim[i], pBG[i], pFilm->reels[i].script, BGspeed);
- StepAnimScript(&thisAnim[i]);
+ for (int i = 0; i < g_bgReels; i++) {
+ InitStepAnimScript(&g_thisAnim[i], g_pBG[i], pFilm->reels[i].script, g_BGspeed);
+ StepAnimScript(&g_thisAnim[i]);
}
}
}
@@ -206,7 +206,7 @@ static void BGotherProcess(CORO_PARAM, const void *param) {
_ctx->pObj = MultiInitObject(pmi);
MultiInsertObject(GetPlayfieldList(FIELD_WORLD), _ctx->pObj);
- InitStepAnimScript(&_ctx->anim, pBG[0], FROM_LE_32(pReel->script), BGspeed);
+ InitStepAnimScript(&_ctx->anim, g_pBG[0], FROM_LE_32(pReel->script), g_BGspeed);
while (StepAnimScript(&_ctx->anim) != ScriptFinished)
CORO_SLEEP(1);
@@ -218,14 +218,14 @@ static void BGotherProcess(CORO_PARAM, const void *param) {
* AetBgPal()
*/
void SetBackPal(SCNHANDLE hPal) {
- hBgPal = hPal;
+ g_hBgPal = hPal;
- FettleFontPal(hBgPal);
- CreateTranslucentPalette(hBgPal);
+ FettleFontPal(g_hBgPal);
+ CreateTranslucentPalette(g_hBgPal);
}
void ChangePalette(SCNHANDLE hPal) {
- SwapPalette(FindPalette(hBgPal), hPal);
+ SwapPalette(FindPalette(g_hBgPal), hPal);
SetBackPal(hPal);
}
@@ -245,14 +245,14 @@ void StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
const FILM *pfilm;
IMAGE *pim;
- hBackground = hFilm; // Save handle in case of Save_Scene()
+ g_hBackground = hFilm; // Save handle in case of Save_Scene()
pim = GetImageFromFilm(hFilm, 0, NULL, NULL, &pfilm);
SetBackPal(FROM_LE_32(pim->hImgPal));
// Extract the film speed
- BGspeed = ONE_SECOND / FROM_LE_32(pfilm->frate);
+ g_BGspeed = ONE_SECOND / FROM_LE_32(pfilm->frate);
// Start display process for each reel in the film
g_scheduler->createProcess(PID_REEL, BGmainProcess, &pfilm->reels[0], sizeof(FREEL));
@@ -262,7 +262,7 @@ void StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
g_scheduler->createProcess(PID_REEL, BGotherProcess, &pfilm->reels[i], sizeof(FREEL));
}
- if (pBG[0] == NULL)
+ if (g_pBG[0] == NULL)
ControlStartOff();
if (TinselV2 && (coroParam != nullContext))
@@ -275,7 +275,7 @@ void StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
* Return the current scene handle.
*/
SCNHANDLE GetBgroundHandle() {
- return hBackground;
+ return g_hBackground;
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/cursor.cpp b/engines/tinsel/cursor.cpp
index 8248609a81..bf901c03b6 100644
--- a/engines/tinsel/cursor.cpp
+++ b/engines/tinsel/cursor.cpp
@@ -56,36 +56,36 @@ namespace Tinsel {
// FIXME: Avoid non-const global vars
-static OBJECT *McurObj = NULL; // Main cursor object
-static OBJECT *AcurObj = NULL; // Auxiliary cursor object
+static OBJECT *g_McurObj = NULL; // Main cursor object
+static OBJECT *g_AcurObj = NULL; // Auxiliary cursor object
-static ANIM McurAnim = {0,0,0,0,0}; // Main cursor animation structure
-static ANIM AcurAnim = {0,0,0,0,0}; // Auxiliary cursor animation structure
+static ANIM g_McurAnim = {0,0,0,0,0}; // Main cursor animation structure
+static ANIM g_AcurAnim = {0,0,0,0,0}; // Auxiliary cursor animation structure
-static bool bHiddenCursor = false; // Set when cursor is hidden
-static bool bTempNoTrailers = false; // Set when cursor trails are hidden
-static bool bTempHide = false; // Set when cursor is hidden
+static bool g_bHiddenCursor = false; // Set when cursor is hidden
+static bool g_bTempNoTrailers = false; // Set when cursor trails are hidden
+static bool g_bTempHide = false; // Set when cursor is hidden
-static bool bFrozenCursor = false; // Set when cursor position is frozen
+static bool g_bFrozenCursor = false; // Set when cursor position is frozen
-static frac_t IterationSize = 0;
+static frac_t g_IterationSize = 0;
-static SCNHANDLE hCursorFilm = 0; // Handle to cursor reel data
+static SCNHANDLE g_hCursorFilm = 0; // Handle to cursor reel data
-static int numTrails = 0;
-static int nextTrail = 0;
+static int g_numTrails = 0;
+static int g_nextTrail = 0;
-static bool bWhoa = false; // Set by DropCursor() at the end of a scene
+static bool g_bWhoa = false; // Set by DropCursor() at the end of a scene
// - causes cursor processes to do nothing
// Reset when main cursor has re-initialized
-static uint16 restart = 0; // When main cursor has been bWhoa-ed, it waits
+static uint16 g_restart = 0; // When main cursor has been bWhoa-ed, it waits
// for this to be set to 0x8000.
// Main cursor sets all the bits after a re-start
// - each cursor trail examines it's own bit
// to trigger a trail restart.
-static short ACoX = 0, ACoY = 0; // Auxillary cursor image's animation offsets
+static short g_ACoX = 0, g_ACoY = 0; // Auxillary cursor image's animation offsets
@@ -96,9 +96,9 @@ static struct {
ANIM trailAnim; // Animation structure
OBJECT *trailObj; // This trailer's object
-} ntrailData [MAX_TRAILERS];
+} g_ntrailData [MAX_TRAILERS];
-static int lastCursorX = 0, lastCursorY = 0;
+static int g_lastCursorX = 0, g_lastCursorY = 0;
//----------------- FORWARD REFERENCES --------------------
@@ -116,26 +116,26 @@ static void InitCurTrailObj(int i, int x, int y) {
const FILM *pfilm;
- if (!numTrails)
+ if (!g_numTrails)
return;
// Get rid of old object
- if (ntrailData[i].trailObj != NULL)
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), ntrailData[i].trailObj);
+ if (g_ntrailData[i].trailObj != NULL)
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
- pim = GetImageFromFilm(hCursorFilm, i+1, &pfr, &pmi, &pfilm);// Get pointer to image
+ pim = GetImageFromFilm(g_hCursorFilm, i+1, &pfr, &pmi, &pfilm);// Get pointer to image
assert(BgPal()); // No background palette
pim->hImgPal = TO_LE_32(BgPal());
// Initialize and insert the object, set its Z-pos, and hide it
- ntrailData[i].trailObj = MultiInitObject(pmi);
- MultiInsertObject(GetPlayfieldList(FIELD_STATUS), ntrailData[i].trailObj);
- MultiSetZPosition(ntrailData[i].trailObj, Z_CURSORTRAIL);
- MultiSetAniXY(ntrailData[i].trailObj, x, y);
+ g_ntrailData[i].trailObj = MultiInitObject(pmi);
+ MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
+ MultiSetZPosition(g_ntrailData[i].trailObj, Z_CURSORTRAIL);
+ MultiSetAniXY(g_ntrailData[i].trailObj, x, y);
// Initialize the animation script
- InitStepAnimScript(&ntrailData[i].trailAnim, ntrailData[i].trailObj, FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pfilm->frate));
- StepAnimScript(&ntrailData[i].trailAnim);
+ InitStepAnimScript(&g_ntrailData[i].trailAnim, g_ntrailData[i].trailObj, FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pfilm->frate));
+ StepAnimScript(&g_ntrailData[i].trailAnim);
}
/**
@@ -196,12 +196,12 @@ void SetCursorScreenXY(int newx, int newy) {
* Returns false if there is no cursor object.
*/
bool GetCursorXYNoWait(int *x, int *y, bool absolute) {
- if (McurObj == NULL) {
+ if (g_McurObj == NULL) {
*x = *y = 0;
return false;
}
- GetAniPosition(McurObj, x, y);
+ GetAniPosition(g_McurObj, x, y);
if (absolute) {
int Loffset, Toffset; // Screen offset
@@ -222,7 +222,7 @@ bool GetCursorXYNoWait(int *x, int *y, bool absolute) {
void GetCursorXY(int *x, int *y, bool absolute) {
//while (McurObj == NULL)
// ProcessSleepSelf();
- assert(McurObj);
+ assert(g_McurObj);
GetCursorXYNoWait(x, y, absolute);
}
@@ -234,22 +234,22 @@ void GetCursorXY(int *x, int *y, bool absolute) {
void RestoreMainCursor() {
const FILM *pfilm;
- if (McurObj != NULL) {
- pfilm = (const FILM *)LockMem(hCursorFilm);
+ if (g_McurObj != NULL) {
+ pfilm = (const FILM *)LockMem(g_hCursorFilm);
- InitStepAnimScript(&McurAnim, McurObj, FROM_LE_32(pfilm->reels->script), ONE_SECOND / FROM_LE_32(pfilm->frate));
- StepAnimScript(&McurAnim);
+ InitStepAnimScript(&g_McurAnim, g_McurObj, FROM_LE_32(pfilm->reels->script), ONE_SECOND / FROM_LE_32(pfilm->frate));
+ StepAnimScript(&g_McurAnim);
}
- bHiddenCursor = false;
- bFrozenCursor = false;
+ g_bHiddenCursor = false;
+ g_bFrozenCursor = false;
}
/**
* Called from INVENTRY.C to customise the main cursor.
*/
void SetTempCursor(SCNHANDLE pScript) {
- if (McurObj != NULL)
- InitStepAnimScript(&McurAnim, McurObj, pScript, 2);
+ if (g_McurObj != NULL)
+ InitStepAnimScript(&g_McurAnim, g_McurObj, pScript, 2);
}
/**
@@ -258,17 +258,17 @@ void SetTempCursor(SCNHANDLE pScript) {
void DwHideCursor() {
int i;
- bHiddenCursor = true;
+ g_bHiddenCursor = true;
- if (McurObj)
- MultiHideObject(McurObj);
- if (AcurObj)
- MultiHideObject(AcurObj);
+ if (g_McurObj)
+ MultiHideObject(g_McurObj);
+ if (g_AcurObj)
+ MultiHideObject(g_AcurObj);
- for (i = 0; i < numTrails; i++) {
- if (ntrailData[i].trailObj != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), ntrailData[i].trailObj);
- ntrailData[i].trailObj = NULL;
+ for (i = 0; i < g_numTrails; i++) {
+ if (g_ntrailData[i].trailObj != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
+ g_ntrailData[i].trailObj = NULL;
}
}
}
@@ -277,21 +277,21 @@ void DwHideCursor() {
* Unhide the cursor.
*/
void UnHideCursor() {
- bHiddenCursor = false;
+ g_bHiddenCursor = false;
}
/**
* Freeze the cursor.
*/
void FreezeCursor() {
- bFrozenCursor = true;
+ g_bFrozenCursor = true;
}
/**
* Freeze the cursor, or not.
*/
void DoFreezeCursor(bool bFreeze) {
- bFrozenCursor = bFreeze;
+ g_bFrozenCursor = bFreeze;
}
/**
@@ -300,12 +300,12 @@ void DoFreezeCursor(bool bFreeze) {
void HideCursorTrails() {
int i;
- bTempNoTrailers = true;
+ g_bTempNoTrailers = true;
- for (i = 0; i < numTrails; i++) {
- if (ntrailData[i].trailObj != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), ntrailData[i].trailObj);
- ntrailData[i].trailObj = NULL;
+ for (i = 0; i < g_numTrails; i++) {
+ if (g_ntrailData[i].trailObj != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
+ g_ntrailData[i].trailObj = NULL;
}
}
}
@@ -314,7 +314,7 @@ void HideCursorTrails() {
* UnHideCursorTrails
*/
void UnHideCursorTrails() {
- bTempNoTrailers = false;
+ g_bTempNoTrailers = false;
}
/**
@@ -356,9 +356,9 @@ IMAGE *GetImageFromFilm(SCNHANDLE hFilm, int reel, const FREEL **ppfr, const MUL
* Delete auxillary cursor. Restore animation offsets in the image.
*/
void DelAuxCursor() {
- if (AcurObj != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), AcurObj);
- AcurObj = NULL;
+ if (g_AcurObj != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_AcurObj);
+ g_AcurObj = NULL;
}
}
@@ -381,21 +381,21 @@ void SetAuxCursor(SCNHANDLE hFilm) {
assert(BgPal()); // no background palette
pim->hImgPal = TO_LE_32(BgPal()); // Poke in the background palette
- ACoX = (short)(FROM_LE_16(pim->imgWidth)/2 - ((int16) FROM_LE_16(pim->anioffX)));
- ACoY = (short)((FROM_LE_16(pim->imgHeight) & ~C16_FLAG_MASK)/2 -
+ g_ACoX = (short)(FROM_LE_16(pim->imgWidth)/2 - ((int16) FROM_LE_16(pim->anioffX)));
+ g_ACoY = (short)((FROM_LE_16(pim->imgHeight) & ~C16_FLAG_MASK)/2 -
((int16) FROM_LE_16(pim->anioffY)));
// Initialize and insert the auxillary cursor object
- AcurObj = MultiInitObject(pmi);
- MultiInsertObject(GetPlayfieldList(FIELD_STATUS), AcurObj);
+ g_AcurObj = MultiInitObject(pmi);
+ MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_AcurObj);
// Initialize the animation and set its position
- InitStepAnimScript(&AcurAnim, AcurObj, FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pfilm->frate));
- MultiSetAniXY(AcurObj, x - ACoX, y - ACoY);
- MultiSetZPosition(AcurObj, Z_ACURSOR);
+ InitStepAnimScript(&g_AcurAnim, g_AcurObj, FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pfilm->frate));
+ MultiSetAniXY(g_AcurObj, x - g_ACoX, y - g_ACoY);
+ MultiSetZPosition(g_AcurObj, Z_ACURSOR);
- if (bHiddenCursor)
- MultiHideObject(AcurObj);
+ if (g_bHiddenCursor)
+ MultiHideObject(g_AcurObj);
}
/**
@@ -421,52 +421,52 @@ static void DoCursorMove() {
dir = _vm->getKeyDirection();
if (dir != 0) {
if (dir & MSK_LEFT)
- newX -= IterationSize;
+ newX -= g_IterationSize;
if (dir & MSK_RIGHT)
- newX += IterationSize;
+ newX += g_IterationSize;
if (dir & MSK_UP)
- newY -= IterationSize;
+ newY -= g_IterationSize;
if (dir & MSK_DOWN)
- newY += IterationSize;
+ newY += g_IterationSize;
- IterationSize += ITER_ACCELERATION;
+ g_IterationSize += ITER_ACCELERATION;
// set new mouse driver position
_vm->setMousePosition(Common::Point(fracToInt(newX), fracToInt(newY)));
} else
- IterationSize = ITERATION_BASE;
+ g_IterationSize = ITERATION_BASE;
// get new mouse driver position - could have been modified
ptMouse = _vm->getMousePosition();
- if (lastCursorX != ptMouse.x || lastCursorY != ptMouse.y) {
+ if (g_lastCursorX != ptMouse.x || g_lastCursorY != ptMouse.y) {
resetUserEventTime();
- if (!bTempNoTrailers && !bHiddenCursor) {
- InitCurTrailObj(nextTrail++, lastCursorX, lastCursorY);
- if (nextTrail == numTrails)
- nextTrail = 0;
+ if (!g_bTempNoTrailers && !g_bHiddenCursor) {
+ InitCurTrailObj(g_nextTrail++, g_lastCursorX, g_lastCursorY);
+ if (g_nextTrail == g_numTrails)
+ g_nextTrail = 0;
}
}
// adjust cursor to new mouse position
- if (McurObj)
- MultiSetAniXY(McurObj, ptMouse.x, ptMouse.y);
- if (AcurObj != NULL)
- MultiSetAniXY(AcurObj, ptMouse.x - ACoX, ptMouse.y - ACoY);
+ if (g_McurObj)
+ MultiSetAniXY(g_McurObj, ptMouse.x, ptMouse.y);
+ if (g_AcurObj != NULL)
+ MultiSetAniXY(g_AcurObj, ptMouse.x - g_ACoX, ptMouse.y - g_ACoY);
- if (InventoryActive() && McurObj) {
+ if (InventoryActive() && g_McurObj) {
// Notify the inventory
Xmovement(ptMouse.x - startX);
Ymovement(ptMouse.y - startY);
}
- lastCursorX = ptMouse.x;
- lastCursorY = ptMouse.y;
+ g_lastCursorX = ptMouse.x;
+ g_lastCursorY = ptMouse.y;
}
/**
@@ -479,7 +479,7 @@ static void InitCurObj() {
IMAGE *pim;
if (TinselV2) {
- pFilm = (const FILM *)LockMem(hCursorFilm);
+ pFilm = (const FILM *)LockMem(g_hCursorFilm);
pfr = (const FREEL *)&pFilm->reels[0];
pmi = (MULTI_INIT *)LockMem(FROM_LE_32(pfr->mobj));
@@ -487,16 +487,16 @@ static void InitCurObj() {
} else {
assert(BgPal()); // no background palette
- pim = GetImageFromFilm(hCursorFilm, 0, &pfr, &pmi, &pFilm);// Get pointer to image
+ pim = GetImageFromFilm(g_hCursorFilm, 0, &pfr, &pmi, &pFilm);// Get pointer to image
pim->hImgPal = TO_LE_32(BgPal());
- AcurObj = NULL; // No auxillary cursor
+ g_AcurObj = NULL; // No auxillary cursor
}
- McurObj = MultiInitObject(pmi);
- MultiInsertObject(GetPlayfieldList(FIELD_STATUS), McurObj);
+ g_McurObj = MultiInitObject(pmi);
+ MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_McurObj);
- InitStepAnimScript(&McurAnim, McurObj, FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pFilm->frate));
+ InitStepAnimScript(&g_McurAnim, g_McurObj, FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pFilm->frate));
}
/**
@@ -504,14 +504,14 @@ static void InitCurObj() {
*/
static void InitCurPos() {
Common::Point ptMouse = _vm->getMousePosition();
- lastCursorX = ptMouse.x;
- lastCursorY = ptMouse.y;
+ g_lastCursorX = ptMouse.x;
+ g_lastCursorY = ptMouse.y;
- MultiSetZPosition(McurObj, Z_CURSOR);
+ MultiSetZPosition(g_McurObj, Z_CURSOR);
DoCursorMove();
- MultiHideObject(McurObj);
+ MultiHideObject(g_McurObj);
- IterationSize = ITERATION_BASE;
+ g_IterationSize = ITERATION_BASE;
}
/**
@@ -525,9 +525,9 @@ static void CursorStoppedCheck(CORO_PARAM) {
CORO_BEGIN_CODE(_ctx);
// If scene is closing down
- if (bWhoa) {
+ if (g_bWhoa) {
// ...wait for next scene start-up
- while (restart != 0x8000)
+ while (g_restart != 0x8000)
CORO_SLEEP(1);
// Re-initialize
@@ -536,8 +536,8 @@ static void CursorStoppedCheck(CORO_PARAM) {
InventoryIconCursor(false); // May be holding something
// Re-start the cursor trails
- restart = (uint16)-1; // set all bits
- bWhoa = false;
+ g_restart = (uint16)-1; // set all bits
+ g_bWhoa = false;
}
CORO_END_CODE;
}
@@ -552,15 +552,15 @@ void CursorProcess(CORO_PARAM, const void *) {
CORO_BEGIN_CODE(_ctx);
- while (!hCursorFilm || !BgPal())
+ while (!g_hCursorFilm || !BgPal())
CORO_SLEEP(1);
InitCurObj();
InitCurPos();
InventoryIconCursor(false); // May be holding something
- bWhoa = false;
- restart = 0;
+ g_bWhoa = false;
+ g_restart = 0;
while (1) {
// allow rescheduling
@@ -570,36 +570,36 @@ void CursorProcess(CORO_PARAM, const void *) {
CORO_INVOKE_0(CursorStoppedCheck);
// Step the animation script(s)
- StepAnimScript(&McurAnim);
- if (AcurObj != NULL)
- StepAnimScript(&AcurAnim);
- for (int i = 0; i < numTrails; i++) {
- if (ntrailData[i].trailObj != NULL) {
- if (StepAnimScript(&ntrailData[i].trailAnim) == ScriptFinished) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), ntrailData[i].trailObj);
- ntrailData[i].trailObj = NULL;
+ StepAnimScript(&g_McurAnim);
+ if (g_AcurObj != NULL)
+ StepAnimScript(&g_AcurAnim);
+ for (int i = 0; i < g_numTrails; i++) {
+ if (g_ntrailData[i].trailObj != NULL) {
+ if (StepAnimScript(&g_ntrailData[i].trailAnim) == ScriptFinished) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
+ g_ntrailData[i].trailObj = NULL;
}
}
}
// Move the cursor as appropriate
- if (!bFrozenCursor)
+ if (!g_bFrozenCursor)
DoCursorMove();
// If the cursor should be hidden...
- if (bHiddenCursor || bTempHide) {
+ if (g_bHiddenCursor || g_bTempHide) {
// ...hide the cursor object(s)
- MultiHideObject(McurObj);
- if (AcurObj)
- MultiHideObject(AcurObj);
+ MultiHideObject(g_McurObj);
+ if (g_AcurObj)
+ MultiHideObject(g_AcurObj);
- for (int i = 0; i < numTrails; i++) {
- if (ntrailData[i].trailObj != NULL)
- MultiHideObject(ntrailData[i].trailObj);
+ for (int i = 0; i < g_numTrails; i++) {
+ if (g_ntrailData[i].trailObj != NULL)
+ MultiHideObject(g_ntrailData[i].trailObj);
}
// Wait 'til cursor is again required.
- while (bHiddenCursor) {
+ while (g_bHiddenCursor) {
CORO_SLEEP(1);
// Stop/start between scenes
@@ -617,12 +617,12 @@ void CursorProcess(CORO_PARAM, const void *) {
void DwInitCursor(SCNHANDLE bfilm) {
const FILM *pfilm;
- hCursorFilm = bfilm;
+ g_hCursorFilm = bfilm;
- pfilm = (const FILM *)LockMem(hCursorFilm);
- numTrails = FROM_LE_32(pfilm->numreels) - 1;
+ pfilm = (const FILM *)LockMem(g_hCursorFilm);
+ g_numTrails = FROM_LE_32(pfilm->numreels) - 1;
- assert(numTrails <= MAX_TRAILERS);
+ assert(g_numTrails <= MAX_TRAILERS);
}
/**
@@ -630,24 +630,24 @@ void DwInitCursor(SCNHANDLE bfilm) {
*/
void DropCursor() {
if (TinselV2) {
- if (AcurObj)
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), AcurObj);
- if (McurObj)
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), McurObj);
+ if (g_AcurObj)
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_AcurObj);
+ if (g_McurObj)
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_McurObj);
- restart = 0;
+ g_restart = 0;
}
- AcurObj = NULL; // No auxillary cursor
- McurObj = NULL; // No cursor object (imminently deleted elsewhere)
- bHiddenCursor = false; // Not hidden in next scene
- bTempNoTrailers = false; // Trailers not hidden in next scene
- bWhoa = true; // Suspend cursor processes
+ g_AcurObj = NULL; // No auxillary cursor
+ g_McurObj = NULL; // No cursor object (imminently deleted elsewhere)
+ g_bHiddenCursor = false; // Not hidden in next scene
+ g_bTempNoTrailers = false; // Trailers not hidden in next scene
+ g_bWhoa = true; // Suspend cursor processes
- for (int i = 0; i < numTrails; i++) {
- if (ntrailData[i].trailObj != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), ntrailData[i].trailObj);
- ntrailData[i].trailObj = NULL;
+ for (int i = 0; i < g_numTrails; i++) {
+ if (g_ntrailData[i].trailObj != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
+ g_ntrailData[i].trailObj = NULL;
}
}
}
@@ -656,7 +656,7 @@ void DropCursor() {
* RestartCursor is called when a new scene is starting up.
*/
void RestartCursor() {
- restart = 0x8000; // Get the main cursor to re-initialize
+ g_restart = 0x8000; // Get the main cursor to re-initialize
}
/**
@@ -664,32 +664,32 @@ void RestartCursor() {
* pointers etc.
*/
void RebootCursor() {
- McurObj = AcurObj = NULL;
+ g_McurObj = g_AcurObj = NULL;
for (int i = 0; i < MAX_TRAILERS; i++)
- ntrailData[i].trailObj = NULL;
+ g_ntrailData[i].trailObj = NULL;
- bHiddenCursor = bTempNoTrailers = bFrozenCursor = false;
+ g_bHiddenCursor = g_bTempNoTrailers = g_bFrozenCursor = false;
- hCursorFilm = 0;
+ g_hCursorFilm = 0;
- bWhoa = false;
- restart = 0;
+ g_bWhoa = false;
+ g_restart = 0;
}
void StartCursorFollowed() {
DelAuxCursor();
if (!SysVar(SV_ENABLEPRINTCURSOR))
- bTempHide = true;
+ g_bTempHide = true;
}
void EndCursorFollowed() {
InventoryIconCursor(false); // May be holding something
- bTempHide = false;
+ g_bTempHide = false;
}
bool isCursorShown() {
- return !(bTempHide || bHiddenCursor);
+ return !(g_bTempHide || g_bHiddenCursor);
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/dialogs.cpp b/engines/tinsel/dialogs.cpp
index 6ca070b67a..5396e47566 100644
--- a/engines/tinsel/dialogs.cpp
+++ b/engines/tinsel/dialogs.cpp
@@ -63,17 +63,6 @@
namespace Tinsel {
-//----------------- EXTERNAL GLOBAL DATA --------------------
-
-// In DOS_DW.C
-extern bool bRestart; // restart flag - set to restart the game
-
-#ifdef MAC_OPTIONS
-// In MAC_SOUND.C
-extern int volMaster;
-#endif
-
-
//----------------- LOCAL DEFINES --------------------
#define HOPPER_FILENAME "hopper"
@@ -312,23 +301,23 @@ static const int vFillers[MAXVICONS] = {
//----- Permanent data (set once) -----
-static SCNHANDLE hWinParts = 0; // Window members and cursors' graphic data
-static SCNHANDLE flagFilm = 0; // Window members and cursors' graphic data
-static SCNHANDLE configStrings[20];
+static SCNHANDLE g_hWinParts = 0; // Window members and cursors' graphic data
+static SCNHANDLE g_flagFilm = 0; // Window members and cursors' graphic data
+static SCNHANDLE g_configStrings[20];
-static INV_OBJECT *invObjects = NULL; // Inventory objects' data
-static int numObjects = 0; // Number of inventory objects
-static SCNHANDLE *invFilms = NULL;
-static bool bNoLanguage = false;
-static DIRECTION initialDirection;
+static INV_OBJECT *g_invObjects = NULL; // Inventory objects' data
+static int g_numObjects = 0; // Number of inventory objects
+static SCNHANDLE *g_invFilms = NULL;
+static bool g_bNoLanguage = false;
+static DIRECTION g_initialDirection;
//----- Permanent data (updated, valid while inventory closed) -----
-static enum {NO_INV, IDLE_INV, ACTIVE_INV, BOGUS_INV} InventoryState;
+static enum {NO_INV, IDLE_INV, ACTIVE_INV, BOGUS_INV} g_InventoryState;
-static int HeldItem = INV_NOICON; // Current held item
+static int g_heldItem = INV_NOICON; // Current held item
-static SCNHANDLE heldFilm;
+static SCNHANDLE g_heldFilm;
struct INV_DEF {
@@ -364,60 +353,60 @@ struct INV_DEF {
};
-static INV_DEF InvD[NUM_INV]; // Conversation + 2 inventories + ...
+static INV_DEF g_InvD[NUM_INV]; // Conversation + 2 inventories + ...
// Permanent contents of conversation inventory
-static int permIcons[MAX_PERMICONS]; // Basic items i.e. permanent contents
-static int numPermIcons = 0; // - copy to conv. inventory at pop-up time
-static int numEndIcons = 0;
+static int g_permIcons[MAX_PERMICONS]; // Basic items i.e. permanent contents
+static int g_numPermIcons = 0; // - copy to conv. inventory at pop-up time
+static int g_numEndIcons = 0;
//----- Data pertinant to current active inventory -----
-static int ino = 0; // Which inventory is currently active
+static int g_ino = 0; // Which inventory is currently active
-static bool InventoryHidden = false;
-static bool InventoryMaximised = false;
+static bool g_InventoryHidden = false;
+static bool g_InventoryMaximised = false;
static enum { ID_NONE, ID_MOVE, ID_SLIDE,
ID_BOTTOM, ID_TOP, ID_LEFT, ID_RIGHT,
ID_TLEFT, ID_TRIGHT, ID_BLEFT, ID_BRIGHT,
- ID_CSLIDE, ID_MDCONT } InvDragging;
+ ID_CSLIDE, ID_MDCONT } g_InvDragging;
-static int SuppH = 0; // 'Linear' element of
-static int SuppV = 0; // dimensions during re-sizing
+static int g_SuppH = 0; // 'Linear' element of
+static int g_SuppV = 0; // dimensions during re-sizing
-static int Ychange = 0; //
-static int Ycompensate = 0; // All to do with re-sizing.
-static int Xchange = 0; //
-static int Xcompensate = 0; //
+static int g_Ychange = 0; //
+static int g_Ycompensate = 0; // All to do with re-sizing.
+static int g_Xchange = 0; //
+static int g_Xcompensate = 0; //
-static bool ItemsChanged = 0; // When set, causes items to be re-drawn
+static bool g_ItemsChanged = 0; // When set, causes items to be re-drawn
-static bool bReOpenMenu = 0;
+static bool g_bReOpenMenu = 0;
-static int TL = 0, TR = 0, BL = 0, BR = 0; // Used during window construction
-static int TLwidth = 0, TLheight = 0; //
-static int TRwidth = 0; //
-static int BLheight = 0; //
+static int g_TL = 0, g_TR = 0, g_BL = 0, g_BR = 0; // Used during window construction
+static int g_TLwidth = 0, g_TLheight = 0; //
+static int g_TRwidth = 0; //
+static int g_BLheight = 0; //
-static LANGUAGE displayedLanguage;
+static LANGUAGE g_displayedLanguage;
-static OBJECT *objArray[MAX_WCOMP]; // Current display objects (window)
-static OBJECT *iconArray[MAX_ICONS]; // Current display objects (icons)
-static ANIM iconAnims[MAX_ICONS];
-static OBJECT *DobjArray[MAX_WCOMP]; // Current display objects (re-sizing window)
+static OBJECT *g_objArray[MAX_WCOMP]; // Current display objects (window)
+static OBJECT *g_iconArray[MAX_ICONS]; // Current display objects (icons)
+static ANIM g_iconAnims[MAX_ICONS];
+static OBJECT *g_DobjArray[MAX_WCOMP]; // Current display objects (re-sizing window)
-static OBJECT *RectObject = 0, *SlideObject = 0; // Current display objects, for reference
+static OBJECT *g_RectObject = 0, *g_SlideObject = 0; // Current display objects, for reference
// objects are in objArray.
-static int sliderYpos = 0; // For positioning the slider
-static int sliderYmax = 0, sliderYmin = 0; //
+static int g_sliderYpos = 0; // For positioning the slider
+static int g_sliderYmax = 0, g_sliderYmin = 0; //
-#define sliderRange (sliderYmax - sliderYmin)
+#define sliderRange (g_sliderYmax - g_sliderYmin)
// Also to do with the slider
-static struct { int n; int y; } slideStuff[MAX_ININV_TOT+1];
+static struct { int n; int y; } g_slideStuff[MAX_ININV_TOT+1];
#define MAXSLIDES 4
struct MDSLIDES {
@@ -425,25 +414,25 @@ struct MDSLIDES {
OBJECT *obj;
int min, max;
};
-static MDSLIDES mdSlides[MAXSLIDES];
-static int numMdSlides = 0;
+static MDSLIDES g_mdSlides[MAXSLIDES];
+static int g_numMdSlides = 0;
-static int GlitterIndex = 0;
+static int g_GlitterIndex = 0;
// Icon clicked on to cause an event
// - Passed to conversation polygon or actor code via Topic()
// - (sometimes) Passed to inventory icon code via OtherObject()
-static int thisIcon = 0;
+static int g_thisIcon = 0;
-static CONV_PARAM thisConvFn; // Top, 'Middle' or Bottom
-static HPOLYGON thisConvPoly = 0; // Conversation code is in a polygon code block
-static int thisConvActor; // ...or an actor's code block.
-static int pointedIcon = INV_NOICON; // used by InvLabels - icon pointed to on last call
-static volatile int PointedWaitCount = 0; // used by ObjectProcess - fix the 'repeated pressing bug'
-static int sX = 0; // used by SlideMSlider() - current x-coordinate
-static int lX = 0; // used by SlideMSlider() - last x-coordinate
+static CONV_PARAM g_thisConvFn; // Top, 'Middle' or Bottom
+static HPOLYGON g_thisConvPoly = 0; // Conversation code is in a polygon code block
+static int g_thisConvActor; // ...or an actor's code block.
+static int g_pointedIcon = INV_NOICON; // used by InvLabels - icon pointed to on last call
+static volatile int g_PointedWaitCount = 0; // used by ObjectProcess - fix the 'repeated pressing bug'
+static int g_sX = 0; // used by SlideMSlider() - current x-coordinate
+static int g_lX = 0; // used by SlideMSlider() - last x-coordinate
-static bool bMoveOnUnHide; // Set before start of conversation
+static bool g_bMoveOnUnHide; // Set before start of conversation
// - causes conversation to be started in a sensible place
//----- Data pertinant to configure (incl. load/save game) -----
@@ -486,16 +475,16 @@ typedef HOPENTRY *PHOPENTRY;
#include "common/pack-end.h" // END STRUCT PACKING
-static PHOPPER pHopper;
-static PHOPENTRY pEntries;
-static int numScenes;
+static PHOPPER g_pHopper;
+static PHOPENTRY g_pEntries;
+static int g_numScenes;
-static int numEntries;
+static int g_numEntries;
-static PHOPPER pChosenScene = NULL;
+static PHOPPER g_pChosenScene = NULL;
-static int lastChosenScene;
-static bool bRemember;
+static int g_lastChosenScene;
+static bool g_bRemember;
//--------------------------------------------------------------
@@ -970,7 +959,7 @@ static struct {
};
// For editing save game names
-static char sedit[SG_DESC_LEN+2];
+static char g_sedit[SG_DESC_LEN+2];
#define HL1 0 // Hilight that moves with the cursor
#define HL2 1 // Hilight on selected RGROUP box
@@ -1096,7 +1085,7 @@ static void PrimeSceneHopper() {
vSize = f.readUint32LE();
// allocate a buffer for it all
- assert(pHopper == NULL);
+ assert(g_pHopper == NULL);
uint32 size = f.size() - 8;
// make sure memory allocated
@@ -1111,9 +1100,9 @@ static void PrimeSceneHopper() {
error(FILE_IS_CORRUPT, HOPPER_FILENAME);
// Set data pointers
- pHopper = (PHOPPER)pBuffer;
- pEntries = (PHOPENTRY)(pBuffer + vSize);
- numScenes = vSize / sizeof(HOPPER);
+ g_pHopper = (PHOPPER)pBuffer;
+ g_pEntries = (PHOPENTRY)(pBuffer + vSize);
+ g_numScenes = vSize / sizeof(HOPPER);
// close the file
f.close();
@@ -1123,31 +1112,31 @@ static void PrimeSceneHopper() {
* Free the scene hopper data file
*/
static void FreeSceneHopper() {
- free(pHopper);
- pHopper = NULL;
+ free(g_pHopper);
+ g_pHopper = NULL;
}
static void FirstScene(int first) {
int i;
- assert(numScenes && pHopper);
+ assert(g_numScenes && g_pHopper);
- if (bRemember) {
+ if (g_bRemember) {
assert(first == 0);
- first = lastChosenScene;
- bRemember = false;
+ first = g_lastChosenScene;
+ g_bRemember = false;
}
// Force it to a sensible value
- if (first > numScenes - NUM_RGROUP_BOXES)
- first = numScenes - NUM_RGROUP_BOXES;
+ if (first > g_numScenes - NUM_RGROUP_BOXES)
+ first = g_numScenes - NUM_RGROUP_BOXES;
if (first < 0)
first = 0;
// Fill in the rest
- for (i = 0; i < NUM_RGROUP_BOXES && i + first < numScenes; i++) {
+ for (i = 0; i < NUM_RGROUP_BOXES && i + first < g_numScenes; i++) {
cd.box[i].textMethod = TM_STRINGNUM;
- cd.box[i].ixText = FROM_LE_32(pHopper[i + first].hSceneDesc);
+ cd.box[i].ixText = FROM_LE_32(g_pHopper[i + first].hSceneDesc);
}
// Blank out the spare ones (if any)
while (i < NUM_RGROUP_BOXES) {
@@ -1159,31 +1148,31 @@ static void FirstScene(int first) {
}
static void RememberChosenScene() {
- bRemember = true;
+ g_bRemember = true;
}
static void SetChosenScene() {
- lastChosenScene = cd.selBox + cd.extraBase;
- pChosenScene = &pHopper[cd.selBox + cd.extraBase];
+ g_lastChosenScene = cd.selBox + cd.extraBase;
+ g_pChosenScene = &g_pHopper[cd.selBox + cd.extraBase];
}
static void FirstEntry(int first) {
int i;
- InvD[INV_MENU].hInvTitle = FROM_LE_32(pChosenScene->hSceneDesc);
+ g_InvD[INV_MENU].hInvTitle = FROM_LE_32(g_pChosenScene->hSceneDesc);
// get number of entrances
- numEntries = FROM_LE_32(pChosenScene->numEntries);
+ g_numEntries = FROM_LE_32(g_pChosenScene->numEntries);
// Force first to a sensible value
- if (first > numEntries-NUM_RGROUP_BOXES)
- first = numEntries-NUM_RGROUP_BOXES;
+ if (first > g_numEntries-NUM_RGROUP_BOXES)
+ first = g_numEntries-NUM_RGROUP_BOXES;
if (first < 0)
first = 0;
- for (i = 0; i < NUM_RGROUP_BOXES && i < numEntries; i++) {
+ for (i = 0; i < NUM_RGROUP_BOXES && i < g_numEntries; i++) {
cd.box[i].textMethod = TM_STRINGNUM;
- cd.box[i].ixText = FROM_LE_32(pEntries[FROM_LE_32(pChosenScene->entryIndex) + i + first].hDesc);
+ cd.box[i].ixText = FROM_LE_32(g_pEntries[FROM_LE_32(g_pChosenScene->entryIndex) + i + first].hDesc);
}
// Blank out the spare ones (if any)
while (i < NUM_RGROUP_BOXES) {
@@ -1195,15 +1184,15 @@ static void FirstEntry(int first) {
}
static void HopAction() {
- PHOPENTRY pEntry = pEntries + FROM_LE_32(pChosenScene->entryIndex) + cd.selBox + cd.extraBase;
+ PHOPENTRY pEntry = g_pEntries + FROM_LE_32(g_pChosenScene->entryIndex) + cd.selBox + cd.extraBase;
- uint32 hScene = FROM_LE_32(pChosenScene->hScene);
+ uint32 hScene = FROM_LE_32(g_pChosenScene->hScene);
uint32 eNumber = FROM_LE_32(pEntry->eNumber);
debugC(DEBUG_BASIC, kTinselDebugAnimations, "Scene hopper chose scene %xh,%d\n", hScene, eNumber);
if (FROM_LE_32(pEntry->flags) & fCall) {
SaveScene(nullContext);
- NewScene(nullContext, pChosenScene->hScene, pEntry->eNumber, TRANS_FADE);
+ NewScene(nullContext, g_pChosenScene->hScene, pEntry->eNumber, TRANS_FADE);
}
else if (FROM_LE_32(pEntry->flags) & fHook)
HookScene(hScene, eNumber, TRANS_FADE);
@@ -1220,9 +1209,9 @@ static void HopAction() {
*/
static void DumpIconArray() {
for (int i = 0; i < MAX_ICONS; i++) {
- if (iconArray[i] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[i]);
- iconArray[i] = NULL;
+ if (g_iconArray[i] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[i]);
+ g_iconArray[i] = NULL;
}
}
}
@@ -1232,9 +1221,9 @@ static void DumpIconArray() {
*/
static void DumpDobjArray() {
for (int i = 0; i < MAX_WCOMP; i++) {
- if (DobjArray[i] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), DobjArray[i]);
- DobjArray[i] = NULL;
+ if (g_DobjArray[i] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_DobjArray[i]);
+ g_DobjArray[i] = NULL;
}
}
}
@@ -1244,9 +1233,9 @@ static void DumpDobjArray() {
*/
static void DumpObjArray() {
for (int i = 0; i < MAX_WCOMP; i++) {
- if (objArray[i] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), objArray[i]);
- objArray[i] = NULL;
+ if (g_objArray[i] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_objArray[i]);
+ g_objArray[i] = NULL;
}
}
}
@@ -1256,9 +1245,9 @@ static void DumpObjArray() {
* i.e. Image data and Glitter code.
*/
static INV_OBJECT *GetInvObject(int id) {
- INV_OBJECT *pObject = invObjects;
+ INV_OBJECT *pObject = g_invObjects;
- for (int i = 0; i < numObjects; i++, pObject++) {
+ for (int i = 0; i < g_numObjects; i++, pObject++) {
if (pObject->id == id)
return pObject;
}
@@ -1270,9 +1259,9 @@ static INV_OBJECT *GetInvObject(int id) {
* Convert item ID number to index.
*/
static int GetObjectIndex(int id) {
- INV_OBJECT *pObject = invObjects;
+ INV_OBJECT *pObject = g_invObjects;
- for (int i = 0; i < numObjects; i++, pObject++) {
+ for (int i = 0; i < g_numObjects; i++, pObject++) {
if (pObject->id == id)
return i;
}
@@ -1287,15 +1276,15 @@ static int GetObjectIndex(int id) {
extern int InventoryPos(int num) {
int i;
- for (i = 0; i < InvD[INV_1].NoofItems; i++) // First inventory
- if (InvD[INV_1].contents[i] == num)
+ for (i = 0; i < g_InvD[INV_1].NoofItems; i++) // First inventory
+ if (g_InvD[INV_1].contents[i] == num)
return i;
- for (i = 0; i < InvD[INV_2].NoofItems; i++) // Second inventory
- if (InvD[INV_2].contents[i] == num)
+ for (i = 0; i < g_InvD[INV_2].NoofItems; i++) // Second inventory
+ if (g_InvD[INV_2].contents[i] == num)
return i;
- if (HeldItem == num)
+ if (g_heldItem == num)
return INV_HELDNOTIN; // Held, but not in either inventory
return INV_NOICON; // Not held, not in either inventory
@@ -1304,8 +1293,8 @@ extern int InventoryPos(int num) {
extern bool IsInInventory(int object, int invnum) {
assert(invnum == INV_1 || invnum == INV_2);
- for (int i = 0; i < InvD[invnum].NoofItems; i++) // First inventory
- if (InvD[invnum].contents[i] == object)
+ for (int i = 0; i < g_InvD[invnum].NoofItems; i++) // First inventory
+ if (g_InvD[invnum].contents[i] == object)
return true;
return false;
@@ -1315,7 +1304,7 @@ extern bool IsInInventory(int object, int invnum) {
* Returns which item is held (INV_NOICON (-1) if none)
*/
extern int WhichItemHeld() {
- return HeldItem;
+ return g_heldItem;
}
/**
@@ -1324,15 +1313,15 @@ extern int WhichItemHeld() {
*/
extern void InventoryIconCursor(bool bNewItem) {
- if (HeldItem != INV_NOICON) {
+ if (g_heldItem != INV_NOICON) {
if (TinselV2) {
if (bNewItem) {
- int objIndex = GetObjectIndex(HeldItem);
- heldFilm = invFilms[objIndex];
+ int objIndex = GetObjectIndex(g_heldItem);
+ g_heldFilm = g_invFilms[objIndex];
}
- SetAuxCursor(heldFilm);
+ SetAuxCursor(g_heldFilm);
} else {
- INV_OBJECT *invObj = GetInvObject(HeldItem);
+ INV_OBJECT *invObj = GetInvObject(g_heldItem);
SetAuxCursor(invObj->hIconFilm);
}
}
@@ -1342,14 +1331,14 @@ extern void InventoryIconCursor(bool bNewItem) {
* Returns true if the inventory is active.
*/
extern bool InventoryActive() {
- return (InventoryState == ACTIVE_INV);
+ return (g_InventoryState == ACTIVE_INV);
}
extern int WhichInventoryOpen() {
- if (InventoryState != ACTIVE_INV)
+ if (g_InventoryState != ACTIVE_INV)
return 0;
else
- return ino;
+ return g_ino;
}
@@ -1387,7 +1376,7 @@ static void ObjectProcess(CORO_PARAM, const void *param) {
CORO_INVOKE_1(Interpret, _ctx->pic);
if (to->event == POINTED) {
- _ctx->ThisPointedWait = ++PointedWaitCount;
+ _ctx->ThisPointedWait = ++g_PointedWaitCount;
while (1) {
CORO_SLEEP(1);
int x, y;
@@ -1396,7 +1385,7 @@ static void ObjectProcess(CORO_PARAM, const void *param) {
break;
// Fix the 'repeated pressing bug'
- if (_ctx->ThisPointedWait != PointedWaitCount)
+ if (_ctx->ThisPointedWait != g_PointedWaitCount)
CORO_KILL_SELF();
}
@@ -1413,10 +1402,10 @@ static void ObjectProcess(CORO_PARAM, const void *param) {
static void InvTinselEvent(INV_OBJECT *pinvo, TINSEL_EVENT event, PLR_EVENT be, int index) {
OP_INIT to = { pinvo, event, be, 0 };
- if (InventoryHidden || (TinselV2 && !pinvo->hScript))
+ if (g_InventoryHidden || (TinselV2 && !pinvo->hScript))
return;
- GlitterIndex = index;
+ g_GlitterIndex = index;
g_scheduler->createProcess(PID_TCODE, ObjectProcess, &to, sizeof(to));
}
@@ -1491,9 +1480,9 @@ static void FirstFile(int first) {
static void InvSaveGame() {
if (cd.selBox != NOBOX) {
#ifndef JAPAN
- sedit[strlen(sedit)-1] = 0; // Don't include the cursor!
+ g_sedit[strlen(g_sedit)-1] = 0; // Don't include the cursor!
#endif
- SaveGame(ListEntry(cd.selBox-cd.modifier+cd.extraBase, LE_NAME), sedit);
+ SaveGame(ListEntry(cd.selBox-cd.modifier+cd.extraBase, LE_NAME), g_sedit);
}
}
@@ -1506,17 +1495,17 @@ static void InvLoadGame() {
if (cd.selBox != NOBOX && (cd.selBox+cd.extraBase < cd.numSaved)) {
rGame = cd.selBox;
cd.selBox = NOBOX;
- if (iconArray[HL3] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL3]);
- iconArray[HL3] = NULL;
+ if (g_iconArray[HL3] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
+ g_iconArray[HL3] = NULL;
}
- if (iconArray[HL2] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL2]);
- iconArray[HL2] = NULL;
+ if (g_iconArray[HL2] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
+ g_iconArray[HL2] = NULL;
}
- if (iconArray[HL1] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = NULL;
+ if (g_iconArray[HL1] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = NULL;
}
RestoreGame(rGame+cd.extraBase);
}
@@ -1533,7 +1522,7 @@ static bool UpdateString(const Common::KeyState &kbd) {
if (!cd.editableRgroup)
return false;
- cpos = strlen(sedit)-1;
+ cpos = strlen(g_sedit)-1;
if (kbd.ascii == 0)
return false;
@@ -1541,18 +1530,18 @@ static bool UpdateString(const Common::KeyState &kbd) {
if (kbd.keycode == Common::KEYCODE_BACKSPACE) {
if (!cpos)
return false;
- sedit[cpos] = 0;
+ g_sedit[cpos] = 0;
cpos--;
- sedit[cpos] = CURSOR_CHAR;
+ g_sedit[cpos] = CURSOR_CHAR;
return true;
// } else if (isalnum(c) || c == ',' || c == '.' || c == '\'' || (c == ' ' && cpos != 0)) {
} else if (IsCharImage(GetTagFontHandle(), kbd.ascii) || (kbd.ascii == ' ' && cpos != 0)) {
if (cpos == SG_DESC_LEN)
return false;
- sedit[cpos] = kbd.ascii;
+ g_sedit[cpos] = kbd.ascii;
cpos++;
- sedit[cpos] = CURSOR_CHAR;
- sedit[cpos+1] = 0;
+ g_sedit[cpos] = CURSOR_CHAR;
+ g_sedit[cpos+1] = 0;
return true;
}
return false;
@@ -1582,25 +1571,25 @@ static bool InvKeyIn(const Common::KeyState &kbd) {
* Delete display of text currently being edited,
* and replace it with freshly edited text.
*/
- if (iconArray[HL3] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL3]);
- iconArray[HL3] = NULL;
+ if (g_iconArray[HL3] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
+ g_iconArray[HL3] = NULL;
}
- iconArray[HL3] = ObjectTextOut(
- GetPlayfieldList(FIELD_STATUS), sedit, 0,
- InvD[ino].inventoryX + cd.box[cd.selBox].xpos + 2,
- InvD[ino].inventoryY + cd.box[cd.selBox].ypos + TYOFF,
+ g_iconArray[HL3] = ObjectTextOut(
+ GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
+ g_InvD[g_ino].inventoryX + cd.box[cd.selBox].xpos + 2,
+ g_InvD[g_ino].inventoryY + cd.box[cd.selBox].ypos + TYOFF,
GetTagFontHandle(), 0);
- if (MultiRightmost(iconArray[HL3]) > MAX_NAME_RIGHT) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL3]);
+ if (MultiRightmost(g_iconArray[HL3]) > MAX_NAME_RIGHT) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
UpdateString(Common::KeyState(Common::KEYCODE_BACKSPACE));
- iconArray[HL3] = ObjectTextOut(
- GetPlayfieldList(FIELD_STATUS), sedit, 0,
- InvD[ino].inventoryX + cd.box[cd.selBox].xpos + 2,
- InvD[ino].inventoryY + cd.box[cd.selBox].ypos + TYOFF,
+ g_iconArray[HL3] = ObjectTextOut(
+ GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
+ g_InvD[g_ino].inventoryX + cd.box[cd.selBox].xpos + 2,
+ g_InvD[g_ino].inventoryY + cd.box[cd.selBox].ypos + TYOFF,
GetTagFontHandle(), 0);
}
- MultiSetZPosition(iconArray[HL3], Z_INV_ITEXT + 2);
+ MultiSetZPosition(g_iconArray[HL3], Z_INV_ITEXT + 2);
}
#endif
}
@@ -1625,28 +1614,28 @@ static void Select(int i, bool force) {
cd.selBox = i;
// Clear previous selected highlight and text
- if (iconArray[HL2] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL2]);
- iconArray[HL2] = NULL;
+ if (g_iconArray[HL2] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
+ g_iconArray[HL2] = NULL;
}
- if (iconArray[HL3] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL3]);
- iconArray[HL3] = NULL;
+ if (g_iconArray[HL3] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
+ g_iconArray[HL3] = NULL;
}
// New highlight box
switch (cd.box[i].boxType) {
case RGROUP:
- iconArray[HL2] = RectangleObject(BgPal(),
+ g_iconArray[HL2] = RectangleObject(BgPal(),
(TinselV2 ? HighlightColor() : COL_HILIGHT), cd.box[i].w, cd.box[i].h);
- MultiInsertObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL2]);
- MultiSetAniXY(iconArray[HL2],
- InvD[ino].inventoryX + cd.box[i].xpos,
- InvD[ino].inventoryY + cd.box[i].ypos);
+ MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
+ MultiSetAniXY(g_iconArray[HL2],
+ g_InvD[g_ino].inventoryX + cd.box[i].xpos,
+ g_InvD[g_ino].inventoryY + cd.box[i].ypos);
// Z-position of box, and add edit text if appropriate
if (cd.editableRgroup) {
- MultiSetZPosition(iconArray[HL2], Z_INV_ITEXT+1);
+ MultiSetZPosition(g_iconArray[HL2], Z_INV_ITEXT+1);
if (TinselV2) {
assert(cd.box[i].textMethod == TM_POINTER);
@@ -1657,29 +1646,29 @@ static void Select(int i, bool force) {
// Current date and time
time(&secs_now);
time_now = localtime(&secs_now);
- strftime(sedit, SG_DESC_LEN, "%D %H:%M", time_now);
+ strftime(g_sedit, SG_DESC_LEN, "%D %H:%M", time_now);
#else
// Current description with cursor appended
if (cd.box[i].boxText != NULL) {
- strcpy(sedit, cd.box[i].boxText);
- strcat(sedit, sCursor);
+ strcpy(g_sedit, cd.box[i].boxText);
+ strcat(g_sedit, sCursor);
} else {
- strcpy(sedit, sCursor);
+ strcpy(g_sedit, sCursor);
}
#endif
- iconArray[HL3] = ObjectTextOut(
- GetPlayfieldList(FIELD_STATUS), sedit, 0,
- InvD[ino].inventoryX + cd.box[i].xpos + 2,
+ g_iconArray[HL3] = ObjectTextOut(
+ GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
+ g_InvD[g_ino].inventoryX + cd.box[i].xpos + 2,
#ifdef JAPAN
- InvD[ino].inventoryY + cd.box[i].ypos + 2,
+ g_InvD[g_ino].inventoryY + cd.box[i].ypos + 2,
#else
- InvD[ino].inventoryY + cd.box[i].ypos + TYOFF,
+ g_InvD[g_ino].inventoryY + cd.box[i].ypos + TYOFF,
#endif
GetTagFontHandle(), 0);
- MultiSetZPosition(iconArray[HL3], Z_INV_ITEXT + 2);
+ MultiSetZPosition(g_iconArray[HL3], Z_INV_ITEXT + 2);
} else {
- MultiSetZPosition(iconArray[HL2], Z_INV_ICONS + 1);
+ MultiSetZPosition(g_iconArray[HL2], Z_INV_ICONS + 1);
}
_vm->divertKeyInput(InvKeyIn);
@@ -1687,12 +1676,12 @@ static void Select(int i, bool force) {
break;
case FRGROUP:
- iconArray[HL2] = RectangleObject(BgPal(), COL_HILIGHT, cd.box[i].w+6, cd.box[i].h+6);
- MultiInsertObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL2]);
- MultiSetAniXY(iconArray[HL2],
- InvD[ino].inventoryX + cd.box[i].xpos - 2,
- InvD[ino].inventoryY + cd.box[i].ypos - 2);
- MultiSetZPosition(iconArray[HL2], Z_INV_BRECT+1);
+ g_iconArray[HL2] = RectangleObject(BgPal(), COL_HILIGHT, cd.box[i].w+6, cd.box[i].h+6);
+ MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
+ MultiSetAniXY(g_iconArray[HL2],
+ g_InvD[g_ino].inventoryX + cd.box[i].xpos - 2,
+ g_InvD[g_ino].inventoryY + cd.box[i].ypos - 2);
+ MultiSetZPosition(g_iconArray[HL2], Z_INV_BRECT+1);
break;
@@ -1710,13 +1699,13 @@ static void Select(int i, bool force) {
* Stop holding an item.
*/
extern void DropItem(int item) {
- if (HeldItem == item) {
- HeldItem = INV_NOICON; // Item not held
+ if (g_heldItem == item) {
+ g_heldItem = INV_NOICON; // Item not held
DelAuxCursor(); // no longer aux cursor
}
// Redraw contents - held item was not displayed as a content.
- ItemsChanged = true;
+ g_ItemsChanged = true;
}
/**
@@ -1725,8 +1714,8 @@ extern void DropItem(int item) {
extern void ClearInventory(int invno) {
assert(invno == INV_1 || invno == INV_2);
- InvD[invno].NoofItems = 0;
- memset(InvD[invno].contents, 0, sizeof(InvD[invno].contents));
+ g_InvD[invno].NoofItems = 0;
+ memset(g_InvD[invno].contents, 0, sizeof(g_InvD[invno].contents));
}
/**
@@ -1743,12 +1732,12 @@ extern void AddToInventory(int invno, int icon, bool hold) {
|| invno == INV_OPEN || (invno == INV_DEFAULT && TinselV2));
if (invno == INV_OPEN) {
- assert(InventoryState == ACTIVE_INV && (ino == INV_1 || ino == INV_2)); // addopeninv() with inventry not open
- invno = ino;
+ assert(g_InventoryState == ACTIVE_INV && (g_ino == INV_1 || g_ino == INV_2)); // addopeninv() with inventry not open
+ invno = g_ino;
bOpen = true;
// Make sure it doesn't get in both!
- RemFromInventory(ino == INV_1 ? INV_2 : INV_1, icon);
+ RemFromInventory(g_ino == INV_1 ? INV_2 : INV_1, icon);
} else {
bOpen = false;
@@ -1769,61 +1758,61 @@ extern void AddToInventory(int invno, int icon, bool hold) {
RemFromInventory(INV_1, icon);
// See if it's already there
- for (i = 0; i < InvD[invno].NoofItems; i++) {
- if (InvD[invno].contents[i] == icon)
+ for (i = 0; i < g_InvD[invno].NoofItems; i++) {
+ if (g_InvD[invno].contents[i] == icon)
break;
}
// Add it if it isn't already there
- if (i == InvD[invno].NoofItems) {
+ if (i == g_InvD[invno].NoofItems) {
if (!bOpen) {
if (invno == INV_CONV) {
if (TinselV2) {
int nei;
// Count how many current contents have end attribute
- for (i = 0, nei = 0; i < InvD[INV_CONV].NoofItems; i++) {
- invObj = GetInvObject(InvD[INV_CONV].contents[i]);
+ for (i = 0, nei = 0; i < g_InvD[INV_CONV].NoofItems; i++) {
+ invObj = GetInvObject(g_InvD[INV_CONV].contents[i]);
if (invObj->attribute & CONVENDITEM)
nei++;
}
// For conversation, insert before end icons
- memmove(&InvD[INV_CONV].contents[i-nei+1],
- &InvD[INV_CONV].contents[i-nei], nei * sizeof(int));
- InvD[INV_CONV].contents[i - nei] = icon;
- InvD[INV_CONV].NoofItems++;
- InvD[INV_CONV].NoofHicons = InvD[INV_CONV].NoofItems;
+ memmove(&g_InvD[INV_CONV].contents[i-nei+1],
+ &g_InvD[INV_CONV].contents[i-nei], nei * sizeof(int));
+ g_InvD[INV_CONV].contents[i - nei] = icon;
+ g_InvD[INV_CONV].NoofItems++;
+ g_InvD[INV_CONV].NoofHicons = g_InvD[INV_CONV].NoofItems;
// Get the window to re-position
- bMoveOnUnHide = true;
+ g_bMoveOnUnHide = true;
} else {
// For conversation, insert before last icon
// which will always be the goodbye icon
- InvD[invno].contents[InvD[invno].NoofItems] = InvD[invno].contents[InvD[invno].NoofItems-1];
- InvD[invno].contents[InvD[invno].NoofItems-1] = icon;
- InvD[invno].NoofItems++;
+ g_InvD[invno].contents[g_InvD[invno].NoofItems] = g_InvD[invno].contents[g_InvD[invno].NoofItems-1];
+ g_InvD[invno].contents[g_InvD[invno].NoofItems-1] = icon;
+ g_InvD[invno].NoofItems++;
}
} else {
- InvD[invno].contents[InvD[invno].NoofItems++] = icon;
+ g_InvD[invno].contents[g_InvD[invno].NoofItems++] = icon;
}
- ItemsChanged = true;
+ g_ItemsChanged = true;
} else {
// It could be that the index is beyond what you'd expect
// as delinv may well have been called
- if (GlitterIndex < InvD[invno].NoofItems) {
- memmove(&InvD[invno].contents[GlitterIndex + 1],
- &InvD[invno].contents[GlitterIndex],
- (InvD[invno].NoofItems - GlitterIndex) * sizeof(int));
- InvD[invno].contents[GlitterIndex] = icon;
+ if (g_GlitterIndex < g_InvD[invno].NoofItems) {
+ memmove(&g_InvD[invno].contents[g_GlitterIndex + 1],
+ &g_InvD[invno].contents[g_GlitterIndex],
+ (g_InvD[invno].NoofItems - g_GlitterIndex) * sizeof(int));
+ g_InvD[invno].contents[g_GlitterIndex] = icon;
} else {
- InvD[invno].contents[InvD[invno].NoofItems] = icon;
+ g_InvD[invno].contents[g_InvD[invno].NoofItems] = icon;
}
- InvD[invno].NoofItems++;
+ g_InvD[invno].NoofItems++;
}
// Move here after bug on Japenese DW1
- ItemsChanged = true;
+ g_ItemsChanged = true;
}
// Hold it if requested
@@ -1841,25 +1830,25 @@ extern bool RemFromInventory(int invno, int icon) {
assert(invno == INV_1 || invno == INV_2 || invno == INV_CONV); // Trying to delete from illegal inventory
// See if it's there
- for (i = 0; i < InvD[invno].NoofItems; i++) {
- if (InvD[invno].contents[i] == icon)
+ for (i = 0; i < g_InvD[invno].NoofItems; i++) {
+ if (g_InvD[invno].contents[i] == icon)
break;
}
- if (i == InvD[invno].NoofItems)
+ if (i == g_InvD[invno].NoofItems)
return false; // Item wasn't there
else {
- memmove(&InvD[invno].contents[i], &InvD[invno].contents[i+1], (InvD[invno].NoofItems-i)*sizeof(int));
- InvD[invno].NoofItems--;
+ memmove(&g_InvD[invno].contents[i], &g_InvD[invno].contents[i+1], (g_InvD[invno].NoofItems-i)*sizeof(int));
+ g_InvD[invno].NoofItems--;
if (TinselV2 && invno == INV_CONV) {
- InvD[INV_CONV].NoofHicons = InvD[invno].NoofItems;
+ g_InvD[INV_CONV].NoofHicons = g_InvD[invno].NoofItems;
// Get the window to re-position
- bMoveOnUnHide = true;
+ g_bMoveOnUnHide = true;
}
- ItemsChanged = true;
+ g_ItemsChanged = true;
return true; // Item removed
}
}
@@ -1870,27 +1859,27 @@ extern bool RemFromInventory(int invno, int icon) {
extern void HoldItem(int item, bool bKeepFilm) {
INV_OBJECT *invObj;
- if (HeldItem != item) {
- if (TinselV2 && (HeldItem != NOOBJECT)) {
+ if (g_heldItem != item) {
+ if (TinselV2 && (g_heldItem != NOOBJECT)) {
// No longer holding previous item
DelAuxCursor(); // no longer aux cursor
// If old held object is not in an inventory, and
// has a default, stick it in its default inventory.
- if (!IsInInventory(HeldItem, INV_1) && !IsInInventory(HeldItem, INV_2)) {
- invObj = GetInvObject(HeldItem);
+ if (!IsInInventory(g_heldItem, INV_1) && !IsInInventory(g_heldItem, INV_2)) {
+ invObj = GetInvObject(g_heldItem);
if (invObj->attribute & DEFINV1)
- AddToInventory(INV_1, HeldItem);
+ AddToInventory(INV_1, g_heldItem);
else if (invObj->attribute & DEFINV2)
- AddToInventory(INV_2, HeldItem);
+ AddToInventory(INV_2, g_heldItem);
else
// Hook for definable default inventory
- AddToInventory(INV_1, HeldItem);
+ AddToInventory(INV_1, g_heldItem);
}
} else if (!TinselV2) {
- if (item == INV_NOICON && HeldItem != INV_NOICON)
+ if (item == INV_NOICON && g_heldItem != INV_NOICON)
DelAuxCursor(); // no longer aux cursor
if (item != INV_NOICON) {
@@ -1899,19 +1888,19 @@ extern void HoldItem(int item, bool bKeepFilm) {
}
}
- HeldItem = item; // Item held
+ g_heldItem = item; // Item held
if (TinselV2) {
InventoryIconCursor(!bKeepFilm);
// Redraw contents - held item not displayed as a content.
- ItemsChanged = true;
+ g_ItemsChanged = true;
}
}
if (!TinselV2)
// Redraw contents - held item not displayed as a content.
- ItemsChanged = true;
+ g_ItemsChanged = true;
}
/**************************************************************************/
@@ -1929,8 +1918,8 @@ enum { I_NOTIN, I_HEADER, I_BODY,
// the active area of the borders for re-sizing.
/*---------------------------------*/
-#define LeftX InvD[ino].inventoryX
-#define TopY InvD[ino].inventoryY
+#define LeftX g_InvD[g_ino].inventoryX
+#define TopY g_InvD[g_ino].inventoryY
/*---------------------------------*/
/**
@@ -1943,8 +1932,8 @@ enum { I_NOTIN, I_HEADER, I_BODY,
*/
static int InvArea(int x, int y) {
if (TinselV2) {
- int RightX = MultiRightmost(RectObject) - NM_BG_SIZ_X - NM_BG_POS_X - NM_RS_R_INSET;
- int BottomY = MultiLowest(RectObject) - NM_BG_SIZ_Y - NM_BG_POS_Y - NM_RS_B_INSET;
+ int RightX = MultiRightmost(g_RectObject) - NM_BG_SIZ_X - NM_BG_POS_X - NM_RS_R_INSET;
+ int BottomY = MultiLowest(g_RectObject) - NM_BG_SIZ_Y - NM_BG_POS_Y - NM_RS_B_INSET;
// Outside the whole rectangle?
if (x <= LeftX || x > RightX || y <= TopY || y > BottomY)
@@ -1983,7 +1972,7 @@ static int InvArea(int x, int y) {
return I_HEADER;
// Scroll bits
- if (!(ino == INV_MENU && cd.bExtraWin)) {
+ if (!(g_ino == INV_MENU && cd.bExtraWin)) {
if (x > RightX - NM_SLIDE_INSET && x <= RightX - NM_SLIDE_INSET + NM_SLIDE_THICKNESS) {
if (y > TopY + NM_UP_ARROW_TOP && y < TopY + NM_UP_ARROW_BOTTOM)
return I_UP;
@@ -1992,10 +1981,10 @@ static int InvArea(int x, int y) {
/* '3' is a magic adjustment with no apparent sense */
- if (y >= TopY + sliderYmin - 3 && y < TopY + sliderYmax + NM_SLH) {
- if (y < TopY + sliderYpos - 3)
+ if (y >= TopY + g_sliderYmin - 3 && y < TopY + g_sliderYmax + NM_SLH) {
+ if (y < TopY + g_sliderYpos - 3)
return I_SLIDE_UP;
- if (y < TopY + sliderYpos + NM_SLH - 3)
+ if (y < TopY + g_sliderYpos + NM_SLH - 3)
return I_SLIDE;
else
return I_SLIDE_DOWN;
@@ -2003,8 +1992,8 @@ static int InvArea(int x, int y) {
}
}
} else {
- int RightX = MultiRightmost(RectObject) + 1;
- int BottomY = MultiLowest(RectObject) + 1;
+ int RightX = MultiRightmost(g_RectObject) + 1;
+ int BottomY = MultiLowest(g_RectObject) + 1;
// Outside the whole rectangle?
if (x <= LeftX - EXTRA || x > RightX + EXTRA
@@ -2041,7 +2030,7 @@ static int InvArea(int x, int y) {
/*
* In the move area?
*/
- if (ino != INV_CONF
+ if (g_ino != INV_CONF
&& x >= LeftX + M_SW - 2 && x <= RightX - M_SW + 3 &&
y >= TopY + M_TH - 2 && y < TopY + M_TBB + 2)
return I_HEADER;
@@ -2049,17 +2038,17 @@ static int InvArea(int x, int y) {
/*
* Scroll bits
*/
- if (!(ino == INV_CONF && cd.bExtraWin)) {
+ if (!(g_ino == INV_CONF && cd.bExtraWin)) {
if (x > RightX - NM_SLIDE_INSET && x <= RightX - NM_SLIDE_INSET + NM_SLIDE_THICKNESS) {
if (y > TopY + M_IUT + 1 && y < TopY + M_IUB - 1)
return I_UP;
if (y > BottomY - M_IDT + 4 && y <= BottomY - M_IDB + 1)
return I_DOWN;
- if (y >= TopY + sliderYmin && y < TopY + sliderYmax + M_SH) {
- if (y < TopY + sliderYpos)
+ if (y >= TopY + g_sliderYmin && y < TopY + g_sliderYmax + M_SH) {
+ if (y < TopY + g_sliderYpos)
return I_SLIDE_UP;
- if (y < TopY + sliderYpos + M_SH)
+ if (y < TopY + g_sliderYpos + M_SH)
return I_SLIDE;
else
return I_SLIDE_DOWN;
@@ -2081,14 +2070,14 @@ extern int InvItem(int *x, int *y, bool update) {
int item;
int IconsX;
- itop = InvD[ino].inventoryY + START_ICONY;
+ itop = g_InvD[g_ino].inventoryY + START_ICONY;
- IconsX = InvD[ino].inventoryX + START_ICONX;
+ IconsX = g_InvD[g_ino].inventoryX + START_ICONX;
- for (item = InvD[ino].FirstDisp, row = 0; row < InvD[ino].NoofVicons; row++) {
+ for (item = g_InvD[g_ino].FirstDisp, row = 0; row < g_InvD[g_ino].NoofVicons; row++) {
ileft = IconsX;
- for (col = 0; col < InvD[ino].NoofHicons; col++, item++) {
+ for (col = 0; col < g_InvD[g_ino].NoofHicons; col++, item++) {
if (*x >= ileft && *x < ileft + ITEM_WIDTH &&
*y >= itop && *y < itop + ITEM_HEIGHT) {
if (update) {
@@ -2121,20 +2110,20 @@ int InvItemId(int x, int y) {
int row, col;
int item;
- if (InventoryHidden || InventoryState == IDLE_INV)
+ if (g_InventoryHidden || g_InventoryState == IDLE_INV)
return INV_NOICON;
- itop = InvD[ino].inventoryY + START_ICONY;
+ itop = g_InvD[g_ino].inventoryY + START_ICONY;
- int IconsX = InvD[ino].inventoryX + START_ICONX;
+ int IconsX = g_InvD[g_ino].inventoryX + START_ICONX;
- for (item = InvD[ino].FirstDisp, row = 0; row < InvD[ino].NoofVicons; row++) {
+ for (item = g_InvD[g_ino].FirstDisp, row = 0; row < g_InvD[g_ino].NoofVicons; row++) {
ileft = IconsX;
- for (col = 0; col < InvD[ino].NoofHicons; col++, item++) {
+ for (col = 0; col < g_InvD[g_ino].NoofHicons; col++, item++) {
if (x >= ileft && x < ileft + ITEM_WIDTH &&
y >= itop && y < itop + ITEM_HEIGHT) {
- return InvD[ino].contents[item];
+ return g_InvD[g_ino].contents[item];
}
ileft += ITEM_WIDTH + 1;
@@ -2149,15 +2138,15 @@ int InvItemId(int x, int y) {
*/
static int WhichMenuBox(int curX, int curY, bool bSlides) {
if (bSlides) {
- for (int i = 0; i < numMdSlides; i++) {
- if (curY > MultiHighest(mdSlides[i].obj) && curY < MultiLowest(mdSlides[i].obj)
- && curX > MultiLeftmost(mdSlides[i].obj) && curX < MultiRightmost(mdSlides[i].obj))
- return mdSlides[i].num | IS_SLIDER;
+ for (int i = 0; i < g_numMdSlides; i++) {
+ if (curY > MultiHighest(g_mdSlides[i].obj) && curY < MultiLowest(g_mdSlides[i].obj)
+ && curX > MultiLeftmost(g_mdSlides[i].obj) && curX < MultiRightmost(g_mdSlides[i].obj))
+ return g_mdSlides[i].num | IS_SLIDER;
}
}
- curX -= InvD[ino].inventoryX;
- curY -= InvD[ino].inventoryY;
+ curX -= g_InvD[g_ino].inventoryX;
+ curY -= g_InvD[g_ino].inventoryY;
for (int i = 0; i < cd.NumBoxes; i++) {
switch (cd.box[i].boxType) {
@@ -2184,7 +2173,7 @@ static int WhichMenuBox(int curX, int curY, bool bSlides) {
break;
case ROTATE:
- if (bNoLanguage)
+ if (g_bNoLanguage)
break;
if (curY > cd.box[i].ypos && curY < cd.box[i].ypos + cd.box[i].h) {
@@ -2222,9 +2211,9 @@ static int WhichMenuBox(int curX, int curY, bool bSlides) {
return IB_UP;
else if (curY > (r.bottom - (TinselV2 ? 18 : 5)))
return IB_DOWN;
- else if (curY + InvD[ino].inventoryY < sliderYpos)
+ else if (curY + g_InvD[g_ino].inventoryY < g_sliderYpos)
return IB_SLIDE_UP;
- else if (curY + InvD[ino].inventoryY >= sliderYpos + NM_SLH)
+ else if (curY + g_InvD[g_ino].inventoryY >= g_sliderYpos + NM_SLH)
return IB_SLIDE_DOWN;
else
return IB_SLIDE;
@@ -2260,60 +2249,60 @@ static void InvBoxes(bool InBody, int curX, int curY) {
if (index < 0) {
// unhigh-light box (if one was)
cd.pointBox = NOBOX;
- if (iconArray[HL1] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = NULL;
+ if (g_iconArray[HL1] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = NULL;
}
} else if (index != cd.pointBox) {
cd.pointBox = index;
// A new box is pointed to - high-light it
- if (iconArray[HL1] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = NULL;
+ if (g_iconArray[HL1] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = NULL;
}
if ((cd.box[cd.pointBox].boxType == ARSBUT && cd.selBox != NOBOX) ||
///* I don't agree */ cd.box[cd.pointBox].boxType == RGROUP ||
cd.box[cd.pointBox].boxType == AATBUT ||
cd.box[cd.pointBox].boxType == AABUT) {
- iconArray[HL1] = RectangleObject(BgPal(),
+ g_iconArray[HL1] = RectangleObject(BgPal(),
(TinselV2 ? HighlightColor() : COL_HILIGHT),
cd.box[cd.pointBox].w, cd.box[cd.pointBox].h);
- MultiInsertObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- MultiSetAniXY(iconArray[HL1],
- InvD[ino].inventoryX + cd.box[cd.pointBox].xpos,
- InvD[ino].inventoryY + cd.box[cd.pointBox].ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ MultiSetAniXY(g_iconArray[HL1],
+ g_InvD[g_ino].inventoryX + cd.box[cd.pointBox].xpos,
+ g_InvD[g_ino].inventoryY + cd.box[cd.pointBox].ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
} else if (cd.box[cd.pointBox].boxType == AAGBUT ||
cd.box[cd.pointBox].boxType == ARSGBUT ||
cd.box[cd.pointBox].boxType == TOGGLE ||
cd.box[cd.pointBox].boxType == TOGGLE1 ||
cd.box[cd.pointBox].boxType == TOGGLE2) {
- pfilm = (const FILM *)LockMem(hWinParts);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
- iconArray[HL1] = AddObject(&pfilm->reels[cd.box[cd.pointBox].bi+HIGRAPH], -1);
- MultiSetAniXY(iconArray[HL1],
- InvD[ino].inventoryX + cd.box[cd.pointBox].xpos,
- InvD[ino].inventoryY + cd.box[cd.pointBox].ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[cd.box[cd.pointBox].bi+HIGRAPH], -1);
+ MultiSetAniXY(g_iconArray[HL1],
+ g_InvD[g_ino].inventoryX + cd.box[cd.pointBox].xpos,
+ g_InvD[g_ino].inventoryY + cd.box[cd.pointBox].ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
} else if (cd.box[cd.pointBox].boxType == ROTATE) {
- if (bNoLanguage)
+ if (g_bNoLanguage)
return;
- pfilm = (const FILM *)LockMem(hWinParts);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
rotateIndex = cd.box[cd.pointBox].bi;
if (rotateIndex == IX2_LEFT1) {
- iconArray[HL1] = AddObject(&pfilm->reels[IX2_LEFT2], -1 );
- MultiSetAniXY(iconArray[HL1],
- InvD[ino].inventoryX + cd.box[cd.pointBox].xpos - ROTX1,
- InvD[ino].inventoryY + cd.box[cd.pointBox].ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[IX2_LEFT2], -1 );
+ MultiSetAniXY(g_iconArray[HL1],
+ g_InvD[g_ino].inventoryX + cd.box[cd.pointBox].xpos - ROTX1,
+ g_InvD[g_ino].inventoryY + cd.box[cd.pointBox].ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
} else if (rotateIndex == IX2_RIGHT1) {
- iconArray[HL1] = AddObject(&pfilm->reels[IX2_RIGHT2], -1);
- MultiSetAniXY(iconArray[HL1],
- InvD[ino].inventoryX + cd.box[cd.pointBox].xpos + ROTX1,
- InvD[ino].inventoryY + cd.box[cd.pointBox].ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS + 1);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[IX2_RIGHT2], -1);
+ MultiSetAniXY(g_iconArray[HL1],
+ g_InvD[g_ino].inventoryX + cd.box[cd.pointBox].xpos + ROTX1,
+ g_InvD[g_ino].inventoryY + cd.box[cd.pointBox].ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS + 1);
}
}
}
@@ -2330,37 +2319,37 @@ static void ButtonPress(CORO_PARAM, CONFBOX *box) {
assert(box->boxType == AAGBUT || box->boxType == ARSGBUT);
// Replace highlight image with normal image
- pfilm = (const FILM *)LockMem(hWinParts);
- if (iconArray[HL1] != NULL)
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- pfilm = (const FILM *)LockMem(hWinParts);
- iconArray[HL1] = AddObject(&pfilm->reels[box->bi+NORMGRAPH], -1);
- MultiSetAniXY(iconArray[HL1], InvD[ino].inventoryX + box->xpos, InvD[ino].inventoryY + box->ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
+ if (g_iconArray[HL1] != NULL)
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+NORMGRAPH], -1);
+ MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
// Hold normal image for 1 frame
CORO_SLEEP(1);
- if (iconArray[HL1] == NULL)
+ if (g_iconArray[HL1] == NULL)
return;
// Replace normal image with depresses image
- pfilm = (const FILM *)LockMem(hWinParts);
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = AddObject(&pfilm->reels[box->bi+DOWNGRAPH], -1);
- MultiSetAniXY(iconArray[HL1], InvD[ino].inventoryX + box->xpos, InvD[ino].inventoryY + box->ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+DOWNGRAPH], -1);
+ MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
// Hold depressed image for 2 frames
CORO_SLEEP(2);
- if (iconArray[HL1] == NULL)
+ if (g_iconArray[HL1] == NULL)
return;
// Replace depressed image with normal image
- pfilm = (const FILM *)LockMem(hWinParts);
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = AddObject(&pfilm->reels[box->bi+NORMGRAPH], -1);
- MultiSetAniXY(iconArray[HL1], InvD[ino].inventoryX + box->xpos, InvD[ino].inventoryY + box->ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+NORMGRAPH], -1);
+ MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
CORO_SLEEP(1);
@@ -2379,25 +2368,25 @@ static void ButtonToggle(CORO_PARAM, CONFBOX *box) {
|| (box->boxType == TOGGLE2));
// Remove hilight image
- if (iconArray[HL1] != NULL) {
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = NULL;
+ if (g_iconArray[HL1] != NULL) {
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = NULL;
}
// Hold normal image for 1 frame
CORO_SLEEP(1);
- if (InventoryState != ACTIVE_INV)
+ if (g_InventoryState != ACTIVE_INV)
return;
// Add depressed image
- pfilm = (const FILM *)LockMem(hWinParts);
- iconArray[HL1] = AddObject(&pfilm->reels[box->bi+DOWNGRAPH], -1);
- MultiSetAniXY(iconArray[HL1], InvD[ino].inventoryX + box->xpos, InvD[ino].inventoryY + box->ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+DOWNGRAPH], -1);
+ MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
// Hold depressed image for 1 frame
CORO_SLEEP(1);
- if (iconArray[HL1] == NULL)
+ if (g_iconArray[HL1] == NULL)
return;
// Toggle state
@@ -2409,34 +2398,34 @@ static void ButtonToggle(CORO_PARAM, CONFBOX *box) {
Select(cd.selBox, true);
// New state, depressed image
- pfilm = (const FILM *)LockMem(hWinParts);
- if (iconArray[HL1] != NULL)
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = AddObject(&pfilm->reels[box->bi+DOWNGRAPH], -1);
- MultiSetAniXY(iconArray[HL1], InvD[ino].inventoryX + box->xpos, InvD[ino].inventoryY + box->ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
+ if (g_iconArray[HL1] != NULL)
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+DOWNGRAPH], -1);
+ MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
// Hold new depressed image for 1 frame
CORO_SLEEP(1);
- if (iconArray[HL1] == NULL)
+ if (g_iconArray[HL1] == NULL)
return;
// New state, normal
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = NULL;
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = NULL;
// Hold normal image for 1 frame
CORO_SLEEP(1);
- if (InventoryState != ACTIVE_INV)
+ if (g_InventoryState != ACTIVE_INV)
return;
// New state, highlighted
- pfilm = (const FILM *)LockMem(hWinParts);
- if (iconArray[HL1] != NULL)
- MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL1]);
- iconArray[HL1] = AddObject(&pfilm->reels[box->bi+HIGRAPH], -1);
- MultiSetAniXY(iconArray[HL1], InvD[ino].inventoryX + box->xpos, InvD[ino].inventoryY + box->ypos);
- MultiSetZPosition(iconArray[HL1], Z_INV_ICONS+1);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
+ if (g_iconArray[HL1] != NULL)
+ MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
+ g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+HIGRAPH], -1);
+ MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
+ MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
CORO_END_CODE;
}
@@ -2454,23 +2443,23 @@ static void InvLabels(bool InBody, int aniX, int aniY) {
else {
index = InvItem(&aniX, &aniY, false);
if (index != INV_NOICON) {
- if (index >= InvD[ino].NoofItems)
+ if (index >= g_InvD[g_ino].NoofItems)
index = INV_NOICON;
else
- index = InvD[ino].contents[index];
+ index = g_InvD[g_ino].contents[index];
}
}
// If no icon pointed to, or points to (logical position of)
// currently held icon, then no icon is pointed to!
- if (index == INV_NOICON || index == HeldItem) {
- pointedIcon = INV_NOICON;
- } else if (index != pointedIcon) {
+ if (index == INV_NOICON || index == g_heldItem) {
+ g_pointedIcon = INV_NOICON;
+ } else if (index != g_pointedIcon) {
// A new icon is pointed to - run its script with POINTED event
invObj = GetInvObject(index);
if (invObj->hScript)
InvTinselEvent(invObj, POINTED, PLR_NOEVENT, index);
- pointedIcon = index;
+ g_pointedIcon = index;
}
}
@@ -2492,54 +2481,54 @@ static void AdjustTop() {
int n, i;
// Only do this if there's a slider
- if (!SlideObject)
+ if (!g_SlideObject)
return;
- rowsWanted = (InvD[ino].NoofItems - InvD[ino].FirstDisp + InvD[ino].NoofHicons-1) / InvD[ino].NoofHicons;
+ rowsWanted = (g_InvD[g_ino].NoofItems - g_InvD[g_ino].FirstDisp + g_InvD[g_ino].NoofHicons-1) / g_InvD[g_ino].NoofHicons;
- while (rowsWanted < InvD[ino].NoofVicons) {
- if (InvD[ino].FirstDisp) {
- InvD[ino].FirstDisp -= InvD[ino].NoofHicons;
- if (InvD[ino].FirstDisp < 0)
- InvD[ino].FirstDisp = 0;
+ while (rowsWanted < g_InvD[g_ino].NoofVicons) {
+ if (g_InvD[g_ino].FirstDisp) {
+ g_InvD[g_ino].FirstDisp -= g_InvD[g_ino].NoofHicons;
+ if (g_InvD[g_ino].FirstDisp < 0)
+ g_InvD[g_ino].FirstDisp = 0;
rowsWanted++;
} else
break;
}
- tMissing = InvD[ino].FirstDisp ? (InvD[ino].FirstDisp + InvD[ino].NoofHicons-1)/InvD[ino].NoofHicons : 0;
- bMissing = (rowsWanted > InvD[ino].NoofVicons) ? rowsWanted - InvD[ino].NoofVicons : 0;
+ tMissing = g_InvD[g_ino].FirstDisp ? (g_InvD[g_ino].FirstDisp + g_InvD[g_ino].NoofHicons-1)/g_InvD[g_ino].NoofHicons : 0;
+ bMissing = (rowsWanted > g_InvD[g_ino].NoofVicons) ? rowsWanted - g_InvD[g_ino].NoofVicons : 0;
nMissing = tMissing + bMissing;
- slideRange = sliderYmax - sliderYmin;
+ slideRange = g_sliderYmax - g_sliderYmin;
if (!tMissing)
- nsliderYpos = sliderYmin;
+ nsliderYpos = g_sliderYmin;
else if (!bMissing)
- nsliderYpos = sliderYmax;
+ nsliderYpos = g_sliderYmax;
else {
nsliderYpos = tMissing*slideRange/nMissing;
- nsliderYpos += sliderYmin;
+ nsliderYpos += g_sliderYmin;
}
if (nMissing) {
- n = InvD[ino].FirstDisp - tMissing*InvD[ino].NoofHicons;
- for (i = 0; i <= nMissing; i++, n += InvD[ino].NoofHicons) {
- slideStuff[i].n = n;
- slideStuff[i].y = (i*slideRange/nMissing) + sliderYmin;
+ n = g_InvD[g_ino].FirstDisp - tMissing*g_InvD[g_ino].NoofHicons;
+ for (i = 0; i <= nMissing; i++, n += g_InvD[g_ino].NoofHicons) {
+ g_slideStuff[i].n = n;
+ g_slideStuff[i].y = (i*slideRange/nMissing) + g_sliderYmin;
}
- if (slideStuff[0].n < 0)
- slideStuff[0].n = 0;
+ if (g_slideStuff[0].n < 0)
+ g_slideStuff[0].n = 0;
assert(i < MAX_ININV + 1);
- slideStuff[i].n = -1;
+ g_slideStuff[i].n = -1;
} else {
- slideStuff[0].n = 0;
- slideStuff[0].y = sliderYmin;
- slideStuff[1].n = -1;
+ g_slideStuff[0].n = 0;
+ g_slideStuff[0].y = g_sliderYmin;
+ g_slideStuff[1].n = -1;
}
- if (nsliderYpos != sliderYpos) {
- MultiMoveRelXY(SlideObject, 0, nsliderYpos - sliderYpos);
- sliderYpos = nsliderYpos;
+ if (nsliderYpos != g_sliderYpos) {
+ MultiMoveRelXY(g_SlideObject, 0, nsliderYpos - g_sliderYpos);
+ g_sliderYpos = nsliderYpos;
}
}
@@ -2580,26 +2569,26 @@ static void FillInInventory() {
DumpIconArray();
- if (InvDragging != ID_SLIDE)
+ if (g_InvDragging != ID_SLIDE)
AdjustTop(); // Set up slideStuff[]
- Index = InvD[ino].FirstDisp; // Start from first displayed object
+ Index = g_InvD[g_ino].FirstDisp; // Start from first displayed object
n = 0;
ypos = START_ICONY; // Y-offset of first display row
- for (row = 0; row < InvD[ino].NoofVicons; row++, ypos += ITEM_HEIGHT + 1) {
+ for (row = 0; row < g_InvD[g_ino].NoofVicons; row++, ypos += ITEM_HEIGHT + 1) {
xpos = START_ICONX; // X-offset of first display column
- for (col = 0; col < InvD[ino].NoofHicons; col++) {
- if (Index >= InvD[ino].NoofItems)
+ for (col = 0; col < g_InvD[g_ino].NoofHicons; col++) {
+ if (Index >= g_InvD[g_ino].NoofItems)
break;
- else if (InvD[ino].contents[Index] != HeldItem) {
+ else if (g_InvD[g_ino].contents[Index] != g_heldItem) {
// Create a display object and position it
- iconArray[n] = AddInvObject(InvD[ino].contents[Index], &pfr, &pfilm);
- MultiSetAniXY(iconArray[n], InvD[ino].inventoryX + xpos , InvD[ino].inventoryY + ypos);
- MultiSetZPosition(iconArray[n], Z_INV_ICONS);
+ g_iconArray[n] = AddInvObject(g_InvD[g_ino].contents[Index], &pfr, &pfilm);
+ MultiSetAniXY(g_iconArray[n], g_InvD[g_ino].inventoryX + xpos , g_InvD[g_ino].inventoryY + ypos);
+ MultiSetZPosition(g_iconArray[n], Z_INV_ICONS);
- InitStepAnimScript(&iconAnims[n], iconArray[n], FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pfilm->frate));
+ InitStepAnimScript(&g_iconAnims[n], g_iconArray[n], FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pfilm->frate));
n++;
}
@@ -2617,16 +2606,16 @@ enum {FROM_HANDLE, FROM_STRING};
*/
static void AddBackground(OBJECT **rect, OBJECT **title, int extraH, int extraV, int textFrom) {
// Why not 2 ????
- int width = TLwidth + extraH + TRwidth + NM_BG_SIZ_X;
- int height = TLheight + extraV + BLheight + NM_BG_SIZ_Y;
+ int width = g_TLwidth + extraH + g_TRwidth + NM_BG_SIZ_X;
+ int height = g_TLheight + extraV + g_BLheight + NM_BG_SIZ_Y;
// Create a rectangle object
- RectObject = *rect = TranslucentObject(width, height);
+ g_RectObject = *rect = TranslucentObject(width, height);
// add it to display list and position it
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), *rect);
- MultiSetAniXY(*rect, InvD[ino].inventoryX + NM_BG_POS_X,
- InvD[ino].inventoryY + NM_BG_POS_Y);
+ MultiSetAniXY(*rect, g_InvD[g_ino].inventoryX + NM_BG_POS_X,
+ g_InvD[g_ino].inventoryY + NM_BG_POS_Y);
MultiSetZPosition(*rect, Z_INV_BRECT);
if (title == NULL)
@@ -2634,16 +2623,16 @@ static void AddBackground(OBJECT **rect, OBJECT **title, int extraH, int extraV,
// Create text object using title string
if (textFrom == FROM_HANDLE) {
- LoadStringRes(InvD[ino].hInvTitle, TextBufferAddr(), TBUFSZ);
+ LoadStringRes(g_InvD[g_ino].hInvTitle, TextBufferAddr(), TBUFSZ);
*title = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), TextBufferAddr(), 0,
- InvD[ino].inventoryX + width/2, InvD[ino].inventoryY + M_TOFF,
+ g_InvD[g_ino].inventoryX + width/2, g_InvD[g_ino].inventoryY + M_TOFF,
GetTagFontHandle(), TXT_CENTER);
assert(*title); // Inventory title string produced NULL text
MultiSetZPosition(*title, Z_INV_HTEXT);
} else if (textFrom == FROM_STRING && cd.ixHeading != NO_HEADING) {
- LoadStringRes(configStrings[cd.ixHeading], TextBufferAddr(), TBUFSZ);
+ LoadStringRes(g_configStrings[cd.ixHeading], TextBufferAddr(), TBUFSZ);
*title = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), TextBufferAddr(), 0,
- InvD[ino].inventoryX + width/2, InvD[ino].inventoryY + M_TOFF,
+ g_InvD[g_ino].inventoryX + width/2, g_InvD[g_ino].inventoryY + M_TOFF,
GetTagFontHandle(), TXT_CENTER);
assert(*title); // Inventory title string produced NULL text
MultiSetZPosition(*title, Z_INV_HTEXT);
@@ -2661,13 +2650,13 @@ static void AddBackground(OBJECT **rect, int extraH, int extraV) {
* Adds a title for a dialog
*/
static void AddTitle(POBJECT *title, int extraH) {
- int width = TLwidth + extraH + TRwidth + NM_BG_SIZ_X;
+ int width = g_TLwidth + extraH + g_TRwidth + NM_BG_SIZ_X;
// Create text object using title string
- if (InvD[ino].hInvTitle != (SCNHANDLE)NO_HEADING) {
- LoadStringRes(InvD[ino].hInvTitle, TextBufferAddr(), TBUFSZ);
+ if (g_InvD[g_ino].hInvTitle != (SCNHANDLE)NO_HEADING) {
+ LoadStringRes(g_InvD[g_ino].hInvTitle, TextBufferAddr(), TBUFSZ);
*title = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), TextBufferAddr(), 0,
- InvD[ino].inventoryX + (width/2)+NM_BG_POS_X, InvD[ino].inventoryY + NM_TOFF,
+ g_InvD[g_ino].inventoryX + (width/2)+NM_BG_POS_X, g_InvD[g_ino].inventoryY + NM_TOFF,
GetTagFontHandle(), TXT_CENTER, 0);
assert(*title);
MultiSetZPosition(*title, Z_INV_HTEXT);
@@ -2691,13 +2680,13 @@ static OBJECT *AddObject(const FREEL *pfreel, int num) {
// Horrible bodge involving global variables to save
// width and/or height of some window frame components
- if (num == TL) {
- TLwidth = FROM_LE_16(pim->imgWidth);
- TLheight = FROM_LE_16(pim->imgHeight) & ~C16_FLAG_MASK;
- } else if (num == TR) {
- TRwidth = FROM_LE_16(pim->imgWidth);
- } else if (num == BL) {
- BLheight = FROM_LE_16(pim->imgHeight) & ~C16_FLAG_MASK;
+ if (num == g_TL) {
+ g_TLwidth = FROM_LE_16(pim->imgWidth);
+ g_TLheight = FROM_LE_16(pim->imgHeight) & ~C16_FLAG_MASK;
+ } else if (num == g_TR) {
+ g_TRwidth = FROM_LE_16(pim->imgWidth);
+ } else if (num == g_BL) {
+ g_BLheight = FROM_LE_16(pim->imgHeight) & ~C16_FLAG_MASK;
}
// Set up and insert the multi-object
@@ -2712,9 +2701,9 @@ static OBJECT *AddObject(const FREEL *pfreel, int num) {
*/
static void AddSlider(OBJECT **slide, const FILM *pfilm) {
- SlideObject = *slide = AddObject(&pfilm->reels[IX_SLIDE], -1);
- MultiSetAniXY(*slide, MultiRightmost(RectObject) + (TinselV2 ? NM_SLX : -M_SXOFF + 2) - 1,
- InvD[ino].inventoryY + sliderYpos);
+ g_SlideObject = *slide = AddObject(&pfilm->reels[IX_SLIDE], -1);
+ MultiSetAniXY(*slide, MultiRightmost(g_RectObject) + (TinselV2 ? NM_SLX : -M_SXOFF + 2) - 1,
+ g_InvD[g_ino].inventoryY + g_sliderYpos);
MultiSetZPosition(*slide, Z_INV_MFRAME);
}
@@ -2722,8 +2711,8 @@ static void AddSlider(OBJECT **slide, const FILM *pfilm) {
* Display a box with some text in it.
*/
static void AddBox(int *pi, const int i) {
- int x = InvD[ino].inventoryX + cd.box[i].xpos;
- int y = InvD[ino].inventoryY + cd.box[i].ypos;
+ int x = g_InvD[g_ino].inventoryX + cd.box[i].xpos;
+ int y = g_InvD[g_ino].inventoryY + cd.box[i].ypos;
int *pival = cd.box[i].ival;
int xdisp;
const FILM *pFilm;
@@ -2735,11 +2724,11 @@ static void AddBox(int *pi, const int i) {
break;
// Give us a box
- iconArray[*pi] = RectangleObject(BgPal(), TinselV2 ? BoxColor() : COL_BOX,
+ g_iconArray[*pi] = RectangleObject(BgPal(), TinselV2 ? BoxColor() : COL_BOX,
cd.box[i].w, cd.box[i].h);
- MultiInsertObject(GetPlayfieldList(FIELD_STATUS), iconArray[*pi]);
- MultiSetAniXY(iconArray[*pi], x, y);
- MultiSetZPosition(iconArray[*pi], Z_INV_BRECT + 1);
+ MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[*pi]);
+ MultiSetAniXY(g_iconArray[*pi], x, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT + 1);
*pi += 1;
// Stick in the text
@@ -2747,14 +2736,14 @@ static void AddBox(int *pi, const int i) {
(!TinselV2 && (cd.box[i].ixText == USE_POINTER))) {
if (cd.box[i].boxText != NULL) {
if (cd.box[i].boxType == RGROUP) {
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), cd.box[i].boxText, 0,
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), cd.box[i].boxText, 0,
#ifdef JAPAN
x + 2, y+2, GetTagFontHandle(), 0);
#else
x + 2, y + TYOFF, GetTagFontHandle(), 0);
#endif
} else {
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), cd.box[i].boxText, 0,
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), cd.box[i].boxText, 0,
#ifdef JAPAN
// Note: it never seems to go here!
x + cd.box[i].w/2, y+2, GetTagFontHandle(), TXT_CENTER);
@@ -2763,7 +2752,7 @@ static void AddBox(int *pi, const int i) {
#endif
}
- MultiSetZPosition(iconArray[*pi], Z_INV_ITEXT);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
*pi += 1;
}
} else {
@@ -2775,61 +2764,61 @@ static void AddBox(int *pi, const int i) {
LoadStringRes(cd.box[i].ixText, TextBufferAddr(), TBUFSZ);
}
} else {
- LoadStringRes(configStrings[cd.box[i].ixText], TextBufferAddr(), TBUFSZ);
+ LoadStringRes(g_configStrings[cd.box[i].ixText], TextBufferAddr(), TBUFSZ);
assert(cd.box[i].boxType != RGROUP); // You'll need to add some code!
}
if (TinselV2 && (cd.box[i].boxType == RGROUP))
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), TextBufferAddr(),
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), TextBufferAddr(),
0, x + 2, y + TYOFF, GetTagFontHandle(), 0, 0);
else
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
TextBufferAddr(), 0,
#ifdef JAPAN
x + cd.box[i].w/2, y+2, GetTagFontHandle(), TXT_CENTER);
#else
x + cd.box[i].w / 2, y + TYOFF, GetTagFontHandle(), TXT_CENTER);
#endif
- MultiSetZPosition(iconArray[*pi], Z_INV_ITEXT);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
*pi += 1;
}
break;
case AAGBUT:
case ARSGBUT:
- pFilm = (const FILM *)LockMem(hWinParts);
+ pFilm = (const FILM *)LockMem(g_hWinParts);
- iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi + NORMGRAPH], -1);
- MultiSetAniXY(iconArray[*pi], x, y);
- MultiSetZPosition(iconArray[*pi], Z_INV_BRECT + 1);
+ g_iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi + NORMGRAPH], -1);
+ MultiSetAniXY(g_iconArray[*pi], x, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT + 1);
*pi += 1;
break;
case FRGROUP:
- assert(flagFilm != 0); // Language flags not declared!
+ assert(g_flagFilm != 0); // Language flags not declared!
- pFilm = (const FILM *)LockMem(flagFilm);
+ pFilm = (const FILM *)LockMem(g_flagFilm);
if (_vm->_config->_isAmericanEnglishVersion && cd.box[i].bi == FIX_UK)
cd.box[i].bi = FIX_USA;
- iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi], -1);
- MultiSetAniXY(iconArray[*pi], x, y);
- MultiSetZPosition(iconArray[*pi], Z_INV_BRECT+2);
+ g_iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi], -1);
+ MultiSetAniXY(g_iconArray[*pi], x, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT+2);
*pi += 1;
break;
case FLIP:
- pFilm = (const FILM *)LockMem(hWinParts);
+ pFilm = (const FILM *)LockMem(g_hWinParts);
if (*pival)
- iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi], -1);
+ g_iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi], -1);
else
- iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi+1], -1);
- MultiSetAniXY(iconArray[*pi], x, y);
- MultiSetZPosition(iconArray[*pi], Z_INV_BRECT+1);
+ g_iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi+1], -1);
+ MultiSetAniXY(g_iconArray[*pi], x, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT+1);
*pi += 1;
// Stick in the text
@@ -2838,23 +2827,23 @@ static void AddBox(int *pi, const int i) {
LoadStringRes(SysString(cd.box[i].ixText), TextBufferAddr(), TBUFSZ);
} else {
assert(cd.box[i].ixText != USE_POINTER);
- LoadStringRes(configStrings[cd.box[i].ixText], TextBufferAddr(), TBUFSZ);
+ LoadStringRes(g_configStrings[cd.box[i].ixText], TextBufferAddr(), TBUFSZ);
}
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
TextBufferAddr(), 0, x + MDTEXT_XOFF, y + MDTEXT_YOFF, GetTagFontHandle(), TXT_RIGHT);
- MultiSetZPosition(iconArray[*pi], Z_INV_ITEXT);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
*pi += 1;
break;
case TOGGLE:
case TOGGLE1:
case TOGGLE2:
- pFilm = (const FILM *)LockMem(hWinParts);
+ pFilm = (const FILM *)LockMem(g_hWinParts);
cd.box[i].bi = *pival ? IX_TICK1 : IX_CROSS1;
- iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi + NORMGRAPH], -1);
- MultiSetAniXY(iconArray[*pi], x, y);
- MultiSetZPosition(iconArray[*pi], Z_INV_BRECT+1);
+ g_iconArray[*pi] = AddObject(&pFilm->reels[cd.box[i].bi + NORMGRAPH], -1);
+ MultiSetAniXY(g_iconArray[*pi], x, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT+1);
*pi += 1;
// Stick in the text
@@ -2863,39 +2852,39 @@ static void AddBox(int *pi, const int i) {
LoadStringRes(SysString(cd.box[i].ixText), TextBufferAddr(), TBUFSZ);
} else {
assert(cd.box[i].ixText != USE_POINTER);
- LoadStringRes(configStrings[cd.box[i].ixText], TextBufferAddr(), TBUFSZ);
+ LoadStringRes(g_configStrings[cd.box[i].ixText], TextBufferAddr(), TBUFSZ);
}
if (cd.box[i].boxType == TOGGLE2) {
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
TextBufferAddr(), 0, x + cd.box[i].w / 2, y + TOG2_YOFF,
GetTagFontHandle(), TXT_CENTER, 0);
} else {
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
TextBufferAddr(), 0, x + MDTEXT_XOFF, y + MDTEXT_YOFF,
GetTagFontHandle(), TXT_RIGHT, 0);
}
- MultiSetZPosition(iconArray[*pi], Z_INV_ITEXT);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
*pi += 1;
break;
case SLIDER:
- pFilm = (const FILM *)LockMem(hWinParts);
+ pFilm = (const FILM *)LockMem(g_hWinParts);
xdisp = SLIDE_RANGE*(*pival)/cd.box[i].w;
- iconArray[*pi] = AddObject(&pFilm->reels[IX_MDGROOVE], -1);
- MultiSetAniXY(iconArray[*pi], x, y);
- MultiSetZPosition(iconArray[*pi], Z_MDGROOVE);
+ g_iconArray[*pi] = AddObject(&pFilm->reels[IX_MDGROOVE], -1);
+ MultiSetAniXY(g_iconArray[*pi], x, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_MDGROOVE);
*pi += 1;
- iconArray[*pi] = AddObject(&pFilm->reels[IX_MDSLIDER], -1);
- MultiSetAniXY(iconArray[*pi], x+SLIDE_MINX+xdisp, y);
- MultiSetZPosition(iconArray[*pi], Z_MDSLIDER);
- assert(numMdSlides < MAXSLIDES);
- mdSlides[numMdSlides].num = i;
- mdSlides[numMdSlides].min = x + SLIDE_MINX;
- mdSlides[numMdSlides].max = x + SLIDE_MAXX;
- mdSlides[numMdSlides++].obj = iconArray[*pi];
+ g_iconArray[*pi] = AddObject(&pFilm->reels[IX_MDSLIDER], -1);
+ MultiSetAniXY(g_iconArray[*pi], x+SLIDE_MINX+xdisp, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_MDSLIDER);
+ assert(g_numMdSlides < MAXSLIDES);
+ g_mdSlides[g_numMdSlides].num = i;
+ g_mdSlides[g_numMdSlides].min = x + SLIDE_MINX;
+ g_mdSlides[g_numMdSlides].max = x + SLIDE_MAXX;
+ g_mdSlides[g_numMdSlides++].obj = g_iconArray[*pi];
*pi += 1;
// Stick in the text
@@ -2904,55 +2893,55 @@ static void AddBox(int *pi, const int i) {
LoadStringRes(SysString(cd.box[i].ixText), TextBufferAddr(), TBUFSZ);
} else {
assert(cd.box[i].ixText != USE_POINTER);
- LoadStringRes(configStrings[cd.box[i].ixText], TextBufferAddr(), TBUFSZ);
+ LoadStringRes(g_configStrings[cd.box[i].ixText], TextBufferAddr(), TBUFSZ);
}
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
TextBufferAddr(), 0, x+MDTEXT_XOFF, y+MDTEXT_YOFF, GetTagFontHandle(), TXT_RIGHT);
- MultiSetZPosition(iconArray[*pi], Z_INV_ITEXT);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
*pi += 1;
break;
case ROTATE:
- pFilm = (const FILM *)LockMem(hWinParts);
+ pFilm = (const FILM *)LockMem(g_hWinParts);
// Left one
- if (!bNoLanguage) {
- iconArray[*pi] = AddObject(&pFilm->reels[IX2_LEFT1], -1);
- MultiSetAniXY(iconArray[*pi], x-ROTX1, y);
- MultiSetZPosition(iconArray[*pi], Z_INV_BRECT + 1);
+ if (!g_bNoLanguage) {
+ g_iconArray[*pi] = AddObject(&pFilm->reels[IX2_LEFT1], -1);
+ MultiSetAniXY(g_iconArray[*pi], x-ROTX1, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT + 1);
*pi += 1;
// Right one
- iconArray[*pi] = AddObject( &pFilm->reels[IX2_RIGHT1], -1);
- MultiSetAniXY(iconArray[*pi], x + ROTX1, y);
- MultiSetZPosition(iconArray[*pi], Z_INV_BRECT + 1);
+ g_iconArray[*pi] = AddObject( &pFilm->reels[IX2_RIGHT1], -1);
+ MultiSetAniXY(g_iconArray[*pi], x + ROTX1, y);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT + 1);
*pi += 1;
// Stick in the text
assert(cd.box[i].textMethod == TM_INDEX);
LoadStringRes(SysString(cd.box[i].ixText), TextBufferAddr(), TBUFSZ);
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
TextBufferAddr(), 0, x + cd.box[i].w / 2, y + TOG2_YOFF,
GetTagFontHandle(), TXT_CENTER, 0);
- MultiSetZPosition(iconArray[*pi], Z_INV_ITEXT);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
*pi += 1;
}
// Current language's text
- if (LanguageDesc(displayedLanguage) == 0)
+ if (LanguageDesc(g_displayedLanguage) == 0)
break;
- LoadStringRes(LanguageDesc(displayedLanguage), TextBufferAddr(), TBUFSZ);
- iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), TextBufferAddr(), 0,
+ LoadStringRes(LanguageDesc(g_displayedLanguage), TextBufferAddr(), TBUFSZ);
+ g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), TextBufferAddr(), 0,
x + cd.box[i].w / 2, y + ROT_YOFF, GetTagFontHandle(), TXT_CENTER, 0);
- MultiSetZPosition(iconArray[*pi], Z_INV_ITEXT);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
*pi += 1;
// Current language's flag
- pFilm = (const FILM *)LockMem(LanguageFlag(displayedLanguage));
- iconArray[*pi] = AddObject(&pFilm->reels[0], -1);
- MultiSetAniXY(iconArray[*pi], x + FLAGX, y + FLAGY);
- MultiSetZPosition(iconArray[*pi], Z_INV_BRECT + 1);
+ pFilm = (const FILM *)LockMem(LanguageFlag(g_displayedLanguage));
+ g_iconArray[*pi] = AddObject(&pFilm->reels[0], -1);
+ MultiSetAniXY(g_iconArray[*pi], x + FLAGX, y + FLAGY);
+ MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT + 1);
*pi += 1;
break;
}
@@ -2965,7 +2954,7 @@ static void AddBoxes(bool bPosnSlide) {
int objCount = NUMHL; // Object count - allow for HL1, HL2 etc.
DumpIconArray();
- numMdSlides = 0;
+ g_numMdSlides = 0;
for (int i = 0; i < cd.NumBoxes; i++) {
AddBox(&objCount, i);
@@ -2973,32 +2962,32 @@ static void AddBoxes(bool bPosnSlide) {
if (cd.bExtraWin) {
if (bPosnSlide && !TinselV2)
- sliderYpos = sliderYmin + (cd.extraBase*(sliderYmax-sliderYmin))/(MAX_SAVED_FILES-NUM_RGROUP_BOXES);
+ g_sliderYpos = g_sliderYmin + (cd.extraBase*(g_sliderYmax-g_sliderYmin))/(MAX_SAVED_FILES-NUM_RGROUP_BOXES);
else if (bPosnSlide) {
// Tinsel 2 bPosnSlide code
- int lastY = sliderYpos;
+ int lastY = g_sliderYpos;
if (cd.box == loadBox || cd.box == saveBox)
- sliderYpos = sliderYmin + (cd.extraBase * (sliderRange)) /
+ g_sliderYpos = g_sliderYmin + (cd.extraBase * (sliderRange)) /
(MAX_SAVED_FILES - NUM_RGROUP_BOXES);
else if (cd.box == hopperBox1) {
- if (numScenes <= NUM_RGROUP_BOXES)
- sliderYpos = sliderYmin;
+ if (g_numScenes <= NUM_RGROUP_BOXES)
+ g_sliderYpos = g_sliderYmin;
else
- sliderYpos = sliderYmin + (cd.extraBase*(sliderRange))/(numScenes-NUM_RGROUP_BOXES);
+ g_sliderYpos = g_sliderYmin + (cd.extraBase*(sliderRange))/(g_numScenes-NUM_RGROUP_BOXES);
} else if (cd.box == hopperBox2) {
- if (numEntries <= NUM_RGROUP_BOXES)
- sliderYpos = sliderYmin;
+ if (g_numEntries <= NUM_RGROUP_BOXES)
+ g_sliderYpos = g_sliderYmin;
else
- sliderYpos = sliderYmin + (cd.extraBase * (sliderRange)) /
- (numEntries-NUM_RGROUP_BOXES);
+ g_sliderYpos = g_sliderYmin + (cd.extraBase * (sliderRange)) /
+ (g_numEntries-NUM_RGROUP_BOXES);
}
- MultiMoveRelXY(SlideObject, 0, sliderYpos - lastY);
+ MultiMoveRelXY(g_SlideObject, 0, g_sliderYpos - lastY);
}
if (!TinselV2)
- MultiSetAniXY(SlideObject, InvD[ino].inventoryX + 24 + 179, sliderYpos);
+ MultiSetAniXY(g_SlideObject, g_InvD[g_ino].inventoryX + 24 + 179, g_sliderYpos);
}
assert(objCount < MAX_ICONS); // added too many icons
@@ -3008,8 +2997,8 @@ static void AddBoxes(bool bPosnSlide) {
* Display the scroll bar slider.
*/
static void AddEWSlider(OBJECT **slide, const FILM *pfilm) {
- SlideObject = *slide = AddObject(&pfilm->reels[IX_SLIDE], -1);
- MultiSetAniXY(*slide, InvD[ino].inventoryX + 24 + 127, sliderYpos);
+ g_SlideObject = *slide = AddObject(&pfilm->reels[IX_SLIDE], -1);
+ MultiSetAniXY(*slide, g_InvD[g_ino].inventoryX + 24 + 127, g_sliderYpos);
MultiSetZPosition(*slide, Z_INV_MFRAME);
}
@@ -3021,7 +3010,7 @@ static int AddExtraWindow(int x, int y, OBJECT **retObj) {
const FILM *pfilm;
// Get the frame's data
- pfilm = (const FILM *)LockMem(hWinParts);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
x += TinselV2 ? 30 : 20;
y += TinselV2 ? 38 : 24;
@@ -3032,56 +3021,56 @@ static int AddExtraWindow(int x, int y, OBJECT **retObj) {
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
retObj[n] = AddObject(&pfilm->reels[IX_NTR], -1); // Top right
- MultiSetAniXY(retObj[n], x + (TinselV2 ? TLwidth + 312 : 152), y);
+ MultiSetAniXY(retObj[n], x + (TinselV2 ? g_TLwidth + 312 : 152), y);
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
retObj[n] = AddObject(&pfilm->reels[IX_BL], -1); // Bottom left
- MultiSetAniXY(retObj[n], x, y + (TinselV2 ? TLheight + 208 : 124));
+ MultiSetAniXY(retObj[n], x, y + (TinselV2 ? g_TLheight + 208 : 124));
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
retObj[n] = AddObject(&pfilm->reels[IX_BR], -1); // Bottom right
- MultiSetAniXY(retObj[n], x + (TinselV2 ? TLwidth + 312 : 152),
- y + (TinselV2 ? TLheight + 208 : 124));
+ MultiSetAniXY(retObj[n], x + (TinselV2 ? g_TLwidth + 312 : 152),
+ y + (TinselV2 ? g_TLheight + 208 : 124));
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
// Draw the edges
retObj[n] = AddObject(&pfilm->reels[IX_H156], -1); // Top
- MultiSetAniXY(retObj[n], x + (TinselV2 ? TLwidth : 6), y + NM_TBT);
+ MultiSetAniXY(retObj[n], x + (TinselV2 ? g_TLwidth : 6), y + NM_TBT);
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
retObj[n] = AddObject(&pfilm->reels[IX_H156], -1); // Bottom
- MultiSetAniXY(retObj[n], x + (TinselV2 ? TLwidth : 6), y +
- (TinselV2 ? TLheight + 208 + BLheight + NM_BSY : 143));
+ MultiSetAniXY(retObj[n], x + (TinselV2 ? g_TLwidth : 6), y +
+ (TinselV2 ? g_TLheight + 208 + g_BLheight + NM_BSY : 143));
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
retObj[n] = AddObject(&pfilm->reels[IX_V104], -1); // Left
- MultiSetAniXY(retObj[n], x + NM_LSX, y + (TinselV2 ? TLheight : 20));
+ MultiSetAniXY(retObj[n], x + NM_LSX, y + (TinselV2 ? g_TLheight : 20));
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
retObj[n] = AddObject(&pfilm->reels[IX_V104], -1); // Right 1
- MultiSetAniXY(retObj[n], x + (TinselV2 ? TLwidth + 312 + TRwidth + NM_RSX : 179),
- y + (TinselV2 ? TLheight : 20));
+ MultiSetAniXY(retObj[n], x + (TinselV2 ? g_TLwidth + 312 + g_TRwidth + NM_RSX : 179),
+ y + (TinselV2 ? g_TLheight : 20));
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
retObj[n] = AddObject(&pfilm->reels[IX_V104], -1); // Right 2
- MultiSetAniXY(retObj[n], x + (TinselV2 ? TLwidth + 312 + TRwidth + NM_SBL : 188),
- y + (TinselV2 ? TLheight : 20));
+ MultiSetAniXY(retObj[n], x + (TinselV2 ? g_TLwidth + 312 + g_TRwidth + NM_SBL : 188),
+ y + (TinselV2 ? g_TLheight : 20));
MultiSetZPosition(retObj[n], Z_INV_MFRAME);
n++;
if (TinselV2) {
- sliderYpos = sliderYmin = y + 27;
- sliderYmax = y + 273;
-
- retObj[n++] = SlideObject = AddObject( &pfilm->reels[IX_SLIDE], -1);
- MultiSetAniXY(SlideObject,
- x + TLwidth + 320 + TRwidth - NM_BG_POS_X + NM_BG_SIZ_X - 2,
- sliderYpos);
- MultiSetZPosition(SlideObject, Z_INV_MFRAME);
+ g_sliderYpos = g_sliderYmin = y + 27;
+ g_sliderYmax = y + 273;
+
+ retObj[n++] = g_SlideObject = AddObject( &pfilm->reels[IX_SLIDE], -1);
+ MultiSetAniXY(g_SlideObject,
+ x + g_TLwidth + 320 + g_TRwidth - NM_BG_POS_X + NM_BG_SIZ_X - 2,
+ g_sliderYpos);
+ MultiSetZPosition(g_SlideObject, Z_INV_MFRAME);
} else {
- sliderYpos = sliderYmin = y + 9;
- sliderYmax = y + 134;
+ g_sliderYpos = g_sliderYmin = y + 9;
+ g_sliderYmax = y + 134;
AddEWSlider(&retObj[n++], pfilm);
}
@@ -3099,17 +3088,17 @@ static void ConstructInventory(InventoryType filling) {
int eH, eV; // Extra width and height
int n = 0; // Index into object array
int zpos; // Z-position of frame
- int invX = InvD[ino].inventoryX;
- int invY = InvD[ino].inventoryY;
+ int invX = g_InvD[g_ino].inventoryX;
+ int invY = g_InvD[g_ino].inventoryY;
OBJECT **retObj;
const FILM *pfilm;
// Select the object array to use
if (filling == FULL || filling == CONF) {
- retObj = objArray; // Standard window
+ retObj = g_objArray; // Standard window
zpos = Z_INV_MFRAME;
} else {
- retObj = DobjArray; // Re-sizing window
+ retObj = g_DobjArray; // Re-sizing window
zpos = Z_INV_RFRAME;
}
@@ -3122,83 +3111,83 @@ static void ConstructInventory(InventoryType filling) {
}
// Get the frame's data
- pfilm = (const FILM *)LockMem(hWinParts);
+ pfilm = (const FILM *)LockMem(g_hWinParts);
// Standard window is of granular dimensions
if (filling == FULL) {
// Round-up/down to nearest number of icons
- if (SuppH > ITEM_WIDTH / 2)
- InvD[ino].NoofHicons++;
- if (SuppV > ITEM_HEIGHT / 2)
- InvD[ino].NoofVicons++;
- SuppH = SuppV = 0;
+ if (g_SuppH > ITEM_WIDTH / 2)
+ g_InvD[g_ino].NoofHicons++;
+ if (g_SuppV > ITEM_HEIGHT / 2)
+ g_InvD[g_ino].NoofVicons++;
+ g_SuppH = g_SuppV = 0;
}
// Extra width and height
- eH = (InvD[ino].NoofHicons - 1) * (ITEM_WIDTH+I_SEPARATION) + SuppH;
- eV = (InvD[ino].NoofVicons - 1) * (ITEM_HEIGHT+I_SEPARATION) + SuppV;
+ eH = (g_InvD[g_ino].NoofHicons - 1) * (ITEM_WIDTH+I_SEPARATION) + g_SuppH;
+ eV = (g_InvD[g_ino].NoofVicons - 1) * (ITEM_HEIGHT+I_SEPARATION) + g_SuppV;
// Which window frame corners to use
- if (TinselV2 && (ino == INV_CONV)) {
- TL = IX_TL;
- TR = IX2_TR4;
- BL = IX_BL;
- BR = IX_RBR;
- } else if ((filling == FULL) && (ino != INV_CONV)) {
- TL = IX_TL;
- TR = IX_TR;
- BL = IX_BL;
- BR = IX_BR;
+ if (TinselV2 && (g_ino == INV_CONV)) {
+ g_TL = IX_TL;
+ g_TR = IX2_TR4;
+ g_BL = IX_BL;
+ g_BR = IX_RBR;
+ } else if ((filling == FULL) && (g_ino != INV_CONV)) {
+ g_TL = IX_TL;
+ g_TR = IX_TR;
+ g_BL = IX_BL;
+ g_BR = IX_BR;
} else {
- TL = IX_RTL;
- TR = IX_RTR;
- BL = IX_BL;
- BR = IX_RBR;
+ g_TL = IX_RTL;
+ g_TR = IX_RTR;
+ g_BL = IX_BL;
+ g_BR = IX_RBR;
}
// Draw the four corners
- retObj[n] = AddObject(&pfilm->reels[TL], TL);
+ retObj[n] = AddObject(&pfilm->reels[g_TL], g_TL);
MultiSetAniXY(retObj[n], invX, invY);
MultiSetZPosition(retObj[n], zpos);
n++;
- retObj[n] = AddObject(&pfilm->reels[TR], TR);
- MultiSetAniXY(retObj[n], invX + TLwidth + eH, invY);
+ retObj[n] = AddObject(&pfilm->reels[g_TR], g_TR);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth + eH, invY);
MultiSetZPosition(retObj[n], zpos);
n++;
- retObj[n] = AddObject(&pfilm->reels[BL], BL);
- MultiSetAniXY(retObj[n], invX, invY + TLheight + eV);
+ retObj[n] = AddObject(&pfilm->reels[g_BL], g_BL);
+ MultiSetAniXY(retObj[n], invX, invY + g_TLheight + eV);
MultiSetZPosition(retObj[n], zpos);
n++;
- retObj[n] = AddObject(&pfilm->reels[BR], BR);
- MultiSetAniXY(retObj[n], invX + TLwidth + eH, invY + TLheight + eV);
+ retObj[n] = AddObject(&pfilm->reels[g_BR], g_BR);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth + eH, invY + g_TLheight + eV);
MultiSetZPosition(retObj[n], zpos);
n++;
// Draw extra Top and bottom parts
- if (InvD[ino].NoofHicons > 1) {
+ if (g_InvD[g_ino].NoofHicons > 1) {
// Top side
- retObj[n] = AddObject(&pfilm->reels[hFillers[InvD[ino].NoofHicons-2]], -1);
- MultiSetAniXY(retObj[n], invX + TLwidth, invY + NM_TBT);
+ retObj[n] = AddObject(&pfilm->reels[hFillers[g_InvD[g_ino].NoofHicons-2]], -1);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth, invY + NM_TBT);
MultiSetZPosition(retObj[n], zpos);
n++;
// Bottom of header box
if (filling == FULL) {
if (TinselV2) {
- retObj[n] = AddObject(&pfilm->reels[hFillers[InvD[ino].NoofHicons-2]], -1);
- MultiSetAniXY(retObj[n], invX + TLwidth, invY + NM_TBB);
+ retObj[n] = AddObject(&pfilm->reels[hFillers[g_InvD[g_ino].NoofHicons-2]], -1);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth, invY + NM_TBB);
MultiSetZPosition(retObj[n], zpos);
n++;
} else {
- retObj[n] = AddObject(&pfilm->reels[hFillers[InvD[ino].NoofHicons-2]], -1);
- MultiSetAniXY(retObj[n], invX + TLwidth, invY + M_TBB + 1);
+ retObj[n] = AddObject(&pfilm->reels[hFillers[g_InvD[g_ino].NoofHicons-2]], -1);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth, invY + M_TBB + 1);
MultiSetZPosition(retObj[n], zpos);
n++;
// Extra bits for conversation - hopefully temporary
- if (ino == INV_CONV) {
+ if (g_ino == INV_CONV) {
retObj[n] = AddObject(&pfilm->reels[IX_H26], -1);
- MultiSetAniXY(retObj[n], invX + TLwidth - 2, invY + M_TBB + 1);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth - 2, invY + M_TBB + 1);
MultiSetZPosition(retObj[n], zpos);
n++;
@@ -3211,16 +3200,16 @@ static void ConstructInventory(InventoryType filling) {
}
// Bottom side
- retObj[n] = AddObject(&pfilm->reels[hFillers[InvD[ino].NoofHicons-2]], -1);
- MultiSetAniXY(retObj[n], invX + TLwidth, invY + TLheight + eV + BLheight + NM_BSY);
+ retObj[n] = AddObject(&pfilm->reels[hFillers[g_InvD[g_ino].NoofHicons-2]], -1);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth, invY + g_TLheight + eV + g_BLheight + NM_BSY);
MultiSetZPosition(retObj[n], zpos);
n++;
}
- if (SuppH) {
- int offx = TLwidth + eH - (TinselV2 ? ITEM_WIDTH + I_SEPARATION : 26);
- if (offx < TLwidth) // Not too far!
- offx = TLwidth;
+ if (g_SuppH) {
+ int offx = g_TLwidth + eH - (TinselV2 ? ITEM_WIDTH + I_SEPARATION : 26);
+ if (offx < g_TLwidth) // Not too far!
+ offx = g_TLwidth;
// Top side extra
retObj[n] = AddObject(&pfilm->reels[IX_H26], -1);
@@ -3230,39 +3219,39 @@ static void ConstructInventory(InventoryType filling) {
// Bottom side extra
retObj[n] = AddObject(&pfilm->reels[IX_H26], -1);
- MultiSetAniXY(retObj[n], invX + offx, invY + TLheight + eV + BLheight + NM_BSY);
+ MultiSetAniXY(retObj[n], invX + offx, invY + g_TLheight + eV + g_BLheight + NM_BSY);
MultiSetZPosition(retObj[n], zpos);
n++;
}
// Draw extra side parts
- if (InvD[ino].NoofVicons > 1) {
+ if (g_InvD[g_ino].NoofVicons > 1) {
// Left side
- retObj[n] = AddObject(&pfilm->reels[vFillers[InvD[ino].NoofVicons-2]], -1);
- MultiSetAniXY(retObj[n], invX + NM_LSX, invY + TLheight);
+ retObj[n] = AddObject(&pfilm->reels[vFillers[g_InvD[g_ino].NoofVicons-2]], -1);
+ MultiSetAniXY(retObj[n], invX + NM_LSX, invY + g_TLheight);
MultiSetZPosition(retObj[n], zpos);
n++;
// Left side of scroll bar
- if (filling == FULL && ino != INV_CONV) {
- retObj[n] = AddObject(&pfilm->reels[vFillers[InvD[ino].NoofVicons-2]], -1);
+ if (filling == FULL && g_ino != INV_CONV) {
+ retObj[n] = AddObject(&pfilm->reels[vFillers[g_InvD[g_ino].NoofVicons-2]], -1);
if (TinselV2)
- MultiSetAniXY(retObj[n], invX + TLwidth + eH + TRwidth + NM_SBL, invY + TLheight);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth + eH + g_TRwidth + NM_SBL, invY + g_TLheight);
else
- MultiSetAniXY(retObj[n], invX + TLwidth + eH + M_SBL + 1, invY + TLheight);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth + eH + M_SBL + 1, invY + g_TLheight);
MultiSetZPosition(retObj[n], zpos);
n++;
}
// Right side
- retObj[n] = AddObject(&pfilm->reels[vFillers[InvD[ino].NoofVicons-2]], -1);
- MultiSetAniXY(retObj[n], invX + TLwidth + eH + TRwidth + NM_RSX, invY + TLheight);
+ retObj[n] = AddObject(&pfilm->reels[vFillers[g_InvD[g_ino].NoofVicons-2]], -1);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth + eH + g_TRwidth + NM_RSX, invY + g_TLheight);
MultiSetZPosition(retObj[n], zpos);
n++;
}
- if (SuppV) {
- int offy = TLheight + eV - (TinselV2 ? ITEM_HEIGHT + I_SEPARATION : 26);
+ if (g_SuppV) {
+ int offy = g_TLheight + eV - (TinselV2 ? ITEM_HEIGHT + I_SEPARATION : 26);
int minAmount = TinselV2 ? 20 : 5;
if (offy < minAmount)
offy = minAmount;
@@ -3275,7 +3264,7 @@ static void ConstructInventory(InventoryType filling) {
// Right side extra
retObj[n] = AddObject(&pfilm->reels[IX_V26], -1);
- MultiSetAniXY(retObj[n], invX + TLwidth + eH + TRwidth + NM_RSX, invY + offy);
+ MultiSetAniXY(retObj[n], invX + g_TLwidth + eH + g_TRwidth + NM_RSX, invY + offy);
MultiSetZPosition(retObj[n], zpos);
n++;
}
@@ -3296,20 +3285,20 @@ static void ConstructInventory(InventoryType filling) {
AddBackground(rect, title, eH, eV, FROM_HANDLE);
}
- if (ino == INV_CONV) {
- SlideObject = NULL;
+ if (g_ino == INV_CONV) {
+ g_SlideObject = NULL;
if (TinselV2) {
// !!!!! MAGIC NUMBER ALERT !!!!!
// Make sure it's big enough for the heading
- if (MultiLeftmost(retObj[n-1]) < InvD[INV_CONV].inventoryX + 10) {
- InvD[INV_CONV].NoofHicons++;
+ if (MultiLeftmost(retObj[n-1]) < g_InvD[INV_CONV].inventoryX + 10) {
+ g_InvD[INV_CONV].NoofHicons++;
ConstructInventory(FULL);
}
}
- } else if (InvD[ino].NoofItems > InvD[ino].NoofHicons*InvD[ino].NoofVicons) {
- sliderYmin = TLheight - (TinselV2 ? 2 : 1);
- sliderYmax = TLheight + eV + (TinselV2 ? 12 : 10);
+ } else if (g_InvD[g_ino].NoofItems > g_InvD[g_ino].NoofHicons*g_InvD[g_ino].NoofVicons) {
+ g_sliderYmin = g_TLheight - (TinselV2 ? 2 : 1);
+ g_sliderYmax = g_TLheight + eV + (TinselV2 ? 12 : 10);
AddSlider(&retObj[n++], pfilm);
}
@@ -3333,7 +3322,7 @@ static void ConstructInventory(InventoryType filling) {
assert(n < MAX_WCOMP); // added more parts than we can handle!
// Reposition returns true if needs to move
- if (InvD[ino].bMoveable && filling == FULL && RePosition()) {
+ if (g_InvD[g_ino].bMoveable && filling == FULL && RePosition()) {
ConstructInventory(FULL);
}
}
@@ -3348,32 +3337,32 @@ static bool RePosition() {
int p;
bool bMoveitMoveit = false;
- assert(RectObject); // no recangle object!
+ assert(g_RectObject); // no recangle object!
// Test for off-screen horizontally
- p = MultiLeftmost(RectObject);
+ p = MultiLeftmost(g_RectObject);
if (p > MAXLEFT) {
// Too far to the right
- InvD[ino].inventoryX += MAXLEFT - p;
+ g_InvD[g_ino].inventoryX += MAXLEFT - p;
bMoveitMoveit = true; // I like to....
} else {
// Too far to the left?
- p = MultiRightmost(RectObject);
+ p = MultiRightmost(g_RectObject);
if (p < MINRIGHT) {
- InvD[ino].inventoryX += MINRIGHT - p;
+ g_InvD[g_ino].inventoryX += MINRIGHT - p;
bMoveitMoveit = true; // I like to....
}
}
// Test for off-screen vertically
- p = MultiHighest(RectObject);
+ p = MultiHighest(g_RectObject);
if (p < MINTOP) {
// Too high
- InvD[ino].inventoryY += MINTOP - p;
+ g_InvD[g_ino].inventoryY += MINTOP - p;
bMoveitMoveit = true; // I like to....
} else if (p > MAXTOP) {
// Too low
- InvD[ino].inventoryY += MAXTOP - p;
+ g_InvD[g_ino].inventoryY += MAXTOP - p;
bMoveitMoveit = true; // I like to....
}
@@ -3393,7 +3382,7 @@ static void AlterCursor(int num) {
IMAGE *pim;
// Get pointer to image
- pim = GetImageFromFilm(hWinParts, num, &pfreel);
+ pim = GetImageFromFilm(g_hWinParts, num, &pfreel);
// Poke in the background palette
pim->hImgPal = TO_LE_32(BgPal());
@@ -3414,7 +3403,7 @@ static void InvCursor(InvCursorFN fn, int CurX, int CurY) {
bool restoreMain = false;
// If currently dragging, don't be messing about with the cursor shape
- if (InvDragging != ID_NONE)
+ if (g_InvDragging != ID_NONE)
return;
switch (fn) {
@@ -3427,7 +3416,7 @@ static void InvCursor(InvCursorFN fn, int CurX, int CurY) {
area = InvArea(CurX, CurY);
// Check for POINTED events
- if (ino == INV_CONF)
+ if (g_ino == INV_CONF)
InvBoxes(area == I_BODY, CurX, CurY);
else
InvLabels(area == I_BODY, CurX, CurY);
@@ -3445,7 +3434,7 @@ static void InvCursor(InvCursorFN fn, int CurX, int CurY) {
case I_TLEFT:
case I_BRIGHT:
- if (!InvD[ino].resizable)
+ if (!g_InvD[g_ino].resizable)
restoreMain = true;
else if (ICursor != IC_DR) {
AlterCursor(IX_CURDD);
@@ -3455,7 +3444,7 @@ static void InvCursor(InvCursorFN fn, int CurX, int CurY) {
case I_TRIGHT:
case I_BLEFT:
- if (!InvD[ino].resizable)
+ if (!g_InvD[g_ino].resizable)
restoreMain = true;
else if (ICursor != IC_UR) {
AlterCursor(IX_CURDU);
@@ -3465,7 +3454,7 @@ static void InvCursor(InvCursorFN fn, int CurX, int CurY) {
case I_TOP:
case I_BOTTOM:
- if (!InvD[ino].resizable) {
+ if (!g_InvD[g_ino].resizable) {
restoreMain = true;
break;
}
@@ -3477,7 +3466,7 @@ static void InvCursor(InvCursorFN fn, int CurX, int CurY) {
case I_LEFT:
case I_RIGHT:
- if (!InvD[ino].resizable)
+ if (!g_InvD[g_ino].resizable)
restoreMain = true;
else if (ICursor != IC_LR) {
AlterCursor(IX_CURLR);
@@ -3516,7 +3505,7 @@ static void InvCursor(InvCursorFN fn, int CurX, int CurY) {
extern void ConvAction(int index) {
- assert(ino == INV_CONV); // not conv. window!
+ assert(g_ino == INV_CONV); // not conv. window!
PMOVER pMover = TinselV2 ? GetMover(GetLeadId()) : NULL;
switch (index) {
@@ -3524,36 +3513,36 @@ extern void ConvAction(int index) {
return;
case INV_CLOSEICON:
- thisIcon = -1; // Postamble
+ g_thisIcon = -1; // Postamble
break;
case INV_OPENICON:
// Store the direction the lead character is facing in when the conversation starts
if (TinselV2)
- initialDirection = GetMoverDirection(pMover);
- thisIcon = -2; // Preamble
+ g_initialDirection = GetMoverDirection(pMover);
+ g_thisIcon = -2; // Preamble
break;
default:
- thisIcon = InvD[ino].contents[index];
+ g_thisIcon = g_InvD[g_ino].contents[index];
break;
}
if (!TinselV2)
- RunPolyTinselCode(thisConvPoly, CONVERSE, PLR_NOEVENT, true);
+ RunPolyTinselCode(g_thisConvPoly, CONVERSE, PLR_NOEVENT, true);
else {
// If the lead's direction has changed for any reason (such as having broken the
// fourth wall and talked to the screen), reset back to the original direction
DIRECTION currDirection = GetMoverDirection(pMover);
- if (currDirection != initialDirection) {
- SetMoverDirection(pMover, initialDirection);
+ if (currDirection != g_initialDirection) {
+ SetMoverDirection(pMover, g_initialDirection);
SetMoverStanding(pMover);
}
- if (thisConvPoly != NOPOLY)
- PolygonEvent(nullContext, thisConvPoly, CONVERSE, 0, false, 0);
+ if (g_thisConvPoly != NOPOLY)
+ PolygonEvent(nullContext, g_thisConvPoly, CONVERSE, 0, false, 0);
else
- ActorEvent(nullContext, thisConvActor, CONVERSE, false, 0);
+ ActorEvent(nullContext, g_thisConvActor, CONVERSE, false, 0);
}
}
@@ -3566,18 +3555,18 @@ extern void ConvAction(int index) {
* Note: ano may (will probably) be set when it's a polygon.
*/
extern void SetConvDetails(CONV_PARAM fn, HPOLYGON hPoly, int ano) {
- thisConvFn = fn;
- thisConvPoly = hPoly;
- thisConvActor = ano;
+ g_thisConvFn = fn;
+ g_thisConvPoly = hPoly;
+ g_thisConvActor = ano;
- bMoveOnUnHide = true;
+ g_bMoveOnUnHide = true;
// Get the Actor Tag's or Tagged Actor's label for the conversation window title
if (hPoly != NOPOLY) {
int x, y;
- GetTagTag(hPoly, &InvD[INV_CONV].hInvTitle, &x, &y);
+ GetTagTag(hPoly, &g_InvD[INV_CONV].hInvTitle, &x, &y);
} else {
- InvD[INV_CONV].hInvTitle = GetActorTagHandle(ano);
+ g_InvD[INV_CONV].hInvTitle = GetActorTagHandle(ano);
}
}
@@ -3590,27 +3579,27 @@ extern void PermaConvIcon(int icon, bool bEnd) {
int i;
// See if it's already there
- for (i = 0; i < numPermIcons; i++) {
- if (permIcons[i] == icon)
+ for (i = 0; i < g_numPermIcons; i++) {
+ if (g_permIcons[i] == icon)
break;
}
// Add it if it isn't already there
- if (i == numPermIcons) {
- assert(numPermIcons < MAX_PERMICONS);
+ if (i == g_numPermIcons) {
+ assert(g_numPermIcons < MAX_PERMICONS);
- if (bEnd || !numEndIcons) {
+ if (bEnd || !g_numEndIcons) {
// Add it at the end
- permIcons[numPermIcons++] = icon;
+ g_permIcons[g_numPermIcons++] = icon;
if (bEnd)
- numEndIcons++;
+ g_numEndIcons++;
} else {
// Insert before end icons
- memmove(&permIcons[numPermIcons-numEndIcons+1],
- &permIcons[numPermIcons-numEndIcons],
- numEndIcons * sizeof(int));
- permIcons[numPermIcons-numEndIcons] = icon;
- numPermIcons++;
+ memmove(&g_permIcons[g_numPermIcons-g_numEndIcons+1],
+ &g_permIcons[g_numPermIcons-g_numEndIcons],
+ g_numEndIcons * sizeof(int));
+ g_permIcons[g_numPermIcons-g_numEndIcons] = icon;
+ g_numPermIcons++;
}
}
}
@@ -3619,21 +3608,21 @@ extern void PermaConvIcon(int icon, bool bEnd) {
extern void convPos(int fn) {
if (fn == CONV_DEF)
- InvD[INV_CONV].inventoryY = 8;
+ g_InvD[INV_CONV].inventoryY = 8;
else if (fn == CONV_BOTTOM)
- InvD[INV_CONV].inventoryY = 150;
+ g_InvD[INV_CONV].inventoryY = 150;
}
extern void ConvPoly(HPOLYGON hPoly) {
- thisConvPoly = hPoly;
+ g_thisConvPoly = hPoly;
}
extern int GetIcon() {
- return thisIcon;
+ return g_thisIcon;
}
extern void CloseDownConv() {
- if (InventoryState == ACTIVE_INV && ino == INV_CONV) {
+ if (g_InventoryState == ACTIVE_INV && g_ino == INV_CONV) {
KillInventory();
}
}
@@ -3642,43 +3631,43 @@ extern void HideConversation(bool bHide) {
int aniX, aniY;
int i;
- if (InventoryState == ACTIVE_INV && ino == INV_CONV) {
+ if (g_InventoryState == ACTIVE_INV && g_ino == INV_CONV) {
if (bHide) {
// Move all the window and icons off-screen
- for (i = 0; objArray[i] && i < MAX_WCOMP; i++) {
- MultiAdjustXY(objArray[i], 2 * SCREEN_WIDTH, 0);
+ for (i = 0; g_objArray[i] && i < MAX_WCOMP; i++) {
+ MultiAdjustXY(g_objArray[i], 2 * SCREEN_WIDTH, 0);
}
- for (i = 0; iconArray[i] && i < MAX_ICONS; i++) {
- MultiAdjustXY(iconArray[i], 2 * SCREEN_WIDTH, 0);
+ for (i = 0; g_iconArray[i] && i < MAX_ICONS; i++) {
+ MultiAdjustXY(g_iconArray[i], 2 * SCREEN_WIDTH, 0);
}
// Window is hidden
- InventoryHidden = true;
+ g_InventoryHidden = true;
// Remove any labels
InvLabels(false, 0, 0);
} else {
// Window is not hidden
- InventoryHidden = false;
+ g_InventoryHidden = false;
- if (TinselV2 && ItemsChanged)
+ if (TinselV2 && g_ItemsChanged)
// Just rebuild the whole thing
ConstructInventory(FULL);
else {
// Move it all back on-screen
- for (i = 0; objArray[i] && i < MAX_WCOMP; i++) {
- MultiAdjustXY(objArray[i], -2 * SCREEN_WIDTH, 0);
+ for (i = 0; g_objArray[i] && i < MAX_WCOMP; i++) {
+ MultiAdjustXY(g_objArray[i], -2 * SCREEN_WIDTH, 0);
}
// Don't flash if items changed. If they have, will be redrawn anyway.
- if (TinselV2 || !ItemsChanged) {
- for (i = 0; iconArray[i] && i < MAX_ICONS; i++) {
- MultiAdjustXY(iconArray[i], -2*SCREEN_WIDTH, 0);
+ if (TinselV2 || !g_ItemsChanged) {
+ for (i = 0; g_iconArray[i] && i < MAX_ICONS; i++) {
+ MultiAdjustXY(g_iconArray[i], -2*SCREEN_WIDTH, 0);
}
}
}
- if (TinselV2 && bMoveOnUnHide) {
+ if (TinselV2 && g_bMoveOnUnHide) {
/*
* First time, position it appropriately
*/
@@ -3686,17 +3675,17 @@ extern void HideConversation(bool bHide) {
int x, y, deltay;
// Only do it once per conversation
- bMoveOnUnHide = false;
+ g_bMoveOnUnHide = false;
// Current center of the window
- left = MultiLeftmost(RectObject);
- center = (MultiRightmost(RectObject) + left) / 2;
+ left = MultiLeftmost(g_RectObject);
+ center = (MultiRightmost(g_RectObject) + left) / 2;
// Get the x-offset for the conversation window
- if (thisConvActor) {
+ if (g_thisConvActor) {
int Loffset, Toffset;
- GetActorMidTop(thisConvActor, &x, &y);
+ GetActorMidTop(g_thisConvActor, &x, &y);
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
x -= Loffset;
y -= Toffset;
@@ -3706,19 +3695,19 @@ extern void HideConversation(bool bHide) {
}
// Save old y-position
- deltay = InvD[INV_CONV].inventoryY;
+ deltay = g_InvD[INV_CONV].inventoryY;
- switch (thisConvFn) {
+ switch (g_thisConvFn) {
case CONV_TOP:
- InvD[INV_CONV].inventoryY = SysVar(SV_CONV_TOPY);
+ g_InvD[INV_CONV].inventoryY = SysVar(SV_CONV_TOPY);
break;
case CONV_BOTTOM:
- InvD[INV_CONV].inventoryY = SysVar(SV_CONV_BOTY);
+ g_InvD[INV_CONV].inventoryY = SysVar(SV_CONV_BOTY);
break;
case CONV_DEF:
- InvD[INV_CONV].inventoryY = y - SysVar(SV_CONV_ABOVE_Y);
+ g_InvD[INV_CONV].inventoryY = y - SysVar(SV_CONV_ABOVE_Y);
break;
default:
@@ -3726,34 +3715,34 @@ extern void HideConversation(bool bHide) {
}
// Calculate y change
- deltay = InvD[INV_CONV].inventoryY - deltay;
+ deltay = g_InvD[INV_CONV].inventoryY - deltay;
// Move it all
- for (i = 0; objArray[i] && i < MAX_WCOMP; i++) {
- MultiMoveRelXY(objArray[i], x - center, deltay);
+ for (i = 0; g_objArray[i] && i < MAX_WCOMP; i++) {
+ MultiMoveRelXY(g_objArray[i], x - center, deltay);
}
- for (i = 0; iconArray[i] && i < MAX_ICONS; i++) {
- MultiMoveRelXY(iconArray[i], x - center, deltay);
+ for (i = 0; g_iconArray[i] && i < MAX_ICONS; i++) {
+ MultiMoveRelXY(g_iconArray[i], x - center, deltay);
}
- InvD[INV_CONV].inventoryX += x - center;
+ g_InvD[INV_CONV].inventoryX += x - center;
/*
* Now positioned as worked out
* - but it must be in a sensible place
*/
- if (MultiLeftmost(RectObject) < SysVar(SV_CONV_MINX))
- x = SysVar(SV_CONV_MINX) - MultiLeftmost(RectObject);
- else if (MultiRightmost(RectObject) > SCREEN_WIDTH - SysVar(SV_CONV_MINX))
- x = SCREEN_WIDTH - SysVar(SV_CONV_MINX) - MultiRightmost(RectObject);
+ if (MultiLeftmost(g_RectObject) < SysVar(SV_CONV_MINX))
+ x = SysVar(SV_CONV_MINX) - MultiLeftmost(g_RectObject);
+ else if (MultiRightmost(g_RectObject) > SCREEN_WIDTH - SysVar(SV_CONV_MINX))
+ x = SCREEN_WIDTH - SysVar(SV_CONV_MINX) - MultiRightmost(g_RectObject);
else
x = 0;
- if (thisConvFn == CONV_DEF && MultiHighest(RectObject) < SysVar(SV_CONV_MINY)
- && thisConvActor) {
+ if (g_thisConvFn == CONV_DEF && MultiHighest(g_RectObject) < SysVar(SV_CONV_MINY)
+ && g_thisConvActor) {
int Loffset, Toffset;
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
- y = GetActorBottom(thisConvActor) - MultiHighest(RectObject) +
+ y = GetActorBottom(g_thisConvActor) - MultiHighest(g_RectObject) +
SysVar(SV_CONV_BELOW_Y);
y -= Toffset;
}
@@ -3761,28 +3750,28 @@ extern void HideConversation(bool bHide) {
y = 0;
if (x || y) {
- for (i = 0; objArray[i] && i < MAX_WCOMP; i++) {
- MultiMoveRelXY(objArray[i], x, y);
+ for (i = 0; g_objArray[i] && i < MAX_WCOMP; i++) {
+ MultiMoveRelXY(g_objArray[i], x, y);
}
- for (i = 0; iconArray[i] && i < MAX_ICONS; i++) {
- MultiMoveRelXY(iconArray[i], x, y);
+ for (i = 0; g_iconArray[i] && i < MAX_ICONS; i++) {
+ MultiMoveRelXY(g_iconArray[i], x, y);
}
- InvD[INV_CONV].inventoryX += x;
- InvD[INV_CONV].inventoryY += y;
+ g_InvD[INV_CONV].inventoryX += x;
+ g_InvD[INV_CONV].inventoryY += y;
}
/*
* Oh shit! We might have gone off the bottom
*/
- if (MultiLowest(RectObject) > SCREEN_BOX_HEIGHT2 - SysVar(SV_CONV_MINY)) {
- y = (SCREEN_BOX_HEIGHT2 - SysVar(SV_CONV_MINY)) - MultiLowest(RectObject);
- for (i = 0; objArray[i] && i < MAX_WCOMP; i++) {
- MultiMoveRelXY(objArray[i], 0, y);
+ if (MultiLowest(g_RectObject) > SCREEN_BOX_HEIGHT2 - SysVar(SV_CONV_MINY)) {
+ y = (SCREEN_BOX_HEIGHT2 - SysVar(SV_CONV_MINY)) - MultiLowest(g_RectObject);
+ for (i = 0; g_objArray[i] && i < MAX_WCOMP; i++) {
+ MultiMoveRelXY(g_objArray[i], 0, y);
}
- for (i = 0; iconArray[i] && i < MAX_ICONS; i++) {
- MultiMoveRelXY(iconArray[i], 0, y);
+ for (i = 0; g_iconArray[i] && i < MAX_ICONS; i++) {
+ MultiMoveRelXY(g_iconArray[i], 0, y);
}
- InvD[INV_CONV].inventoryY += y;
+ g_InvD[INV_CONV].inventoryY += y;
}
}
@@ -3793,7 +3782,7 @@ extern void HideConversation(bool bHide) {
}
extern bool ConvIsHidden() {
- return InventoryHidden;
+ return g_InventoryHidden;
}
@@ -3808,8 +3797,8 @@ extern void PopUpInventory(int invno) {
assert(invno == INV_1 || invno == INV_2 || invno == INV_CONV
|| invno == INV_CONF || invno == INV_MENU); // Trying to open illegal inventory
- if (InventoryState == IDLE_INV) {
- bReOpenMenu = false; // Better safe than sorry...
+ if (g_InventoryState == IDLE_INV) {
+ g_bReOpenMenu = false; // Better safe than sorry...
DisableTags(); // Tags disabled during inventory
if (TinselV2)
@@ -3821,25 +3810,25 @@ extern void PopUpInventory(int invno) {
_vm->_pcmMusic->dim(false);
// Start conversation with permanent contents
- memset(InvD[INV_CONV].contents, 0, MAX_ININV*sizeof(int));
- memcpy(InvD[INV_CONV].contents, permIcons, numPermIcons*sizeof(int));
- InvD[INV_CONV].NoofItems = numPermIcons;
+ memset(g_InvD[INV_CONV].contents, 0, MAX_ININV*sizeof(int));
+ memcpy(g_InvD[INV_CONV].contents, g_permIcons, g_numPermIcons*sizeof(int));
+ g_InvD[INV_CONV].NoofItems = g_numPermIcons;
if (TinselV2)
- InvD[INV_CONV].NoofHicons = numPermIcons;
+ g_InvD[INV_CONV].NoofHicons = g_numPermIcons;
else
- thisIcon = 0;
+ g_thisIcon = 0;
} else if (invno == INV_CONF) { // Configuration window?
cd.selBox = NOBOX;
cd.pointBox = NOBOX;
}
- ino = invno; // The open inventory
+ g_ino = invno; // The open inventory
- ItemsChanged = false; // Nothing changed
- InvDragging = ID_NONE; // Not dragging
- InventoryState = ACTIVE_INV; // Inventory actiive
- InventoryHidden = false; // Not hidden
- InventoryMaximised = InvD[ino].bMax;
+ g_ItemsChanged = false; // Nothing changed
+ g_InvDragging = ID_NONE; // Not dragging
+ g_InventoryState = ACTIVE_INV; // Inventory actiive
+ g_InventoryHidden = false; // Not hidden
+ g_InventoryMaximised = g_InvD[g_ino].bMax;
if (invno != INV_CONF) // Configuration window?
ConstructInventory(FULL); // Draw it up
else {
@@ -3849,10 +3838,10 @@ extern void PopUpInventory(int invno) {
}
static void SetMenuGlobals(CONFINIT *ci) {
- InvD[INV_CONF].MinHicons = InvD[INV_CONF].MaxHicons = InvD[INV_CONF].NoofHicons = ci->h;
- InvD[INV_CONF].MaxVicons = InvD[INV_CONF].MinVicons = InvD[INV_CONF].NoofVicons = ci->v;
- InvD[INV_CONF].inventoryX = ci->x;
- InvD[INV_CONF].inventoryY = ci->y;
+ g_InvD[INV_CONF].MinHicons = g_InvD[INV_CONF].MaxHicons = g_InvD[INV_CONF].NoofHicons = ci->h;
+ g_InvD[INV_CONF].MaxVicons = g_InvD[INV_CONF].MinVicons = g_InvD[INV_CONF].NoofVicons = ci->v;
+ g_InvD[INV_CONF].inventoryX = ci->x;
+ g_InvD[INV_CONF].inventoryY = ci->y;
cd.bExtraWin = ci->bExtraWin;
cd.box = ci->Box;
cd.NumBoxes = ci->NumBoxes;
@@ -3860,9 +3849,9 @@ static void SetMenuGlobals(CONFINIT *ci) {
if (TinselV2) {
if ((ci->ixHeading != NO_HEADING) && SysString(ci->ixHeading))
- InvD[INV_MENU].hInvTitle = SysString(ci->ixHeading);
+ g_InvD[INV_MENU].hInvTitle = SysString(ci->ixHeading);
else
- InvD[INV_MENU].hInvTitle = NO_HEADING;
+ g_InvD[INV_MENU].hInvTitle = NO_HEADING;
}
}
@@ -3876,11 +3865,11 @@ extern void OpenMenu(CONFTYPE menuType) {
if (TinselV0)
return;
- if (InventoryState != IDLE_INV)
+ if (g_InventoryState != IDLE_INV)
return;
- InvD[INV_CONF].resizable = false;
- InvD[INV_CONF].bMoveable = false;
+ g_InvD[INV_CONF].resizable = false;
+ g_InvD[INV_CONF].bMoveable = false;
switch (menuType) {
case MAIN_MENU:
@@ -3915,7 +3904,7 @@ extern void OpenMenu(CONFTYPE menuType) {
case SOUND_MENU:
if (TinselV2)
- displayedLanguage = TextLanguage();
+ g_displayedLanguage = TextLanguage();
#if 1
// FIXME: Hack to setup CONFBOX pointer to data in the global Config object
if (TinselV2) {
@@ -4003,16 +3992,16 @@ extern void OpenMenu(CONFTYPE menuType) {
case TOP_WINDOW:
SetMenuGlobals(&ciTopWin);
- ino = INV_CONF;
+ g_ino = INV_CONF;
ConstructInventory(CONF); // Draw it up
- InventoryState = BOGUS_INV;
+ g_InventoryState = BOGUS_INV;
return;
default:
return;
}
- if (HeldItem != INV_NOICON)
+ if (g_heldItem != INV_NOICON)
DelAuxCursor(); // no longer aux cursor
PopUpInventory(INV_CONF);
@@ -4045,38 +4034,38 @@ extern void OpenMenu(CONFTYPE menuType) {
* Close down an inventory window.
*/
extern void KillInventory() {
- if (objArray[0] != NULL) {
+ if (g_objArray[0] != NULL) {
DumpObjArray();
DumpDobjArray();
DumpIconArray();
}
- if (InventoryState == ACTIVE_INV) {
+ if (g_InventoryState == ACTIVE_INV) {
EnableTags();
if (TinselV2)
EnablePointing();
- InvD[ino].bMax = InventoryMaximised;
+ g_InvD[g_ino].bMax = g_InventoryMaximised;
UnHideCursorTrails();
_vm->divertKeyInput(NULL);
}
- InventoryState = IDLE_INV;
+ g_InventoryState = IDLE_INV;
- if (bReOpenMenu) {
- bReOpenMenu = false;
+ if (g_bReOpenMenu) {
+ g_bReOpenMenu = false;
OpenMenu(MAIN_MENU);
// Write config changes
_vm->_config->writeToDisk();
- } else if (ino == INV_CONF)
+ } else if (g_ino == INV_CONF)
InventoryIconCursor(false);
if (TinselV2)
// Pump up the volume
- if (ino == INV_CONV)
+ if (g_ino == INV_CONV)
_vm->_pcmMusic->unDim(false);
g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false); // Hide VK after save dialog closes
@@ -4084,15 +4073,15 @@ extern void KillInventory() {
extern void CloseInventory() {
// If not active, ignore this
- if (InventoryState != ACTIVE_INV)
+ if (g_InventoryState != ACTIVE_INV)
return;
// If hidden, a conversation action is still underway - ignore this
- if (InventoryHidden)
+ if (g_InventoryHidden)
return;
// If conversation, this is a closeing event
- if (ino == INV_CONV)
+ if (g_ino == INV_CONV)
ConvAction(INV_CLOSEICON);
KillInventory();
@@ -4117,13 +4106,13 @@ extern void InventoryProcess(CORO_PARAM, const void *) {
CORO_BEGIN_CODE(_ctx);
if (NumberOfLanguages() <= 1)
- bNoLanguage = true;
+ g_bNoLanguage = true;
while (1) {
CORO_SLEEP(1); // allow scheduling
- if (objArray[0] != NULL) {
- if (ItemsChanged && ino != INV_CONF && !InventoryHidden) {
+ if (g_objArray[0] != NULL) {
+ if (g_ItemsChanged && g_ino != INV_CONF && !g_InventoryHidden) {
FillInInventory();
// Needed when clicking on scroll bar.
@@ -4131,15 +4120,15 @@ extern void InventoryProcess(CORO_PARAM, const void *) {
GetCursorXY(&curX, &curY, false);
InvCursor(IC_AREA, curX, curY);
- ItemsChanged = false;
+ g_ItemsChanged = false;
}
- if (ino != INV_CONF) {
+ if (g_ino != INV_CONF) {
for (int i = 0; i < MAX_ICONS; i++) {
- if (iconArray[i] != NULL)
- StepAnimScript(&iconAnims[i]);
+ if (g_iconArray[i] != NULL)
+ StepAnimScript(&g_iconAnims[i]);
}
}
- if (InvDragging == ID_MDCONT) {
+ if (g_InvDragging == ID_MDCONT) {
// Mixing desk control
int sval, index, *pival;
@@ -4263,12 +4252,12 @@ static int NearestSlideY(int fity) {
int i = 0;
do {
- thisDist = ABS(slideStuff[i].y - fity);
+ thisDist = ABS(g_slideStuff[i].y - fity);
if (thisDist < nearDist) {
nearDist = thisDist;
nearI = i;
}
- } while (slideStuff[++i].n != -1);
+ } while (g_slideStuff[++i].n != -1);
return nearI;
}
@@ -4281,44 +4270,44 @@ static void SlideSlider(int y, SSFN fn) {
int gotoY, ati;
// Only do this if there's a slider
- if (!SlideObject)
+ if (!g_SlideObject)
return;
switch (fn) {
case S_START: // Start of a drag on the slider
- newY = sliderYpos;
- lasti = NearestSlideY(sliderYpos);
+ newY = g_sliderYpos;
+ lasti = NearestSlideY(g_sliderYpos);
break;
case S_SLIDE: // Y-movement during drag
newY = newY + y; // New y-position
- if (newY < sliderYmin)
- gotoY = sliderYmin; // Above top limit
- else if (newY > sliderYmax)
- gotoY = sliderYmax; // Below bottom limit
+ if (newY < g_sliderYmin)
+ gotoY = g_sliderYmin; // Above top limit
+ else if (newY > g_sliderYmax)
+ gotoY = g_sliderYmax; // Below bottom limit
else
gotoY = newY; // Hunky-Dory
// Move slider to new position
- MultiMoveRelXY(SlideObject, 0, gotoY - sliderYpos);
- sliderYpos = gotoY;
+ MultiMoveRelXY(g_SlideObject, 0, gotoY - g_sliderYpos);
+ g_sliderYpos = gotoY;
// Re-draw icons if necessary
- ati = NearestSlideY(sliderYpos);
+ ati = NearestSlideY(g_sliderYpos);
if (ati != lasti) {
- InvD[ino].FirstDisp = slideStuff[ati].n;
- assert(InvD[ino].FirstDisp >= 0); // negative first displayed
- ItemsChanged = true;
+ g_InvD[g_ino].FirstDisp = g_slideStuff[ati].n;
+ assert(g_InvD[g_ino].FirstDisp >= 0); // negative first displayed
+ g_ItemsChanged = true;
lasti = ati;
}
break;
case S_END: // End of a drag on the slider
// Draw icons from new start icon
- ati = NearestSlideY(sliderYpos);
- InvD[ino].FirstDisp = slideStuff[ati].n;
- ItemsChanged = true;
+ ati = NearestSlideY(g_sliderYpos);
+ g_InvD[g_ino].FirstDisp = g_slideStuff[ati].n;
+ g_ItemsChanged = true;
break;
default:
@@ -4336,38 +4325,38 @@ static void SlideCSlider(int y, SSFN fn) {
int fc;
// Only do this if there's a slider
- if (!SlideObject)
+ if (!g_SlideObject)
return;
switch (fn) {
case S_START: // Start of a drag on the slider
- newY = sliderYpos;
+ newY = g_sliderYpos;
break;
case S_SLIDE: // Y-movement during drag
newY = newY + y; // New y-position
- if (newY < sliderYmin)
- gotoY = sliderYmin; // Above top limit
- else if (newY > sliderYmax)
- gotoY = sliderYmax; // Below bottom limit
+ if (newY < g_sliderYmin)
+ gotoY = g_sliderYmin; // Above top limit
+ else if (newY > g_sliderYmax)
+ gotoY = g_sliderYmax; // Below bottom limit
else
gotoY = newY; // Hunky-Dory
// Move slider to new position
if (TinselV2)
- MultiMoveRelXY(SlideObject, 0, gotoY - sliderYpos);
- sliderYpos = gotoY;
+ MultiMoveRelXY(g_SlideObject, 0, gotoY - g_sliderYpos);
+ g_sliderYpos = gotoY;
fc = cd.extraBase;
if ((cd.box == saveBox || cd.box == loadBox))
- FirstFile((sliderYpos - sliderYmin) * (MAX_SAVED_FILES - NUM_RGROUP_BOXES) /
- (sliderYmax - sliderYmin));
+ FirstFile((g_sliderYpos - g_sliderYmin) * (MAX_SAVED_FILES - NUM_RGROUP_BOXES) /
+ (g_sliderYmax - g_sliderYmin));
else if (cd.box == hopperBox1)
- FirstScene((sliderYpos - sliderYmin) * (numScenes - NUM_RGROUP_BOXES) / sliderRange);
+ FirstScene((g_sliderYpos - g_sliderYmin) * (g_numScenes - NUM_RGROUP_BOXES) / sliderRange);
else if (cd.box == hopperBox2)
- FirstEntry((sliderYpos - sliderYmin) * (numEntries - NUM_RGROUP_BOXES) / sliderRange);
+ FirstEntry((g_sliderYpos - g_sliderYmin) * (g_numEntries - NUM_RGROUP_BOXES) / sliderRange);
// If extraBase has changed...
if (fc != cd.extraBase) {
@@ -4409,16 +4398,16 @@ static void SlideMSlider(int x, SSFN fn) {
// Work out the indices
index = cd.selBox & ~IS_MASK;
- for (i = 0; i < numMdSlides; i++)
- if (mdSlides[i].num == index)
+ for (i = 0; i < g_numMdSlides; i++)
+ if (g_mdSlides[i].num == index)
break;
- assert(i < numMdSlides);
+ assert(i < g_numMdSlides);
switch (fn) {
case S_START: // Start of a drag on the slider
// can use index as a throw-away value
- GetAniPosition(mdSlides[i].obj, &newX, &index);
- lX = sX = newX;
+ GetAniPosition(g_mdSlides[i].obj, &newX, &index);
+ g_lX = g_sX = newX;
break;
case S_SLIDE: // X-movement during drag
@@ -4427,19 +4416,19 @@ static void SlideMSlider(int x, SSFN fn) {
newX = newX + x; // New x-position
- if (newX < mdSlides[i].min)
- gotoX = mdSlides[i].min; // Below bottom limit
- else if (newX > mdSlides[i].max)
- gotoX = mdSlides[i].max; // Above top limit
+ if (newX < g_mdSlides[i].min)
+ gotoX = g_mdSlides[i].min; // Below bottom limit
+ else if (newX > g_mdSlides[i].max)
+ gotoX = g_mdSlides[i].max; // Above top limit
else
gotoX = newX; // Hunky-Dory
// Move slider to new position
- MultiMoveRelXY(mdSlides[i].obj, gotoX - sX, 0);
- sX = gotoX;
+ MultiMoveRelXY(g_mdSlides[i].obj, gotoX - g_sX, 0);
+ g_sX = gotoX;
- if (lX != sX) {
- *cd.box[index].ival = (sX - mdSlides[i].min)*cd.box[index].w/SLIDE_RANGE;
+ if (g_lX != g_sX) {
+ *cd.box[index].ival = (g_sX - g_mdSlides[i].min)*cd.box[index].w/SLIDE_RANGE;
if (cd.box[index].boxFunc == MUSICVOL)
SetMidiVolume(*cd.box[index].ival);
#ifdef MAC_OPTIONS
@@ -4449,14 +4438,14 @@ static void SlideMSlider(int x, SSFN fn) {
if (cd.box[index].boxFunc == SAMPVOL)
SetSampleVolume(*cd.box[index].ival);
#endif
- lX = sX;
+ g_lX = g_sX;
}
break;
case S_TIMEUP:
case S_TIMEDN:
gotoX = SLIDE_RANGE*(*cd.box[index].ival)/cd.box[index].w;
- MultiSetAniX(mdSlides[i].obj, mdSlides[i].min+gotoX);
+ MultiSetAniX(g_mdSlides[i].obj, g_mdSlides[i].min+gotoX);
if (cd.box[index].boxFunc == MUSICVOL)
SetMidiVolume(*cd.box[index].ival);
@@ -4471,7 +4460,7 @@ static void SlideMSlider(int x, SSFN fn) {
case S_END: // End of a drag on the slider
AddBoxes(false); // Might change position slightly
- if (ino == INV_CONF && cd.box == subtitlesBox)
+ if (g_ino == INV_CONF && cd.box == subtitlesBox)
Select(_vm->_config->_language, false);
break;
}
@@ -4481,23 +4470,23 @@ static void SlideMSlider(int x, SSFN fn) {
* Called from ChangeingSize() during re-sizing.
*/
static void GettingTaller() {
- if (SuppV) {
- Ychange += SuppV;
- if (Ycompensate == 'T')
- InvD[ino].inventoryY += SuppV;
- SuppV = 0;
+ if (g_SuppV) {
+ g_Ychange += g_SuppV;
+ if (g_Ycompensate == 'T')
+ g_InvD[g_ino].inventoryY += g_SuppV;
+ g_SuppV = 0;
}
- while (Ychange > (ITEM_HEIGHT+1) && InvD[ino].NoofVicons < InvD[ino].MaxVicons) {
- Ychange -= (ITEM_HEIGHT+1);
- InvD[ino].NoofVicons++;
- if (Ycompensate == 'T')
- InvD[ino].inventoryY -= (ITEM_HEIGHT+1);
+ while (g_Ychange > (ITEM_HEIGHT+1) && g_InvD[g_ino].NoofVicons < g_InvD[g_ino].MaxVicons) {
+ g_Ychange -= (ITEM_HEIGHT+1);
+ g_InvD[g_ino].NoofVicons++;
+ if (g_Ycompensate == 'T')
+ g_InvD[g_ino].inventoryY -= (ITEM_HEIGHT+1);
}
- if (InvD[ino].NoofVicons < InvD[ino].MaxVicons) {
- SuppV = Ychange;
- Ychange = 0;
- if (Ycompensate == 'T')
- InvD[ino].inventoryY -= SuppV;
+ if (g_InvD[g_ino].NoofVicons < g_InvD[g_ino].MaxVicons) {
+ g_SuppV = g_Ychange;
+ g_Ychange = 0;
+ if (g_Ycompensate == 'T')
+ g_InvD[g_ino].inventoryY -= g_SuppV;
}
}
@@ -4505,73 +4494,73 @@ static void GettingTaller() {
* Called from ChangeingSize() during re-sizing.
*/
static void GettingShorter() {
- int StartNvi = InvD[ino].NoofVicons;
- int StartUv = SuppV;
+ int StartNvi = g_InvD[g_ino].NoofVicons;
+ int StartUv = g_SuppV;
- if (SuppV) {
- Ychange += (SuppV - (ITEM_HEIGHT+1));
- InvD[ino].NoofVicons++;
- SuppV = 0;
+ if (g_SuppV) {
+ g_Ychange += (g_SuppV - (ITEM_HEIGHT+1));
+ g_InvD[g_ino].NoofVicons++;
+ g_SuppV = 0;
}
- while (Ychange < -(ITEM_HEIGHT+1) && InvD[ino].NoofVicons > InvD[ino].MinVicons) {
- Ychange += (ITEM_HEIGHT+1);
- InvD[ino].NoofVicons--;
+ while (g_Ychange < -(ITEM_HEIGHT+1) && g_InvD[g_ino].NoofVicons > g_InvD[g_ino].MinVicons) {
+ g_Ychange += (ITEM_HEIGHT+1);
+ g_InvD[g_ino].NoofVicons--;
}
- if (InvD[ino].NoofVicons > InvD[ino].MinVicons && Ychange) {
- SuppV = (ITEM_HEIGHT+1) + Ychange;
- InvD[ino].NoofVicons--;
- Ychange = 0;
+ if (g_InvD[g_ino].NoofVicons > g_InvD[g_ino].MinVicons && g_Ychange) {
+ g_SuppV = (ITEM_HEIGHT+1) + g_Ychange;
+ g_InvD[g_ino].NoofVicons--;
+ g_Ychange = 0;
}
- if (Ycompensate == 'T')
- InvD[ino].inventoryY += (ITEM_HEIGHT+1)*(StartNvi - InvD[ino].NoofVicons) - (SuppV - StartUv);
+ if (g_Ycompensate == 'T')
+ g_InvD[g_ino].inventoryY += (ITEM_HEIGHT+1)*(StartNvi - g_InvD[g_ino].NoofVicons) - (g_SuppV - StartUv);
}
/**
* Called from ChangeingSize() during re-sizing.
*/
static void GettingWider() {
- int StartNhi = InvD[ino].NoofHicons;
- int StartUh = SuppH;
+ int StartNhi = g_InvD[g_ino].NoofHicons;
+ int StartUh = g_SuppH;
- if (SuppH) {
- Xchange += SuppH;
- SuppH = 0;
+ if (g_SuppH) {
+ g_Xchange += g_SuppH;
+ g_SuppH = 0;
}
- while (Xchange > (ITEM_WIDTH+1) && InvD[ino].NoofHicons < InvD[ino].MaxHicons) {
- Xchange -= (ITEM_WIDTH+1);
- InvD[ino].NoofHicons++;
+ while (g_Xchange > (ITEM_WIDTH+1) && g_InvD[g_ino].NoofHicons < g_InvD[g_ino].MaxHicons) {
+ g_Xchange -= (ITEM_WIDTH+1);
+ g_InvD[g_ino].NoofHicons++;
}
- if (InvD[ino].NoofHicons < InvD[ino].MaxHicons) {
- SuppH = Xchange;
- Xchange = 0;
+ if (g_InvD[g_ino].NoofHicons < g_InvD[g_ino].MaxHicons) {
+ g_SuppH = g_Xchange;
+ g_Xchange = 0;
}
- if (Xcompensate == 'L')
- InvD[ino].inventoryX += (ITEM_WIDTH+1)*(StartNhi - InvD[ino].NoofHicons) - (SuppH - StartUh);
+ if (g_Xcompensate == 'L')
+ g_InvD[g_ino].inventoryX += (ITEM_WIDTH+1)*(StartNhi - g_InvD[g_ino].NoofHicons) - (g_SuppH - StartUh);
}
/**
* Called from ChangeingSize() during re-sizing.
*/
static void GettingNarrower() {
- int StartNhi = InvD[ino].NoofHicons;
- int StartUh = SuppH;
+ int StartNhi = g_InvD[g_ino].NoofHicons;
+ int StartUh = g_SuppH;
- if (SuppH) {
- Xchange += (SuppH - (ITEM_WIDTH+1));
- InvD[ino].NoofHicons++;
- SuppH = 0;
+ if (g_SuppH) {
+ g_Xchange += (g_SuppH - (ITEM_WIDTH+1));
+ g_InvD[g_ino].NoofHicons++;
+ g_SuppH = 0;
}
- while (Xchange < -(ITEM_WIDTH+1) && InvD[ino].NoofHicons > InvD[ino].MinHicons) {
- Xchange += (ITEM_WIDTH+1);
- InvD[ino].NoofHicons--;
+ while (g_Xchange < -(ITEM_WIDTH+1) && g_InvD[g_ino].NoofHicons > g_InvD[g_ino].MinHicons) {
+ g_Xchange += (ITEM_WIDTH+1);
+ g_InvD[g_ino].NoofHicons--;
}
- if (InvD[ino].NoofHicons > InvD[ino].MinHicons && Xchange) {
- SuppH = (ITEM_WIDTH+1) + Xchange;
- InvD[ino].NoofHicons--;
- Xchange = 0;
+ if (g_InvD[g_ino].NoofHicons > g_InvD[g_ino].MinHicons && g_Xchange) {
+ g_SuppH = (ITEM_WIDTH+1) + g_Xchange;
+ g_InvD[g_ino].NoofHicons--;
+ g_Xchange = 0;
}
- if (Xcompensate == 'L')
- InvD[ino].inventoryX += (ITEM_WIDTH+1)*(StartNhi - InvD[ino].NoofHicons) - (SuppH - StartUh);
+ if (g_Xcompensate == 'L')
+ g_InvD[g_ino].inventoryX += (ITEM_WIDTH+1)*(StartNhi - g_InvD[g_ino].NoofHicons) - (g_SuppH - StartUh);
}
@@ -4580,15 +4569,15 @@ static void GettingNarrower() {
*/
static void ChangeingSize() {
/* Make it taller or shorter if necessary. */
- if (Ychange > 0)
+ if (g_Ychange > 0)
GettingTaller();
- else if (Ychange < 0)
+ else if (g_Ychange < 0)
GettingShorter();
/* Make it wider or narrower if necessary. */
- if (Xchange > 0)
+ if (g_Xchange > 0)
GettingWider();
- else if (Xchange < 0)
+ else if (g_Xchange < 0)
GettingNarrower();
ConstructInventory(EMPTY);
@@ -4601,29 +4590,29 @@ extern void Xmovement(int x) {
int aniX, aniY;
int i;
- if (x && objArray[0] != NULL) {
- switch (InvDragging) {
+ if (x && g_objArray[0] != NULL) {
+ switch (g_InvDragging) {
case ID_MOVE:
- GetAniPosition(objArray[0], &InvD[ino].inventoryX, &aniY);
- InvD[ino].inventoryX +=x;
- MultiSetAniX(objArray[0], InvD[ino].inventoryX);
- for (i = 1; objArray[i] && i < MAX_WCOMP; i++)
- MultiMoveRelXY(objArray[i], x, 0);
- for (i = 0; iconArray[i] && i < MAX_ICONS; i++)
- MultiMoveRelXY(iconArray[i], x, 0);
+ GetAniPosition(g_objArray[0], &g_InvD[g_ino].inventoryX, &aniY);
+ g_InvD[g_ino].inventoryX +=x;
+ MultiSetAniX(g_objArray[0], g_InvD[g_ino].inventoryX);
+ for (i = 1; g_objArray[i] && i < MAX_WCOMP; i++)
+ MultiMoveRelXY(g_objArray[i], x, 0);
+ for (i = 0; g_iconArray[i] && i < MAX_ICONS; i++)
+ MultiMoveRelXY(g_iconArray[i], x, 0);
break;
case ID_LEFT:
case ID_TLEFT:
case ID_BLEFT:
- Xchange -= x;
+ g_Xchange -= x;
ChangeingSize();
break;
case ID_RIGHT:
case ID_TRIGHT:
case ID_BRIGHT:
- Xchange += x;
+ g_Xchange += x;
ChangeingSize();
break;
@@ -4649,16 +4638,16 @@ extern void Ymovement(int y) {
int aniX, aniY;
int i;
- if (y && objArray[0] != NULL) {
- switch (InvDragging) {
+ if (y && g_objArray[0] != NULL) {
+ switch (g_InvDragging) {
case ID_MOVE:
- GetAniPosition(objArray[0], &aniX, &InvD[ino].inventoryY);
- InvD[ino].inventoryY +=y;
- MultiSetAniY(objArray[0], InvD[ino].inventoryY);
- for (i = 1; objArray[i] && i < MAX_WCOMP; i++)
- MultiMoveRelXY(objArray[i], 0, y);
- for (i = 0; iconArray[i] && i < MAX_ICONS; i++)
- MultiMoveRelXY(iconArray[i], 0, y);
+ GetAniPosition(g_objArray[0], &aniX, &g_InvD[g_ino].inventoryY);
+ g_InvD[g_ino].inventoryY +=y;
+ MultiSetAniY(g_objArray[0], g_InvD[g_ino].inventoryY);
+ for (i = 1; g_objArray[i] && i < MAX_WCOMP; i++)
+ MultiMoveRelXY(g_objArray[i], 0, y);
+ for (i = 0; g_iconArray[i] && i < MAX_ICONS; i++)
+ MultiMoveRelXY(g_iconArray[i], 0, y);
break;
case ID_SLIDE:
@@ -4672,14 +4661,14 @@ extern void Ymovement(int y) {
case ID_BOTTOM:
case ID_BLEFT:
case ID_BRIGHT:
- Ychange += y;
+ g_Ychange += y;
ChangeingSize();
break;
case ID_TOP:
case ID_TLEFT:
case ID_TRIGHT:
- Ychange -= y;
+ g_Ychange -= y;
ChangeingSize();
break;
@@ -4705,16 +4694,16 @@ static void InvDragStart() {
/*
* Do something different for Save/Restore screens
*/
- if (ino == INV_CONF) {
+ if (g_ino == INV_CONF) {
int whichbox;
whichbox = WhichMenuBox(curX, curY, true);
if (whichbox == IB_SLIDE) {
- InvDragging = ID_CSLIDE;
+ g_InvDragging = ID_CSLIDE;
SlideCSlider(0, S_START);
} else if (whichbox > 0 && (whichbox & IS_MASK)) {
- InvDragging = ID_MDCONT; // Mixing desk control
+ g_InvDragging = ID_MDCONT; // Mixing desk control
cd.selBox = whichbox;
SlideMSlider(0, S_START);
}
@@ -4726,85 +4715,85 @@ static void InvDragStart() {
*/
switch (InvArea(curX, curY)) {
case I_HEADER:
- if (InvD[ino].bMoveable) {
- InvDragging = ID_MOVE;
+ if (g_InvD[g_ino].bMoveable) {
+ g_InvDragging = ID_MOVE;
}
break;
case I_SLIDE:
- InvDragging = ID_SLIDE;
+ g_InvDragging = ID_SLIDE;
SlideSlider(0, S_START);
break;
case I_BOTTOM:
- if (InvD[ino].resizable) {
- Ychange = 0;
- InvDragging = ID_BOTTOM;
- Ycompensate = 'B';
+ if (g_InvD[g_ino].resizable) {
+ g_Ychange = 0;
+ g_InvDragging = ID_BOTTOM;
+ g_Ycompensate = 'B';
}
break;
case I_TOP:
- if (InvD[ino].resizable) {
- Ychange = 0;
- InvDragging = ID_TOP;
- Ycompensate = 'T';
+ if (g_InvD[g_ino].resizable) {
+ g_Ychange = 0;
+ g_InvDragging = ID_TOP;
+ g_Ycompensate = 'T';
}
break;
case I_LEFT:
- if (InvD[ino].resizable) {
- Xchange = 0;
- InvDragging = ID_LEFT;
- Xcompensate = 'L';
+ if (g_InvD[g_ino].resizable) {
+ g_Xchange = 0;
+ g_InvDragging = ID_LEFT;
+ g_Xcompensate = 'L';
}
break;
case I_RIGHT:
- if (InvD[ino].resizable) {
- Xchange = 0;
- InvDragging = ID_RIGHT;
- Xcompensate = 'R';
+ if (g_InvD[g_ino].resizable) {
+ g_Xchange = 0;
+ g_InvDragging = ID_RIGHT;
+ g_Xcompensate = 'R';
}
break;
case I_TLEFT:
- if (InvD[ino].resizable) {
- Ychange = 0;
- Ycompensate = 'T';
- Xchange = 0;
- Xcompensate = 'L';
- InvDragging = ID_TLEFT;
+ if (g_InvD[g_ino].resizable) {
+ g_Ychange = 0;
+ g_Ycompensate = 'T';
+ g_Xchange = 0;
+ g_Xcompensate = 'L';
+ g_InvDragging = ID_TLEFT;
}
break;
case I_TRIGHT:
- if (InvD[ino].resizable) {
- Ychange = 0;
- Ycompensate = 'T';
- Xchange = 0;
- Xcompensate = 'R';
- InvDragging = ID_TRIGHT;
+ if (g_InvD[g_ino].resizable) {
+ g_Ychange = 0;
+ g_Ycompensate = 'T';
+ g_Xchange = 0;
+ g_Xcompensate = 'R';
+ g_InvDragging = ID_TRIGHT;
}
break;
case I_BLEFT:
- if (InvD[ino].resizable) {
- Ychange = 0;
- Ycompensate = 'B';
- Xchange = 0;
- Xcompensate = 'L';
- InvDragging = ID_BLEFT;
+ if (g_InvD[g_ino].resizable) {
+ g_Ychange = 0;
+ g_Ycompensate = 'B';
+ g_Xchange = 0;
+ g_Xcompensate = 'L';
+ g_InvDragging = ID_BLEFT;
}
break;
case I_BRIGHT:
- if (InvD[ino].resizable) {
- Ychange = 0;
- Ycompensate = 'B';
- Xchange = 0;
- Xcompensate = 'R';
- InvDragging = ID_BRIGHT;
+ if (g_InvD[g_ino].resizable) {
+ g_Ychange = 0;
+ g_Ycompensate = 'B';
+ g_Xchange = 0;
+ g_Xcompensate = 'R';
+ g_InvDragging = ID_BRIGHT;
}
break;
}
@@ -4818,14 +4807,14 @@ static void InvDragEnd() {
GetCursorXY(&curX, &curY, false);
- if (InvDragging != ID_NONE) {
- if (InvDragging == ID_SLIDE) {
+ if (g_InvDragging != ID_NONE) {
+ if (g_InvDragging == ID_SLIDE) {
SlideSlider(0, S_END);
- } else if (InvDragging == ID_CSLIDE) {
+ } else if (g_InvDragging == ID_CSLIDE) {
; // No action
- } else if (InvDragging == ID_MDCONT) {
+ } else if (g_InvDragging == ID_MDCONT) {
SlideMSlider(0, S_END);
- } else if (InvDragging == ID_MOVE) {
+ } else if (g_InvDragging == ID_MOVE) {
; // No action
} else {
// Were re-sizing. Redraw the whole thing.
@@ -4834,21 +4823,21 @@ static void InvDragEnd() {
ConstructInventory(FULL);
// If this was the maximised, it no longer is!
- if (InventoryMaximised) {
- InventoryMaximised = false;
- InvD[ino].otherX = InvD[ino].inventoryX;
- InvD[ino].otherY = InvD[ino].inventoryY;
+ if (g_InventoryMaximised) {
+ g_InventoryMaximised = false;
+ g_InvD[g_ino].otherX = g_InvD[g_ino].inventoryX;
+ g_InvD[g_ino].otherY = g_InvD[g_ino].inventoryY;
}
}
- InvDragging = ID_NONE;
+ g_InvDragging = ID_NONE;
ProcessedProvisional();
}
// Cursor could well now be inappropriate
InvCursor(IC_AREA, curX, curY);
- Xchange = Ychange = 0; // Probably no need, but does no harm!
+ g_Xchange = g_Ychange = 0; // Probably no need, but does no harm!
}
static void MenuPageDown() {
@@ -4860,7 +4849,7 @@ static void MenuPageDown() {
Select(cd.selBox, true);
}
} else if (cd.box == hopperBox1) {
- if (cd.extraBase < numScenes - NUM_RGROUP_BOXES) {
+ if (cd.extraBase < g_numScenes - NUM_RGROUP_BOXES) {
FirstScene(cd.extraBase + (NUM_RGROUP_BOXES - 1));
AddBoxes(true);
if (cd.selBox)
@@ -4868,7 +4857,7 @@ static void MenuPageDown() {
Select(cd.selBox, true);
}
} else if (cd.box == hopperBox2) {
- if (cd.extraBase < numEntries - NUM_RGROUP_BOXES) {
+ if (cd.extraBase < g_numEntries - NUM_RGROUP_BOXES) {
FirstEntry(cd.extraBase+(NUM_RGROUP_BOXES - 1));
AddBoxes(true);
if (cd.selBox)
@@ -5010,7 +4999,7 @@ static void ConfActionSpecial(int i) {
Select(cd.selBox, true);
}
} else if (cd.box == hopperBox1) {
- if (cd.extraBase < numScenes - NUM_RGROUP_BOXES) {
+ if (cd.extraBase < g_numScenes - NUM_RGROUP_BOXES) {
FirstScene(cd.extraBase + 1);
AddBoxes(true);
if (cd.selBox)
@@ -5018,7 +5007,7 @@ static void ConfActionSpecial(int i) {
Select(cd.selBox, true);
}
} else if (cd.box == hopperBox2) {
- if (cd.extraBase < numEntries - NUM_RGROUP_BOXES) {
+ if (cd.extraBase < g_numEntries - NUM_RGROUP_BOXES) {
FirstEntry(cd.extraBase + 1);
AddBoxes(true);
if (cd.selBox)
@@ -5045,25 +5034,25 @@ static void InvPutDown(int index) {
int hiIndex; // Current position of held item (if in)
// Find where the held item is positioned in this inventory (if it is)
- for (hiIndex = 0; hiIndex < InvD[ino].NoofItems; hiIndex++)
- if (InvD[ino].contents[hiIndex] == HeldItem)
+ for (hiIndex = 0; hiIndex < g_InvD[g_ino].NoofItems; hiIndex++)
+ if (g_InvD[g_ino].contents[hiIndex] == g_heldItem)
break;
// If drop position would leave a gap, move it up
- if (index >= InvD[ino].NoofItems) {
- if (hiIndex == InvD[ino].NoofItems) // Not in, add it
- index = InvD[ino].NoofItems;
+ if (index >= g_InvD[g_ino].NoofItems) {
+ if (hiIndex == g_InvD[g_ino].NoofItems) // Not in, add it
+ index = g_InvD[g_ino].NoofItems;
else
- index = InvD[ino].NoofItems - 1;
+ index = g_InvD[g_ino].NoofItems - 1;
}
- if (hiIndex == InvD[ino].NoofItems) { // Not in, add it
- if (InvD[ino].NoofItems < InvD[ino].MaxInvObj) {
- InvD[ino].NoofItems++;
+ if (hiIndex == g_InvD[g_ino].NoofItems) { // Not in, add it
+ if (g_InvD[g_ino].NoofItems < g_InvD[g_ino].MaxInvObj) {
+ g_InvD[g_ino].NoofItems++;
// Don't leave it in the other inventory!
- if (InventoryPos(HeldItem) != INV_HELDNOTIN)
- RemFromInventory(ino == INV_1 ? INV_2 : INV_1, HeldItem);
+ if (InventoryPos(g_heldItem) != INV_HELDNOTIN)
+ RemFromInventory(g_ino == INV_1 ? INV_2 : INV_1, g_heldItem);
} else {
// No room at the inn!
return;
@@ -5072,17 +5061,17 @@ static void InvPutDown(int index) {
// Position it in the inventory
if (index < hiIndex) {
- memmove(&InvD[ino].contents[index + 1], &InvD[ino].contents[index], (hiIndex-index)*sizeof(int));
- InvD[ino].contents[index] = HeldItem;
+ memmove(&g_InvD[g_ino].contents[index + 1], &g_InvD[g_ino].contents[index], (hiIndex-index)*sizeof(int));
+ g_InvD[g_ino].contents[index] = g_heldItem;
} else if (index > hiIndex) {
- memmove(&InvD[ino].contents[hiIndex], &InvD[ino].contents[hiIndex+1], (index-hiIndex)*sizeof(int));
- InvD[ino].contents[index] = HeldItem;
+ memmove(&g_InvD[g_ino].contents[hiIndex], &g_InvD[g_ino].contents[hiIndex+1], (index-hiIndex)*sizeof(int));
+ g_InvD[g_ino].contents[index] = g_heldItem;
} else {
- InvD[ino].contents[index] = HeldItem;
+ g_InvD[g_ino].contents[index] = g_heldItem;
}
- HeldItem = INV_NOICON;
- ItemsChanged = true;
+ g_heldItem = INV_NOICON;
+ g_ItemsChanged = true;
DelAuxCursor();
RestoreMainCursor();
GetCursorXY(&aniX, &aniY, false);
@@ -5116,26 +5105,26 @@ static void InvPickup(int index) {
return;
// If not holding anything
- if (HeldItem == INV_NOICON && InvD[ino].contents[index] &&
- (!TinselV2 || InvD[ino].contents[index] != HeldItem)) {
+ if (g_heldItem == INV_NOICON && g_InvD[g_ino].contents[index] &&
+ (!TinselV2 || g_InvD[g_ino].contents[index] != g_heldItem)) {
// Pick-up
- invObj = GetInvObject(InvD[ino].contents[index]);
- thisIcon = InvD[ino].contents[index];
+ invObj = GetInvObject(g_InvD[g_ino].contents[index]);
+ g_thisIcon = g_InvD[g_ino].contents[index];
if (TinselV2)
InvTinselEvent(invObj, PICKUP, INV_PICKUP, index);
else if (invObj->hScript)
InvTinselEvent(invObj, WALKTO, INV_PICKUP, index);
- } else if (HeldItem != INV_NOICON) {
+ } else if (g_heldItem != INV_NOICON) {
// Put-down
- invObj = GetInvObject(HeldItem);
+ invObj = GetInvObject(g_heldItem);
// If DROPCODE set, send event, otherwise it's a putdown
if (invObj->attribute & IO_DROPCODE && invObj->hScript)
InvTinselEvent(invObj, PUTDOWN, INV_PICKUP, index);
- else if (!(invObj->attribute & IO_ONLYINV1 && ino != INV_1)
- && !(invObj->attribute & IO_ONLYINV2 && ino != INV_2)) {
+ else if (!(invObj->attribute & IO_ONLYINV1 && g_ino != INV_1)
+ && !(invObj->attribute & IO_ONLYINV2 && g_ino != INV_2)) {
if (TinselV2)
InvPutDown(index);
else
@@ -5152,7 +5141,7 @@ static void InvWalkTo(const Common::Point &coOrds) {
switch (InvArea(coOrds.x, coOrds.y)) {
case I_NOTIN:
- if (ino == INV_CONV)
+ if (g_ino == INV_CONV)
ConvAction(INV_CLOSEICON);
if ((cd.box == hopperBox1) || (cd.box == hopperBox2))
FreeSceneHopper();
@@ -5160,43 +5149,43 @@ static void InvWalkTo(const Common::Point &coOrds) {
break;
case I_SLIDE_UP:
- if (InvD[ino].NoofVicons == 1)
- InvD[ino].FirstDisp -= InvD[ino].NoofHicons;
- for (i = 1; i < InvD[ino].NoofVicons; i++)
- InvD[ino].FirstDisp -= InvD[ino].NoofHicons;
- if (InvD[ino].FirstDisp < 0)
- InvD[ino].FirstDisp = 0;
- ItemsChanged = true;
+ if (g_InvD[g_ino].NoofVicons == 1)
+ g_InvD[g_ino].FirstDisp -= g_InvD[g_ino].NoofHicons;
+ for (i = 1; i < g_InvD[g_ino].NoofVicons; i++)
+ g_InvD[g_ino].FirstDisp -= g_InvD[g_ino].NoofHicons;
+ if (g_InvD[g_ino].FirstDisp < 0)
+ g_InvD[g_ino].FirstDisp = 0;
+ g_ItemsChanged = true;
break;
case I_UP:
- InvD[ino].FirstDisp -= InvD[ino].NoofHicons;
- if (InvD[ino].FirstDisp < 0)
- InvD[ino].FirstDisp = 0;
- ItemsChanged = true;
+ g_InvD[g_ino].FirstDisp -= g_InvD[g_ino].NoofHicons;
+ if (g_InvD[g_ino].FirstDisp < 0)
+ g_InvD[g_ino].FirstDisp = 0;
+ g_ItemsChanged = true;
break;
case I_SLIDE_DOWN:
- if (InvD[ino].NoofVicons == 1)
- if (InvD[ino].FirstDisp + InvD[ino].NoofHicons*InvD[ino].NoofVicons < InvD[ino].NoofItems)
- InvD[ino].FirstDisp += InvD[ino].NoofHicons;
- for (i = 1; i < InvD[ino].NoofVicons; i++) {
- if (InvD[ino].FirstDisp + InvD[ino].NoofHicons*InvD[ino].NoofVicons < InvD[ino].NoofItems)
- InvD[ino].FirstDisp += InvD[ino].NoofHicons;
+ if (g_InvD[g_ino].NoofVicons == 1)
+ if (g_InvD[g_ino].FirstDisp + g_InvD[g_ino].NoofHicons*g_InvD[g_ino].NoofVicons < g_InvD[g_ino].NoofItems)
+ g_InvD[g_ino].FirstDisp += g_InvD[g_ino].NoofHicons;
+ for (i = 1; i < g_InvD[g_ino].NoofVicons; i++) {
+ if (g_InvD[g_ino].FirstDisp + g_InvD[g_ino].NoofHicons*g_InvD[g_ino].NoofVicons < g_InvD[g_ino].NoofItems)
+ g_InvD[g_ino].FirstDisp += g_InvD[g_ino].NoofHicons;
}
- ItemsChanged = true;
+ g_ItemsChanged = true;
break;
case I_DOWN:
- if (InvD[ino].FirstDisp + InvD[ino].NoofHicons*InvD[ino].NoofVicons < InvD[ino].NoofItems) {
- InvD[ino].FirstDisp += InvD[ino].NoofHicons;
- ItemsChanged = true;
+ if (g_InvD[g_ino].FirstDisp + g_InvD[g_ino].NoofHicons*g_InvD[g_ino].NoofVicons < g_InvD[g_ino].NoofItems) {
+ g_InvD[g_ino].FirstDisp += g_InvD[g_ino].NoofHicons;
+ g_ItemsChanged = true;
}
break;
case I_BODY:
- if (ino == INV_CONF) {
- if (!InventoryHidden)
+ if (g_ino == INV_CONF) {
+ if (!g_InventoryHidden)
MenuAction(WhichMenuBox(coOrds.x, coOrds.y, false), false);
} else {
Common::Point pt = coOrds;
@@ -5204,8 +5193,8 @@ static void InvWalkTo(const Common::Point &coOrds) {
// To cater for drop in dead space between icons,
// look 1 pixel right, then 1 down, then 1 right and down.
- if (i == INV_NOICON && HeldItem != INV_NOICON &&
- (ino == INV_1 || ino == INV_2)) {
+ if (i == INV_NOICON && g_heldItem != INV_NOICON &&
+ (g_ino == INV_1 || g_ino == INV_2)) {
pt.x += 1; // 1 to the right
i = InvItem(pt, false);
if (i == INV_NOICON) {
@@ -5219,7 +5208,7 @@ static void InvWalkTo(const Common::Point &coOrds) {
}
}
- if (ino == INV_CONV) {
+ if (g_ino == INV_CONV) {
ConvAction(i);
} else
InvPickup(i);
@@ -5238,19 +5227,19 @@ static void InvAction() {
switch (InvArea(aniX, aniY)) {
case I_BODY:
- if (ino == INV_CONF) {
- if (!InventoryHidden)
+ if (g_ino == INV_CONF) {
+ if (!g_InventoryHidden)
MenuAction(WhichMenuBox(aniX, aniY, false), true);
- } else if (ino == INV_CONV) {
+ } else if (g_ino == INV_CONV) {
index = InvItem(&aniX, &aniY, false);
ConvAction(index);
} else {
index = InvItem(&aniX, &aniY, false);
if (index != INV_NOICON) {
- if (InvD[ino].contents[index] && InvD[ino].contents[index] != HeldItem) {
- invObj = GetInvObject(InvD[ino].contents[index]);
+ if (g_InvD[g_ino].contents[index] && g_InvD[g_ino].contents[index] != g_heldItem) {
+ invObj = GetInvObject(g_InvD[g_ino].contents[index]);
if (TinselV2)
- thisIcon = InvD[ino].contents[index];
+ g_thisIcon = g_InvD[g_ino].contents[index];
if (TinselV2 || (invObj->hScript))
InvTinselEvent(invObj, ACTION, INV_ACTION, index);
}
@@ -5259,33 +5248,33 @@ static void InvAction() {
break;
case I_HEADER: // Maximise/unmaximise inventory
- if (!InvD[ino].resizable)
+ if (!g_InvD[g_ino].resizable)
break;
- if (!InventoryMaximised) {
- InvD[ino].sNoofHicons = InvD[ino].NoofHicons;
- InvD[ino].sNoofVicons = InvD[ino].NoofVicons;
- InvD[ino].NoofHicons = InvD[ino].MaxHicons;
- InvD[ino].NoofVicons = InvD[ino].MaxVicons;
- InventoryMaximised = true;
-
- i = InvD[ino].inventoryX;
- InvD[ino].inventoryX = InvD[ino].otherX;
- InvD[ino].otherX = i;
- i = InvD[ino].inventoryY;
- InvD[ino].inventoryY = InvD[ino].otherY;
- InvD[ino].otherY = i;
+ if (!g_InventoryMaximised) {
+ g_InvD[g_ino].sNoofHicons = g_InvD[g_ino].NoofHicons;
+ g_InvD[g_ino].sNoofVicons = g_InvD[g_ino].NoofVicons;
+ g_InvD[g_ino].NoofHicons = g_InvD[g_ino].MaxHicons;
+ g_InvD[g_ino].NoofVicons = g_InvD[g_ino].MaxVicons;
+ g_InventoryMaximised = true;
+
+ i = g_InvD[g_ino].inventoryX;
+ g_InvD[g_ino].inventoryX = g_InvD[g_ino].otherX;
+ g_InvD[g_ino].otherX = i;
+ i = g_InvD[g_ino].inventoryY;
+ g_InvD[g_ino].inventoryY = g_InvD[g_ino].otherY;
+ g_InvD[g_ino].otherY = i;
} else {
- InvD[ino].NoofHicons = InvD[ino].sNoofHicons;
- InvD[ino].NoofVicons = InvD[ino].sNoofVicons;
- InventoryMaximised = false;
-
- i = InvD[ino].inventoryX;
- InvD[ino].inventoryX = InvD[ino].otherX;
- InvD[ino].otherX = i;
- i = InvD[ino].inventoryY;
- InvD[ino].inventoryY = InvD[ino].otherY;
- InvD[ino].otherY = i;
+ g_InvD[g_ino].NoofHicons = g_InvD[g_ino].sNoofHicons;
+ g_InvD[g_ino].NoofVicons = g_InvD[g_ino].sNoofVicons;
+ g_InventoryMaximised = false;
+
+ i = g_InvD[g_ino].inventoryX;
+ g_InvD[g_ino].inventoryX = g_InvD[g_ino].otherX;
+ g_InvD[g_ino].otherX = i;
+ i = g_InvD[g_ino].inventoryY;
+ g_InvD[g_ino].inventoryY = g_InvD[g_ino].otherY;
+ g_InvD[g_ino].otherY = i;
}
// Delete current, and re-draw
@@ -5295,15 +5284,15 @@ static void InvAction() {
break;
case I_UP:
- InvD[ino].FirstDisp -= InvD[ino].NoofHicons;
- if (InvD[ino].FirstDisp < 0)
- InvD[ino].FirstDisp = 0;
- ItemsChanged = true;
+ g_InvD[g_ino].FirstDisp -= g_InvD[g_ino].NoofHicons;
+ if (g_InvD[g_ino].FirstDisp < 0)
+ g_InvD[g_ino].FirstDisp = 0;
+ g_ItemsChanged = true;
break;
case I_DOWN:
- if (InvD[ino].FirstDisp + InvD[ino].NoofHicons*InvD[ino].NoofVicons < InvD[ino].NoofItems) {
- InvD[ino].FirstDisp += InvD[ino].NoofHicons;
- ItemsChanged = true;
+ if (g_InvD[g_ino].FirstDisp + g_InvD[g_ino].NoofHicons*g_InvD[g_ino].NoofVicons < g_InvD[g_ino].NoofItems) {
+ g_InvD[g_ino].FirstDisp += g_InvD[g_ino].NoofHicons;
+ g_ItemsChanged = true;
}
break;
}
@@ -5319,8 +5308,8 @@ static void InvLook(const Common::Point &coOrds) {
case I_BODY:
index = InvItem(pt, false);
if (index != INV_NOICON) {
- if (InvD[ino].contents[index] && InvD[ino].contents[index] != HeldItem) {
- invObj = GetInvObject(InvD[ino].contents[index]);
+ if (g_InvD[g_ino].contents[index] && g_InvD[g_ino].contents[index] != g_heldItem) {
+ invObj = GetInvObject(g_InvD[g_ino].contents[index]);
if (invObj->hScript)
InvTinselEvent(invObj, LOOK, INV_LOOK, index);
}
@@ -5328,7 +5317,7 @@ static void InvLook(const Common::Point &coOrds) {
break;
case I_NOTIN:
- if (ino == INV_CONV)
+ if (g_ino == INV_CONV)
ConvAction(INV_CLOSEICON);
KillInventory();
break;
@@ -5341,7 +5330,7 @@ static void InvLook(const Common::Point &coOrds) {
/**************************************************************************/
extern void EventToInventory(PLR_EVENT pEvent, const Common::Point &coOrds) {
- if (InventoryHidden)
+ if (g_InventoryHidden)
return;
switch (pEvent) {
@@ -5364,7 +5353,7 @@ extern void EventToInventory(PLR_EVENT pEvent, const Common::Point &coOrds) {
break;
case PLR_ACTION: // PLR_DLEFT
- if (InvDragging != ID_MDCONT)
+ if (g_InvDragging != ID_MDCONT)
InvDragEnd();
InvAction();
break;
@@ -5380,7 +5369,7 @@ extern void EventToInventory(PLR_EVENT pEvent, const Common::Point &coOrds) {
case PLR_ESCAPE:
if (MenuActive()) {
if (cd.box != optionBox && cd.box != hopperBox1 && cd.box != hopperBox2)
- bReOpenMenu = true;
+ g_bReOpenMenu = true;
if ((cd.box == hopperBox1) || (cd.box == hopperBox2))
FreeSceneHopper();
}
@@ -5388,42 +5377,42 @@ extern void EventToInventory(PLR_EVENT pEvent, const Common::Point &coOrds) {
break;
case PLR_PGDN:
- if (ino == INV_MENU) {
+ if (g_ino == INV_MENU) {
// Only act if load or save screen
MenuPageDown();
} else {
// This code is a copy of the IB_SLIDE_DOWN case in InvWalkTo
// TODO: So share this duplicate code
- if (InvD[ino].NoofVicons == 1)
- if (InvD[ino].FirstDisp + InvD[ino].NoofHicons*InvD[ino].NoofVicons < InvD[ino].NoofItems)
- InvD[ino].FirstDisp += InvD[ino].NoofHicons;
- for (int i = 1; i < InvD[ino].NoofVicons; i++) {
- if (InvD[ino].FirstDisp + InvD[ino].NoofHicons*InvD[ino].NoofVicons < InvD[ino].NoofItems)
- InvD[ino].FirstDisp += InvD[ino].NoofHicons;
+ if (g_InvD[g_ino].NoofVicons == 1)
+ if (g_InvD[g_ino].FirstDisp + g_InvD[g_ino].NoofHicons*g_InvD[g_ino].NoofVicons < g_InvD[g_ino].NoofItems)
+ g_InvD[g_ino].FirstDisp += g_InvD[g_ino].NoofHicons;
+ for (int i = 1; i < g_InvD[g_ino].NoofVicons; i++) {
+ if (g_InvD[g_ino].FirstDisp + g_InvD[g_ino].NoofHicons*g_InvD[g_ino].NoofVicons < g_InvD[g_ino].NoofItems)
+ g_InvD[g_ino].FirstDisp += g_InvD[g_ino].NoofHicons;
}
- ItemsChanged = true;
+ g_ItemsChanged = true;
}
break;
case PLR_PGUP:
- if (ino == INV_MENU) {
+ if (g_ino == INV_MENU) {
// Only act if load or save screen
MenuPageUp();
} else {
// This code is a copy of the I_SLIDE_UP case in InvWalkTo
// TODO: So share this duplicate code
- if (InvD[ino].NoofVicons == 1)
- InvD[ino].FirstDisp -= InvD[ino].NoofHicons;
- for (int i = 1; i < InvD[ino].NoofVicons; i++)
- InvD[ino].FirstDisp -= InvD[ino].NoofHicons;
- if (InvD[ino].FirstDisp < 0)
- InvD[ino].FirstDisp = 0;
- ItemsChanged = true;
+ if (g_InvD[g_ino].NoofVicons == 1)
+ g_InvD[g_ino].FirstDisp -= g_InvD[g_ino].NoofHicons;
+ for (int i = 1; i < g_InvD[g_ino].NoofVicons; i++)
+ g_InvD[g_ino].FirstDisp -= g_InvD[g_ino].NoofHicons;
+ if (g_InvD[g_ino].FirstDisp < 0)
+ g_InvD[g_ino].FirstDisp = 0;
+ g_ItemsChanged = true;
}
break;
case PLR_HOME:
- if (ino == INV_MENU) {
+ if (g_ino == INV_MENU) {
// Only act if load or save screen
if (cd.box == loadBox || cd.box == saveBox)
FirstFile(0);
@@ -5438,19 +5427,19 @@ extern void EventToInventory(PLR_EVENT pEvent, const Common::Point &coOrds) {
cd.selBox = 0;
Select(cd.selBox, true);
} else {
- InvD[ino].FirstDisp = 0;
- ItemsChanged = true;
+ g_InvD[g_ino].FirstDisp = 0;
+ g_ItemsChanged = true;
}
break;
case PLR_END:
- if (ino == INV_MENU) {
+ if (g_ino == INV_MENU) {
if (cd.box == loadBox || cd.box == saveBox)
FirstFile(MAX_SAVED_FILES); // Will get reduced to appropriate value
else if (cd.box == hopperBox1)
- FirstScene(numScenes); // Will get reduced to appropriate value
+ FirstScene(g_numScenes); // Will get reduced to appropriate value
else if (cd.box == hopperBox2)
- FirstEntry(numEntries); // Will get reduced to appropriate value
+ FirstEntry(g_numEntries); // Will get reduced to appropriate value
else
break;
@@ -5458,10 +5447,10 @@ extern void EventToInventory(PLR_EVENT pEvent, const Common::Point &coOrds) {
cd.selBox = 0;
Select(cd.selBox, true);
} else {
- InvD[ino].FirstDisp = InvD[ino].NoofItems - InvD[ino].NoofHicons*InvD[ino].NoofVicons;
- if (InvD[ino].FirstDisp < 0)
- InvD[ino].FirstDisp = 0;
- ItemsChanged = true;
+ g_InvD[g_ino].FirstDisp = g_InvD[g_ino].NoofItems - g_InvD[g_ino].NoofHicons*g_InvD[g_ino].NoofVicons;
+ if (g_InvD[g_ino].FirstDisp < 0)
+ g_InvD[g_ino].FirstDisp = 0;
+ g_ItemsChanged = true;
}
break;
default:
@@ -5483,8 +5472,8 @@ extern void SetObjectFilm(int object, SCNHANDLE hFilm) {
invObj = GetInvObject(object);
invObj->hIconFilm = hFilm;
- if (HeldItem != object)
- ItemsChanged = true;
+ if (g_heldItem != object)
+ g_ItemsChanged = true;
}
/**
@@ -5492,34 +5481,34 @@ extern void SetObjectFilm(int object, SCNHANDLE hFilm) {
*/
extern void syncInvInfo(Common::Serializer &s) {
for (int i = 0; i < NUM_INV; i++) {
- s.syncAsSint32LE(InvD[i].MinHicons);
- s.syncAsSint32LE(InvD[i].MinVicons);
- s.syncAsSint32LE(InvD[i].MaxHicons);
- s.syncAsSint32LE(InvD[i].MaxVicons);
- s.syncAsSint32LE(InvD[i].NoofHicons);
- s.syncAsSint32LE(InvD[i].NoofVicons);
+ s.syncAsSint32LE(g_InvD[i].MinHicons);
+ s.syncAsSint32LE(g_InvD[i].MinVicons);
+ s.syncAsSint32LE(g_InvD[i].MaxHicons);
+ s.syncAsSint32LE(g_InvD[i].MaxVicons);
+ s.syncAsSint32LE(g_InvD[i].NoofHicons);
+ s.syncAsSint32LE(g_InvD[i].NoofVicons);
for (int j = 0; j < MAX_ININV; j++) {
- s.syncAsSint32LE(InvD[i].contents[j]);
+ s.syncAsSint32LE(g_InvD[i].contents[j]);
}
- s.syncAsSint32LE(InvD[i].NoofItems);
- s.syncAsSint32LE(InvD[i].FirstDisp);
- s.syncAsSint32LE(InvD[i].inventoryX);
- s.syncAsSint32LE(InvD[i].inventoryY);
- s.syncAsSint32LE(InvD[i].otherX);
- s.syncAsSint32LE(InvD[i].otherY);
- s.syncAsSint32LE(InvD[i].MaxInvObj);
- s.syncAsSint32LE(InvD[i].hInvTitle);
- s.syncAsSint32LE(InvD[i].resizable);
- s.syncAsSint32LE(InvD[i].bMoveable);
- s.syncAsSint32LE(InvD[i].sNoofHicons);
- s.syncAsSint32LE(InvD[i].sNoofVicons);
- s.syncAsSint32LE(InvD[i].bMax);
+ s.syncAsSint32LE(g_InvD[i].NoofItems);
+ s.syncAsSint32LE(g_InvD[i].FirstDisp);
+ s.syncAsSint32LE(g_InvD[i].inventoryX);
+ s.syncAsSint32LE(g_InvD[i].inventoryY);
+ s.syncAsSint32LE(g_InvD[i].otherX);
+ s.syncAsSint32LE(g_InvD[i].otherY);
+ s.syncAsSint32LE(g_InvD[i].MaxInvObj);
+ s.syncAsSint32LE(g_InvD[i].hInvTitle);
+ s.syncAsSint32LE(g_InvD[i].resizable);
+ s.syncAsSint32LE(g_InvD[i].bMoveable);
+ s.syncAsSint32LE(g_InvD[i].sNoofHicons);
+ s.syncAsSint32LE(g_InvD[i].sNoofVicons);
+ s.syncAsSint32LE(g_InvD[i].bMax);
}
if (TinselV2) {
- for (int i = 0; i < numObjects; ++i)
- s.syncAsUint32LE(invFilms[i]);
- s.syncAsUint32LE(heldFilm);
+ for (int i = 0; i < g_numObjects; ++i)
+ s.syncAsUint32LE(g_invFilms[i]);
+ s.syncAsUint32LE(g_heldFilm);
}
}
@@ -5533,18 +5522,18 @@ extern void syncInvInfo(Common::Serializer &s) {
*/
// Note: the SCHANDLE type here has been changed to a void*
extern void RegisterIcons(void *cptr, int num) {
- numObjects = num;
- invObjects = (INV_OBJECT *) cptr;
+ g_numObjects = num;
+ g_invObjects = (INV_OBJECT *) cptr;
if (TinselV0) {
// In Tinsel 0, the INV_OBJECT structure doesn't have an attributes field, so we
// need to 'unpack' the source structures into the standard Tinsel v1/v2 format
- MEM_NODE *node = MemoryAllocFixed(numObjects * sizeof(INV_OBJECT));
+ MEM_NODE *node = MemoryAllocFixed(g_numObjects * sizeof(INV_OBJECT));
assert(node);
- invObjects = (INV_OBJECT *)MemoryDeref(node);
- assert(invObjects);
+ g_invObjects = (INV_OBJECT *)MemoryDeref(node);
+ assert(g_invObjects);
byte *srcP = (byte *)cptr;
- INV_OBJECT *destP = (INV_OBJECT *)invObjects;
+ INV_OBJECT *destP = (INV_OBJECT *)g_invObjects;
for (int i = 0; i < num; ++i, ++destP, srcP += 12) {
memmove(destP, srcP, 12);
@@ -5552,12 +5541,12 @@ extern void RegisterIcons(void *cptr, int num) {
}
} else if (TinselV1Mac) {
// Macintosh version has BE encoded resources, so the values need to be byte swapped
- MEM_NODE *node = MemoryAllocFixed(numObjects * sizeof(INV_OBJECT));
+ MEM_NODE *node = MemoryAllocFixed(g_numObjects * sizeof(INV_OBJECT));
assert(node);
- invObjects = (INV_OBJECT *)MemoryDeref(node);
- assert(invObjects);
+ g_invObjects = (INV_OBJECT *)MemoryDeref(node);
+ assert(g_invObjects);
INV_OBJECT *srcP = (INV_OBJECT *)cptr;
- INV_OBJECT *destP = (INV_OBJECT *)invObjects;
+ INV_OBJECT *destP = (INV_OBJECT *)g_invObjects;
for (int i = 0; i < num; ++i, ++destP, ++srcP) {
destP->id = FROM_BE_32(srcP->id);
@@ -5566,14 +5555,14 @@ extern void RegisterIcons(void *cptr, int num) {
destP->attribute = FROM_BE_32(srcP->attribute);
}
} else if (TinselV2) {
- if (invFilms == NULL) {
+ if (g_invFilms == NULL) {
// First time - allocate memory
- MEM_NODE *node = MemoryAllocFixed(numObjects * sizeof(SCNHANDLE));
+ MEM_NODE *node = MemoryAllocFixed(g_numObjects * sizeof(SCNHANDLE));
assert(node);
- invFilms = (SCNHANDLE *)MemoryDeref(node);
- if (invFilms == NULL)
+ g_invFilms = (SCNHANDLE *)MemoryDeref(node);
+ if (g_invFilms == NULL)
error(NO_MEM, "inventory scripts");
- memset(invFilms, 0, numObjects * sizeof(SCNHANDLE));
+ memset(g_invFilms, 0, g_numObjects * sizeof(SCNHANDLE));
}
@@ -5581,11 +5570,11 @@ extern void RegisterIcons(void *cptr, int num) {
// and store all the films separately
int i;
INV_OBJECT *pio;
- for (i = 0, pio = invObjects; i < numObjects; i++, pio++) {
+ for (i = 0, pio = g_invObjects; i < g_numObjects; i++, pio++) {
if (pio->attribute & PERMACONV)
PermaConvIcon(pio->id, pio->attribute & CONVENDITEM);
- invFilms[i] = pio->hIconFilm;
+ g_invFilms[i] = pio->hIconFilm;
}
}
}
@@ -5599,7 +5588,7 @@ extern void setInvWinParts(SCNHANDLE hf) {
const FILM *pfilm;
#endif
- hWinParts = hf;
+ g_hWinParts = hf;
#ifdef DEBUG
pfilm = (const FILM *)LockMem(hf);
@@ -5616,7 +5605,7 @@ extern void setFlagFilms(SCNHANDLE hf) {
const FILM *pfilm;
#endif
- flagFilm = hf;
+ g_flagFilm = hf;
#ifdef DEBUG
pfilm = (const FILM *)LockMem(hf);
@@ -5628,7 +5617,7 @@ extern void setFlagFilms(SCNHANDLE hf) {
* Called from Glitter function 'DecCStrings()'
*/
extern void setConfigStrings(SCNHANDLE *tp) {
- memcpy(configStrings, tp, sizeof(configStrings));
+ memcpy(g_configStrings, tp, sizeof(g_configStrings));
}
/**
@@ -5652,36 +5641,36 @@ extern void idec_inv(int num, SCNHANDLE text, int MaxContents,
if (StartHeight > MaxHeight)
StartHeight = MaxHeight;
- InventoryState = IDLE_INV;
+ g_InventoryState = IDLE_INV;
- InvD[num].MaxHicons = MaxWidth;
- InvD[num].MinHicons = MinWidth;
- InvD[num].MaxVicons = MaxHeight;
- InvD[num].MinVicons = MinHeight;
+ g_InvD[num].MaxHicons = MaxWidth;
+ g_InvD[num].MinHicons = MinWidth;
+ g_InvD[num].MaxVicons = MaxHeight;
+ g_InvD[num].MinVicons = MinHeight;
- InvD[num].NoofHicons = StartWidth;
- InvD[num].NoofVicons = StartHeight;
+ g_InvD[num].NoofHicons = StartWidth;
+ g_InvD[num].NoofVicons = StartHeight;
- memset(InvD[num].contents, 0, sizeof(InvD[num].contents));
- InvD[num].NoofItems = 0;
+ memset(g_InvD[num].contents, 0, sizeof(g_InvD[num].contents));
+ g_InvD[num].NoofItems = 0;
- InvD[num].FirstDisp = 0;
+ g_InvD[num].FirstDisp = 0;
- InvD[num].inventoryX = startx;
- InvD[num].inventoryY = starty;
- InvD[num].otherX = 21;
- InvD[num].otherY = 15;
+ g_InvD[num].inventoryX = startx;
+ g_InvD[num].inventoryY = starty;
+ g_InvD[num].otherX = 21;
+ g_InvD[num].otherY = 15;
- InvD[num].MaxInvObj = MaxContents;
+ g_InvD[num].MaxInvObj = MaxContents;
- InvD[num].hInvTitle = text;
+ g_InvD[num].hInvTitle = text;
if (MaxWidth != MinWidth && MaxHeight != MinHeight)
- InvD[num].resizable = true;
+ g_InvD[num].resizable = true;
- InvD[num].bMoveable = moveable;
+ g_InvD[num].bMoveable = moveable;
- InvD[num].bMax = false;
+ g_InvD[num].bMax = false;
}
/**
@@ -5729,7 +5718,7 @@ extern void idec_inv2(SCNHANDLE text, int MaxContents,
extern int InvGetLimit(int invno) {
assert(invno == INV_1 || invno == INV_2); // only INV_1 and INV_2 supported
- return InvD[invno].MaxInvObj;
+ return g_InvD[invno].MaxInvObj;
}
/**
@@ -5737,12 +5726,12 @@ extern int InvGetLimit(int invno) {
*/
extern void InvSetLimit(int invno, int MaxContents) {
assert(invno == INV_1 || invno == INV_2); // only INV_1 and INV_2 supported
- assert(MaxContents >= InvD[invno].NoofItems); // can't reduce maximum contents below current contents
+ assert(MaxContents >= g_InvD[invno].NoofItems); // can't reduce maximum contents below current contents
if (MaxContents > MAX_ININV)
MaxContents = MAX_ININV; // Max contents
- InvD[invno].MaxInvObj = MaxContents;
+ g_InvD[invno].MaxInvObj = MaxContents;
}
/**
@@ -5757,34 +5746,34 @@ extern void InvSetSize(int invno, int MinWidth, int MinHeight,
if (StartHeight > MaxHeight)
StartHeight = MaxHeight;
- InvD[invno].MaxHicons = MaxWidth;
- InvD[invno].MinHicons = MinWidth;
- InvD[invno].MaxVicons = MaxHeight;
- InvD[invno].MinVicons = MinHeight;
+ g_InvD[invno].MaxHicons = MaxWidth;
+ g_InvD[invno].MinHicons = MinWidth;
+ g_InvD[invno].MaxVicons = MaxHeight;
+ g_InvD[invno].MinVicons = MinHeight;
- InvD[invno].NoofHicons = StartWidth;
- InvD[invno].NoofVicons = StartHeight;
+ g_InvD[invno].NoofHicons = StartWidth;
+ g_InvD[invno].NoofVicons = StartHeight;
if (MaxWidth != MinWidth && MaxHeight != MinHeight)
- InvD[invno].resizable = true;
+ g_InvD[invno].resizable = true;
else
- InvD[invno].resizable = false;
+ g_InvD[invno].resizable = false;
- InvD[invno].bMax = false;
+ g_InvD[invno].bMax = false;
}
/**************************************************************************/
extern bool IsTopWindow() {
- return (InventoryState == BOGUS_INV);
+ return (g_InventoryState == BOGUS_INV);
}
extern bool MenuActive() {
- return (InventoryState == ACTIVE_INV && ino == INV_CONF);
+ return (g_InventoryState == ACTIVE_INV && g_ino == INV_CONF);
}
extern bool IsConvWindow() {
- return (InventoryState == ACTIVE_INV && ino == INV_CONV);
+ return (g_InventoryState == ACTIVE_INV && g_ino == INV_CONV);
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/drives.cpp b/engines/tinsel/drives.cpp
index 5977d3b718..d815fd165d 100644
--- a/engines/tinsel/drives.cpp
+++ b/engines/tinsel/drives.cpp
@@ -32,13 +32,13 @@ namespace Tinsel {
// FIXME: Avoid non-const global vars
-char currentCD = '1';
+char g_currentCD = '1';
-static bool bChangingCD = false;
-static char nextCD = '\0';
+static bool g_bChangingCD = false;
+static char g_nextCD = '\0';
-static uint32 lastTime = 0;
-extern LANGUAGE sampleLanguage;
+static uint32 g_lastTime = 0;
+extern LANGUAGE g_sampleLanguage;
void CdCD(CORO_PARAM) {
@@ -47,7 +47,7 @@ void CdCD(CORO_PARAM) {
CORO_BEGIN_CODE(_ctx);
- while (bChangingCD) {
+ while (g_bChangingCD) {
if (g_scheduler->getCurrentProcess()) {
// FIXME: CdCD gets passed a nullContext in RegisterGlobals() and
// PrimeSceneHopper(), because I didn't know how to get a proper
@@ -66,13 +66,13 @@ void CdCD(CORO_PARAM) {
int GetCurrentCD() {
// count from 1
- return (currentCD - '1' + 1);
+ return (g_currentCD - '1' + 1);
}
static const uint32 cdFlags[] = { fCd1, fCd2, fCd3, fCd4, fCd5, fCd6, fCd7, fCd8 };
void SetCD(int flags) {
- if (flags & cdFlags[currentCD - '1'])
+ if (flags & cdFlags[g_currentCD - '1'])
return;
error("SetCD() problem");
@@ -82,7 +82,7 @@ int GetCD(int flags) {
int i;
char cd = '\0';
- if (flags & cdFlags[currentCD - '1'])
+ if (flags & cdFlags[g_currentCD - '1'])
return GetCurrentCD();
for (i = 0; i < 8; i++) {
@@ -93,19 +93,19 @@ int GetCD(int flags) {
}
assert(i != 8);
- nextCD = cd;
+ g_nextCD = cd;
return cd;
}
void DoCdChange() {
- if (bChangingCD && (g_system->getMillis() > (lastTime + 1000))) {
- lastTime = g_system->getMillis();
+ if (g_bChangingCD && (g_system->getMillis() > (g_lastTime + 1000))) {
+ g_lastTime = g_system->getMillis();
_vm->_sound->closeSampleStream();
// Use the filesize of the sample file to determine, for Discworld 2, which CD it is
if (TinselV2) {
TinselFile f;
- if (!f.open(_vm->getSampleFile(sampleLanguage)))
+ if (!f.open(_vm->getSampleFile(g_sampleLanguage)))
// No CD present
return;
@@ -113,28 +113,28 @@ void DoCdChange() {
f.close();
- if (currentCD != sampleCdNumber)
+ if (g_currentCD != sampleCdNumber)
return;
}
_vm->_sound->openSampleFiles();
ChangeLanguage(TextLanguage());
- bChangingCD = false;
+ g_bChangingCD = false;
}
}
void SetNextCD(int cdNumber) {
assert(cdNumber == 1 || cdNumber == 2);
- nextCD = (char)(cdNumber + '1' - 1);
+ g_nextCD = (char)(cdNumber + '1' - 1);
}
bool GotoCD() {
// WORKAROUND: Somehow, CdDoChange() is called twice... Hopefully, this guard helps
- if (currentCD == nextCD)
+ if (g_currentCD == g_nextCD)
return false;
- currentCD = nextCD;
+ g_currentCD = g_nextCD;
/* if (bNoCD) {
strcpy(cdDirectory, hdDirectory);
@@ -142,7 +142,7 @@ bool GotoCD() {
strcat(cdDirectory, cdLastBit);
}
*/
- bChangingCD = true;
+ g_bChangingCD = true;
return true;
}
diff --git a/engines/tinsel/events.cpp b/engines/tinsel/events.cpp
index e701ddca99..74454c5f2a 100644
--- a/engines/tinsel/events.cpp
+++ b/engines/tinsel/events.cpp
@@ -54,37 +54,37 @@ extern HPOLYGON GetTaggedPoly();
//----------------- EXTERNAL GLOBAL DATA ---------------------
-extern bool bEnableMenu;
+extern bool g_bEnableMenu;
//----------------- LOCAL GLOBAL DATA --------------------
// FIXME: Avoid non-const global vars
-static uint32 lastUserEvent = 0; // Time it hapenned
-static int leftEvents = 0; // Single or double, left or right. Or escape key.
-static int escEvents = 1; // Escape key
-static int userEvents = 0; // Whenever a button or a key comes in
+static uint32 g_lastUserEvent = 0; // Time it hapenned
+static int g_leftEvents = 0; // Single or double, left or right. Or escape key.
+static int g_escEvents = 1; // Escape key
+static int g_userEvents = 0; // Whenever a button or a key comes in
-static int eCount = 0;
+static int g_eCount = 0;
-static int controlState;
-static bool bStartOff;
+static int g_controlState;
+static bool g_bStartOff;
-static int controlX, controlY;
-static bool bProvNotProcessed = false;
+static int g_controlX, g_controlY;
+static bool g_bProvNotProcessed = false;
/**
* Gets called before each schedule, only 1 user action per schedule
* is allowed.
*/
void ResetEcount() {
- eCount = 0;
+ g_eCount = 0;
}
void IncUserEvents() {
- userEvents++;
- lastUserEvent = DwGetCurrentTime();
+ g_userEvents++;
+ g_lastUserEvent = DwGetCurrentTime();
}
/**
@@ -104,7 +104,7 @@ void AllowDclick(CORO_PARAM, PLR_EVENT be) {
FreeToken(TOKEN_LEFT_BUT);
// Prevent activation of 2 events on the same tick
- if (++eCount != 1)
+ if (++g_eCount != 1)
CORO_KILL_SELF();
break;
@@ -125,17 +125,17 @@ void ControlOn() {
return;
}
- bEnableMenu = false;
+ g_bEnableMenu = false;
- if (controlState == CONTROL_OFF) {
+ if (g_controlState == CONTROL_OFF) {
// Control is on
- controlState = CONTROL_ON;
+ g_controlState = CONTROL_ON;
// Restore cursor to where it was
- if (bStartOff == true)
- bStartOff = false;
+ if (g_bStartOff == true)
+ g_bStartOff = false;
else
- SetCursorXY(controlX, controlY);
+ SetCursorXY(g_controlX, g_controlY);
// Re-instate cursor
UnHideCursor();
@@ -155,14 +155,14 @@ void ControlOff() {
return;
}
- bEnableMenu = false;
+ g_bEnableMenu = false;
- if (controlState == CONTROL_ON) {
+ if (g_controlState == CONTROL_ON) {
// Control is off
- controlState = CONTROL_OFF;
+ g_controlState = CONTROL_OFF;
// Store cursor position
- GetCursorXY(&controlX, &controlY, true);
+ GetCursorXY(&g_controlX, &g_controlY, true);
// Blank out cursor
DwHideCursor();
@@ -181,10 +181,10 @@ void ControlStartOff() {
return;
}
- bEnableMenu = false;
+ g_bEnableMenu = false;
// Control is off
- controlState = CONTROL_OFF;
+ g_controlState = CONTROL_OFF;
// Blank out cursor
DwHideCursor();
@@ -192,7 +192,7 @@ void ControlStartOff() {
// Switch off tags
DisableTags();
- bStartOff = true;
+ g_bStartOff = true;
}
/**
@@ -211,7 +211,7 @@ bool GetControl(int param) {
}
bool GetControl() {
- if (controlState == CONTROL_ON) {
+ if (g_controlState == CONTROL_ON) {
ControlOff();
return true;
} else
@@ -220,7 +220,7 @@ bool GetControl() {
bool ControlIsOn() {
if (TinselV2)
- return (controlState == CONTROL_ON);
+ return (g_controlState == CONTROL_ON);
return TestToken(TOKEN_CONTROL);
}
@@ -289,7 +289,7 @@ static void ProcessUserEvent(TINSEL_EVENT uEvent, const Common::Point &coOrds, P
HPOLYGON hPoly;
// Prevent activation of 2 events on the same tick
- if (++eCount != 1)
+ if (++g_eCount != 1)
return;
if ((actor = GetTaggedActor()) != 0) {
@@ -395,19 +395,19 @@ void PlayerEvent(PLR_EVENT pEvent, const Common::Point &coOrds) {
static uint32 lastRealAction = 0; // FIXME: Avoid non-const global vars
// This stuff to allow F1 key during startup.
- if (bEnableMenu && pEvent == PLR_MENU)
+ if (g_bEnableMenu && pEvent == PLR_MENU)
Control(CONTROL_ON);
else
IncUserEvents();
if (pEvent == PLR_ESCAPE) {
- ++escEvents;
- ++leftEvents; // Yes, I do mean this
+ ++g_escEvents;
+ ++g_leftEvents; // Yes, I do mean this
} else if ((pEvent == PLR_PROV_WALKTO)
|| (pEvent == PLR_WALKTO)
|| (pEvent == PLR_LOOK)
|| (pEvent == PLR_ACTION)) {
- ++leftEvents;
+ ++g_leftEvents;
}
// Only allow events if player control is on
@@ -484,18 +484,18 @@ void PlayerEvent(PLR_EVENT pEvent, const Common::Point &coOrds) {
* For ESCapable Glitter sequences
*/
int GetEscEvents() {
- return escEvents;
+ return g_escEvents;
}
/**
* For cutting short talk()s etc.
*/
int GetLeftEvents() {
- return leftEvents;
+ return g_leftEvents;
}
bool LeftEventChange(int myleftEvent) {
- if (leftEvents != myleftEvent) {
+ if (g_leftEvents != myleftEvent) {
ProcessedProvisional();
return true;
} else
@@ -506,15 +506,15 @@ bool LeftEventChange(int myleftEvent) {
* For waitkey() Glitter function
*/
int getUserEvents() {
- return userEvents;
+ return g_userEvents;
}
uint32 getUserEventTime() {
- return DwGetCurrentTime() - lastUserEvent;
+ return DwGetCurrentTime() - g_lastUserEvent;
}
void resetUserEventTime() {
- lastUserEvent = DwGetCurrentTime();
+ g_lastUserEvent = DwGetCurrentTime();
}
struct PTP_INIT {
@@ -655,18 +655,18 @@ void effRunPolyTinselCode(HPOLYGON hPoly, TINSEL_EVENT event, int actor) {
* subsequent 'real' event.
*/
void ProcessedProvisional() {
- bProvNotProcessed = false;
+ g_bProvNotProcessed = false;
}
/**
* Resets the bProvNotProcessed flag
*/
void ProvNotProcessed() {
- bProvNotProcessed = true;
+ g_bProvNotProcessed = true;
}
bool GetProvNotProcessed() {
- return bProvNotProcessed;
+ return g_bProvNotProcessed;
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/font.cpp b/engines/tinsel/font.cpp
index e857dca509..54aa7cc15f 100644
--- a/engines/tinsel/font.cpp
+++ b/engines/tinsel/font.cpp
@@ -34,38 +34,38 @@ namespace Tinsel {
// FIXME: Avoid non-const global vars
-static char tBuffer[TBUFSZ];
+static char g_tBuffer[TBUFSZ];
-static SCNHANDLE hTagFont = 0, hTalkFont = 0;
-static SCNHANDLE hRegularTalkFont = 0, hRegularTagFont = 0;
+static SCNHANDLE g_hTagFont = 0, g_hTalkFont = 0;
+static SCNHANDLE g_hRegularTalkFont = 0, g_hRegularTagFont = 0;
/**
* Return address of tBuffer
*/
char *TextBufferAddr() {
- return tBuffer;
+ return g_tBuffer;
}
/**
* Return hTagFont handle.
*/
SCNHANDLE GetTagFontHandle() {
- return hTagFont;
+ return g_hTagFont;
}
/**
* Return hTalkFont handle.
*/
SCNHANDLE GetTalkFontHandle() {
- return hTalkFont;
+ return g_hTalkFont;
}
/**
* Called from dec_tagfont() Glitter function. Store the tag font handle.
*/
void SetTagFontHandle(SCNHANDLE hFont) {
- hTagFont = hRegularTagFont = hFont; // Store the font handle
+ g_hTagFont = g_hRegularTagFont = hFont; // Store the font handle
}
/**
@@ -73,20 +73,20 @@ void SetTagFontHandle(SCNHANDLE hFont) {
* Store the talk font handle.
*/
void SetTalkFontHandle(SCNHANDLE hFont) {
- hTalkFont = hRegularTalkFont = hFont; // Store the font handle
+ g_hTalkFont = g_hRegularTalkFont = hFont; // Store the font handle
}
void SetTempTagFontHandle(SCNHANDLE hFont) {
- hTagFont = hFont;
+ g_hTagFont = hFont;
}
void SetTempTalkFontHandle(SCNHANDLE hFont) {
- hTalkFont = hFont;
+ g_hTalkFont = hFont;
}
void ResetFontHandles() {
- hTagFont = hRegularTagFont;
- hTalkFont = hRegularTalkFont;
+ g_hTagFont = g_hRegularTagFont;
+ g_hTalkFont = g_hRegularTalkFont;
}
@@ -98,17 +98,17 @@ void FettleFontPal(SCNHANDLE fontPal) {
IMAGE *pImg;
assert(fontPal);
- assert(hTagFont); // Tag font not declared
- assert(hTalkFont); // Talk font not declared
+ assert(g_hTagFont); // Tag font not declared
+ assert(g_hTalkFont); // Talk font not declared
- pFont = (const FONT *)LockMem(hTagFont);
+ pFont = (const FONT *)LockMem(g_hTagFont);
pImg = (IMAGE *)LockMem(FROM_LE_32(pFont->fontInit.hObjImg)); // get image for char 0
if (!TinselV2)
pImg->hImgPal = TO_LE_32(fontPal);
else
pImg->hImgPal = 0;
- pFont = (const FONT *)LockMem(hTalkFont);
+ pFont = (const FONT *)LockMem(g_hTalkFont);
pImg = (IMAGE *)LockMem(FROM_LE_32(pFont->fontInit.hObjImg)); // get image for char 0
if (!TinselV2)
pImg->hImgPal = TO_LE_32(fontPal);
diff --git a/engines/tinsel/graphics.cpp b/engines/tinsel/graphics.cpp
index 4f3cc36994..9b06b1a501 100644
--- a/engines/tinsel/graphics.cpp
+++ b/engines/tinsel/graphics.cpp
@@ -40,7 +40,7 @@ namespace Tinsel {
#define CHAR_WIDTH 4
#define CHAR_HEIGHT 4
-extern uint8 transPalette[MAX_COLORS];
+extern uint8 g_transPalette[MAX_COLORS];
//----------------- SUPPORT FUNCTIONS ---------------------
@@ -559,7 +559,7 @@ static void WrtTrans(DRAWOBJECT *pObj, uint8 *destP, bool applyClipping) {
// Loop through any remaining lines
while (pObj->height > 0) {
for (int i = 0; i < pObj->width; ++i, ++destP)
- *destP = transPalette[*destP];
+ *destP = g_transPalette[*destP];
--pObj->height;
destP += lineOffset;
diff --git a/engines/tinsel/handle.cpp b/engines/tinsel/handle.cpp
index eeb83b1f98..e31b2141f5 100644
--- a/engines/tinsel/handle.cpp
+++ b/engines/tinsel/handle.cpp
@@ -69,17 +69,17 @@ enum {
// FIXME: Avoid non-const global vars
// handle table gets loaded from index file at runtime
-static MEMHANDLE *handleTable = 0;
+static MEMHANDLE *g_handleTable = 0;
// number of handles in the handle table
-static uint numHandles = 0;
+static uint g_numHandles = 0;
-static uint32 cdPlayHandle = (uint32)-1;
+static uint32 g_cdPlayHandle = (uint32)-1;
-static SCNHANDLE cdBaseHandle = 0, cdTopHandle = 0;
-static Common::File *cdGraphStream = 0;
+static SCNHANDLE g_cdBaseHandle = 0, g_cdTopHandle = 0;
+static Common::File *g_cdGraphStream = 0;
-static char szCdPlayFile[100];
+static char g_szCdPlayFile[100];
//----------------- FORWARD REFERENCES --------------------
@@ -110,24 +110,24 @@ void SetupHandleTable() {
}
// calc number of handles
- numHandles = len / RECORD_SIZE;
+ g_numHandles = len / RECORD_SIZE;
// allocate memory for the index file
- handleTable = (MEMHANDLE *)calloc(numHandles, sizeof(struct MEMHANDLE));
+ g_handleTable = (MEMHANDLE *)calloc(g_numHandles, sizeof(struct MEMHANDLE));
// make sure memory allocated
- assert(handleTable);
+ assert(g_handleTable);
// load data
- for (i = 0; i < numHandles; i++) {
- f.read(handleTable[i].szName, 12);
- handleTable[i].filesize = f.readUint32();
+ for (i = 0; i < g_numHandles; i++) {
+ f.read(g_handleTable[i].szName, 12);
+ g_handleTable[i].filesize = f.readUint32();
// The pointer should always be NULL. We don't
// need to read that from the file.
- handleTable[i]._node = NULL;
+ g_handleTable[i]._node = NULL;
f.seek(4, SEEK_CUR);
// For Discworld 2, read in the flags2 field
- handleTable[i].flags2 = t2Flag ? f.readUint32() : 0;
+ g_handleTable[i].flags2 = t2Flag ? f.readUint32() : 0;
}
if (f.eos() || f.err()) {
@@ -145,7 +145,7 @@ void SetupHandleTable() {
}
// allocate memory nodes and load all permanent graphics
- for (i = 0, pH = handleTable; i < numHandles; i++, pH++) {
+ for (i = 0, pH = g_handleTable; i < g_numHandles; i++, pH++) {
if (pH->filesize & fPreload) {
// allocate a fixed memory node for permanent files
pH->_node = MemoryAllocFixed((pH->filesize & FSIZE_MASK));
@@ -172,24 +172,24 @@ void SetupHandleTable() {
}
void FreeHandleTable() {
- free(handleTable);
- handleTable = NULL;
+ free(g_handleTable);
+ g_handleTable = NULL;
- delete cdGraphStream;
- cdGraphStream = NULL;
+ delete g_cdGraphStream;
+ g_cdGraphStream = NULL;
}
/**
* Loads a memory block as a file.
*/
void OpenCDGraphFile() {
- delete cdGraphStream;
+ delete g_cdGraphStream;
// As the theory goes, the right CD will be in there!
- cdGraphStream = new Common::File;
- if (!cdGraphStream->open(szCdPlayFile))
- error(CANNOT_FIND_FILE, szCdPlayFile);
+ g_cdGraphStream = new Common::File;
+ if (!g_cdGraphStream->open(g_szCdPlayFile))
+ error(CANNOT_FIND_FILE, g_szCdPlayFile);
}
void LoadCDGraphData(MEMHANDLE *pH) {
@@ -210,15 +210,15 @@ void LoadCDGraphData(MEMHANDLE *pH) {
assert(addr);
// Move to correct place in file and load the required data
- assert(cdGraphStream);
- cdGraphStream->seek(cdBaseHandle & OFFSETMASK, SEEK_SET);
- bytes = cdGraphStream->read(addr, (cdTopHandle - cdBaseHandle) & OFFSETMASK);
+ assert(g_cdGraphStream);
+ g_cdGraphStream->seek(g_cdBaseHandle & OFFSETMASK, SEEK_SET);
+ bytes = g_cdGraphStream->read(addr, (g_cdTopHandle - g_cdBaseHandle) & OFFSETMASK);
// New code to try and handle CD read failures 24/2/97
- while (bytes != ((cdTopHandle - cdBaseHandle) & OFFSETMASK) && retries++ < MAX_READ_RETRIES) {
+ while (bytes != ((g_cdTopHandle - g_cdBaseHandle) & OFFSETMASK) && retries++ < MAX_READ_RETRIES) {
// Try again
- cdGraphStream->seek(cdBaseHandle & OFFSETMASK, SEEK_SET);
- bytes = cdGraphStream->read(addr, (cdTopHandle - cdBaseHandle) & OFFSETMASK);
+ g_cdGraphStream->seek(g_cdBaseHandle & OFFSETMASK, SEEK_SET);
+ bytes = g_cdGraphStream->read(addr, (g_cdTopHandle - g_cdBaseHandle) & OFFSETMASK);
}
// discardable - unlock the memory
@@ -230,7 +230,7 @@ void LoadCDGraphData(MEMHANDLE *pH) {
// clear the loading flag
// pH->filesize &= ~fLoading;
- if (bytes != ((cdTopHandle - cdBaseHandle) & OFFSETMASK))
+ if (bytes != ((g_cdTopHandle - g_cdBaseHandle) & OFFSETMASK))
// file is corrupt
error(FILE_READ_ERROR, "CD play file");
}
@@ -245,22 +245,22 @@ void LoadCDGraphData(MEMHANDLE *pH) {
void LoadExtraGraphData(SCNHANDLE start, SCNHANDLE next) {
OpenCDGraphFile();
- MemoryDiscard((handleTable + cdPlayHandle)->_node); // Free it
+ MemoryDiscard((g_handleTable + g_cdPlayHandle)->_node); // Free it
// It must always be the same
- assert(cdPlayHandle == (start >> SCNHANDLE_SHIFT));
- assert(cdPlayHandle == (next >> SCNHANDLE_SHIFT));
+ assert(g_cdPlayHandle == (start >> SCNHANDLE_SHIFT));
+ assert(g_cdPlayHandle == (next >> SCNHANDLE_SHIFT));
- cdBaseHandle = start;
- cdTopHandle = next;
+ g_cdBaseHandle = start;
+ g_cdTopHandle = next;
}
void SetCdPlaySceneDetails(int fileNum, const char *fileName) {
- strcpy(szCdPlayFile, fileName);
+ strcpy(g_szCdPlayFile, fileName);
}
void SetCdPlayHandle(int fileNum) {
- cdPlayHandle = fileNum;
+ g_cdPlayHandle = fileNum;
}
@@ -323,26 +323,26 @@ byte *LockMem(SCNHANDLE offset) {
MEMHANDLE *pH; // points to table entry
// range check the memory handle
- assert(handle < numHandles);
+ assert(handle < g_numHandles);
#ifdef DEBUG
if (handle != s_lockedScene)
warning(" Calling LockMem(0x%x), handle %d differs from active scene %d", offset, handle, s_lockedScene);
#endif
- pH = handleTable + handle;
+ pH = g_handleTable + handle;
if (pH->filesize & fPreload) {
// permanent files are already loaded, nothing to be done
- } else if (handle == cdPlayHandle) {
+ } else if (handle == g_cdPlayHandle) {
// Must be in currently loaded/loadable range
- if (offset < cdBaseHandle || offset >= cdTopHandle)
+ if (offset < g_cdBaseHandle || offset >= g_cdTopHandle)
error("Overlapping (in time) CD-plays");
// May have been discarded, if so, we have to reload
if (!MemoryDeref(pH->_node)) {
// Data was discarded, we have to reload
- MemoryReAlloc(pH->_node, cdTopHandle - cdBaseHandle);
+ MemoryReAlloc(pH->_node, g_cdTopHandle - g_cdBaseHandle);
LoadCDGraphData(pH);
@@ -353,7 +353,7 @@ byte *LockMem(SCNHANDLE offset) {
// make sure address is valid
assert(pH->filesize & fLoaded);
- offset -= cdBaseHandle;
+ offset -= g_cdBaseHandle;
} else {
if (!MemoryDeref(pH->_node)) {
// Data was discarded, we have to reload
@@ -387,9 +387,9 @@ void LockScene(SCNHANDLE offset) {
#endif
// range check the memory handle
- assert(handle < numHandles);
+ assert(handle < g_numHandles);
- pH = handleTable + handle;
+ pH = g_handleTable + handle;
if ((pH->filesize & fPreload) == 0) {
// Ensure the scene handle is allocated.
@@ -414,9 +414,9 @@ void UnlockScene(SCNHANDLE offset) {
MEMHANDLE *pH; // points to table entry
// range check the memory handle
- assert(handle < numHandles);
+ assert(handle < g_numHandles);
- pH = handleTable + handle;
+ pH = g_handleTable + handle;
if ((pH->filesize & fPreload) == 0) {
// unlock the scene data
@@ -441,9 +441,9 @@ bool ValidHandle(SCNHANDLE offset) {
MEMHANDLE *pH; // points to table entry
// range check the memory handle
- assert(handle < numHandles);
+ assert(handle < g_numHandles);
- pH = handleTable + handle;
+ pH = g_handleTable + handle;
return (pH->filesize & FSIZE_MASK) != 8;
}
@@ -458,7 +458,7 @@ void TouchMem(SCNHANDLE offset) {
uint32 handle = offset >> SCNHANDLE_SHIFT; // calc memory handle to use
if (offset != 0) {
- pH = handleTable + handle;
+ pH = g_handleTable + handle;
// update the LRU time whether its loaded or not!
if (pH->_node)
@@ -474,9 +474,9 @@ bool IsCdPlayHandle(SCNHANDLE offset) {
uint32 handle = offset >> SCNHANDLE_SHIFT; // calc memory handle to use
// range check the memory handle
- assert(handle < numHandles);
+ assert(handle < g_numHandles);
- return (handle == cdPlayHandle);
+ return (handle == g_cdPlayHandle);
}
/**
@@ -486,9 +486,9 @@ int CdNumber(SCNHANDLE offset) {
uint handle = offset >> SCNHANDLE_SHIFT; // calc memory handle to use
// range check the memory handle
- assert(handle < numHandles);
+ assert(handle < g_numHandles);
- MEMHANDLE *pH = handleTable + handle;
+ MEMHANDLE *pH = g_handleTable + handle;
if (!TinselV2)
return 1;
diff --git a/engines/tinsel/heapmem.cpp b/engines/tinsel/heapmem.cpp
index 819493bda1..597cc69e66 100644
--- a/engines/tinsel/heapmem.cpp
+++ b/engines/tinsel/heapmem.cpp
@@ -58,16 +58,16 @@ static const uint32 MemoryPoolSize[3] = {5 * 1024 * 1024, 5 * 1024 * 1024, 10 *
// list of all memory nodes
-MEM_NODE mnodeList[NUM_MNODES];
+MEM_NODE g_mnodeList[NUM_MNODES];
// pointer to the linked list of free mnodes
-static MEM_NODE *pFreeMemNodes;
+static MEM_NODE *g_pFreeMemNodes;
// list of all fixed memory nodes
-MEM_NODE s_fixedMnodesList[5];
+MEM_NODE g_s_fixedMnodesList[5];
// the mnode heap sentinel
-static MEM_NODE heapSentinel;
+static MEM_NODE g_heapSentinel;
//
static MEM_NODE *AllocMemNode();
@@ -80,7 +80,7 @@ static void MemoryStats() {
int lockedSize = 0;
int totalSize = 0;
- const MEM_NODE *pHeap = &heapSentinel;
+ const MEM_NODE *pHeap = &g_heapSentinel;
MEM_NODE *pCur;
for (pCur = pHeap->pNext; pCur != pHeap; pCur = pCur->pNext) {
@@ -104,43 +104,43 @@ static void MemoryStats() {
*/
void MemoryInit() {
// place first node on free list
- pFreeMemNodes = mnodeList;
+ g_pFreeMemNodes = g_mnodeList;
// link all other objects after first
- memset(mnodeList, 0, sizeof(mnodeList));
+ memset(g_mnodeList, 0, sizeof(g_mnodeList));
for (int i = 1; i < NUM_MNODES; i++) {
- mnodeList[i - 1].pNext = mnodeList + i;
+ g_mnodeList[i - 1].pNext = g_mnodeList + i;
}
// null the last mnode
- mnodeList[NUM_MNODES - 1].pNext = NULL;
+ g_mnodeList[NUM_MNODES - 1].pNext = NULL;
// clear list of fixed memory nodes
- memset(s_fixedMnodesList, 0, sizeof(s_fixedMnodesList));
+ memset(g_s_fixedMnodesList, 0, sizeof(g_s_fixedMnodesList));
// set cyclic links to the sentinel
- heapSentinel.pPrev = &heapSentinel;
- heapSentinel.pNext = &heapSentinel;
+ g_heapSentinel.pPrev = &g_heapSentinel;
+ g_heapSentinel.pNext = &g_heapSentinel;
// flag sentinel as locked
- heapSentinel.flags = DWM_LOCKED | DWM_SENTINEL;
+ g_heapSentinel.flags = DWM_LOCKED | DWM_SENTINEL;
// store the current heap size in the sentinel
uint32 size = MemoryPoolSize[0];
if (TinselVersion == TINSEL_V1) size = MemoryPoolSize[1];
else if (TinselVersion == TINSEL_V2) size = MemoryPoolSize[2];
- heapSentinel.size = size;
+ g_heapSentinel.size = size;
}
/**
* Deinitializes the memory manager.
*/
void MemoryDeinit() {
- const MEM_NODE *pHeap = &heapSentinel;
+ const MEM_NODE *pHeap = &g_heapSentinel;
MEM_NODE *pCur;
- pCur = s_fixedMnodesList;
- for (int i = 0; i < ARRAYSIZE(s_fixedMnodesList); ++i, ++pCur) {
+ pCur = g_s_fixedMnodesList;
+ for (int i = 0; i < ARRAYSIZE(g_s_fixedMnodesList); ++i, ++pCur) {
free(pCur->pBaseAddr);
pCur->pBaseAddr = 0;
}
@@ -157,13 +157,13 @@ void MemoryDeinit() {
*/
static MEM_NODE *AllocMemNode() {
// get the first free mnode
- MEM_NODE *pMemNode = pFreeMemNodes;
+ MEM_NODE *pMemNode = g_pFreeMemNodes;
// make sure a mnode is available
assert(pMemNode); // Out of memory nodes
// the next free mnode
- pFreeMemNodes = pMemNode->pNext;
+ g_pFreeMemNodes = pMemNode->pNext;
// wipe out the mnode
memset(pMemNode, 0, sizeof(MEM_NODE));
@@ -178,13 +178,13 @@ static MEM_NODE *AllocMemNode() {
*/
void FreeMemNode(MEM_NODE *pMemNode) {
// validate mnode pointer
- assert(pMemNode >= mnodeList && pMemNode <= mnodeList + NUM_MNODES - 1);
+ assert(pMemNode >= g_mnodeList && pMemNode <= g_mnodeList + NUM_MNODES - 1);
// place free list in mnode next
- pMemNode->pNext = pFreeMemNodes;
+ pMemNode->pNext = g_pFreeMemNodes;
// add mnode to top of free list
- pFreeMemNodes = pMemNode;
+ g_pFreeMemNodes = pMemNode;
}
@@ -194,11 +194,11 @@ void FreeMemNode(MEM_NODE *pMemNode) {
* @return true if any blocks were discarded, false otherwise
*/
static bool HeapCompact(long size) {
- const MEM_NODE *pHeap = &heapSentinel;
+ const MEM_NODE *pHeap = &g_heapSentinel;
MEM_NODE *pCur, *pOldest;
uint32 oldest; // time of the oldest discardable block
- while (heapSentinel.size < size) {
+ while (g_heapSentinel.size < size) {
// find the oldest discardable block
oldest = DwGetCurrentTime();
@@ -231,7 +231,7 @@ static bool HeapCompact(long size) {
* @param size Number of bytes to allocate
*/
static MEM_NODE *MemoryAlloc(long size) {
- MEM_NODE *pHeap = &heapSentinel;
+ MEM_NODE *pHeap = &g_heapSentinel;
#ifdef SCUMM_NEED_ALIGNMENT
const int alignPadding = sizeof(void *) - 1;
@@ -255,7 +255,7 @@ static MEM_NODE *MemoryAlloc(long size) {
assert(pNode->pBaseAddr);
// Subtract size of new block from total
- heapSentinel.size -= size;
+ g_heapSentinel.size -= size;
#ifdef DEBUG
MemoryStats();
@@ -282,7 +282,7 @@ static MEM_NODE *MemoryAlloc(long size) {
* by using MemoryReAlloc().
*/
MEM_NODE *MemoryNoAlloc() {
- MEM_NODE *pHeap = &heapSentinel;
+ MEM_NODE *pHeap = &g_heapSentinel;
// chain a discarded node onto the end of the heap
MEM_NODE *pNode = AllocMemNode();
@@ -315,8 +315,8 @@ MEM_NODE *MemoryAllocFixed(long size) {
#endif
// Search for a free entry in s_fixedMnodesList
- MEM_NODE *pNode = s_fixedMnodesList;
- for (int i = 0; i < ARRAYSIZE(s_fixedMnodesList); ++i, ++pNode) {
+ MEM_NODE *pNode = g_s_fixedMnodesList;
+ for (int i = 0; i < ARRAYSIZE(g_s_fixedMnodesList); ++i, ++pNode) {
if (!pNode->pBaseAddr) {
pNode->pNext = 0;
pNode->pPrev = 0;
@@ -326,7 +326,7 @@ MEM_NODE *MemoryAllocFixed(long size) {
pNode->flags = DWM_USED;
// Subtract size of new block from total
- heapSentinel.size -= size;
+ g_heapSentinel.size -= size;
return pNode;
}
@@ -342,7 +342,7 @@ MEM_NODE *MemoryAllocFixed(long size) {
*/
void MemoryDiscard(MEM_NODE *pMemNode) {
// validate mnode pointer
- assert(pMemNode >= mnodeList && pMemNode <= mnodeList + NUM_MNODES - 1);
+ assert(pMemNode >= g_mnodeList && pMemNode <= g_mnodeList + NUM_MNODES - 1);
// object must be in use and locked
assert((pMemNode->flags & (DWM_USED | DWM_LOCKED)) == DWM_USED);
@@ -351,7 +351,7 @@ void MemoryDiscard(MEM_NODE *pMemNode) {
if ((pMemNode->flags & DWM_DISCARDED) == 0) {
// free memory
free(pMemNode->pBaseAddr);
- heapSentinel.size += pMemNode->size;
+ g_heapSentinel.size += pMemNode->size;
#ifdef DEBUG
MemoryStats();
@@ -416,7 +416,7 @@ void MemoryReAlloc(MEM_NODE *pMemNode, long size) {
MEM_NODE *pNew;
// validate mnode pointer
- assert(pMemNode >= mnodeList && pMemNode <= mnodeList + NUM_MNODES - 1);
+ assert(pMemNode >= g_mnodeList && pMemNode <= g_mnodeList + NUM_MNODES - 1);
// align the size to machine boundary requirements
size = (size + sizeof(void *) - 1) & ~(sizeof(void *) - 1);
diff --git a/engines/tinsel/mareels.cpp b/engines/tinsel/mareels.cpp
index bd267a2c65..7dd905d0f2 100644
--- a/engines/tinsel/mareels.cpp
+++ b/engines/tinsel/mareels.cpp
@@ -48,9 +48,9 @@ struct SCIdataStruct {
// FIXME: Avoid non-const global vars
-static SCIdataStruct SCIdata[MAX_SCRENTRIES];
+static SCIdataStruct g_SCIdata[MAX_SCRENTRIES];
-static int scrEntries = 0;
+static int g_scrEntries = 0;
/**
* Sets an actor's walk reels
@@ -131,16 +131,16 @@ void SetScalingReels(int actor, int scale, int direction,
assert(!(scale == 1 && direction == D_UP) &&
!(scale == NUM_MAINSCALES && direction == D_DOWN)); // illegal direction from scale
- assert(scrEntries < MAX_SCRENTRIES); // Scaling reels limit reached!
+ assert(g_scrEntries < MAX_SCRENTRIES); // Scaling reels limit reached!
- SCIdata[scrEntries].actor = actor;
- SCIdata[scrEntries].scale = scale;
- SCIdata[scrEntries].direction = direction;
- SCIdata[scrEntries].reels[LEFTREEL] = left;
- SCIdata[scrEntries].reels[RIGHTREEL] = right;
- SCIdata[scrEntries].reels[FORWARD] = forward;
- SCIdata[scrEntries].reels[AWAY] = away;
- scrEntries++;
+ g_SCIdata[g_scrEntries].actor = actor;
+ g_SCIdata[g_scrEntries].scale = scale;
+ g_SCIdata[g_scrEntries].direction = direction;
+ g_SCIdata[g_scrEntries].reels[LEFTREEL] = left;
+ g_SCIdata[g_scrEntries].reels[RIGHTREEL] = right;
+ g_SCIdata[g_scrEntries].reels[FORWARD] = forward;
+ g_SCIdata[g_scrEntries].reels[AWAY] = away;
+ g_scrEntries++;
}
/**
@@ -155,12 +155,12 @@ SCNHANDLE ScalingReel(int ano, int scale1, int scale2, DIRECTION reel) {
else
d = D_UP;
- for (int i = 0; i < scrEntries; i++) {
- if (SCIdata[i].actor == ano && SCIdata[i].scale == scale1 && SCIdata[i].direction == d) {
- if (SCIdata[i].reels[reel] == TF_NONE)
+ for (int i = 0; i < g_scrEntries; i++) {
+ if (g_SCIdata[i].actor == ano && g_SCIdata[i].scale == scale1 && g_SCIdata[i].direction == d) {
+ if (g_SCIdata[i].reels[reel] == TF_NONE)
return 0;
else
- return SCIdata[i].reels[reel];
+ return g_SCIdata[i].reels[reel];
}
}
return 0;
@@ -170,8 +170,8 @@ SCNHANDLE ScalingReel(int ano, int scale1, int scale2, DIRECTION reel) {
* RebootScalingReels
*/
void RebootScalingReels() {
- scrEntries = 0;
- memset(SCIdata, 0, sizeof(SCIdata));
+ g_scrEntries = 0;
+ memset(g_SCIdata, 0, sizeof(g_SCIdata));
}
/**
diff --git a/engines/tinsel/move.cpp b/engines/tinsel/move.cpp
index e20f28d528..bb49e59fe7 100644
--- a/engines/tinsel/move.cpp
+++ b/engines/tinsel/move.cpp
@@ -77,14 +77,14 @@ HPOLYGON InitExtraBlock(PMOVER ca, PMOVER ta);
// FIXME: Avoid non-const global vars
#if SLOW_RINCE_DOWN
-static int Interlude = 0; // For slowing down walking, for testing
-static int BogusVar = 0; // For slowing down walking, for testing
+static int g_Interlude = 0; // For slowing down walking, for testing
+static int g_BogusVar = 0; // For slowing down walking, for testing
#endif
-static int32 DefaultRefer = 0;
-static int lastLeadXdest = 0, lastLeadYdest = 0;
+static int32 g_DefaultRefer = 0;
+static int g_lastLeadXdest = 0, g_lastLeadYdest = 0;
-static int hSlowVar = 0; // used by MoveActor()
+static int g_hSlowVar = 0; // used by MoveActor()
//----------------- FORWARD REFERENCES --------------------
@@ -101,9 +101,9 @@ static void NewCoOrdinates(int fromx, int fromy, int *targetX, int *targetY,
*/
void AddInterlude(int n) {
- Interlude += n;
- if (Interlude < 0)
- Interlude = 0;
+ g_Interlude += n;
+ if (g_Interlude < 0)
+ g_Interlude = 0;
}
#endif
@@ -251,7 +251,7 @@ static int ClickedOnNothing(int clickX, int clickY, int *ptgtX, int *ptgtY) {
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
- switch (DefaultRefer) {
+ switch (g_DefaultRefer) {
case REF_DEFAULT:
// Try searching down and up (onscreen).
for (i = clickY+1; i < SCREEN_HEIGHT+Toffset; i++)
@@ -1353,15 +1353,15 @@ int SetActorDest(PMOVER pMover, int clickX, int clickY, bool igPath, SCNHANDLE h
targetY = clickY;
if (pMover->actorID == GetLeadId()) {
- lastLeadXdest = targetX;
- lastLeadYdest = targetY;
+ g_lastLeadXdest = targetX;
+ g_lastLeadYdest = targetY;
}
} else {
int wodResult = WorkOutDestination(clickX, clickY, &targetX, &targetY);
if (pMover->actorID == GetLeadId()) {
- lastLeadXdest = targetX;
- lastLeadYdest = targetY;
+ g_lastLeadXdest = targetX;
+ g_lastLeadYdest = targetY;
}
if (wodResult == ALL_SORTED) {
@@ -1613,17 +1613,17 @@ void MoveActor(PMOVER pMover) {
}
#if SLOW_RINCE_DOWN
-/**/ if (BogusVar++ < Interlude) // Temporary slow-down-the-action code
+/**/ if (g_BogusVar++ < g_Interlude) // Temporary slow-down-the-action code
/**/ return; //
-/**/ BogusVar = 0; //
+/**/ g_BogusVar = 0; //
#endif
if (!TinselV2) {
// During swalk()s, movement while hidden may be slowed down.
if (pMover->bHidden) {
- if (++hSlowVar < pMover->SlowFactor)
+ if (++g_hSlowVar < pMover->SlowFactor)
return;
- hSlowVar = 0;
+ g_hSlowVar = 0;
}
}
@@ -1705,15 +1705,15 @@ void MoveActor(PMOVER pMover) {
* Store the default refer type for the current scene.
*/
void SetDefaultRefer(int32 defRefer) {
- DefaultRefer = defRefer;
+ g_DefaultRefer = defRefer;
}
int GetLastLeadXdest() {
- return lastLeadXdest;
+ return g_lastLeadXdest;
}
int GetLastLeadYdest() {
- return lastLeadYdest;
+ return g_lastLeadYdest;
}
diff --git a/engines/tinsel/music.cpp b/engines/tinsel/music.cpp
index f552c49491..781a378f13 100644
--- a/engines/tinsel/music.cpp
+++ b/engines/tinsel/music.cpp
@@ -64,13 +64,13 @@ struct SOUND_BUFFER {
// FIXME: Avoid non-const global vars
// MIDI buffer
-static SOUND_BUFFER midiBuffer = { 0, 0 };
+static SOUND_BUFFER g_midiBuffer = { 0, 0 };
-static SCNHANDLE currentMidi = 0;
-static bool currentLoop = false;
+static SCNHANDLE g_currentMidi = 0;
+static bool g_currentLoop = false;
// We allocate 155 entries because that's the maximum, used in the SCN version
-static SCNHANDLE midiOffsets[155];
+static SCNHANDLE g_midiOffsets[155];
static const int enhancedAudioGRAVersion[] = {
1, 2, 1, 1, 3, 3, 4, 4, 5, 6, // 1-10
@@ -110,16 +110,16 @@ static const int enhancedAudioSCNVersion[] = {
};
int GetTrackNumber(SCNHANDLE hMidi) {
- for (int i = 0; i < ARRAYSIZE(midiOffsets); i++)
- if (midiOffsets[i] == hMidi)
+ for (int i = 0; i < ARRAYSIZE(g_midiOffsets); i++)
+ if (g_midiOffsets[i] == hMidi)
return i;
return -1;
}
SCNHANDLE GetTrackOffset(int trackNumber) {
- assert(trackNumber < ARRAYSIZE(midiOffsets));
- return midiOffsets[trackNumber];
+ assert(trackNumber < ARRAYSIZE(g_midiOffsets));
+ return g_midiOffsets[trackNumber];
}
/**
@@ -128,8 +128,8 @@ SCNHANDLE GetTrackOffset(int trackNumber) {
* @param bLoop Whether to loop the sequence
*/
bool PlayMidiSequence(uint32 dwFileOffset, bool bLoop) {
- currentMidi = dwFileOffset;
- currentLoop = bLoop;
+ g_currentMidi = dwFileOffset;
+ g_currentLoop = bLoop;
// Tinsel V1 PSX uses a different music format, so i
// disable it here.
@@ -166,8 +166,8 @@ bool PlayMidiSequence(uint32 dwFileOffset, bool bLoop) {
StopMidi();
// StopMidi resets these fields, so set them again
- currentMidi = dwFileOffset;
- currentLoop = bLoop;
+ g_currentMidi = dwFileOffset;
+ g_currentLoop = bLoop;
// try to play track, but don't fall back to a true CD
g_system->getAudioCDManager()->play(track, bLoop ? -1 : 1, 0, 0, true);
@@ -203,13 +203,13 @@ bool PlayMidiSequence(uint32 dwFileOffset, bool bLoop) {
dwSeqLen = midiStream.readUint32LE();
// make sure buffer is large enough for this sequence
- assert(dwSeqLen > 0 && dwSeqLen <= midiBuffer.size);
+ assert(dwSeqLen > 0 && dwSeqLen <= g_midiBuffer.size);
// stop any currently playing tune
_vm->_midiMusic->stop();
// read the sequence
- if (midiStream.read(midiBuffer.pDat, dwSeqLen) != dwSeqLen)
+ if (midiStream.read(g_midiBuffer.pDat, dwSeqLen) != dwSeqLen)
error(FILE_IS_CORRUPT, MIDI_FILE);
midiStream.close();
@@ -231,14 +231,14 @@ bool PlayMidiSequence(uint32 dwFileOffset, bool bLoop) {
_vm->_midiMusic->send(0x7F07B0 | 13);
}
- _vm->_midiMusic->playXMIDI(midiBuffer.pDat, dwSeqLen, bLoop);
+ _vm->_midiMusic->playXMIDI(g_midiBuffer.pDat, dwSeqLen, bLoop);
// Store the length
//dwLastSeqLen = dwSeqLen;
} else {
// dwFileOffset == dwLastMidiIndex
_vm->_midiMusic->stop();
- _vm->_midiMusic->playXMIDI(midiBuffer.pDat, dwSeqLen, bLoop);
+ _vm->_midiMusic->playXMIDI(g_midiBuffer.pDat, dwSeqLen, bLoop);
}
return true;
@@ -259,8 +259,8 @@ bool MidiPlaying() {
* Stops any currently playing midi.
*/
bool StopMidi() {
- currentMidi = 0;
- currentLoop = false;
+ g_currentMidi = 0;
+ g_currentLoop = false;
if (_vm->getFeatures() & GF_ENHANCED_AUDIO_SUPPORT) {
g_system->getAudioCDManager()->stop();
@@ -295,8 +295,8 @@ void SetMidiVolume(int vol) {
_vm->_midiMusic->setVolume(vol);
} else if (vol != 0 && priorVolMusic == 0) {
// Perhaps restart last midi sequence
- if (currentLoop)
- PlayMidiSequence(currentMidi, true);
+ if (g_currentLoop)
+ PlayMidiSequence(g_currentMidi, true);
_vm->_midiMusic->setVolume(vol);
} else if (vol != 0 && priorVolMusic != 0) {
@@ -318,7 +318,7 @@ void OpenMidiFiles() {
if ((_vm->getFeatures() & GF_DEMO) || (TinselVersion == TINSEL_V2) || TinselV1PSX)
return;
- if (midiBuffer.pDat)
+ if (g_midiBuffer.pDat)
// already allocated
return;
@@ -327,15 +327,15 @@ void OpenMidiFiles() {
error(CANNOT_FIND_FILE, MIDI_FILE);
// gen length of the largest sequence
- midiBuffer.size = midiStream.readUint32LE();
+ g_midiBuffer.size = midiStream.readUint32LE();
if (midiStream.eos() || midiStream.err())
error(FILE_IS_CORRUPT, MIDI_FILE);
- if (midiBuffer.size) {
+ if (g_midiBuffer.size) {
// allocate a buffer big enough for the largest MIDI sequence
- if ((midiBuffer.pDat = (uint8 *)malloc(midiBuffer.size)) != NULL) {
+ if ((g_midiBuffer.pDat = (uint8 *)malloc(g_midiBuffer.size)) != NULL) {
// clear out the buffer
- memset(midiBuffer.pDat, 0, midiBuffer.size);
+ memset(g_midiBuffer.pDat, 0, g_midiBuffer.size);
// VMM_lock(midiBuffer.pDat, midiBuffer.size);
} else {
//mSeqHandle = NULL;
@@ -352,15 +352,15 @@ void OpenMidiFiles() {
uint32 songLength = 0;
// Init
- for (int i = 0; i < ARRAYSIZE(midiOffsets); i++)
- midiOffsets[i] = 0;
+ for (int i = 0; i < ARRAYSIZE(g_midiOffsets); i++)
+ g_midiOffsets[i] = 0;
while (!midiStream.eos() && !midiStream.err()) {
if (curOffset + (4 * curTrack) >= (uint32)midiStream.size())
break;
- assert(curTrack < ARRAYSIZE(midiOffsets));
- midiOffsets[curTrack] = curOffset + (4 * curTrack);
+ assert(curTrack < ARRAYSIZE(g_midiOffsets));
+ g_midiOffsets[curTrack] = curOffset + (4 * curTrack);
//debug("%d: %d", curTrack, midiOffsets[curTrack]);
songLength = midiStream.readUint32LE();
@@ -374,8 +374,8 @@ void OpenMidiFiles() {
}
void DeleteMidiBuffer() {
- free(midiBuffer.pDat);
- midiBuffer.pDat = NULL;
+ free(g_midiBuffer.pDat);
+ g_midiBuffer.pDat = NULL;
}
MidiMusicPlayer::MidiMusicPlayer() {
@@ -860,22 +860,22 @@ void PCMMusicPlayer::stop() {
}
void CurrentMidiFacts(SCNHANDLE *pMidi, bool *pLoop) {
- *pMidi = currentMidi;
- *pLoop = currentLoop;
+ *pMidi = g_currentMidi;
+ *pLoop = g_currentLoop;
}
void RestoreMidiFacts(SCNHANDLE Midi, bool Loop) {
StopMidi();
- currentMidi = Midi;
- currentLoop = Loop;
+ g_currentMidi = Midi;
+ g_currentLoop = Loop;
if (_vm->_config->_musicVolume != 0 && Loop) {
bool mute = false;
if (ConfMan.hasKey("mute"))
mute = ConfMan.getBool("mute");
- PlayMidiSequence(currentMidi, true);
+ PlayMidiSequence(g_currentMidi, true);
SetMidiVolume(mute ? 0 : _vm->_config->_musicVolume);
}
}
diff --git a/engines/tinsel/palette.cpp b/engines/tinsel/palette.cpp
index f2437bd17e..e6c9467fab 100644
--- a/engines/tinsel/palette.cpp
+++ b/engines/tinsel/palette.cpp
@@ -54,33 +54,33 @@ struct VIDEO_DAC_Q {
// FIXME: Avoid non-const global vars
/** palette allocator data */
-static PALQ palAllocData[NUM_PALETTES];
+static PALQ g_palAllocData[NUM_PALETTES];
/** video DAC transfer Q length */
#define VDACQLENGTH (NUM_PALETTES+2)
/** video DAC transfer Q */
-static VIDEO_DAC_Q vidDACdata[VDACQLENGTH];
+static VIDEO_DAC_Q g_vidDACdata[VDACQLENGTH];
/** video DAC transfer Q head pointer */
-static VIDEO_DAC_Q *pDAChead;
+static VIDEO_DAC_Q *g_pDAChead;
/** color index of the 4 colors used for the translucent palette */
#define COL_HILIGHT TBLUE1
/** the translucent palette lookup table */
-uint8 transPalette[MAX_COLORS]; // used in graphics.cpp
+uint8 g_transPalette[MAX_COLORS]; // used in graphics.cpp
-uint8 ghostPalette[MAX_COLORS];
+uint8 g_ghostPalette[MAX_COLORS];
-static int translucentIndex = 228;
+static int g_translucentIndex = 228;
-static int talkIndex = 233;
+static int g_talkIndex = 233;
-static COLORREF talkColRef;
+static COLORREF g_talkColRef;
-static COLORREF tagColRef;
+static COLORREF g_tagColRef;
#ifdef DEBUG
@@ -131,11 +131,11 @@ void psxPaletteMapper(PALQ *originalPal, uint8 *psxClut, byte *mapperTable) {
*/
void PalettesToVideoDAC() {
PALQ *pPalQ; // palette Q iterator
- VIDEO_DAC_Q *pDACtail = vidDACdata; // set tail pointer
+ VIDEO_DAC_Q *pDACtail = g_vidDACdata; // set tail pointer
byte pal[768];
// while Q is not empty
- while (pDAChead != pDACtail) {
+ while (g_pDAChead != pDACtail) {
const PALETTE *pPalette; // pointer to hardware palette
const COLORREF *pColors; // pointer to list of RGB triples
@@ -179,10 +179,10 @@ void PalettesToVideoDAC() {
}
// reset video DAC transfer Q head pointer
- pDAChead = vidDACdata;
+ g_pDAChead = g_vidDACdata;
// clear all palette moved bits
- for (pPalQ = palAllocData; pPalQ < palAllocData + NUM_PALETTES; pPalQ++)
+ for (pPalQ = g_palAllocData; pPalQ < g_palAllocData + NUM_PALETTES; pPalQ++)
pPalQ->posInDAC &= ~PALETTE_MOVED;
}
@@ -196,10 +196,10 @@ void ResetPalAllocator() {
#endif
// wipe out the palette allocator data
- memset(palAllocData, 0, sizeof(palAllocData));
+ memset(g_palAllocData, 0, sizeof(g_palAllocData));
// reset video DAC transfer Q head pointer
- pDAChead = vidDACdata;
+ g_pDAChead = g_vidDACdata;
}
#ifdef DEBUG
@@ -220,19 +220,19 @@ void PaletteStats() {
*/
void UpdateDACqueueHandle(int posInDAC, int numColors, SCNHANDLE hPalette) {
// check Q overflow
- assert(pDAChead < vidDACdata + VDACQLENGTH);
+ assert(g_pDAChead < g_vidDACdata + VDACQLENGTH);
- pDAChead->destDACindex = posInDAC & ~PALETTE_MOVED; // set index in video DAC
- pDAChead->numColors = numColors; // set number of colors
- pDAChead->pal.hRGBarray = hPalette; // set handle of palette
- pDAChead->bHandle = true; // we are using a palette handle
+ g_pDAChead->destDACindex = posInDAC & ~PALETTE_MOVED; // set index in video DAC
+ g_pDAChead->numColors = numColors; // set number of colors
+ g_pDAChead->pal.hRGBarray = hPalette; // set handle of palette
+ g_pDAChead->bHandle = true; // we are using a palette handle
// update head pointer
- ++pDAChead;
+ ++g_pDAChead;
#ifdef DEBUG
- if ((pDAChead-vidDACdata) > maxDACQ)
- maxDACQ = pDAChead-vidDACdata;
+ if ((g_pDAChead-g_vidDACdata) > maxDACQ)
+ maxDACQ = g_pDAChead-g_vidDACdata;
#endif
}
@@ -244,22 +244,22 @@ void UpdateDACqueueHandle(int posInDAC, int numColors, SCNHANDLE hPalette) {
*/
void UpdateDACqueue(int posInDAC, int numColors, COLORREF *pColors) {
// check Q overflow
- assert(pDAChead < vidDACdata + NUM_PALETTES);
+ assert(g_pDAChead < g_vidDACdata + NUM_PALETTES);
- pDAChead->destDACindex = posInDAC & ~PALETTE_MOVED; // set index in video DAC
- pDAChead->numColors = numColors; // set number of colors
+ g_pDAChead->destDACindex = posInDAC & ~PALETTE_MOVED; // set index in video DAC
+ g_pDAChead->numColors = numColors; // set number of colors
if (numColors == 1)
- pDAChead->pal.singleRGB = *pColors; // set single color of which the "palette" consists
+ g_pDAChead->pal.singleRGB = *pColors; // set single color of which the "palette" consists
else
- pDAChead->pal.pRGBarray = pColors; // set addr of palette
- pDAChead->bHandle = false; // we are not using a palette handle
+ g_pDAChead->pal.pRGBarray = pColors; // set addr of palette
+ g_pDAChead->bHandle = false; // we are not using a palette handle
// update head pointer
- ++pDAChead;
+ ++g_pDAChead;
#ifdef DEBUG
- if ((pDAChead-vidDACdata) > maxDACQ)
- maxDACQ = pDAChead-vidDACdata;
+ if ((g_pDAChead-g_vidDACdata) > maxDACQ)
+ maxDACQ = g_pDAChead-g_vidDACdata;
#endif
}
@@ -271,19 +271,19 @@ void UpdateDACqueue(int posInDAC, int numColors, COLORREF *pColors) {
*/
void UpdateDACqueue(int posInDAC, COLORREF color) {
// check Q overflow
- assert(pDAChead < vidDACdata + NUM_PALETTES);
+ assert(g_pDAChead < g_vidDACdata + NUM_PALETTES);
- pDAChead->destDACindex = posInDAC & ~PALETTE_MOVED; // set index in video DAC
- pDAChead->numColors = 1; // set number of colors
- pDAChead->pal.singleRGB = color; // set single color of which the "palette" consists
- pDAChead->bHandle = false; // we are not using a palette handle
+ g_pDAChead->destDACindex = posInDAC & ~PALETTE_MOVED; // set index in video DAC
+ g_pDAChead->numColors = 1; // set number of colors
+ g_pDAChead->pal.singleRGB = color; // set single color of which the "palette" consists
+ g_pDAChead->bHandle = false; // we are not using a palette handle
// update head pointer
- ++pDAChead;
+ ++g_pDAChead;
#ifdef DEBUG
- if ((pDAChead-vidDACdata) > maxDACQ)
- maxDACQ = pDAChead-vidDACdata;
+ if ((g_pDAChead-g_vidDACdata) > maxDACQ)
+ maxDACQ = g_pDAChead-g_vidDACdata;
#endif
}
@@ -301,7 +301,7 @@ PALQ *AllocPalette(SCNHANDLE hNewPal) {
pNewPal = (PALETTE *)LockMem(hNewPal);
// search all structs in palette allocator - see if palette already allocated
- for (p = palAllocData; p < palAllocData + NUM_PALETTES; p++) {
+ for (p = g_palAllocData; p < g_palAllocData + NUM_PALETTES; p++) {
if (p->hPal == hNewPal) {
// found the desired palette in palette allocator
p->objCount++; // update number of objects using palette
@@ -312,7 +312,7 @@ PALQ *AllocPalette(SCNHANDLE hNewPal) {
// search all structs in palette allocator - find a free slot
iDAC = FGND_DAC_INDEX; // init DAC index to first available foreground color
- for (p = palAllocData; p < palAllocData + NUM_PALETTES; p++) {
+ for (p = g_palAllocData; p < g_palAllocData + NUM_PALETTES; p++) {
if (p->hPal == 0) {
// found a free slot in palette allocator
p->objCount = 1; // init number of objects using palette
@@ -337,7 +337,7 @@ PALQ *AllocPalette(SCNHANDLE hNewPal) {
UpdateDACqueueHandle(p->posInDAC, p->numColors, p->hPal);
// move all palettes after this one down (if necessary)
- for (pPrev = p, pNxtPal = pPrev + 1; pNxtPal < palAllocData + NUM_PALETTES; pNxtPal++) {
+ for (pPrev = p, pNxtPal = pPrev + 1; pNxtPal < g_palAllocData + NUM_PALETTES; pNxtPal++) {
if (pNxtPal->hPal != 0) {
// palette slot is in use
if (pNxtPal->posInDAC >= pPrev->posInDAC + pPrev->numColors)
@@ -381,7 +381,7 @@ PALQ *AllocPalette(SCNHANDLE hNewPal) {
*/
void FreePalette(PALQ *pFreePal) {
// validate palette Q pointer
- assert(pFreePal >= palAllocData && pFreePal <= palAllocData + NUM_PALETTES - 1);
+ assert(pFreePal >= g_palAllocData && pFreePal <= g_palAllocData + NUM_PALETTES - 1);
// reduce the palettes object reference count
pFreePal->objCount--;
@@ -408,7 +408,7 @@ PALQ *FindPalette(SCNHANDLE hSrchPal) {
PALQ *pPal; // palette allocator iterator
// search all structs in palette allocator
- for (pPal = palAllocData; pPal < palAllocData + NUM_PALETTES; pPal++) {
+ for (pPal = g_palAllocData; pPal < g_palAllocData + NUM_PALETTES; pPal++) {
if (pPal->hPal == hSrchPal)
// found palette in palette allocator
return pPal;
@@ -428,7 +428,7 @@ void SwapPalette(PALQ *pPalQ, SCNHANDLE hNewPal) {
PALETTE *pNewPal = (PALETTE *)LockMem(hNewPal);
// validate palette Q pointer
- assert(pPalQ >= palAllocData && pPalQ <= palAllocData + NUM_PALETTES - 1);
+ assert(pPalQ >= g_palAllocData && pPalQ <= g_palAllocData + NUM_PALETTES - 1);
if (pPalQ->numColors >= (int)FROM_LE_32(pNewPal->numColors)) {
// new palette will fit the slot
@@ -455,7 +455,7 @@ void SwapPalette(PALQ *pPalQ, SCNHANDLE hNewPal) {
PALQ *pNxtPalQ; // next palette queue position
- for (pNxtPalQ = pPalQ + 1; pNxtPalQ < palAllocData + NUM_PALETTES; pNxtPalQ++) {
+ for (pNxtPalQ = pPalQ + 1; pNxtPalQ < g_palAllocData + NUM_PALETTES; pNxtPalQ++) {
if (pNxtPalQ->posInDAC >= pPalQ->posInDAC + pPalQ->numColors)
// no need to move palettes down
break;
@@ -482,14 +482,14 @@ void SwapPalette(PALQ *pPalQ, SCNHANDLE hNewPal) {
PALQ *GetNextPalette(PALQ *pStrtPal) {
if (pStrtPal == NULL) {
// start of palette iteration - return 1st palette
- return (palAllocData[0].objCount) ? palAllocData : NULL;
+ return (g_palAllocData[0].objCount) ? g_palAllocData : NULL;
}
// validate palette Q pointer
- assert(pStrtPal >= palAllocData && pStrtPal <= palAllocData + NUM_PALETTES - 1);
+ assert(pStrtPal >= g_palAllocData && pStrtPal <= g_palAllocData + NUM_PALETTES - 1);
// return next active palette in list
- while (++pStrtPal < palAllocData + NUM_PALETTES) {
+ while (++pStrtPal < g_palAllocData + NUM_PALETTES) {
if (pStrtPal->objCount)
// active palette found
return pStrtPal;
@@ -515,7 +515,7 @@ void SetBgndColor(COLORREF color) {
*/
void FadingPalette(PALQ *pPalQ, bool bFading) {
// validate palette Q pointer
- assert(pPalQ >= palAllocData && pPalQ <= palAllocData + NUM_PALETTES - 1);
+ assert(pPalQ >= g_palAllocData && pPalQ <= g_palAllocData + NUM_PALETTES - 1);
// validate that this is a change
assert(pPalQ->bFading != bFading);
@@ -530,7 +530,7 @@ void FadingPalette(PALQ *pPalQ, bool bFading) {
void NoFadingPalettes() {
PALQ *pPalQ;
- for (pPalQ = palAllocData; pPalQ <= palAllocData + NUM_PALETTES - 1; pPalQ++) {
+ for (pPalQ = g_palAllocData; pPalQ <= g_palAllocData + NUM_PALETTES - 1; pPalQ++) {
pPalQ->bFading = false;
}
}
@@ -544,7 +544,7 @@ void CreateTranslucentPalette(SCNHANDLE hPalette) {
PALETTE *pPal = (PALETTE *)LockMem(hPalette);
// leave background color alone
- transPalette[0] = 0;
+ g_transPalette[0] = 0;
for (uint i = 0; i < FROM_LE_32(pPal->numColors); i++) {
// get the RGB color model values
@@ -558,7 +558,7 @@ void CreateTranslucentPalette(SCNHANDLE hPalette) {
// map the Value field to one of the 4 colors reserved for the translucent palette
val /= 63;
- transPalette[i + 1] = (uint8)((val == 0) ? 0 : val +
+ g_transPalette[i + 1] = (uint8)((val == 0) ? 0 : val +
(TinselV2 ? TranslucentColor() : COL_HILIGHT) - 1);
}
}
@@ -572,7 +572,7 @@ void CreateGhostPalette(SCNHANDLE hPalette) {
int i;
// leave background color alone
- ghostPalette[0] = 0;
+ g_ghostPalette[0] = 0;
for (i = 0; i < (int)FROM_LE_32(pPal->numColors); i++) {
// get the RGB color model values
@@ -587,7 +587,7 @@ void CreateGhostPalette(SCNHANDLE hPalette) {
// map the Value field to one of the 4 colors reserved for the translucent palette
val /= 64;
assert(/*val >= 0 &&*/ val <= 3);
- ghostPalette[i + 1] = (uint8)(val + SysVar(ISV_GHOST_BASE));
+ g_ghostPalette[i + 1] = (uint8)(val + SysVar(ISV_GHOST_BASE));
}
}
@@ -648,41 +648,41 @@ void DimPartPalette(SCNHANDLE hDimPal, int startColor, int length, int brightnes
}
int TranslucentColor() {
- return translucentIndex;
+ return g_translucentIndex;
}
int HighlightColor() {
- UpdateDACqueue(talkIndex, (COLORREF)SysVar(SYS_HighlightRGB));
+ UpdateDACqueue(g_talkIndex, (COLORREF)SysVar(SYS_HighlightRGB));
- return talkIndex;
+ return g_talkIndex;
}
int TalkColor() {
- return TinselV2 ? talkIndex : TALKFONT_COL;
+ return TinselV2 ? g_talkIndex : TALKFONT_COL;
}
void SetTalkColorRef(COLORREF colRef) {
- talkColRef = colRef;
+ g_talkColRef = colRef;
}
COLORREF GetTalkColorRef() {
- return talkColRef;
+ return g_talkColRef;
}
void SetTagColorRef(COLORREF colRef) {
- tagColRef = colRef;
+ g_tagColRef = colRef;
}
COLORREF GetTagColorRef() {
- return tagColRef;
+ return g_tagColRef;
}
void SetTranslucencyOffset(int offset) {
- translucentIndex = offset;
+ g_translucentIndex = offset;
}
void SetTalkTextOffset(int offset) {
- talkIndex = offset;
+ g_talkIndex = offset;
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp
index 2ab1e653d4..145a6a8e5d 100644
--- a/engines/tinsel/pcode.cpp
+++ b/engines/tinsel/pcode.cpp
@@ -100,19 +100,19 @@ enum OPCODE {
#define OPMASK 0x3F ///< mask to isolate the opcode
-bool bNoPause = false;
+bool g_bNoPause = false;
//----------------- LOCAL GLOBAL DATA --------------------
// FIXME: Avoid non-const global vars
-static int32 *pGlobals = 0; // global vars
+static int32 *g_pGlobals = 0; // global vars
-static int numGlobals = 0; // How many global variables to save/restore
+static int g_numGlobals = 0; // How many global variables to save/restore
-static INT_CONTEXT *icList = 0;
+static INT_CONTEXT *g_icList = 0;
-static uint32 hMasterScript;
+static uint32 g_hMasterScript;
//----------------- SCRIPT BUGS WORKAROUNDS --------------
@@ -227,7 +227,7 @@ void LockCode(INT_CONTEXT *ic) {
if (ic->GSort == GS_MASTER) {
if (TinselV2)
// Get the srcipt handle from a specific global chunk
- ic->code = (byte *)LockMem(hMasterScript);
+ ic->code = (byte *)LockMem(g_hMasterScript);
else
ic->code = (byte *)FindChunk(MASTER_SCNHANDLE, CHUNK_PCODE);
} else
@@ -241,7 +241,7 @@ static INT_CONTEXT *AllocateInterpretContext(GSORT gsort) {
INT_CONTEXT *pic;
int i;
- for (i = 0, pic = icList; i < NUM_INTERPRET; i++, pic++) {
+ for (i = 0, pic = g_icList; i < NUM_INTERPRET; i++, pic++) {
if (pic->GSort == GS_NONE) {
pic->pProc = g_scheduler->getCurrentProcess();
pic->GSort = gsort;
@@ -264,8 +264,8 @@ static void FreeWaitCheck(PINT_CONTEXT pic, bool bVoluntary) {
// Is this waiting for something?
if (pic->waitNumber1) {
for (i = 0; i < NUM_INTERPRET; i++) {
- if ((icList + i)->waitNumber2 == pic->waitNumber1) {
- (icList + i)->waitNumber2 = 0;
+ if ((g_icList + i)->waitNumber2 == pic->waitNumber1) {
+ (g_icList + i)->waitNumber2 = 0;
break;
}
}
@@ -274,10 +274,10 @@ static void FreeWaitCheck(PINT_CONTEXT pic, bool bVoluntary) {
// Is someone waiting for this?
if (pic->waitNumber2) {
for (i = 0; i < NUM_INTERPRET; i++) {
- if ((icList + i)->waitNumber1 == pic->waitNumber2) {
- (icList + i)->waitNumber1 = 0;
- (icList + i)->resumeCode = bVoluntary ? RES_FINISHED : RES_CUTSHORT;
- g_scheduler->reschedule((icList + i)->pProc);
+ if ((g_icList + i)->waitNumber1 == pic->waitNumber2) {
+ (g_icList + i)->waitNumber1 = 0;
+ (g_icList + i)->resumeCode = bVoluntary ? RES_FINISHED : RES_CUTSHORT;
+ g_scheduler->reschedule((g_icList + i)->pProc);
break;
}
}
@@ -305,7 +305,7 @@ void FreeInterpretContextPr(PROCESS *pProc) {
INT_CONTEXT *pic;
int i;
- for (i = 0, pic = icList; i < NUM_INTERPRET; i++, pic++) {
+ for (i = 0, pic = g_icList; i < NUM_INTERPRET; i++, pic++) {
if (pic->GSort != GS_NONE && pic->pProc == pProc) {
FreeWaitCheck(pic, false);
if (TinselV2)
@@ -323,7 +323,7 @@ void FreeMostInterpretContexts() {
INT_CONTEXT *pic;
int i;
- for (i = 0, pic = icList; i < NUM_INTERPRET; i++, pic++) {
+ for (i = 0, pic = g_icList; i < NUM_INTERPRET; i++, pic++) {
if ((pic->GSort != GS_MASTER) && (pic->GSort != GS_GPROCESS)) {
memset(pic, 0, sizeof(INT_CONTEXT));
pic->GSort = GS_NONE;
@@ -338,7 +338,7 @@ void FreeMasterInterpretContext() {
INT_CONTEXT *pic;
int i;
- for (i = 0, pic = icList; i < NUM_INTERPRET; i++, pic++) {
+ for (i = 0, pic = g_icList; i < NUM_INTERPRET; i++, pic++) {
if ((pic->GSort == GS_MASTER) || (pic->GSort == GS_GPROCESS)) {
memset(pic, 0, sizeof(INT_CONTEXT));
pic->GSort = GS_NONE;
@@ -405,30 +405,30 @@ INT_CONTEXT *RestoreInterpretContext(INT_CONTEXT *ric) {
* Allocates enough RAM to hold the global Glitter variables.
*/
void RegisterGlobals(int num) {
- if (pGlobals == NULL) {
- numGlobals = num;
+ if (g_pGlobals == NULL) {
+ g_numGlobals = num;
- hMasterScript = !TinselV2 ? 0 :
+ g_hMasterScript = !TinselV2 ? 0 :
READ_LE_UINT32(FindChunk(MASTER_SCNHANDLE, CHUNK_MASTER_SCRIPT));
// Allocate RAM for pGlobals and make sure it's allocated
- pGlobals = (int32 *)calloc(numGlobals, sizeof(int32));
- if (pGlobals == NULL) {
+ g_pGlobals = (int32 *)calloc(g_numGlobals, sizeof(int32));
+ if (g_pGlobals == NULL) {
error("Cannot allocate memory for global data");
}
// Allocate RAM for interpret contexts and make sure it's allocated
- icList = (INT_CONTEXT *)calloc(NUM_INTERPRET, sizeof(INT_CONTEXT));
- if (icList == NULL) {
+ g_icList = (INT_CONTEXT *)calloc(NUM_INTERPRET, sizeof(INT_CONTEXT));
+ if (g_icList == NULL) {
error("Cannot allocate memory for interpret contexts");
}
g_scheduler->setResourceCallback(FreeInterpretContextPr);
} else {
// Check size is still the same
- assert(numGlobals == num);
+ assert(g_numGlobals == num);
- memset(pGlobals, 0, numGlobals * sizeof(int32));
- memset(icList, 0, NUM_INTERPRET * sizeof(INT_CONTEXT));
+ memset(g_pGlobals, 0, g_numGlobals * sizeof(int32));
+ memset(g_icList, 0, NUM_INTERPRET * sizeof(INT_CONTEXT));
}
if (TinselV2) {
@@ -444,7 +444,7 @@ void RegisterGlobals(int num) {
error(FILE_IS_CORRUPT, GLOBALS_FILENAME);
for (int i = 0; i < length; ++i)
- pGlobals[i] = f.readSint32LE();
+ g_pGlobals[i] = f.readSint32LE();
if (f.eos() || f.err())
error(FILE_IS_CORRUPT, GLOBALS_FILENAME);
@@ -454,19 +454,19 @@ void RegisterGlobals(int num) {
}
void FreeGlobals() {
- free(pGlobals);
- pGlobals = NULL;
+ free(g_pGlobals);
+ g_pGlobals = NULL;
- free(icList);
- icList = NULL;
+ free(g_icList);
+ g_icList = NULL;
}
/**
* (Un)serialize the global data for save/restore game.
*/
void syncGlobInfo(Common::Serializer &s) {
- for (int i = 0; i < numGlobals; i++) {
- s.syncAsSint32LE(pGlobals[i]);
+ for (int i = 0; i < g_numGlobals; i++) {
+ s.syncAsSint32LE(g_pGlobals[i]);
}
}
@@ -502,7 +502,7 @@ void INT_CONTEXT::syncWithSerializer(Common::Serializer &s) {
* Return pointer to and size of global data for save/restore game.
*/
void SaveInterpretContexts(INT_CONTEXT *sICInfo) {
- memcpy(sICInfo, icList, NUM_INTERPRET * sizeof(INT_CONTEXT));
+ memcpy(sICInfo, g_icList, NUM_INTERPRET * sizeof(INT_CONTEXT));
}
/**
@@ -633,8 +633,8 @@ void Interpret(CORO_PARAM, INT_CONTEXT *ic) {
case OP_GLOAD: // loads global variable onto stack
tmp = Fetch(opcode, ic->code, wkEntry, ip);
- assert(0 <= tmp && tmp < numGlobals);
- ic->stack[++ic->sp] = pGlobals[tmp];
+ assert(0 <= tmp && tmp < g_numGlobals);
+ ic->stack[++ic->sp] = g_pGlobals[tmp];
break;
case OP_STORE: // pops stack and stores in local variable
@@ -645,8 +645,8 @@ void Interpret(CORO_PARAM, INT_CONTEXT *ic) {
case OP_GSTORE: // pops stack and stores in global variable
tmp = Fetch(opcode, ic->code, wkEntry, ip);
- assert(0 <= tmp && tmp < numGlobals);
- pGlobals[tmp] = ic->stack[ic->sp--];
+ assert(0 <= tmp && tmp < g_numGlobals);
+ g_pGlobals[tmp] = ic->stack[ic->sp--];
break;
case OP_CALL: // procedure call
@@ -809,7 +809,7 @@ void Interpret(CORO_PARAM, INT_CONTEXT *ic) {
break;
case OP_ESCON:
- bNoPause = true;
+ g_bNoPause = true;
ic->escOn = true;
ic->myEscape = GetEscEvents();
break;
@@ -856,8 +856,8 @@ static uint32 UniqueWaitNumber() {
retval = (uint32)-1;
for (i = 0; i < NUM_INTERPRET; i++) {
- if ((icList+i)->waitNumber1 == retval
- || (icList+i)->waitNumber2 == retval)
+ if ((g_icList+i)->waitNumber1 == retval
+ || (g_icList+i)->waitNumber2 == retval)
break;
}
@@ -887,7 +887,7 @@ void WaitInterpret(CORO_PARAM, PPROCESS pWaitProc, bool *result) {
CORO_BEGIN_CODE(_ctx);
- for (i = 0, _ctx->picWaiter = icList; i < NUM_INTERPRET; i++, _ctx->picWaiter++) {
+ for (i = 0, _ctx->picWaiter = g_icList; i < NUM_INTERPRET; i++, _ctx->picWaiter++) {
if (_ctx->picWaiter->GSort != GS_NONE && _ctx->picWaiter->pProc == currentProcess) {
break;
}
@@ -896,7 +896,7 @@ void WaitInterpret(CORO_PARAM, PPROCESS pWaitProc, bool *result) {
/*
* Find the interpret context of the process we're waiting for
*/
- for (i = 0, _ctx->picWaitee = icList; i < NUM_INTERPRET; i++, _ctx->picWaitee++) {
+ for (i = 0, _ctx->picWaitee = g_icList; i < NUM_INTERPRET; i++, _ctx->picWaitee++) {
if (_ctx->picWaitee->GSort != GS_NONE && _ctx->picWaitee->pProc == pWaitProc) {
break;
}
@@ -931,11 +931,11 @@ void CheckOutWaiters() {
// Check all waited for have someone waiting
for (i = 0; i < NUM_INTERPRET; i++) {
// If someone is supposedly waiting for this one
- if ((icList + i)->GSort != GS_NONE && (icList + i)->waitNumber2) {
+ if ((g_icList + i)->GSort != GS_NONE && (g_icList + i)->waitNumber2) {
// Someone really must be waiting for this one
for (j = 0; j < NUM_INTERPRET; j++) {
- if ((icList + j)->GSort != GS_NONE
- && (icList + j)->waitNumber1 == (icList + i)->waitNumber2) {
+ if ((g_icList + j)->GSort != GS_NONE
+ && (g_icList + j)->waitNumber1 == (g_icList + i)->waitNumber2) {
break;
}
}
@@ -946,11 +946,11 @@ void CheckOutWaiters() {
// Check waiting for someone to wait for
for (i = 0; i < NUM_INTERPRET; i++) {
// If someone is supposedly waiting for this one
- if ((icList + i)->GSort != GS_NONE && (icList + i)->waitNumber1) {
+ if ((g_icList + i)->GSort != GS_NONE && (g_icList + i)->waitNumber1) {
// Someone really must be waiting for this one
for (j = 0; j < NUM_INTERPRET; j++) {
- if ((icList + j)->GSort != GS_NONE
- && (icList + j)->waitNumber2 == (icList + i)->waitNumber1) {
+ if ((g_icList + j)->GSort != GS_NONE
+ && (g_icList + j)->waitNumber2 == (g_icList + i)->waitNumber1) {
break;
}
}
diff --git a/engines/tinsel/pdisplay.cpp b/engines/tinsel/pdisplay.cpp
index 7439c6f77d..9a9e6ab00f 100644
--- a/engines/tinsel/pdisplay.cpp
+++ b/engines/tinsel/pdisplay.cpp
@@ -50,7 +50,7 @@ namespace Tinsel {
#ifdef DEBUG
//extern int Overrun; // The overrun counter, in DOS_DW.C
-extern int newestString; // The overrun counter, in STRRES.C
+extern int g_newestString; // The overrun counter, in STRRES.C
#endif
@@ -73,17 +73,17 @@ enum HotSpotTag {
// FIXME: Avoid non-const global vars
-static bool DispPath = false;
-static bool bShowString = false;
+static bool g_DispPath = false;
+static bool g_bShowString = false;
-static int TaggedActor = 0;
-static HPOLYGON hTaggedPolygon = NOPOLY;
+static int g_TaggedActor = 0;
+static HPOLYGON g_hTaggedPolygon = NOPOLY;
-static bool bTagsActive = true;
+static bool g_bTagsActive = true;
-static bool bPointingActive = true;
+static bool g_bPointingActive = true;
-static char tagBuffer[64];
+static char g_tagBuffer[64];
#ifdef DEBUG
/**
@@ -158,7 +158,7 @@ void CursorPositionProcess(CORO_PARAM, const void *) {
sprintf(PositionString, "%d %d", aniX + Loffset, aniY + Toffset);
_ctx->cpText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), PositionString,
0, CPOSX, POSY, GetTagFontHandle(), TXT_CENTER);
- if (DispPath) {
+ if (g_DispPath) {
HPOLYGON hp = InPolygon(aniX + Loffset, aniY + Toffset, PATH);
if (hp == NOPOLY)
sprintf(PositionString, "No path");
@@ -226,18 +226,18 @@ void CursorPositionProcess(CORO_PARAM, const void *) {
/*-------------*\
| String number |
\*-------------*/
- if (bShowString && newestString != _ctx->prevString) {
+ if (g_bShowString && g_newestString != _ctx->prevString) {
// kill current text objects
if (_ctx->spText) {
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->spText);
}
- sprintf(PositionString, "String: %d", newestString);
+ sprintf(PositionString, "String: %d", g_newestString);
_ctx->spText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), PositionString,
0, SPOSX, POSY+10, GetTalkFontHandle(), TXT_CENTER);
// update previous value
- _ctx->prevString = newestString;
+ _ctx->prevString = g_newestString;
}
// update previous playfield position
@@ -257,7 +257,7 @@ void DisablePointing() {
int i;
HPOLYGON hPoly; // Polygon handle
- bPointingActive = false;
+ g_bPointingActive = false;
for (i = 0; i < MAX_POLY; i++) {
hPoly = GetPolyHandle(i);
@@ -284,7 +284,7 @@ void DisablePointing() {
* EnablePointing()
*/
void EnablePointing() {
- bPointingActive = true;
+ g_bPointingActive = true;
}
/**
@@ -292,7 +292,7 @@ void EnablePointing() {
* (if one is). Tag process asks us for this information, as does ProcessUserEvent().
*/
static void SaveTaggedActor(int ano) {
- TaggedActor = ano;
+ g_TaggedActor = ano;
}
/**
@@ -300,7 +300,7 @@ static void SaveTaggedActor(int ano) {
* (if one is). Tag process asks us for this information, as does ProcessUserEvent().
*/
int GetTaggedActor() {
- return TaggedActor;
+ return g_TaggedActor;
}
/**
@@ -308,11 +308,11 @@ int GetTaggedActor() {
* (if one is). Tag process asks us for this information, as does ProcessUserEvent().
*/
static void SaveTaggedPoly(HPOLYGON hp) {
- hTaggedPolygon = hp;
+ g_hTaggedPolygon = hp;
}
HPOLYGON GetTaggedPoly() {
- return hTaggedPolygon;
+ return g_hTaggedPolygon;
}
/**
@@ -405,11 +405,11 @@ static bool ActorTag(int curX, int curY, HotSpotTag *pTag, OBJECT **ppText) {
if (ActorTagIsWanted(actor)) {
GetActorTagPos(actor, &tagX, &tagY, false);
- LoadStringRes(GetActorTagHandle(actor), tagBuffer, sizeof(tagBuffer));
+ LoadStringRes(GetActorTagHandle(actor), g_tagBuffer, sizeof(g_tagBuffer));
// May have buggered cursor
EndCursorFollowed();
- *ppText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), tagBuffer,
+ *ppText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), g_tagBuffer,
0, tagX, tagY, GetTagFontHandle(), TXT_CENTER, 0);
assert(*ppText);
MultiSetZPosition(*ppText, Z_TAG_TEXT);
@@ -653,7 +653,7 @@ void TagProcess(CORO_PARAM, const void *) {
SaveTaggedPoly(NOPOLY); // No tagged polygon yet
while (1) {
- if (bTagsActive) {
+ if (g_bTagsActive) {
int curX, curY; // cursor position
while (!GetCursorXYNoWait(&curX, &curY, true))
CORO_SLEEP(1);
@@ -804,7 +804,7 @@ void PointProcess(CORO_PARAM, const void *) {
// allow re-scheduling
do {
CORO_SLEEP(1);
- } while (!bPointingActive);
+ } while (!g_bPointingActive);
} else {
// allow re-scheduling
CORO_SLEEP(1);
@@ -815,15 +815,15 @@ void PointProcess(CORO_PARAM, const void *) {
}
void DisableTags() {
- bTagsActive = false;
+ g_bTagsActive = false;
}
void EnableTags() {
- bTagsActive = true;
+ g_bTagsActive = true;
}
bool DisableTagsIfEnabled() {
- if (bTagsActive) {
+ if (g_bTagsActive) {
DisableTags();
return true;
} else
@@ -836,12 +836,12 @@ bool DisableTagsIfEnabled() {
* cursor is in.
*/
void TogglePathDisplay() {
- DispPath ^= 1; // Toggle path display (XOR with true)
+ g_DispPath ^= 1; // Toggle path display (XOR with true)
}
void setshowstring() {
- bShowString = true;
+ g_bShowString = true;
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/play.cpp b/engines/tinsel/play.cpp
index 71e07721a6..40729d9f3a 100644
--- a/engines/tinsel/play.cpp
+++ b/engines/tinsel/play.cpp
@@ -62,10 +62,10 @@ struct PPINIT {
// FIXME: Avoid non-const global vars
-static SOUNDREELS soundReels[MAX_SOUNDREELS];
-static int soundReelNumbers[MAX_SOUNDREELS];
+static SOUNDREELS g_soundReels[MAX_SOUNDREELS];
+static int g_soundReelNumbers[MAX_SOUNDREELS];
-static int soundReelWait;
+static int g_soundReelWait;
//-------------------- METHODS ----------------------
@@ -148,31 +148,31 @@ static int RegisterSoundReel(SCNHANDLE hFilm, int column, int actorCol) {
for (i = 0; i < MAX_SOUNDREELS; i++) {
// Should assert this doesn't happen, but let's be tolerant
- if (soundReels[i].hFilm == hFilm && soundReels[i].column == column)
+ if (g_soundReels[i].hFilm == hFilm && g_soundReels[i].column == column)
break;
- if (!soundReels[i].hFilm) {
- soundReels[i].hFilm = hFilm;
- soundReels[i].column = column;
- soundReels[i].actorCol = actorCol;
+ if (!g_soundReels[i].hFilm) {
+ g_soundReels[i].hFilm = hFilm;
+ g_soundReels[i].column = column;
+ g_soundReels[i].actorCol = actorCol;
break;
}
}
- soundReelNumbers[i]++;
+ g_soundReelNumbers[i]++;
return i;
}
void NoSoundReels() {
- memset(soundReels, 0, sizeof(soundReels));
- soundReelWait = 0;
+ memset(g_soundReels, 0, sizeof(g_soundReels));
+ g_soundReelWait = 0;
}
static void DeRegisterSoundReel(SCNHANDLE hFilm, int column) {
for (int i = 0; i < MAX_SOUNDREELS; i++) {
// Should assert this doesn't happen, but let's be tolerant
- if (soundReels[i].hFilm == hFilm && soundReels[i].column == column) {
- soundReels[i].hFilm = 0;
+ if (g_soundReels[i].hFilm == hFilm && g_soundReels[i].column == column) {
+ g_soundReels[i].hFilm = 0;
break;
}
}
@@ -180,15 +180,15 @@ static void DeRegisterSoundReel(SCNHANDLE hFilm, int column) {
void SaveSoundReels(PSOUNDREELS psr) {
for (int i = 0; i < MAX_SOUNDREELS; i++) {
- if (IsCdPlayHandle(soundReels[i].hFilm))
- soundReels[i].hFilm = 0;
+ if (IsCdPlayHandle(g_soundReels[i].hFilm))
+ g_soundReels[i].hFilm = 0;
}
- memcpy(psr, soundReels, sizeof(soundReels));
+ memcpy(psr, g_soundReels, sizeof(g_soundReels));
}
void RestoreSoundReels(PSOUNDREELS psr) {
- memcpy(soundReels, psr, sizeof(soundReels));
+ memcpy(g_soundReels, psr, sizeof(g_soundReels));
}
static uint32 GetZfactor(int actorID, PMOVER pMover, bool bNewMover) {
@@ -245,7 +245,7 @@ static void SoundReel(CORO_PARAM, SCNHANDLE hFilm, int column, int speed,
_ctx->bFinished = false;
_ctx->bLooped = false;
_ctx->myId = RegisterSoundReel(hFilm, column, actorCol);
- _ctx->myNum = soundReelNumbers[_ctx->myId];
+ _ctx->myNum = g_soundReelNumbers[_ctx->myId];
do {
pFilm = (FILM *)LockMem(hFilm);
@@ -366,10 +366,10 @@ static void SoundReel(CORO_PARAM, SCNHANDLE hFilm, int column, int speed,
_ctx->bFinished = true;
}
- } while (!_ctx->bFinished && _ctx->myNum == soundReelNumbers[_ctx->myId]);
+ } while (!_ctx->bFinished && _ctx->myNum == g_soundReelNumbers[_ctx->myId]);
// De-register - if not been replaced
- if (_ctx->myNum == soundReelNumbers[_ctx->myId])
+ if (_ctx->myNum == g_soundReelNumbers[_ctx->myId])
DeRegisterSoundReel(hFilm, column);
CORO_END_CODE;
@@ -384,17 +384,17 @@ static void ResSoundReel(CORO_PARAM, const void *param) {
CORO_BEGIN_CODE(_ctx);
- CORO_INVOKE_ARGS(SoundReel, (CORO_SUBCTX, soundReels[i].hFilm, soundReels[i].column,
- -1, 0, soundReels[i].actorCol));
+ CORO_INVOKE_ARGS(SoundReel, (CORO_SUBCTX, g_soundReels[i].hFilm, g_soundReels[i].column,
+ -1, 0, g_soundReels[i].actorCol));
CORO_KILL_SELF();
CORO_END_CODE;
}
static void SoundReelWaitCheck() {
- if (--soundReelWait == 0) {
+ if (--g_soundReelWait == 0) {
for (int i = 0; i < MAX_SOUNDREELS; i++) {
- if (soundReels[i].hFilm) {
+ if (g_soundReels[i].hFilm) {
g_scheduler->createProcess(PID_REEL, ResSoundReel, &i, sizeof(i));
}
}
@@ -1162,7 +1162,7 @@ void RestoreActorReels(SCNHANDLE hFilm, int actor, int x, int y) {
// Start display process for the reel
g_scheduler->createProcess(PID_REEL, PlayProcess, &ppi, sizeof(ppi));
- soundReelWait++;
+ g_soundReelWait++;
}
}
}
diff --git a/engines/tinsel/rince.cpp b/engines/tinsel/rince.cpp
index ca196aac92..bb0aeabd2f 100644
--- a/engines/tinsel/rince.cpp
+++ b/engines/tinsel/rince.cpp
@@ -51,7 +51,7 @@ namespace Tinsel {
//----------------- LOCAL GLOBAL DATA --------------------
-static MOVER Movers[MAX_MOVERS]; // FIXME: Avoid non-const global vars
+static MOVER g_Movers[MAX_MOVERS]; // FIXME: Avoid non-const global vars
//----------------- FUNCTIONS ----------------------------
@@ -115,7 +115,7 @@ void MoverBrightness(PMOVER pMover, int brightness) {
* RebootMovers
*/
void RebootMovers() {
- memset(Movers, 0, sizeof(Movers));
+ memset(g_Movers, 0, sizeof(g_Movers));
}
/**
@@ -127,11 +127,11 @@ PMOVER GetMover(int ano) {
// Slot 0 is reserved for lead actor
if (ano == GetLeadId() || ano == LEAD_ACTOR)
- return &Movers[0];
+ return &g_Movers[0];
for (i = 1; i < MAX_MOVERS; i++)
- if (Movers[i].actorID == ano)
- return &Movers[i];
+ if (g_Movers[i].actorID == ano)
+ return &g_Movers[i];
return NULL;
}
@@ -144,25 +144,25 @@ PMOVER RegisterMover(int ano) {
// Slot 0 is reserved for lead actor
if (ano == GetLeadId() || ano == LEAD_ACTOR) {
- Movers[0].actorToken = TOKEN_LEAD;
- Movers[0].actorID = GetLeadId();
- return &Movers[0];
+ g_Movers[0].actorToken = TOKEN_LEAD;
+ g_Movers[0].actorID = GetLeadId();
+ return &g_Movers[0];
}
// Check it hasn't already been declared
for (i = 1; i < MAX_MOVERS; i++) {
- if (Movers[i].actorID == ano) {
+ if (g_Movers[i].actorID == ano) {
// Actor is already a moving actor
- return &Movers[i];
+ return &g_Movers[i];
}
}
// Find an empty slot
for (i = 1; i < MAX_MOVERS; i++)
- if (!Movers[i].actorID) {
- Movers[i].actorToken = TOKEN_LEAD + i;
- Movers[i].actorID = ano;
- return &Movers[i];
+ if (!g_Movers[i].actorID) {
+ g_Movers[i].actorToken = TOKEN_LEAD + i;
+ g_Movers[i].actorID = ano;
+ return &g_Movers[i];
}
error("Too many moving actors");
@@ -176,8 +176,8 @@ PMOVER RegisterMover(int ano) {
PMOVER GetLiveMover(int index) {
assert(index >= 0 && index < MAX_MOVERS); // out of range
- if (Movers[index].bActive)
- return &Movers[index];
+ if (g_Movers[index].bActive)
+ return &g_Movers[index];
else
return NULL;
}
@@ -185,13 +185,13 @@ PMOVER GetLiveMover(int index) {
bool IsMAinEffectPoly(int index) {
assert(index >= 0 && index < MAX_MOVERS); // out of range
- return Movers[index].bInEffect;
+ return g_Movers[index].bInEffect;
}
void SetMoverInEffect(int index, bool tf) {
assert(index >= 0 && index < MAX_MOVERS); // out of range
- Movers[index].bInEffect = tf;
+ g_Movers[index].bInEffect = tf;
}
/**
@@ -392,7 +392,7 @@ static void InitMover(PMOVER pMover) {
*/
void DropMovers() {
for (int i = 0; i < MAX_MOVERS; i++)
- InitMover(&Movers[i]);
+ InitMover(&g_Movers[i]);
}
@@ -880,30 +880,30 @@ PMOVER InMoverBlock(PMOVER pMover, int x, int y) {
caR = GetMoverRight(pMover) + x - caX;
for (int i = 0; i < MAX_MOVERS; i++) {
- if (pMover == &Movers[i] ||
- (TinselV2 && (Movers[i].actorObj == NULL)) ||
- (!TinselV2 && !Movers[i].bActive))
+ if (pMover == &g_Movers[i] ||
+ (TinselV2 && (g_Movers[i].actorObj == NULL)) ||
+ (!TinselV2 && !g_Movers[i].bActive))
continue;
// At around the same height?
- GetMoverPosition(&Movers[i], &taX, &taY);
- if (Movers[i].hFnpath != NOPOLY)
+ GetMoverPosition(&g_Movers[i], &taX, &taY);
+ if (g_Movers[i].hFnpath != NOPOLY)
continue;
if (ABS(y - taY) > 2) // 2 was 8
continue;
// To the left?
- taL = GetMoverLeft(&Movers[i]);
+ taL = GetMoverLeft(&g_Movers[i]);
if (caR <= taL)
continue;
// To the right?
- taR = GetMoverRight(&Movers[i]);
+ taR = GetMoverRight(&g_Movers[i]);
if (caL >= taR)
continue;
- return &Movers[i];
+ return &g_Movers[i];
}
return NULL;
}
@@ -913,33 +913,33 @@ PMOVER InMoverBlock(PMOVER pMover, int x, int y) {
*/
void SaveMovers(SAVED_MOVER *sMoverInfo) {
for (int i = 0; i < MAX_MOVERS; i++) {
- sMoverInfo[i].bActive = !TinselV2 ? Movers[i].bActive : Movers[i].actorObj != NULL;
- sMoverInfo[i].actorID = Movers[i].actorID;
- sMoverInfo[i].objX = Movers[i].objX;
- sMoverInfo[i].objY = Movers[i].objY;
- sMoverInfo[i].hLastfilm = Movers[i].hLastFilm;
+ sMoverInfo[i].bActive = !TinselV2 ? g_Movers[i].bActive : g_Movers[i].actorObj != NULL;
+ sMoverInfo[i].actorID = g_Movers[i].actorID;
+ sMoverInfo[i].objX = g_Movers[i].objX;
+ sMoverInfo[i].objY = g_Movers[i].objY;
+ sMoverInfo[i].hLastfilm = g_Movers[i].hLastFilm;
if (TinselV2) {
- sMoverInfo[i].bHidden = Movers[i].bHidden;
- sMoverInfo[i].brightness = Movers[i].brightness;
- sMoverInfo[i].startColor = Movers[i].startColor;
- sMoverInfo[i].paletteLength = Movers[i].paletteLength;
+ sMoverInfo[i].bHidden = g_Movers[i].bHidden;
+ sMoverInfo[i].brightness = g_Movers[i].brightness;
+ sMoverInfo[i].startColor = g_Movers[i].startColor;
+ sMoverInfo[i].paletteLength = g_Movers[i].paletteLength;
}
- memcpy(sMoverInfo[i].walkReels, Movers[i].walkReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
- memcpy(sMoverInfo[i].standReels, Movers[i].standReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
- memcpy(sMoverInfo[i].talkReels, Movers[i].talkReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
+ memcpy(sMoverInfo[i].walkReels, g_Movers[i].walkReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
+ memcpy(sMoverInfo[i].standReels, g_Movers[i].standReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
+ memcpy(sMoverInfo[i].talkReels, g_Movers[i].talkReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
}
}
void RestoreAuxScales(SAVED_MOVER *sMoverInfo) {
for (int i = 0; i < MAX_MOVERS; i++) {
if (TinselV2)
- Movers[i].actorID = sMoverInfo[i].actorID;
+ g_Movers[i].actorID = sMoverInfo[i].actorID;
- memcpy(Movers[i].walkReels, sMoverInfo[i].walkReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
- memcpy(Movers[i].standReels, sMoverInfo[i].standReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
- memcpy(Movers[i].talkReels, sMoverInfo[i].talkReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
+ memcpy(g_Movers[i].walkReels, sMoverInfo[i].walkReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
+ memcpy(g_Movers[i].standReels, sMoverInfo[i].standReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
+ memcpy(g_Movers[i].talkReels, sMoverInfo[i].talkReels, TOTAL_SCALES * 4 * sizeof(SCNHANDLE));
}
}
@@ -950,10 +950,10 @@ PMOVER NextMover(PMOVER pMover) {
if (pMover == NULL)
next = 0;
else
- next = pMover - Movers + 1;
+ next = pMover - g_Movers + 1;
- if (Movers[next].actorID)
- return &Movers[next];
+ if (g_Movers[next].actorID)
+ return &g_Movers[next];
else
return NULL;
}
diff --git a/engines/tinsel/saveload.cpp b/engines/tinsel/saveload.cpp
index f8598c05f8..0a552c8c2b 100644
--- a/engines/tinsel/saveload.cpp
+++ b/engines/tinsel/saveload.cpp
@@ -68,9 +68,9 @@ namespace Tinsel {
//----------------- GLOBAL GLOBAL DATA --------------------
-int thingHeld = 0;
-int restoreCD = 0;
-SRSTATE SRstate = SR_IDLE;
+int g_thingHeld = 0;
+int g_restoreCD = 0;
+SRSTATE g_SRstate = SR_IDLE;
//----------------- EXTERN FUNCTIONS --------------------
@@ -83,9 +83,9 @@ extern void syncGlobInfo(Common::Serializer &s);
// in POLYGONS.C
extern void syncPolyInfo(Common::Serializer &s);
-extern int sceneCtr;
+extern int g_sceneCtr;
-extern bool ASceneIsSaved;
+extern bool g_ASceneIsSaved;
//----------------- LOCAL DEFINES --------------------
@@ -123,21 +123,23 @@ struct SFILES {
// FIXME: Avoid non-const global vars
-static int numSfiles = 0;
-static SFILES savedFiles[MAX_SAVED_FILES];
+static int g_numSfiles = 0;
+static SFILES g_savedFiles[MAX_SAVED_FILES];
-static bool NeedLoad = true;
+static bool g_NeedLoad = true;
-static SAVED_DATA *srsd = 0;
-static int RestoreGameNumber = 0;
-static char *SaveSceneName = 0;
-static const char *SaveSceneDesc = 0;
-static int *SaveSceneSsCount = 0;
-static SAVED_DATA *SaveSceneSsData = 0; // points to 'SAVED_DATA ssdata[MAX_NEST]'
+static SAVED_DATA *g_srsd = 0;
+static int g_RestoreGameNumber = 0;
+static char *g_SaveSceneName = 0;
+static const char *g_SaveSceneDesc = 0;
+static int *g_SaveSceneSsCount = 0;
+static SAVED_DATA *g_SaveSceneSsData = 0; // points to 'SAVED_DATA ssdata[MAX_NEST]'
//------------- SAVE/LOAD SUPPORT METHODS ----------------
-void setNeedLoad() { NeedLoad = true; }
+void setNeedLoad() {
+ g_NeedLoad = true;
+}
static void syncTime(Common::Serializer &s, TimeDate &t) {
s.syncAsUint16LE(t.tm_year);
@@ -345,18 +347,18 @@ static int cmpTimeDate(const TimeDate &a, const TimeDate &b) {
int getList(Common::SaveFileManager *saveFileMan, const Common::String &target) {
// No change since last call?
// TODO/FIXME: Just always reload this data? Be careful about slow downs!!!
- if (!NeedLoad)
- return numSfiles;
+ if (!g_NeedLoad)
+ return g_numSfiles;
int i;
const Common::String pattern = target + ".???";
Common::StringArray files = saveFileMan->listSavefiles(pattern);
- numSfiles = 0;
+ g_numSfiles = 0;
for (Common::StringArray::const_iterator file = files.begin(); file != files.end(); ++file) {
- if (numSfiles >= MAX_SAVED_FILES)
+ if (g_numSfiles >= MAX_SAVED_FILES)
break;
const Common::String &fname = *file;
@@ -376,46 +378,46 @@ int getList(Common::SaveFileManager *saveFileMan, const Common::String &target)
// "incompatible version".
}
- i = numSfiles;
+ i = g_numSfiles;
#ifndef DISABLE_SAVEGAME_SORTING
- for (i = 0; i < numSfiles; i++) {
- if (cmpTimeDate(hdr.dateTime, savedFiles[i].dateTime) > 0) {
- Common::copy_backward(&savedFiles[i], &savedFiles[numSfiles], &savedFiles[numSfiles + 1]);
+ for (i = 0; i < g_numSfiles; i++) {
+ if (cmpTimeDate(hdr.dateTime, g_savedFiles[i].dateTime) > 0) {
+ Common::copy_backward(&g_savedFiles[i], &g_savedFiles[g_numSfiles], &g_savedFiles[g_numSfiles + 1]);
break;
}
}
#endif
- Common::strlcpy(savedFiles[i].name, fname.c_str(), FNAMELEN);
- Common::strlcpy(savedFiles[i].desc, hdr.desc, SG_DESC_LEN);
- savedFiles[i].dateTime = hdr.dateTime;
+ Common::strlcpy(g_savedFiles[i].name, fname.c_str(), FNAMELEN);
+ Common::strlcpy(g_savedFiles[i].desc, hdr.desc, SG_DESC_LEN);
+ g_savedFiles[i].dateTime = hdr.dateTime;
- ++numSfiles;
+ ++g_numSfiles;
}
// Next getList() needn't do its stuff again
- NeedLoad = false;
+ g_NeedLoad = false;
- return numSfiles;
+ return g_numSfiles;
}
int getList() {
// No change since last call?
// TODO/FIXME: Just always reload this data? Be careful about slow downs!!!
- if (!NeedLoad)
- return numSfiles;
+ if (!g_NeedLoad)
+ return g_numSfiles;
return getList(_vm->getSaveFileMan(), _vm->getTargetName());
}
char *ListEntry(int i, letype which) {
if (i == -1)
- i = numSfiles;
+ i = g_numSfiles;
assert(i >= 0);
- if (i < numSfiles)
- return which == LE_NAME ? savedFiles[i].name : savedFiles[i].desc;
+ if (i < g_numSfiles)
+ return which == LE_NAME ? g_savedFiles[i].name : g_savedFiles[i].desc;
else
return NULL;
}
@@ -425,14 +427,14 @@ static void DoSync(Common::Serializer &s) {
if (TinselV2) {
if (s.isSaving())
- restoreCD = GetCurrentCD();
- s.syncAsSint16LE(restoreCD);
+ g_restoreCD = GetCurrentCD();
+ s.syncAsSint16LE(g_restoreCD);
}
if (TinselV2 && s.isLoading())
HoldItem(INV_NOICON);
- syncSavedData(s, *srsd);
+ syncSavedData(s, *g_srsd);
syncGlobInfo(s); // Glitter globals
syncInvInfo(s); // Inventory data
@@ -442,7 +444,7 @@ static void DoSync(Common::Serializer &s) {
s.syncAsSint32LE(sg);
if (s.isLoading()) {
if (TinselV2)
- thingHeld = sg;
+ g_thingHeld = sg;
else
HoldItem(sg);
}
@@ -452,17 +454,17 @@ static void DoSync(Common::Serializer &s) {
syncPolyInfo(s); // Dead polygon data
syncSCdata(s); // Hook Scene and delayed scene
- s.syncAsSint32LE(*SaveSceneSsCount);
+ s.syncAsSint32LE(*g_SaveSceneSsCount);
- if (*SaveSceneSsCount != 0) {
- SAVED_DATA *sdPtr = SaveSceneSsData;
- for (int i = 0; i < *SaveSceneSsCount; ++i, ++sdPtr)
+ if (*g_SaveSceneSsCount != 0) {
+ SAVED_DATA *sdPtr = g_SaveSceneSsData;
+ for (int i = 0; i < *g_SaveSceneSsCount; ++i, ++sdPtr)
syncSavedData(s, *sdPtr);
// Flag that there is a saved scene to return to. Note that in this context 'saved scene'
// is a stored scene to return to from another scene, such as from the Summoning Book close-up
// in Discworld 1 to whatever scene Rincewind was in prior to that
- ASceneIsSaved = true;
+ g_ASceneIsSaved = true;
}
if (!TinselV2)
@@ -473,7 +475,7 @@ static void DoSync(Common::Serializer &s) {
* DoRestore
*/
static bool DoRestore() {
- Common::InSaveFile *f = _vm->getSaveFileMan()->openForLoading(savedFiles[RestoreGameNumber].name);
+ Common::InSaveFile *f = _vm->getSaveFileMan()->openForLoading(g_savedFiles[g_RestoreGameNumber].name);
if (f == NULL) {
return false;
@@ -507,8 +509,8 @@ static bool DoRestore() {
static void SaveFailure(Common::OutSaveFile *f) {
if (f) {
delete f;
- _vm->getSaveFileMan()->removeSavefile(SaveSceneName);
- SaveSceneName = NULL; // Invalidate save name
+ _vm->getSaveFileMan()->removeSavefile(g_SaveSceneName);
+ g_SaveSceneName = NULL; // Invalidate save name
}
GUI::MessageDialog dialog(_("Failed to save game state to file."));
dialog.runModal();
@@ -522,9 +524,9 @@ static void DoSave() {
char tmpName[FNAMELEN];
// Next getList() must do its stuff again
- NeedLoad = true;
+ g_NeedLoad = true;
- if (SaveSceneName == NULL) {
+ if (g_SaveSceneName == NULL) {
// Generate a new unique save name
int i;
int ano = 1; // Allocated number
@@ -533,23 +535,23 @@ static void DoSave() {
Common::String fname = _vm->getSavegameFilename(ano);
strcpy(tmpName, fname.c_str());
- for (i = 0; i < numSfiles; i++)
- if (!strcmp(savedFiles[i].name, tmpName))
+ for (i = 0; i < g_numSfiles; i++)
+ if (!strcmp(g_savedFiles[i].name, tmpName))
break;
- if (i == numSfiles)
+ if (i == g_numSfiles)
break;
ano++;
}
- SaveSceneName = tmpName;
+ g_SaveSceneName = tmpName;
}
- if (SaveSceneDesc[0] == 0)
- SaveSceneDesc = "unnamed";
+ if (g_SaveSceneDesc[0] == 0)
+ g_SaveSceneDesc = "unnamed";
- f = _vm->getSaveFileMan()->openForSaving(SaveSceneName);
+ f = _vm->getSaveFileMan()->openForSaving(g_SaveSceneName);
Common::Serializer s(0, f);
if (f == NULL) {
@@ -562,7 +564,7 @@ static void DoSave() {
hdr.id = SAVEGAME_ID;
hdr.size = SAVEGAME_HEADER_SIZE;
hdr.ver = CURRENT_VER;
- memcpy(hdr.desc, SaveSceneDesc, SG_DESC_LEN);
+ memcpy(hdr.desc, g_SaveSceneDesc, SG_DESC_LEN);
hdr.desc[SG_DESC_LEN - 1] = 0;
g_system->getTimeAndDate(hdr.dateTime);
hdr.scnFlag = _vm->getFeatures() & GF_SCNFILES;
@@ -584,28 +586,29 @@ static void DoSave() {
f->finalize();
delete f;
- SaveSceneName = NULL; // Invalidate save name
+ g_SaveSceneName = NULL; // Invalidate save name
}
/**
* ProcessSRQueue
*/
void ProcessSRQueue() {
- switch (SRstate) {
+ switch (g_SRstate) {
case SR_DORESTORE:
// If a load has been done directly from title screens, set a larger value for scene ctr so the
// code used to skip the title screens in Discworld 1 gets properly disabled
- if (sceneCtr < 10) sceneCtr = 10;
+ if (g_sceneCtr < 10)
+ g_sceneCtr = 10;
if (DoRestore()) {
- DoRestoreScene(srsd, false);
+ DoRestoreScene(g_srsd, false);
}
- SRstate = SR_IDLE;
+ g_SRstate = SR_IDLE;
break;
case SR_DOSAVE:
DoSave();
- SRstate = SR_IDLE;
+ g_SRstate = SR_IDLE;
break;
default:
break;
@@ -614,14 +617,14 @@ void ProcessSRQueue() {
void RequestSaveGame(char *name, char *desc, SAVED_DATA *sd, int *pSsCount, SAVED_DATA *pSsData) {
- assert(SRstate == SR_IDLE);
-
- SaveSceneName = name;
- SaveSceneDesc = desc;
- SaveSceneSsCount = pSsCount;
- SaveSceneSsData = pSsData;
- srsd = sd;
- SRstate = SR_DOSAVE;
+ assert(g_SRstate == SR_IDLE);
+
+ g_SaveSceneName = name;
+ g_SaveSceneDesc = desc;
+ g_SaveSceneSsCount = pSsCount;
+ g_SaveSceneSsData = pSsData;
+ g_srsd = sd;
+ g_SRstate = SR_DOSAVE;
}
void RequestRestoreGame(int num, SAVED_DATA *sd, int *pSsCount, SAVED_DATA *pSsData) {
@@ -630,17 +633,17 @@ void RequestRestoreGame(int num, SAVED_DATA *sd, int *pSsCount, SAVED_DATA *pSsD
return;
else if (num == -2) {
// From CD change for restore
- num = RestoreGameNumber;
+ num = g_RestoreGameNumber;
}
}
assert(num >= 0);
- RestoreGameNumber = num;
- SaveSceneSsCount = pSsCount;
- SaveSceneSsData = pSsData;
- srsd = sd;
- SRstate = SR_DORESTORE;
+ g_RestoreGameNumber = num;
+ g_SaveSceneSsCount = pSsCount;
+ g_SaveSceneSsData = pSsData;
+ g_srsd = sd;
+ g_SRstate = SR_DORESTORE;
}
/**
diff --git a/engines/tinsel/savescn.cpp b/engines/tinsel/savescn.cpp
index 39a8033d45..1b06e3929c 100644
--- a/engines/tinsel/savescn.cpp
+++ b/engines/tinsel/savescn.cpp
@@ -75,29 +75,29 @@ enum {
//----------------- EXTERNAL GLOBAL DATA --------------------
-extern int thingHeld;
-extern int restoreCD;
-extern SRSTATE SRstate;
+extern int g_thingHeld;
+extern int g_restoreCD;
+extern SRSTATE g_SRstate;
//----------------- LOCAL GLOBAL DATA --------------------
// FIXME: Avoid non-const global vars
-bool ASceneIsSaved = false;
+bool g_ASceneIsSaved = false;
-static int savedSceneCount = 0;
+static int g_savedSceneCount = 0;
-static bool bNotDoneYet = false;
+static bool g_bNotDoneYet = false;
//static SAVED_DATA ssData[MAX_NEST];
-static SAVED_DATA *ssData = NULL;
-static SAVED_DATA sgData;
+static SAVED_DATA *g_ssData = NULL;
+static SAVED_DATA g_sgData;
-static SAVED_DATA *rsd = 0;
+static SAVED_DATA *g_rsd = 0;
-static int RestoreSceneCount = 0;
+static int g_RestoreSceneCount = 0;
-static bool bNoFade = false;
+static bool g_bNoFade = false;
//----------------- FORWARD REFERENCES --------------------
@@ -133,7 +133,7 @@ void DoSaveScene(SAVED_DATA *sd) {
CurrentMidiFacts(&sd->SavedMidi, &sd->SavedLoop);
}
- ASceneIsSaved = true;
+ g_ASceneIsSaved = true;
}
/**
@@ -142,29 +142,29 @@ void DoSaveScene(SAVED_DATA *sd) {
* @param bFadeOut Flag to perform a fade out
*/
void DoRestoreScene(SAVED_DATA *sd, bool bFadeOut) {
- rsd = sd;
+ g_rsd = sd;
if (bFadeOut)
- RestoreSceneCount = RS_COUNT + COUNTOUT_COUNT; // Set restore scene count
+ g_RestoreSceneCount = RS_COUNT + COUNTOUT_COUNT; // Set restore scene count
else
- RestoreSceneCount = RS_COUNT; // Set restore scene count
+ g_RestoreSceneCount = RS_COUNT; // Set restore scene count
}
void InitializeSaveScenes() {
- if (ssData == NULL) {
- ssData = (SAVED_DATA *)calloc(MAX_NEST, sizeof(SAVED_DATA));
- if (ssData == NULL) {
+ if (g_ssData == NULL) {
+ g_ssData = (SAVED_DATA *)calloc(MAX_NEST, sizeof(SAVED_DATA));
+ if (g_ssData == NULL) {
error("Cannot allocate memory for scene changes");
}
} else {
// Re-initialize - no scenes saved
- savedSceneCount = 0;
+ g_savedSceneCount = 0;
}
}
void FreeSaveScenes() {
- free(ssData);
- ssData = NULL;
+ free(g_ssData);
+ g_ssData = NULL;
}
/**
@@ -212,29 +212,29 @@ static void SortMAProcess(CORO_PARAM, const void *) {
_ctx->viaActor = SysVar(ISV_DIVERT_ACTOR);
SetSysVar(ISV_DIVERT_ACTOR, 0);
- RestoreAuxScales(rsd->SavedMoverInfo);
+ RestoreAuxScales(g_rsd->SavedMoverInfo);
for (_ctx->i = 0; _ctx->i < MAX_MOVERS; _ctx->i++) {
- if (rsd->SavedMoverInfo[_ctx->i].bActive) {
- CORO_INVOKE_ARGS(Stand, (CORO_SUBCTX, rsd->SavedMoverInfo[_ctx->i].actorID,
- rsd->SavedMoverInfo[_ctx->i].objX, rsd->SavedMoverInfo[_ctx->i].objY,
- rsd->SavedMoverInfo[_ctx->i].hLastfilm));
+ if (g_rsd->SavedMoverInfo[_ctx->i].bActive) {
+ CORO_INVOKE_ARGS(Stand, (CORO_SUBCTX, g_rsd->SavedMoverInfo[_ctx->i].actorID,
+ g_rsd->SavedMoverInfo[_ctx->i].objX, g_rsd->SavedMoverInfo[_ctx->i].objY,
+ g_rsd->SavedMoverInfo[_ctx->i].hLastfilm));
- if (rsd->SavedMoverInfo[_ctx->i].bHidden)
- HideMover(GetMover(rsd->SavedMoverInfo[_ctx->i].actorID));
+ if (g_rsd->SavedMoverInfo[_ctx->i].bHidden)
+ HideMover(GetMover(g_rsd->SavedMoverInfo[_ctx->i].actorID));
}
- ActorPalette(rsd->SavedMoverInfo[_ctx->i].actorID,
- rsd->SavedMoverInfo[_ctx->i].startColor, rsd->SavedMoverInfo[_ctx->i].paletteLength);
+ ActorPalette(g_rsd->SavedMoverInfo[_ctx->i].actorID,
+ g_rsd->SavedMoverInfo[_ctx->i].startColor, g_rsd->SavedMoverInfo[_ctx->i].paletteLength);
- if (rsd->SavedMoverInfo[_ctx->i].brightness != BOGUS_BRIGHTNESS)
- ActorBrightness(rsd->SavedMoverInfo[_ctx->i].actorID, rsd->SavedMoverInfo[_ctx->i].brightness);
+ if (g_rsd->SavedMoverInfo[_ctx->i].brightness != BOGUS_BRIGHTNESS)
+ ActorBrightness(g_rsd->SavedMoverInfo[_ctx->i].actorID, g_rsd->SavedMoverInfo[_ctx->i].brightness);
}
// Restore via actor
SetSysVar(ISV_DIVERT_ACTOR, _ctx->viaActor);
- bNotDoneYet = false;
+ g_bNotDoneYet = false;
CORO_END_CODE;
}
@@ -244,49 +244,49 @@ static void SortMAProcess(CORO_PARAM, const void *) {
void ResumeInterprets() {
// Master script only affected on restore game, not restore scene
- if (!TinselV2 && (rsd == &sgData)) {
+ if (!TinselV2 && (g_rsd == &g_sgData)) {
g_scheduler->killMatchingProcess(PID_MASTER_SCR, -1);
FreeMasterInterpretContext();
}
for (int i = 0; i < NUM_INTERPRET; i++) {
- switch (rsd->SavedICInfo[i].GSort) {
+ switch (g_rsd->SavedICInfo[i].GSort) {
case GS_NONE:
break;
case GS_INVENTORY:
- if (rsd->SavedICInfo[i].event != POINTED) {
- RestoreProcess(&rsd->SavedICInfo[i]);
+ if (g_rsd->SavedICInfo[i].event != POINTED) {
+ RestoreProcess(&g_rsd->SavedICInfo[i]);
}
break;
case GS_MASTER:
// Master script only affected on restore game, not restore scene
- if (rsd == &sgData)
- RestoreMasterProcess(&rsd->SavedICInfo[i]);
+ if (g_rsd == &g_sgData)
+ RestoreMasterProcess(&g_rsd->SavedICInfo[i]);
break;
case GS_PROCESS:
// Tinsel 2 process
- RestoreSceneProcess(&rsd->SavedICInfo[i]);
+ RestoreSceneProcess(&g_rsd->SavedICInfo[i]);
break;
case GS_GPROCESS:
// Tinsel 2 Global processes only affected on restore game, not restore scene
- if (rsd == &sgData)
- RestoreGlobalProcess(&rsd->SavedICInfo[i]);
+ if (g_rsd == &g_sgData)
+ RestoreGlobalProcess(&g_rsd->SavedICInfo[i]);
break;
case GS_ACTOR:
if (TinselV2)
- RestoreProcess(&rsd->SavedICInfo[i]);
+ RestoreProcess(&g_rsd->SavedICInfo[i]);
else
- RestoreActorProcess(rsd->SavedICInfo[i].idActor, &rsd->SavedICInfo[i], rsd == &sgData);
+ RestoreActorProcess(g_rsd->SavedICInfo[i].idActor, &g_rsd->SavedICInfo[i], g_rsd == &g_sgData);
break;
case GS_POLYGON:
case GS_SCENE:
- RestoreProcess(&rsd->SavedICInfo[i]);
+ RestoreProcess(&g_rsd->SavedICInfo[i]);
break;
default:
@@ -313,7 +313,7 @@ static int DoRestoreSceneFrame(SAVED_DATA *sd, int n) {
if (TinselV2) {
// Master script only affected on restore game, not restore scene
- if (sd == &sgData) {
+ if (sd == &g_sgData) {
g_scheduler->killMatchingProcess(PID_MASTER_SCR);
KillGlobalProcesses();
FreeMasterInterpretContext();
@@ -322,12 +322,12 @@ static int DoRestoreSceneFrame(SAVED_DATA *sd, int n) {
RestorePolygonStuff(sd->SavedPolygonStuff);
// Abandon temporarily if different CD
- if (sd == &sgData && restoreCD != GetCurrentCD()) {
- SRstate = SR_IDLE;
+ if (sd == &g_sgData && g_restoreCD != GetCurrentCD()) {
+ g_SRstate = SR_IDLE;
EndScene();
- SetNextCD(restoreCD);
- CDChangeForRestore(restoreCD);
+ SetNextCD(g_restoreCD);
+ CDChangeForRestore(g_restoreCD);
return 0;
}
@@ -338,8 +338,8 @@ static int DoRestoreSceneFrame(SAVED_DATA *sd, int n) {
// Start up the scene
StartNewScene(sd->SavedSceneHandle, NO_ENTRY_NUM);
- SetDoFadeIn(!bNoFade);
- bNoFade = false;
+ SetDoFadeIn(!g_bNoFade);
+ g_bNoFade = false;
StartupBackground(nullContext, sd->SavedBgroundHandle);
if (TinselV2) {
@@ -355,7 +355,7 @@ static int DoRestoreSceneFrame(SAVED_DATA *sd, int n) {
if (TinselV2) {
// create process to sort out the moving actors
g_scheduler->createProcess(PID_MOVER, SortMAProcess, NULL, 0);
- bNotDoneYet = true;
+ g_bNotDoneYet = true;
RestoreActorZ(sd->savedActorZ);
RestoreZpositions(sd->zPositions);
@@ -374,11 +374,11 @@ static int DoRestoreSceneFrame(SAVED_DATA *sd, int n) {
case 1:
if (TinselV2) {
- if (bNotDoneYet)
+ if (g_bNotDoneYet)
return n;
- if (sd == &sgData)
- HoldItem(thingHeld, true);
+ if (sd == &g_sgData)
+ HoldItem(g_thingHeld, true);
if (sd->bTinselDim)
_vm->_pcmMusic->dim(true);
_vm->_pcmMusic->restoreThatTune(sd->SavedTune);
@@ -406,7 +406,7 @@ static int DoRestoreSceneFrame(SAVED_DATA *sd, int n) {
void RestoreGame(int num) {
KillInventory();
- RequestRestoreGame(num, &sgData, &savedSceneCount, ssData);
+ RequestRestoreGame(num, &g_sgData, &g_savedSceneCount, g_ssData);
// Actual restoring is performed by ProcessSRQueue
}
@@ -418,9 +418,9 @@ void RestoreGame(int num) {
*/
void SaveGame(char *name, char *desc) {
// Get current scene data
- DoSaveScene(&sgData);
+ DoSaveScene(&g_sgData);
- RequestSaveGame(name, desc, &sgData, &savedSceneCount, ssData);
+ RequestSaveGame(name, desc, &g_sgData, &g_savedSceneCount, g_ssData);
// Actual saving is performed by ProcessSRQueue
}
@@ -429,11 +429,11 @@ void SaveGame(char *name, char *desc) {
//---------------------------------------------------------------------------------
bool IsRestoringScene() {
- if (RestoreSceneCount) {
- RestoreSceneCount = DoRestoreSceneFrame(rsd, RestoreSceneCount);
+ if (g_RestoreSceneCount) {
+ g_RestoreSceneCount = DoRestoreSceneFrame(g_rsd, g_RestoreSceneCount);
}
- return RestoreSceneCount ? true : false;
+ return g_RestoreSceneCount ? true : false;
}
/**
@@ -441,13 +441,13 @@ bool IsRestoringScene() {
*/
void TinselRestoreScene(bool bFade) {
// only called by restore_scene PCODE
- if (RestoreSceneCount == 0) {
- assert(savedSceneCount >= 1); // No saved scene to restore
+ if (g_RestoreSceneCount == 0) {
+ assert(g_savedSceneCount >= 1); // No saved scene to restore
- if (ASceneIsSaved)
- DoRestoreScene(&ssData[--savedSceneCount], bFade);
+ if (g_ASceneIsSaved)
+ DoRestoreScene(&g_ssData[--g_savedSceneCount], bFade);
if (!bFade)
- bNoFade = true;
+ g_bNoFade = true;
}
}
@@ -461,14 +461,14 @@ void TinselSaveScene(CORO_PARAM) {
CORO_BEGIN_CODE(_ctx);
- assert(savedSceneCount < MAX_NEST); // nesting limit reached
+ assert(g_savedSceneCount < MAX_NEST); // nesting limit reached
// Don't save the same thing multiple times!
// FIXME/TODO: Maybe this can be changed to an assert?
- if (savedSceneCount && ssData[savedSceneCount-1].SavedSceneHandle == GetSceneHandle())
+ if (g_savedSceneCount && g_ssData[g_savedSceneCount-1].SavedSceneHandle == GetSceneHandle())
CORO_KILL_SELF();
- DoSaveScene(&ssData[savedSceneCount++]);
+ DoSaveScene(&g_ssData[g_savedSceneCount++]);
CORO_END_CODE;
}
diff --git a/engines/tinsel/scene.cpp b/engines/tinsel/scene.cpp
index 89b0da7d65..f635ce13a3 100644
--- a/engines/tinsel/scene.cpp
+++ b/engines/tinsel/scene.cpp
@@ -107,15 +107,15 @@ struct ENTRANCE_STRUC {
// FIXME: Avoid non-const global vars
#ifdef DEBUG
-static bool ShowPosition = false; // Set when showpos() has been called
+static bool g_ShowPosition = false; // Set when showpos() has been called
#endif
-int sceneCtr = 0;
-static int initialMyEscape;
+int g_sceneCtr = 0;
+static int g_initialMyEscape;
-static SCNHANDLE SceneHandle = 0; // Current scene handle - stored in case of Save_Scene()
+static SCNHANDLE g_SceneHandle = 0; // Current scene handle - stored in case of Save_Scene()
-SCENE_STRUC tempStruc;
+SCENE_STRUC g_tempStruc;
struct TP_INIT {
SCNHANDLE hTinselCode; // Code
@@ -128,18 +128,18 @@ const SCENE_STRUC *GetSceneStruc(const byte *pStruc) {
// Copy appropriate fields into tempStruc, and return a pointer to it
const byte *p = pStruc;
- memset(&tempStruc, 0, sizeof(SCENE_STRUC));
-
- tempStruc.numEntrance = READ_UINT32(p); p += sizeof(uint32);
- tempStruc.numPoly = READ_UINT32(p); p += sizeof(uint32);
- tempStruc.numTaggedActor = READ_UINT32(p); p += sizeof(uint32);
- tempStruc.defRefer = READ_UINT32(p); p += sizeof(uint32);
- tempStruc.hSceneScript = READ_UINT32(p); p += sizeof(uint32);
- tempStruc.hEntrance = READ_UINT32(p); p += sizeof(uint32);
- tempStruc.hPoly = READ_UINT32(p); p += sizeof(uint32);
- tempStruc.hTaggedActor = READ_UINT32(p); p += sizeof(uint32);
-
- return &tempStruc;
+ memset(&g_tempStruc, 0, sizeof(SCENE_STRUC));
+
+ g_tempStruc.numEntrance = READ_UINT32(p); p += sizeof(uint32);
+ g_tempStruc.numPoly = READ_UINT32(p); p += sizeof(uint32);
+ g_tempStruc.numTaggedActor = READ_UINT32(p); p += sizeof(uint32);
+ g_tempStruc.defRefer = READ_UINT32(p); p += sizeof(uint32);
+ g_tempStruc.hSceneScript = READ_UINT32(p); p += sizeof(uint32);
+ g_tempStruc.hEntrance = READ_UINT32(p); p += sizeof(uint32);
+ g_tempStruc.hPoly = READ_UINT32(p); p += sizeof(uint32);
+ g_tempStruc.hTaggedActor = READ_UINT32(p); p += sizeof(uint32);
+
+ return &g_tempStruc;
}
@@ -157,8 +157,8 @@ static void SceneTinselProcess(CORO_PARAM, const void *param) {
CORO_BEGIN_CODE(_ctx);
// The following myEscape value setting is used for enabling title screen skipping in DW1
- if (TinselV1 && (sceneCtr == 1)) initialMyEscape = GetEscEvents();
- _ctx->myEscape = (TinselV1 && (sceneCtr < 4)) ? initialMyEscape : 0;
+ if (TinselV1 && (g_sceneCtr == 1)) g_initialMyEscape = GetEscEvents();
+ _ctx->myEscape = (TinselV1 && (g_sceneCtr < 4)) ? g_initialMyEscape : 0;
// get the stuff copied to process when it was created
_ctx->pInit = (const TP_INIT *)param;
@@ -184,8 +184,8 @@ static void SceneTinselProcess(CORO_PARAM, const void *param) {
void SendSceneTinselProcess(TINSEL_EVENT event) {
SCENE_STRUC *ss;
- if (SceneHandle != (SCNHANDLE)NULL) {
- ss = (SCENE_STRUC *) FindChunk(SceneHandle, CHUNK_SCENE);
+ if (g_SceneHandle != (SCNHANDLE)NULL) {
+ ss = (SCENE_STRUC *) FindChunk(g_SceneHandle, CHUNK_SCENE);
if (ss->hSceneScript) {
TP_INIT init;
@@ -214,9 +214,9 @@ static void LoadScene(SCNHANDLE scene, int entry) {
const ENTRANCE_STRUC *es;
// Scene handle
- SceneHandle = scene; // Save scene handle in case of Save_Scene()
- LockMem(SceneHandle); // Make sure scene is loaded
- LockScene(SceneHandle); // Prevent current scene from being discarded
+ g_SceneHandle = scene; // Save scene handle in case of Save_Scene()
+ LockMem(g_SceneHandle); // Make sure scene is loaded
+ LockScene(g_SceneHandle); // Prevent current scene from being discarded
if (TinselV2) {
// CdPlay() stuff
@@ -307,9 +307,9 @@ static void LoadScene(SCNHANDLE scene, int entry) {
* Wrap up the last scene.
*/
void EndScene() {
- if (SceneHandle != 0) {
- UnlockScene(SceneHandle);
- SceneHandle = 0;
+ if (g_SceneHandle != 0) {
+ UnlockScene(g_SceneHandle);
+ g_SceneHandle = 0;
}
KillInventory(); // Close down any open inventory
@@ -409,7 +409,7 @@ void PrimeScene() {
g_scheduler->createProcess(PID_SCROLL, EffectPolyProcess, NULL, 0);
#ifdef DEBUG
- if (ShowPosition)
+ if (g_ShowPosition)
g_scheduler->createProcess(PID_POSITION, CursorPositionProcess, NULL, 0);
#endif
@@ -445,7 +445,7 @@ void StartNewScene(SCNHANDLE scene, int entry) {
*/
void setshowpos() {
- ShowPosition = true;
+ g_ShowPosition = true;
}
#endif
@@ -454,7 +454,7 @@ void setshowpos() {
*/
SCNHANDLE GetSceneHandle() {
- return SceneHandle;
+ return g_SceneHandle;
}
/**
diff --git a/engines/tinsel/sched.cpp b/engines/tinsel/sched.cpp
index d6cd806eb2..343758d924 100644
--- a/engines/tinsel/sched.cpp
+++ b/engines/tinsel/sched.cpp
@@ -47,11 +47,11 @@ struct PROCESS_STRUC {
// FIXME: Avoid non-const global vars
-static uint32 numSceneProcess;
-static SCNHANDLE hSceneProcess;
+static uint32 g_numSceneProcess;
+static SCNHANDLE g_hSceneProcess;
-static uint32 numGlobalProcess;
-static PROCESS_STRUC *pGlobalProcess;
+static uint32 g_numGlobalProcess;
+static PROCESS_STRUC *g_pGlobalProcess;
//--------------------- FUNCTIONS ------------------------
@@ -574,8 +574,8 @@ void RestoreSceneProcess(INT_CONTEXT *pic) {
uint32 i;
PROCESS_STRUC *pStruc;
- pStruc = (PROCESS_STRUC *)LockMem(hSceneProcess);
- for (i = 0; i < numSceneProcess; i++) {
+ pStruc = (PROCESS_STRUC *)LockMem(g_hSceneProcess);
+ for (i = 0; i < g_numSceneProcess; i++) {
if (FROM_LE_32(pStruc[i].hProcessCode) == pic->hCode) {
g_scheduler->createProcess(PID_PROCESS + i, RestoredProcessProcess,
&pic, sizeof(pic));
@@ -583,7 +583,7 @@ void RestoreSceneProcess(INT_CONTEXT *pic) {
}
}
- assert(i < numSceneProcess);
+ assert(i < g_numSceneProcess);
}
/**
@@ -602,8 +602,8 @@ void SceneProcessEvent(CORO_PARAM, uint32 procID, TINSEL_EVENT event, bool bWait
CORO_BEGIN_CODE(_ctx);
- _ctx->pStruc = (PROCESS_STRUC *)LockMem(hSceneProcess);
- for (i = 0; i < numSceneProcess; i++) {
+ _ctx->pStruc = (PROCESS_STRUC *)LockMem(g_hSceneProcess);
+ for (i = 0; i < g_numSceneProcess; i++) {
if (FROM_LE_32(_ctx->pStruc[i].processId) == procID) {
assert(_ctx->pStruc[i].hProcessCode); // Must have some code to run
@@ -624,7 +624,7 @@ void SceneProcessEvent(CORO_PARAM, uint32 procID, TINSEL_EVENT event, bool bWait
}
}
- if (i == numSceneProcess)
+ if (i == g_numSceneProcess)
return;
if (bWait) {
@@ -641,8 +641,8 @@ void KillSceneProcess(uint32 procID) {
uint32 i; // Loop counter
PROCESS_STRUC *pStruc;
- pStruc = (PROCESS_STRUC *) LockMem(hSceneProcess);
- for (i = 0; i < numSceneProcess; i++) {
+ pStruc = (PROCESS_STRUC *) LockMem(g_hSceneProcess);
+ for (i = 0; i < g_numSceneProcess; i++) {
if (FROM_LE_32(pStruc[i].processId) == procID) {
g_scheduler->killMatchingProcess(PID_PROCESS + i, -1);
break;
@@ -654,8 +654,8 @@ void KillSceneProcess(uint32 procID) {
* Register the scene processes in a scene.
*/
void SceneProcesses(uint32 numProcess, SCNHANDLE hProcess) {
- numSceneProcess = numProcess;
- hSceneProcess = hProcess;
+ g_numSceneProcess = numProcess;
+ g_hSceneProcess = hProcess;
}
@@ -669,15 +669,15 @@ void SceneProcesses(uint32 numProcess, SCNHANDLE hProcess) {
void RestoreGlobalProcess(INT_CONTEXT *pic) {
uint32 i; // Loop counter
- for (i = 0; i < numGlobalProcess; i++) {
- if (pGlobalProcess[i].hProcessCode == pic->hCode) {
+ for (i = 0; i < g_numGlobalProcess; i++) {
+ if (g_pGlobalProcess[i].hProcessCode == pic->hCode) {
g_scheduler->createProcess(PID_GPROCESS + i, RestoredProcessProcess,
&pic, sizeof(pic));
break;
}
}
- assert(i < numGlobalProcess);
+ assert(i < g_numGlobalProcess);
}
/**
@@ -685,7 +685,7 @@ void RestoreGlobalProcess(INT_CONTEXT *pic) {
*/
void KillGlobalProcesses() {
- for (uint32 i = 0; i < numGlobalProcess; ++i) {
+ for (uint32 i = 0; i < g_numGlobalProcess; ++i) {
g_scheduler->killMatchingProcess(PID_GPROCESS + i, -1);
}
}
@@ -706,12 +706,12 @@ bool GlobalProcessEvent(CORO_PARAM, uint32 procID, TINSEL_EVENT event, bool bWai
uint32 i; // Loop counter
_ctx->pProc = NULL;
- for (i = 0; i < numGlobalProcess; ++i) {
- if (pGlobalProcess[i].processId == procID) {
- assert(pGlobalProcess[i].hProcessCode); // Must have some code to run
+ for (i = 0; i < g_numGlobalProcess; ++i) {
+ if (g_pGlobalProcess[i].processId == procID) {
+ assert(g_pGlobalProcess[i].hProcessCode); // Must have some code to run
_ctx->pic = InitInterpretContext(GS_GPROCESS,
- pGlobalProcess[i].hProcessCode,
+ g_pGlobalProcess[i].hProcessCode,
event,
NOPOLY, // No polygon
0, // No actor
@@ -728,7 +728,7 @@ bool GlobalProcessEvent(CORO_PARAM, uint32 procID, TINSEL_EVENT event, bool bWai
}
}
- if ((i == numGlobalProcess) || (_ctx->pic == NULL))
+ if ((i == g_numGlobalProcess) || (_ctx->pic == NULL))
result = false;
else if (bWait)
CORO_INVOKE_ARGS_V(WaitInterpret, false, (CORO_SUBCTX, _ctx->pProc, &result));
@@ -743,8 +743,8 @@ bool GlobalProcessEvent(CORO_PARAM, uint32 procID, TINSEL_EVENT event, bool bWai
void xKillGlobalProcess(uint32 procID) {
uint32 i; // Loop counter
- for (i = 0; i < numGlobalProcess; ++i) {
- if (pGlobalProcess[i].processId == procID) {
+ for (i = 0; i < g_numGlobalProcess; ++i) {
+ if (g_pGlobalProcess[i].processId == procID) {
g_scheduler->killMatchingProcess(PID_GPROCESS + i, -1);
break;
}
@@ -755,13 +755,13 @@ void xKillGlobalProcess(uint32 procID) {
* Register the global processes list
*/
void GlobalProcesses(uint32 numProcess, byte *pProcess) {
- pGlobalProcess = new PROCESS_STRUC[numProcess];
- numGlobalProcess = numProcess;
+ g_pGlobalProcess = new PROCESS_STRUC[numProcess];
+ g_numGlobalProcess = numProcess;
byte *p = pProcess;
for (uint i = 0; i < numProcess; ++i, p += 8) {
- pGlobalProcess[i].processId = READ_LE_UINT32(p);
- pGlobalProcess[i].hProcessCode = READ_LE_UINT32(p + 4);
+ g_pGlobalProcess[i].processId = READ_LE_UINT32(p);
+ g_pGlobalProcess[i].hProcessCode = READ_LE_UINT32(p + 4);
}
}
@@ -769,9 +769,9 @@ void GlobalProcesses(uint32 numProcess, byte *pProcess) {
* Frees the global processes list
*/
void FreeGlobalProcesses() {
- delete[] pGlobalProcess;
- pGlobalProcess = 0;
- numGlobalProcess = 0;
+ delete[] g_pGlobalProcess;
+ g_pGlobalProcess = 0;
+ g_numGlobalProcess = 0;
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/scroll.cpp b/engines/tinsel/scroll.cpp
index d75e649be3..0a6a281d35 100644
--- a/engines/tinsel/scroll.cpp
+++ b/engines/tinsel/scroll.cpp
@@ -49,14 +49,14 @@ namespace Tinsel {
// FIXME: Avoid non-const global vars
-static int LeftScroll = 0, DownScroll = 0; // Number of iterations outstanding
+static int g_LeftScroll = 0, g_DownScroll = 0; // Number of iterations outstanding
-static int scrollActor = 0;
-static PMOVER pScrollMover = 0;
-static int oldx = 0, oldy = 0;
+static int g_scrollActor = 0;
+static PMOVER g_pScrollMover = 0;
+static int g_oldx = 0, g_oldy = 0;
/** Boundaries and numbers of boundaries */
-static SCROLLDATA sd = {
+static SCROLLDATA g_sd = {
{
{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0},
{0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}
@@ -77,28 +77,28 @@ static SCROLLDATA sd = {
0
};
-static int ImageH = 0, ImageW = 0;
+static int g_ImageH = 0, g_ImageW = 0;
-static bool ScrollCursor = 0; // If a TAG or EXIT polygon is clicked on,
+static bool g_ScrollCursor = 0; // If a TAG or EXIT polygon is clicked on,
// the cursor is kept over that polygon
// whilst scrolling
-static int scrollPixelsX = SCROLLPIXELS;
-static int scrollPixelsY = SCROLLPIXELS;
+static int g_scrollPixelsX = SCROLLPIXELS;
+static int g_scrollPixelsY = SCROLLPIXELS;
/**
* Reset the ScrollCursor flag
*/
void DontScrollCursor() {
- ScrollCursor = false;
+ g_ScrollCursor = false;
}
/**
* Set the ScrollCursor flag
*/
void DoScrollCursor() {
- ScrollCursor = true;
+ g_ScrollCursor = true;
}
/**
@@ -107,20 +107,20 @@ void DoScrollCursor() {
void SetNoScroll(int x1, int y1, int x2, int y2) {
if (x1 == x2) {
/* Vertical line */
- assert(sd.NumNoH < MAX_HNOSCROLL);
+ assert(g_sd.NumNoH < MAX_HNOSCROLL);
- sd.NoHScroll[sd.NumNoH].ln = x1; // X pos of vertical line
- sd.NoHScroll[sd.NumNoH].c1 = y1;
- sd.NoHScroll[sd.NumNoH].c2 = y2;
- sd.NumNoH++;
+ g_sd.NoHScroll[g_sd.NumNoH].ln = x1; // X pos of vertical line
+ g_sd.NoHScroll[g_sd.NumNoH].c1 = y1;
+ g_sd.NoHScroll[g_sd.NumNoH].c2 = y2;
+ g_sd.NumNoH++;
} else if (y1 == y2) {
/* Horizontal line */
- assert(sd.NumNoV < MAX_VNOSCROLL);
+ assert(g_sd.NumNoV < MAX_VNOSCROLL);
- sd.NoVScroll[sd.NumNoV].ln = y1; // Y pos of horizontal line
- sd.NoVScroll[sd.NumNoV].c1 = x1;
- sd.NoVScroll[sd.NumNoV].c2 = x2;
- sd.NumNoV++;
+ g_sd.NoVScroll[g_sd.NumNoV].ln = y1; // Y pos of horizontal line
+ g_sd.NoVScroll[g_sd.NumNoV].c1 = x1;
+ g_sd.NoVScroll[g_sd.NumNoV].c2 = x2;
+ g_sd.NumNoV++;
} else {
/* No-scroll lines must be horizontal or vertical */
}
@@ -144,21 +144,21 @@ static void NeedScroll(int direction) {
BottomLine = Toffset + (SCREEN_HEIGHT - 1);
RightCol = Loffset + (SCREEN_WIDTH - 1);
- for (i = 0; i < sd.NumNoH; i++) {
- if (RightCol >= sd.NoHScroll[i].ln - 1 && RightCol <= sd.NoHScroll[i].ln + 1 &&
- ((sd.NoHScroll[i].c1 >= Toffset && sd.NoHScroll[i].c1 <= BottomLine) ||
- (sd.NoHScroll[i].c2 >= Toffset && sd.NoHScroll[i].c2 <= BottomLine) ||
- (sd.NoHScroll[i].c1 < Toffset && sd.NoHScroll[i].c2 > BottomLine)))
+ for (i = 0; i < g_sd.NumNoH; i++) {
+ if (RightCol >= g_sd.NoHScroll[i].ln - 1 && RightCol <= g_sd.NoHScroll[i].ln + 1 &&
+ ((g_sd.NoHScroll[i].c1 >= Toffset && g_sd.NoHScroll[i].c1 <= BottomLine) ||
+ (g_sd.NoHScroll[i].c2 >= Toffset && g_sd.NoHScroll[i].c2 <= BottomLine) ||
+ (g_sd.NoHScroll[i].c1 < Toffset && g_sd.NoHScroll[i].c2 > BottomLine)))
return;
}
- if (LeftScroll <= 0) {
+ if (g_LeftScroll <= 0) {
if (TinselV2) {
- scrollPixelsX = sd.xSpeed;
- LeftScroll += sd.xDistance;
+ g_scrollPixelsX = g_sd.xSpeed;
+ g_LeftScroll += g_sd.xDistance;
} else {
- scrollPixelsX = SCROLLPIXELS;
- LeftScroll = RLSCROLL;
+ g_scrollPixelsX = SCROLLPIXELS;
+ g_LeftScroll = RLSCROLL;
}
}
break;
@@ -167,21 +167,21 @@ static void NeedScroll(int direction) {
BottomLine = Toffset + (SCREEN_HEIGHT - 1);
- for (i = 0; i < sd.NumNoH; i++) {
- if (Loffset >= sd.NoHScroll[i].ln - 1 && Loffset <= sd.NoHScroll[i].ln + 1 &&
- ((sd.NoHScroll[i].c1 >= Toffset && sd.NoHScroll[i].c1 <= BottomLine) ||
- (sd.NoHScroll[i].c2 >= Toffset && sd.NoHScroll[i].c2 <= BottomLine) ||
- (sd.NoHScroll[i].c1 < Toffset && sd.NoHScroll[i].c2 > BottomLine)))
+ for (i = 0; i < g_sd.NumNoH; i++) {
+ if (Loffset >= g_sd.NoHScroll[i].ln - 1 && Loffset <= g_sd.NoHScroll[i].ln + 1 &&
+ ((g_sd.NoHScroll[i].c1 >= Toffset && g_sd.NoHScroll[i].c1 <= BottomLine) ||
+ (g_sd.NoHScroll[i].c2 >= Toffset && g_sd.NoHScroll[i].c2 <= BottomLine) ||
+ (g_sd.NoHScroll[i].c1 < Toffset && g_sd.NoHScroll[i].c2 > BottomLine)))
return;
}
- if (LeftScroll >= 0) {
+ if (g_LeftScroll >= 0) {
if (TinselV2) {
- scrollPixelsX = sd.xSpeed;
- LeftScroll -= sd.xDistance;
+ g_scrollPixelsX = g_sd.xSpeed;
+ g_LeftScroll -= g_sd.xDistance;
} else {
- scrollPixelsX = SCROLLPIXELS;
- LeftScroll = -RLSCROLL;
+ g_scrollPixelsX = SCROLLPIXELS;
+ g_LeftScroll = -RLSCROLL;
}
}
break;
@@ -191,21 +191,21 @@ static void NeedScroll(int direction) {
BottomLine = Toffset + (SCREEN_HEIGHT - 1);
RightCol = Loffset + (SCREEN_WIDTH - 1);
- for (i = 0; i < sd.NumNoV; i++) {
- if ((BottomLine >= sd.NoVScroll[i].ln - 1 && BottomLine <= sd.NoVScroll[i].ln + 1) &&
- ((sd.NoVScroll[i].c1 >= Loffset && sd.NoVScroll[i].c1 <= RightCol) ||
- (sd.NoVScroll[i].c2 >= Loffset && sd.NoVScroll[i].c2 <= RightCol) ||
- (sd.NoVScroll[i].c1 < Loffset && sd.NoVScroll[i].c2 > RightCol)))
+ for (i = 0; i < g_sd.NumNoV; i++) {
+ if ((BottomLine >= g_sd.NoVScroll[i].ln - 1 && BottomLine <= g_sd.NoVScroll[i].ln + 1) &&
+ ((g_sd.NoVScroll[i].c1 >= Loffset && g_sd.NoVScroll[i].c1 <= RightCol) ||
+ (g_sd.NoVScroll[i].c2 >= Loffset && g_sd.NoVScroll[i].c2 <= RightCol) ||
+ (g_sd.NoVScroll[i].c1 < Loffset && g_sd.NoVScroll[i].c2 > RightCol)))
return;
}
- if (DownScroll <= 0) {
+ if (g_DownScroll <= 0) {
if (TinselV2) {
- scrollPixelsY = sd.ySpeed;
- DownScroll += sd.yDistance;
+ g_scrollPixelsY = g_sd.ySpeed;
+ g_DownScroll += g_sd.yDistance;
} else {
- scrollPixelsY = SCROLLPIXELS;
- DownScroll = UDSCROLL;
+ g_scrollPixelsY = SCROLLPIXELS;
+ g_DownScroll = UDSCROLL;
}
}
break;
@@ -214,21 +214,21 @@ static void NeedScroll(int direction) {
RightCol = Loffset + (SCREEN_WIDTH - 1);
- for (i = 0; i < sd.NumNoV; i++) {
- if (Toffset >= sd.NoVScroll[i].ln - 1 && Toffset <= sd.NoVScroll[i].ln + 1 &&
- ((sd.NoVScroll[i].c1 >= Loffset && sd.NoVScroll[i].c1 <= RightCol) ||
- (sd.NoVScroll[i].c2 >= Loffset && sd.NoVScroll[i].c2 <= RightCol) ||
- (sd.NoVScroll[i].c1 < Loffset && sd.NoVScroll[i].c2 > RightCol)))
+ for (i = 0; i < g_sd.NumNoV; i++) {
+ if (Toffset >= g_sd.NoVScroll[i].ln - 1 && Toffset <= g_sd.NoVScroll[i].ln + 1 &&
+ ((g_sd.NoVScroll[i].c1 >= Loffset && g_sd.NoVScroll[i].c1 <= RightCol) ||
+ (g_sd.NoVScroll[i].c2 >= Loffset && g_sd.NoVScroll[i].c2 <= RightCol) ||
+ (g_sd.NoVScroll[i].c1 < Loffset && g_sd.NoVScroll[i].c2 > RightCol)))
return;
}
- if (DownScroll >= 0) {
+ if (g_DownScroll >= 0) {
if (TinselV2) {
- scrollPixelsY = sd.ySpeed;
- DownScroll -= sd.yDistance;
+ g_scrollPixelsY = g_sd.ySpeed;
+ g_DownScroll -= g_sd.yDistance;
} else {
- scrollPixelsY = SCROLLPIXELS;
- DownScroll = -UDSCROLL;
+ g_scrollPixelsY = SCROLLPIXELS;
+ g_DownScroll = -UDSCROLL;
}
}
break;
@@ -249,39 +249,39 @@ static void ScrollImage() {
/*
* Keeping cursor on a tag?
*/
- if (ScrollCursor) {
+ if (g_ScrollCursor) {
GetCursorXYNoWait(&curX, &curY, true);
if (InPolygon(curX, curY, TAG) != NOPOLY || InPolygon(curX, curY, EXIT) != NOPOLY) {
OldLoffset = Loffset;
OldToffset = Toffset;
} else
- ScrollCursor = false;
+ g_ScrollCursor = false;
}
/*
* Horizontal scrolling
*/
- if (LeftScroll > 0) {
- LeftScroll -= scrollPixelsX;
- if (LeftScroll < 0) {
- Loffset += LeftScroll;
- LeftScroll = 0;
+ if (g_LeftScroll > 0) {
+ g_LeftScroll -= g_scrollPixelsX;
+ if (g_LeftScroll < 0) {
+ Loffset += g_LeftScroll;
+ g_LeftScroll = 0;
}
- Loffset += scrollPixelsX; // Move right
- if (Loffset > ImageW - SCREEN_WIDTH)
- Loffset = ImageW - SCREEN_WIDTH;// Now at extreme right
+ Loffset += g_scrollPixelsX; // Move right
+ if (Loffset > g_ImageW - SCREEN_WIDTH)
+ Loffset = g_ImageW - SCREEN_WIDTH;// Now at extreme right
/*** New feature to prop up rickety scroll boundaries ***/
if (TinselV2 && SysVar(SV_MaximumXoffset) && (Loffset > SysVar(SV_MaximumXoffset)))
Loffset = SysVar(SV_MaximumXoffset);
- } else if (LeftScroll < 0) {
- LeftScroll += scrollPixelsX;
- if (LeftScroll > 0) {
- Loffset += LeftScroll;
- LeftScroll = 0;
+ } else if (g_LeftScroll < 0) {
+ g_LeftScroll += g_scrollPixelsX;
+ if (g_LeftScroll > 0) {
+ Loffset += g_LeftScroll;
+ g_LeftScroll = 0;
}
- Loffset -= scrollPixelsX; // Move left
+ Loffset -= g_scrollPixelsX; // Move left
if (Loffset < 0)
Loffset = 0; // Now at extreme left
@@ -293,28 +293,28 @@ static void ScrollImage() {
/*
* Vertical scrolling
*/
- if (DownScroll > 0) {
- DownScroll -= scrollPixelsY;
- if (DownScroll < 0) {
- Toffset += DownScroll;
- DownScroll = 0;
+ if (g_DownScroll > 0) {
+ g_DownScroll -= g_scrollPixelsY;
+ if (g_DownScroll < 0) {
+ Toffset += g_DownScroll;
+ g_DownScroll = 0;
}
- Toffset += scrollPixelsY; // Move down
+ Toffset += g_scrollPixelsY; // Move down
- if (Toffset > ImageH - SCREEN_HEIGHT)
- Toffset = ImageH - SCREEN_HEIGHT;// Now at extreme bottom
+ if (Toffset > g_ImageH - SCREEN_HEIGHT)
+ Toffset = g_ImageH - SCREEN_HEIGHT;// Now at extreme bottom
/*** New feature to prop up rickety scroll boundaries ***/
if (TinselV2 && SysVar(SV_MaximumYoffset) && Toffset > SysVar(SV_MaximumYoffset))
Toffset = SysVar(SV_MaximumYoffset);
- } else if (DownScroll < 0) {
- DownScroll += scrollPixelsY;
- if (DownScroll > 0) {
- Toffset += DownScroll;
- DownScroll = 0;
+ } else if (g_DownScroll < 0) {
+ g_DownScroll += g_scrollPixelsY;
+ if (g_DownScroll > 0) {
+ Toffset += g_DownScroll;
+ g_DownScroll = 0;
}
- Toffset -= scrollPixelsY; // Move up
+ Toffset -= g_scrollPixelsY; // Move up
if (Toffset < 0)
Toffset = 0; // Now at extreme top
@@ -327,7 +327,7 @@ static void ScrollImage() {
/*
* Move cursor if keeping cursor on a tag.
*/
- if (ScrollCursor)
+ if (g_ScrollCursor)
AdjustCursorXY(OldLoffset - Loffset, OldToffset - Toffset);
PlayfieldSetPos(FIELD_WORLD, Loffset, Toffset);
@@ -345,12 +345,12 @@ static void MonitorScroll() {
/*
* Only do it if the actor is there and is visible
*/
- if (!pScrollMover || MoverHidden(pScrollMover) || !MoverIs(pScrollMover))
+ if (!g_pScrollMover || MoverHidden(g_pScrollMover) || !MoverIs(g_pScrollMover))
return;
- GetActorPos(scrollActor, &newx, &newy);
+ GetActorPos(g_scrollActor, &newx, &newy);
- if (oldx == newx && oldy == newy)
+ if (g_oldx == newx && g_oldy == newy)
return;
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
@@ -358,49 +358,49 @@ static void MonitorScroll() {
/*
* Approaching right side or left side of the screen?
*/
- if (newx > Loffset+SCREEN_WIDTH - RLDISTANCE && Loffset < ImageW - SCREEN_WIDTH) {
- if (newx > oldx)
+ if (newx > Loffset+SCREEN_WIDTH - RLDISTANCE && Loffset < g_ImageW - SCREEN_WIDTH) {
+ if (newx > g_oldx)
NeedScroll(LEFT);
} else if (newx < Loffset + RLDISTANCE && Loffset) {
- if (newx < oldx)
+ if (newx < g_oldx)
NeedScroll(RIGHT);
}
/*
* Approaching bottom or top of the screen?
*/
- if (newy > Toffset+SCREEN_HEIGHT-DDISTANCE && Toffset < ImageH-SCREEN_HEIGHT) {
- if (newy > oldy)
+ if (newy > Toffset+SCREEN_HEIGHT-DDISTANCE && Toffset < g_ImageH-SCREEN_HEIGHT) {
+ if (newy > g_oldy)
NeedScroll(UP);
- } else if (Toffset && newy < Toffset + UDISTANCE + GetActorBottom(scrollActor) - GetActorTop(scrollActor)) {
- if (newy < oldy)
+ } else if (Toffset && newy < Toffset + UDISTANCE + GetActorBottom(g_scrollActor) - GetActorTop(g_scrollActor)) {
+ if (newy < g_oldy)
NeedScroll(DOWN);
}
- oldx = newx;
- oldy = newy;
+ g_oldx = newx;
+ g_oldy = newy;
}
static void RestoreScrollDefaults() {
- sd.xTrigger = SysVar(SV_SCROLL_XTRIGGER);
- sd.xDistance = SysVar(SV_SCROLL_XDISTANCE);
- sd.xSpeed = SysVar(SV_SCROLL_XSPEED);
- sd.yTriggerTop = SysVar(SV_SCROLL_YTRIGGERTOP);
- sd.yTriggerBottom= SysVar(SV_SCROLL_YTRIGGERBOT);
- sd.yDistance = SysVar(SV_SCROLL_YDISTANCE);
- sd.ySpeed = SysVar(SV_SCROLL_YSPEED);
+ g_sd.xTrigger = SysVar(SV_SCROLL_XTRIGGER);
+ g_sd.xDistance = SysVar(SV_SCROLL_XDISTANCE);
+ g_sd.xSpeed = SysVar(SV_SCROLL_XSPEED);
+ g_sd.yTriggerTop = SysVar(SV_SCROLL_YTRIGGERTOP);
+ g_sd.yTriggerBottom= SysVar(SV_SCROLL_YTRIGGERBOT);
+ g_sd.yDistance = SysVar(SV_SCROLL_YDISTANCE);
+ g_sd.ySpeed = SysVar(SV_SCROLL_YSPEED);
}
/**
* Does the obvious - called at the end of a scene.
*/
void DropScroll() {
- sd.NumNoH = sd.NumNoV = 0;
+ g_sd.NumNoH = g_sd.NumNoV = 0;
if (TinselV2) {
- LeftScroll = DownScroll = 0; // No iterations outstanding
- oldx = oldy = 0;
- scrollPixelsX = sd.xSpeed;
- scrollPixelsY = sd.ySpeed;
+ g_LeftScroll = g_DownScroll = 0; // No iterations outstanding
+ g_oldx = g_oldy = 0;
+ g_scrollPixelsX = g_sd.xSpeed;
+ g_scrollPixelsY = g_sd.ySpeed;
RestoreScrollDefaults();
}
}
@@ -420,28 +420,28 @@ void ScrollProcess(CORO_PARAM, const void *) {
while (!GetBgObject())
CORO_SLEEP(1);
- ImageH = BgHeight(); // Dimensions
- ImageW = BgWidth(); // of this scene.
+ g_ImageH = BgHeight(); // Dimensions
+ g_ImageW = BgWidth(); // of this scene.
// Give up if there'll be no purpose in this process
- if (ImageW == SCREEN_WIDTH && ImageH == SCREEN_HEIGHT)
+ if (g_ImageW == SCREEN_WIDTH && g_ImageH == SCREEN_HEIGHT)
CORO_KILL_SELF();
if (!TinselV2) {
- LeftScroll = DownScroll = 0; // No iterations outstanding
- oldx = oldy = 0;
- scrollPixelsX = scrollPixelsY = SCROLLPIXELS;
+ g_LeftScroll = g_DownScroll = 0; // No iterations outstanding
+ g_oldx = g_oldy = 0;
+ g_scrollPixelsX = g_scrollPixelsY = SCROLLPIXELS;
}
- if (!scrollActor)
- scrollActor = GetLeadId();
+ if (!g_scrollActor)
+ g_scrollActor = GetLeadId();
- pScrollMover = GetMover(scrollActor);
+ g_pScrollMover = GetMover(g_scrollActor);
while (1) {
MonitorScroll(); // Set scroll requirement
- if (LeftScroll || DownScroll) // Scroll if required
+ if (g_LeftScroll || g_DownScroll) // Scroll if required
ScrollImage();
CORO_SLEEP(1); // allow re-scheduling
@@ -454,11 +454,11 @@ void ScrollProcess(CORO_PARAM, const void *) {
* Change which actor the camera is following.
*/
void ScrollFocus(int ano) {
- if (scrollActor != ano) {
- oldx = oldy = 0;
- scrollActor = ano;
+ if (g_scrollActor != ano) {
+ g_oldx = g_oldy = 0;
+ g_scrollActor = ano;
- pScrollMover = ano ? GetMover(scrollActor) : NULL;
+ g_pScrollMover = ano ? GetMover(g_scrollActor) : NULL;
}
}
@@ -466,7 +466,7 @@ void ScrollFocus(int ano) {
* Returns the actor which the camera is following
*/
int GetScrollFocus() {
- return scrollActor;
+ return g_scrollActor;
}
@@ -476,29 +476,29 @@ int GetScrollFocus() {
void ScrollTo(int x, int y, int xIter, int yIter) {
int Loffset, Toffset; // for background offsets
- scrollPixelsX = xIter != 0 ? xIter : (TinselV2 ? sd.xSpeed : SCROLLPIXELS);
- scrollPixelsY = yIter != 0 ? yIter : (TinselV2 ? sd.ySpeed : SCROLLPIXELS);
+ g_scrollPixelsX = xIter != 0 ? xIter : (TinselV2 ? g_sd.xSpeed : SCROLLPIXELS);
+ g_scrollPixelsY = yIter != 0 ? yIter : (TinselV2 ? g_sd.ySpeed : SCROLLPIXELS);
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset); // get background offsets
- LeftScroll = x - Loffset;
- DownScroll = y - Toffset;
+ g_LeftScroll = x - Loffset;
+ g_DownScroll = y - Toffset;
}
/**
* Kill of any current scroll.
*/
void KillScroll() {
- LeftScroll = DownScroll = 0;
+ g_LeftScroll = g_DownScroll = 0;
}
void GetNoScrollData(SCROLLDATA *ssd) {
- memcpy(ssd, &sd, sizeof(SCROLLDATA));
+ memcpy(ssd, &g_sd, sizeof(SCROLLDATA));
}
void RestoreNoScrollData(SCROLLDATA *ssd) {
- memcpy(&sd, ssd, sizeof(SCROLLDATA));
+ memcpy(&g_sd, ssd, sizeof(SCROLLDATA));
}
/**
@@ -512,24 +512,24 @@ void SetScrollParameters(int xTrigger, int xDistance, int xSpeed, int yTriggerTo
RestoreScrollDefaults();
} else {
if (xTrigger)
- sd.xTrigger = xTrigger;
+ g_sd.xTrigger = xTrigger;
if (xDistance)
- sd.xDistance = xDistance;
+ g_sd.xDistance = xDistance;
if (xSpeed)
- sd.xSpeed = xSpeed;
+ g_sd.xSpeed = xSpeed;
if (yTriggerTop)
- sd.yTriggerTop = yTriggerTop;
+ g_sd.yTriggerTop = yTriggerTop;
if (yTriggerBottom)
- sd.yTriggerBottom = yTriggerBottom;
+ g_sd.yTriggerBottom = yTriggerBottom;
if (yDistance)
- sd.yDistance = yDistance;
+ g_sd.yDistance = yDistance;
if (ySpeed)
- sd.ySpeed = ySpeed;
+ g_sd.ySpeed = ySpeed;
}
}
bool IsScrolling() {
- return (LeftScroll || DownScroll);
+ return (g_LeftScroll || g_DownScroll);
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/scroll.h b/engines/tinsel/scroll.h
index 62562b20b2..bcdc15cda6 100644
--- a/engines/tinsel/scroll.h
+++ b/engines/tinsel/scroll.h
@@ -28,9 +28,9 @@ namespace Tinsel {
#define SCROLLPIXELS 8 // Number of pixels to scroll per iteration
// Distance from edge that triggers a scroll
-#define RLDISTANCE (TinselV2 ? sd.xTrigger : 50)
-#define UDISTANCE (TinselV2 ? sd.yTriggerTop : 20)
-#define DDISTANCE (TinselV2 ? sd.yTriggerBottom : 20)
+#define RLDISTANCE (TinselV2 ? g_sd.xTrigger : 50)
+#define UDISTANCE (TinselV2 ? g_sd.yTriggerTop : 20)
+#define DDISTANCE (TinselV2 ? g_sd.yTriggerBottom : 20)
// Number of iterations to make
#define RLSCROLL 160 // 20*8 = 160 = half a screen
diff --git a/engines/tinsel/sound.cpp b/engines/tinsel/sound.cpp
index 130928d885..f575b03270 100644
--- a/engines/tinsel/sound.cpp
+++ b/engines/tinsel/sound.cpp
@@ -49,7 +49,7 @@
namespace Tinsel {
-extern LANGUAGE sampleLanguage;
+extern LANGUAGE g_sampleLanguage;
//--------------------------- General data ----------------------------------
@@ -99,12 +99,12 @@ bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::Sound
// move to correct position in the sample file
_sampleStream.seek(dwSampleIndex);
if (_sampleStream.eos() || _sampleStream.err() || (uint32)_sampleStream.pos() != dwSampleIndex)
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
// read the length of the sample
uint32 sampleLen = _sampleStream.readUint32();
if (_sampleStream.eos() || _sampleStream.err())
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
if (TinselV1PSX) {
// Read the stream and create a XA ADPCM audio stream
@@ -124,7 +124,7 @@ bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::Sound
// read all of the sample
if (_sampleStream.read(sampleBuf, sampleLen) != sampleLen)
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
// FIXME: Should set this in a different place ;)
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, _vm->_config->_soundVolume);
@@ -254,12 +254,12 @@ bool SoundManager::playSample(int id, int sub, bool bLooped, int x, int y, int p
// move to correct position in the sample file
_sampleStream.seek(dwSampleIndex);
if (_sampleStream.eos() || _sampleStream.err() || (uint32)_sampleStream.pos() != dwSampleIndex)
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
// read the length of the sample
uint32 sampleLen = _sampleStream.readUint32();
if (_sampleStream.eos() || _sampleStream.err())
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
if (sampleLen & 0x80000000) {
// Has sub samples
@@ -273,11 +273,11 @@ bool SoundManager::playSample(int id, int sub, bool bLooped, int x, int y, int p
sampleLen = _sampleStream.readUint32();
_sampleStream.skip(sampleLen);
if (_sampleStream.eos() || _sampleStream.err())
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
}
sampleLen = _sampleStream.readUint32();
if (_sampleStream.eos() || _sampleStream.err())
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
}
debugC(DEBUG_DETAILED, kTinselDebugSound, "Playing sound %d.%d, %d bytes at %d (pan %d)", id, sub, sampleLen,
@@ -289,7 +289,7 @@ bool SoundManager::playSample(int id, int sub, bool bLooped, int x, int y, int p
// read all of the sample
if (_sampleStream.read(sampleBuf, sampleLen) != sampleLen)
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
Common::MemoryReadStream *compressedStream =
new Common::MemoryReadStream(sampleBuf, sampleLen, DisposeAfterUse::YES);
@@ -481,7 +481,7 @@ void SoundManager::openSampleFiles() {
return;
// open sample index file in binary mode
- if (f.open(_vm->getSampleIndex(sampleLanguage))) {
+ if (f.open(_vm->getSampleIndex(g_sampleLanguage))) {
// get length of index file
f.seek(0, SEEK_END); // move to end of file
_sampleIndexLen = f.pos(); // get file pointer
@@ -502,7 +502,7 @@ void SoundManager::openSampleFiles() {
// load data
if (f.read(_sampleIndex, _sampleIndexLen) != (uint32)_sampleIndexLen)
// file must be corrupt if we get to here
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
// close the file
f.close();
@@ -542,28 +542,28 @@ void SoundManager::openSampleFiles() {
_sampleIndex[0] = 0;
} else {
char buf[50];
- sprintf(buf, CANNOT_FIND_FILE, _vm->getSampleIndex(sampleLanguage));
+ sprintf(buf, CANNOT_FIND_FILE, _vm->getSampleIndex(g_sampleLanguage));
GUI::MessageDialog dialog(buf, "OK");
dialog.runModal();
- error(CANNOT_FIND_FILE, _vm->getSampleIndex(sampleLanguage));
+ error(CANNOT_FIND_FILE, _vm->getSampleIndex(g_sampleLanguage));
}
// open sample file in binary mode
- if (!_sampleStream.open(_vm->getSampleFile(sampleLanguage))) {
+ if (!_sampleStream.open(_vm->getSampleFile(g_sampleLanguage))) {
char buf[50];
- sprintf(buf, CANNOT_FIND_FILE, _vm->getSampleFile(sampleLanguage));
+ sprintf(buf, CANNOT_FIND_FILE, _vm->getSampleFile(g_sampleLanguage));
GUI::MessageDialog dialog(buf, "OK");
dialog.runModal();
- error(CANNOT_FIND_FILE, _vm->getSampleFile(sampleLanguage));
+ error(CANNOT_FIND_FILE, _vm->getSampleFile(g_sampleLanguage));
}
/*
// gen length of the largest sample
sampleBuffer.size = _sampleStream.readUint32LE();
if (_sampleStream.eos() || _sampleStream.err())
- error(FILE_IS_CORRUPT, _vm->getSampleFile(sampleLanguage));
+ error(FILE_IS_CORRUPT, _vm->getSampleFile(g_sampleLanguage));
*/
}
diff --git a/engines/tinsel/strres.cpp b/engines/tinsel/strres.cpp
index f3a7278993..5a29a4d2cd 100644
--- a/engines/tinsel/strres.cpp
+++ b/engines/tinsel/strres.cpp
@@ -38,11 +38,11 @@ namespace Tinsel {
#ifdef DEBUG
// Diagnostic number
-int newestString;
+int g_newestString;
#endif
// buffer for resource strings
-static uint8 *textBuffer = 0;
+static uint8 *g_textBuffer = 0;
static struct {
bool bPresent;
@@ -50,7 +50,7 @@ static struct {
SCNHANDLE hDescription;
SCNHANDLE hFlagFilm;
-} languages[NUM_LANGUAGES] = {
+} g_languages[NUM_LANGUAGES] = {
{ false, "English", 0, 0 },
{ false, "French", 0, 0 },
@@ -65,9 +65,9 @@ static struct {
// Set if we're handling 2-byte characters.
-bool bMultiByte = false;
+bool g_bMultiByte = false;
-LANGUAGE textLanguage, sampleLanguage = TXT_ENGLISH;
+LANGUAGE g_textLanguage, g_sampleLanguage = TXT_ENGLISH;
//----------------- LOCAL DEFINES ----------------------------
@@ -85,12 +85,12 @@ void ChangeLanguage(LANGUAGE newLang) {
TinselFile f;
uint32 textLen = 0; // length of buffer
- textLanguage = newLang;
- sampleLanguage = newLang;
+ g_textLanguage = newLang;
+ g_sampleLanguage = newLang;
// free the previous buffer
- free(textBuffer);
- textBuffer = NULL;
+ free(g_textBuffer);
+ g_textBuffer = NULL;
// Try and open the specified language file. If it fails, and the language
// isn't English, try falling back on opening 'english.txt' - some foreign
@@ -116,22 +116,22 @@ void ChangeLanguage(LANGUAGE newLang) {
if (textLen == CHUNK_STRING || textLen == CHUNK_MBSTRING) {
// the file is uncompressed
- bMultiByte = (textLen == CHUNK_MBSTRING);
+ g_bMultiByte = (textLen == CHUNK_MBSTRING);
// get length of uncompressed file
textLen = f.size();
f.seek(0, SEEK_SET); // Set to beginning of file
- if (textBuffer == NULL) {
+ if (g_textBuffer == NULL) {
// allocate a text buffer for the strings
- textBuffer = (uint8 *)malloc(textLen);
+ g_textBuffer = (uint8 *)malloc(textLen);
// make sure memory allocated
- assert(textBuffer);
+ assert(g_textBuffer);
}
// load data
- if (f.read(textBuffer, textLen) != textLen)
+ if (f.read(g_textBuffer, textLen) != textLen)
// file must be corrupt if we get to here
error(FILE_IS_CORRUPT, _vm->getTextFile(newLang));
@@ -147,7 +147,7 @@ void ChangeLanguage(LANGUAGE newLang) {
*/
static byte *FindStringBase(int id) {
// base of string resource table
- byte *pText = textBuffer;
+ byte *pText = g_textBuffer;
// For Tinsel 0, Ids are decremented by 1
if (TinselV0)
@@ -353,8 +353,8 @@ int SubStringCount(int id) {
void FreeTextBuffer() {
- free(textBuffer);
- textBuffer = NULL;
+ free(g_textBuffer);
+ g_textBuffer = NULL;
}
/**
@@ -364,29 +364,29 @@ void FreeTextBuffer() {
void LanguageFacts(int language, SCNHANDLE hDescription, SCNHANDLE hFlagFilm) {
assert(language >= 0 && language < NUM_LANGUAGES);
- languages[language].hDescription = hDescription;
- languages[language].hFlagFilm = hFlagFilm;
+ g_languages[language].hDescription = hDescription;
+ g_languages[language].hFlagFilm = hFlagFilm;
}
/**
* Gets the current subtitles language
*/
LANGUAGE TextLanguage() {
- return textLanguage;
+ return g_textLanguage;
}
/**
* Gets the current voice language
*/
LANGUAGE SampleLanguage() {
- return sampleLanguage;
+ return g_sampleLanguage;
}
int NumberOfLanguages() {
int i, count;
for (i = 0, count = 0; i < NUM_LANGUAGES; i++) {
- if (languages[i].bPresent)
+ if (g_languages[i].bPresent)
count++;
}
return count;
@@ -396,12 +396,12 @@ LANGUAGE NextLanguage(LANGUAGE thisOne) {
int i;
for (i = thisOne+1; i < NUM_LANGUAGES; i++) {
- if (languages[i].bPresent)
+ if (g_languages[i].bPresent)
return (LANGUAGE)i;
}
for (i = 0; i < thisOne; i++) {
- if (languages[i].bPresent)
+ if (g_languages[i].bPresent)
return (LANGUAGE)i;
}
@@ -413,12 +413,12 @@ LANGUAGE PrevLanguage(LANGUAGE thisOne) {
int i;
for (i = thisOne-1; i >= 0; i--) {
- if (languages[i].bPresent)
+ if (g_languages[i].bPresent)
return (LANGUAGE)i;
}
for (i = NUM_LANGUAGES-1; i > thisOne; i--) {
- if (languages[i].bPresent)
+ if (g_languages[i].bPresent)
return (LANGUAGE)i;
}
@@ -427,11 +427,11 @@ LANGUAGE PrevLanguage(LANGUAGE thisOne) {
}
SCNHANDLE LanguageDesc(LANGUAGE thisOne) {
- return languages[thisOne].hDescription;
+ return g_languages[thisOne].hDescription;
}
SCNHANDLE LanguageFlag(LANGUAGE thisOne) {
- return languages[thisOne].hFlagFilm;
+ return g_languages[thisOne].hFlagFilm;
}
} // End of namespace Tinsel
diff --git a/engines/tinsel/strres.h b/engines/tinsel/strres.h
index f6e86951b6..772896c81f 100644
--- a/engines/tinsel/strres.h
+++ b/engines/tinsel/strres.h
@@ -35,7 +35,7 @@ namespace Tinsel {
#define MAX_STRRES_SIZE 300000 // maximum size of string resource file
// Set if we're handling 2-byte characters.
-extern bool bMultiByte;
+extern bool g_bMultiByte;
/*----------------------------------------------------------------------*\
|* Function Prototypes *|
diff --git a/engines/tinsel/sysvar.cpp b/engines/tinsel/sysvar.cpp
index 88053f15c6..6ef4f165ab 100644
--- a/engines/tinsel/sysvar.cpp
+++ b/engines/tinsel/sysvar.cpp
@@ -43,7 +43,7 @@ extern int NewestSavedGame();
// FIXME: Avoid non-const global vars
-static int systemVars[SV_TOPVALID] = {
+static int g_systemVars[SV_TOPVALID] = {
INV_1, // Default inventory
@@ -105,7 +105,7 @@ static int systemVars[SV_TOPVALID] = {
0 // ISV_GHOST_COLOR
};
-static SCNHANDLE systemStrings[SS_MAX_VALID]; // FIXME: Avoid non-const global vars
+static SCNHANDLE g_systemStrings[SS_MAX_VALID]; // FIXME: Avoid non-const global vars
//static bool bFlagNoBlocking = false;
@@ -116,8 +116,8 @@ static SCNHANDLE systemStrings[SS_MAX_VALID]; // FIXME: Avoid non-const global v
*/
void InitSysVars() {
- systemVars[SV_SCROLL_XDISTANCE] = SCREEN_WIDTH / 2;
- systemVars[SV_SCROLL_YDISTANCE] = SCREEN_BOX_HEIGHT1 / 2;
+ g_systemVars[SV_SCROLL_XDISTANCE] = SCREEN_WIDTH / 2;
+ g_systemVars[SV_SCROLL_YDISTANCE] = SCREEN_BOX_HEIGHT1 / 2;
}
/**
@@ -138,7 +138,7 @@ void SetSysVar(int varId, int newValue) {
error("SetSystemVar(): read only identifier");
default:
- systemVars[varId] = newValue;
+ g_systemVars[varId] = newValue;
}
}
@@ -167,28 +167,28 @@ int SysVar(int varId) {
//return bDebuggingAllowed;
default:
- return systemVars[varId];
+ return g_systemVars[varId];
}
}
void SaveSysVars(int *pSv) {
- memcpy(pSv, systemVars, sizeof(systemVars));
+ memcpy(pSv, g_systemVars, sizeof(g_systemVars));
}
void RestoreSysVars(int *pSv) {
- memcpy(systemVars, pSv, sizeof(systemVars));
+ memcpy(g_systemVars, pSv, sizeof(g_systemVars));
}
void SetSysString(int number, SCNHANDLE hString) {
assert(number >= 0 && number < SS_MAX_VALID);
- systemStrings[number] = hString;
+ g_systemStrings[number] = hString;
}
SCNHANDLE SysString(int number) {
assert(number >= 0 && number < SS_MAX_VALID);
- return systemStrings[number];
+ return g_systemStrings[number];
}
/**
diff --git a/engines/tinsel/text.cpp b/engines/tinsel/text.cpp
index ecb1e153f3..5eb092d00d 100644
--- a/engines/tinsel/text.cpp
+++ b/engines/tinsel/text.cpp
@@ -25,7 +25,7 @@
#include "tinsel/graphics.h" // object plotting
#include "tinsel/handle.h"
#include "tinsel/sched.h" // process scheduler defines
-#include "tinsel/strres.h" // bMultiByte
+#include "tinsel/strres.h" // g_bMultiByte
#include "tinsel/text.h" // text defines
namespace Tinsel {
@@ -42,7 +42,7 @@ int StringLengthPix(char *szStr, const FONT *pFont) {
// while not end of string or end of line
for (strLen = 0; (c = *szStr) != EOS_CHAR && c != LF_CHAR; szStr++) {
- if (bMultiByte) {
+ if (g_bMultiByte) {
if (c & 0x80)
c = ((c & ~0x80) << 8) + *++szStr;
}
@@ -136,7 +136,7 @@ OBJECT *ObjectTextOut(OBJECT **pList, char *szStr, int color,
// repeat until end of string or end of line
while ((c = *szStr) != EOS_CHAR && c != LF_CHAR) {
- if (bMultiByte) {
+ if (g_bMultiByte) {
if (c & 0x80)
c = ((c & ~0x80) << 8) + *++szStr;
}
@@ -265,7 +265,7 @@ bool IsCharImage(SCNHANDLE hFont, char c) {
// Inventory save game name editor needs to be more clever for
// multi-byte characters. This bodge will stop it erring.
- if (bMultiByte && (c2 & 0x80))
+ if (g_bMultiByte && (c2 & 0x80))
return false;
// get font pointer
diff --git a/engines/tinsel/timers.cpp b/engines/tinsel/timers.cpp
index 1c3ff9b260..d3a7446565 100644
--- a/engines/tinsel/timers.cpp
+++ b/engines/tinsel/timers.cpp
@@ -49,7 +49,7 @@ struct TIMER {
//----------------- LOCAL GLOBAL DATA --------------------
-static TIMER timers[MAX_TIMERS]; // FIXME: Avoid non-const global vars
+static TIMER g_timers[MAX_TIMERS]; // FIXME: Avoid non-const global vars
//--------------------------------------------------------
@@ -72,7 +72,7 @@ uint32 DwGetCurrentTime() {
*/
void RebootTimers() {
- memset(timers, 0, sizeof(timers));
+ memset(g_timers, 0, sizeof(g_timers));
}
/**
@@ -80,11 +80,11 @@ void RebootTimers() {
*/
void syncTimerInfo(Common::Serializer &s) {
for (int i = 0; i < MAX_TIMERS; i++) {
- s.syncAsSint32LE(timers[i].tno);
- s.syncAsSint32LE(timers[i].ticks);
- s.syncAsSint32LE(timers[i].secs);
- s.syncAsSint32LE(timers[i].delta);
- s.syncAsSint32LE(timers[i].frame);
+ s.syncAsSint32LE(g_timers[i].tno);
+ s.syncAsSint32LE(g_timers[i].ticks);
+ s.syncAsSint32LE(g_timers[i].secs);
+ s.syncAsSint32LE(g_timers[i].delta);
+ s.syncAsSint32LE(g_timers[i].frame);
}
}
@@ -95,8 +95,8 @@ void syncTimerInfo(Common::Serializer &s) {
*/
static TIMER *findTimer(int num) {
for (int i = 0; i < MAX_TIMERS; i++) {
- if (timers[i].tno == num)
- return &timers[i];
+ if (g_timers[i].tno == num)
+ return &g_timers[i];
}
return NULL;
}
@@ -109,9 +109,9 @@ static TIMER *allocateTimer(int num) {
assert(!findTimer(num)); // Allocating already existant timer
for (int i = 0; i < MAX_TIMERS; i++) {
- if (!timers[i].tno) {
- timers[i].tno = num;
- return &timers[i];
+ if (!g_timers[i].tno) {
+ g_timers[i].tno = num;
+ return &g_timers[i];
}
}
@@ -123,23 +123,23 @@ static TIMER *allocateTimer(int num) {
*/
void FettleTimers() {
for (int i = 0; i < MAX_TIMERS; i++) {
- if (!timers[i].tno)
+ if (!g_timers[i].tno)
continue;
- timers[i].ticks += timers[i].delta; // Update tick value
+ g_timers[i].ticks += g_timers[i].delta; // Update tick value
- if (timers[i].frame) {
- if (timers[i].ticks < 0)
- timers[i].ticks = 0; // Have reached zero
+ if (g_timers[i].frame) {
+ if (g_timers[i].ticks < 0)
+ g_timers[i].ticks = 0; // Have reached zero
} else {
- if (timers[i].ticks < 0) {
- timers[i].ticks = ONE_SECOND;
- timers[i].secs--;
- if (timers[i].secs < 0)
- timers[i].secs = 0; // Have reached zero
- } else if (timers[i].ticks == ONE_SECOND) {
- timers[i].ticks = 0;
- timers[i].secs++; // Another second has passed
+ if (g_timers[i].ticks < 0) {
+ g_timers[i].ticks = ONE_SECOND;
+ g_timers[i].secs--;
+ if (g_timers[i].secs < 0)
+ g_timers[i].secs = 0; // Have reached zero
+ } else if (g_timers[i].ticks == ONE_SECOND) {
+ g_timers[i].ticks = 0;
+ g_timers[i].secs++; // Another second has passed
}
}
}
diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp
index 7fbec69cbf..c652abca25 100644
--- a/engines/tinsel/tinlib.cpp
+++ b/engines/tinsel/tinlib.cpp
@@ -74,11 +74,11 @@ namespace Tinsel {
//----------------- EXTERNAL GLOBAL DATA --------------------
// In DOS_DW.C
-extern bool bRestart; // restart flag - set to restart the game
-extern bool bHasRestarted; // Set after a restart
+extern bool g_bRestart; // restart flag - set to restart the game
+extern bool g_bHasRestarted; // Set after a restart
// In PCODE.CPP
-extern bool bNoPause;
+extern bool g_bNoPause;
// In DOS_MAIN.C
// TODO/FIXME: From dos_main.c: "Only used on PSX so far"
@@ -100,7 +100,7 @@ extern int NewestSavedGame();
// in SCENE.CPP
extern void setshowpos();
-extern int sceneCtr;
+extern int g_sceneCtr;
// in TINSEL.CPP
extern void SetCdChangeScene(SCNHANDLE hScene);
@@ -122,10 +122,10 @@ SCNHANDLE GetSceneHandle();
// FIXME: Avoid non-const global vars
-bool bEnableMenu;
+bool g_bEnableMenu;
-static bool bInstantScroll = false;
-static bool bEscapedCdPlay = false;
+static bool g_bInstantScroll = false;
+static bool g_bEscapedCdPlay = false;
//----------------- LOCAL DEFINES --------------------
@@ -298,13 +298,13 @@ static const MASTER_LIB_CODES DW2_CODES[] = {
// as it was at control(off).
// They are global so that MoveCursor(..) has a net effect if it
// precedes control(on).
-static int controlX = 0, controlY = 0;
+static int g_controlX = 0, g_controlY = 0;
-static int offtype = 0; // used by Control()
-static uint32 lastValue = 0; // used by RandomFn()
-static int scrollNumber = 0; // used by scroll()
+static int g_offtype = 0; // used by Control()
+static uint32 g_lastValue = 0; // used by RandomFn()
+static int g_scrollNumber = 0; // used by scroll()
-static bool bNotPointedRunning = false; // Used in Printobj and PrintObjPointed
+static bool g_bNotPointedRunning = false; // Used in Printobj and PrintObjPointed
//----------------- FORWARD REFERENCES --------------------
@@ -404,7 +404,7 @@ static void ScrollMonitorProcess(CORO_PARAM, const void *param) {
CORO_SLEEP(1);
// give up if have been superseded
- if (psm->thisScroll != scrollNumber)
+ if (psm->thisScroll != g_scrollNumber)
break;
// If ESCAPE is pressed...
@@ -706,7 +706,7 @@ static void CDload(SCNHANDLE start, SCNHANDLE next, int myEscape) {
if (TinselV2) {
if (myEscape && myEscape != GetEscEvents()) {
- bEscapedCdPlay = true;
+ g_bEscapedCdPlay = true;
return;
}
@@ -754,14 +754,14 @@ void Control(int param) {
}
// Tinsel 1 handling code
- bEnableMenu = false;
+ g_bEnableMenu = false;
switch (param) {
case CONTROL_STARTOFF:
GetControlToken(); // Take control
DisableTags(); // Switch off tags
DwHideCursor(); // Blank out cursor
- offtype = param;
+ g_offtype = param;
break;
case CONTROL_OFF:
@@ -771,17 +771,17 @@ void Control(int param) {
GetControlToken(); // Take control
DisableTags(); // Switch off tags
- GetCursorXYNoWait(&controlX, &controlY, true); // Store cursor position
+ GetCursorXYNoWait(&g_controlX, &g_controlY, true); // Store cursor position
// There may be a button timing out
GetToken(TOKEN_LEFT_BUT);
FreeToken(TOKEN_LEFT_BUT);
}
- if (offtype == CONTROL_STARTOFF)
- GetCursorXYNoWait(&controlX, &controlY, true); // Store cursor position
+ if (g_offtype == CONTROL_STARTOFF)
+ GetCursorXYNoWait(&g_controlX, &g_controlY, true); // Store cursor position
- offtype = param;
+ g_offtype = param;
if (param == CONTROL_OFF)
DwHideCursor(); // Blank out cursor
@@ -794,8 +794,8 @@ void Control(int param) {
break;
case CONTROL_ON:
- if (offtype != CONTROL_OFFV2 && offtype != CONTROL_STARTOFF)
- SetCursorXY(controlX, controlY);// ... where it was
+ if (g_offtype != CONTROL_OFFV2 && g_offtype != CONTROL_STARTOFF)
+ SetCursorXY(g_controlX, g_controlY);// ... where it was
FreeControlToken(); // Release control
@@ -1092,7 +1092,7 @@ static void DropEverything() {
* EnableMenu
*/
static void EnableMenu() {
- bEnableMenu = true;
+ g_bEnableMenu = true;
}
/**
@@ -1212,7 +1212,7 @@ static void HailScene(SCNHANDLE scene) {
* Returns TRUE if the game has been restarted, FALSE if not.
*/
static bool HasRestarted() {
- return bHasRestarted;
+ return g_bHasRestarted;
}
/**
@@ -1308,7 +1308,7 @@ static int IdleTime() {
* Set flag if InstantScroll(on), reset if InstantScroll(off)
*/
void InstantScroll(int onoff) {
- bInstantScroll = (onoff != 0);
+ g_bInstantScroll = (onoff != 0);
}
/**
@@ -1419,8 +1419,8 @@ static int LToffset(int lort) {
static void MoveCursor(int x, int y) {
SetCursorXY(x, y);
- controlX = x; // Save these values so that
- controlY = y; // control(on) doesn't undo this
+ g_controlX = x; // Save these values so that
+ g_controlY = y; // control(on) doesn't undo this
}
/**
@@ -1465,7 +1465,7 @@ void NewScene(CORO_PARAM, SCNHANDLE scene, int entrance, int transition) {
GetControl(CONTROL_STARTOFF);
if (TinselV1)
- ++sceneCtr;
+ ++g_sceneCtr;
// Prevent code subsequent to this call running before scene changes
if (g_scheduler->getCurrentPID() != PID_MASTER_SCR)
@@ -1541,8 +1541,8 @@ static void Play(CORO_PARAM, SCNHANDLE hFilm, int x, int y, int compit, int acto
// Don't do CDPlay() for now if already escaped
- if (bEscapedCdPlay) {
- bEscapedCdPlay = false;
+ if (g_bEscapedCdPlay) {
+ g_bEscapedCdPlay = false;
return;
}
@@ -1583,8 +1583,8 @@ static void Play(CORO_PARAM, SCNHANDLE hFilm, int x, int y, bool bComplete, int
assert(hFilm != 0);
// Don't do CdPlay() for now if already escaped
- if (bEscapedCdPlay) {
- bEscapedCdPlay = false;
+ if (g_bEscapedCdPlay) {
+ g_bEscapedCdPlay = false;
return;
}
@@ -2068,11 +2068,11 @@ static void PrintObj(CORO_PARAM, const SCNHANDLE hText, const INV_OBJECT *pinvo,
_ctx->myEscape = myEscape;
if (hText == (SCNHANDLE)-1) { // 'OFF'
- bNotPointedRunning = true;
+ g_bNotPointedRunning = true;
return;
}
if (hText == (SCNHANDLE)-2) { // 'ON'
- bNotPointedRunning = false;
+ g_bNotPointedRunning = false;
return;
}
@@ -2092,10 +2092,10 @@ static void PrintObj(CORO_PARAM, const SCNHANDLE hText, const INV_OBJECT *pinvo,
* POINT/other event PrintObj() arbitration...
*/
if (event != POINTED) {
- bNotPointedRunning = true; // Get POINTED text to die
+ g_bNotPointedRunning = true; // Get POINTED text to die
CORO_SLEEP(1); // Give it chance to
} else if (!TinselV2)
- bNotPointedRunning = false; // There may have been an OFF without an ON
+ g_bNotPointedRunning = false; // There may have been an OFF without an ON
// Make multi-ones escape
if (TinselV2 && (SubStringCount(hText) > 1) && !_ctx->myEscape)
@@ -2163,12 +2163,12 @@ static void PrintObj(CORO_PARAM, const SCNHANDLE hText, const INV_OBJECT *pinvo,
break;
// Give way to non-POINTED-generated text
- if (bNotPointedRunning) {
+ if (g_bNotPointedRunning) {
// Delete the text, and wait for the all-clear
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pText);
_ctx->pText = NULL;
- while (bNotPointedRunning)
+ while (g_bNotPointedRunning)
CORO_SLEEP(1);
GetCursorXY(&x, &y, false);
@@ -2262,7 +2262,7 @@ static void PrintObj(CORO_PARAM, const SCNHANDLE hText, const INV_OBJECT *pinvo,
// Let POINTED text back in if this is the last
if (event != POINTED)
- bNotPointedRunning = false;
+ g_bNotPointedRunning = false;
CORO_END_CODE;
}
@@ -2281,11 +2281,11 @@ static void PrintObjPointed(CORO_PARAM, const SCNHANDLE text, const INV_OBJECT *
break;
// Give way to non-POINTED-generated text
- if (bNotPointedRunning) {
+ if (g_bNotPointedRunning) {
// Delete the text, and wait for the all-clear
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), pText);
pText = NULL;
- while (bNotPointedRunning)
+ while (g_bNotPointedRunning)
CORO_SLEEP(1);
GetCursorXY(&x, &y, false);
@@ -2372,7 +2372,7 @@ static void PrintObjNonPointed(CORO_PARAM, const SCNHANDLE text, const OBJECT *p
}
} while (1);
- bNotPointedRunning = false; // Let POINTED text back in
+ g_bNotPointedRunning = false; // Let POINTED text back in
if (_ctx->took_control)
Control(CONTROL_ON); // Free control if we took it
@@ -2425,9 +2425,9 @@ static int RandomFn(int n1, int n2, int norpt) {
do {
value = n1 + _vm->getRandomNumber(n2 - n1);
- } while ((lastValue == value) && (norpt == RAND_NORPT) && (++i <= 10));
+ } while ((g_lastValue == value) && (norpt == RAND_NORPT) && (++i <= 10));
- lastValue = value;
+ g_lastValue = value;
return value;
}
@@ -2446,8 +2446,8 @@ void FnRestartGame() {
StopMidi();
StopSample();
- bRestart = true;
- sceneCtr = 0;
+ g_bRestart = true;
+ g_sceneCtr = 0;
}
/**
@@ -2554,15 +2554,15 @@ static void Scroll(CORO_PARAM, EXTREME extreme, int xp, int yp, int xIter, int y
CORO_BEGIN_CODE(_ctx);
- ++scrollNumber;
+ ++g_scrollNumber;
_ctx->x = xp;
_ctx->y = yp;
- if ((TinselV2 && bInstantScroll) || (escOn && myEscape != GetEscEvents())) {
+ if ((TinselV2 && g_bInstantScroll) || (escOn && myEscape != GetEscEvents())) {
// Instant completion!
Offset(extreme, _ctx->x, _ctx->y);
} else {
- _ctx->thisScroll = scrollNumber;
+ _ctx->thisScroll = g_scrollNumber;
if (TinselV2)
DecodeExtreme(extreme, &_ctx->x, &_ctx->y);
@@ -2581,7 +2581,7 @@ static void Scroll(CORO_PARAM, EXTREME extreme, int xp, int yp, int xIter, int y
}
// give up if have been superseded
- if (_ctx->thisScroll != scrollNumber)
+ if (_ctx->thisScroll != g_scrollNumber)
CORO_KILL_SELF();
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
@@ -2592,7 +2592,7 @@ static void Scroll(CORO_PARAM, EXTREME extreme, int xp, int yp, int xIter, int y
// Scroll is escapable even though we're not waiting for it
sm.x = _ctx->x;
sm.y = _ctx->y;
- sm.thisScroll = scrollNumber;
+ sm.thisScroll = g_scrollNumber;
sm.myEscape = myEscape;
g_scheduler->createProcess(PID_TCODE, ScrollMonitorProcess, &sm, sizeof(sm));
}
@@ -3410,8 +3410,8 @@ static void TalkOrSay(CORO_PARAM, SPEECH_TYPE speechType, SCNHANDLE hText, int x
if (TinselV2 && _ctx->bSample) {
// Kick off the sample now (perhaps with a delay)
- if (bNoPause)
- bNoPause = false;
+ if (g_bNoPause)
+ g_bNoPause = false;
else if (!IsDemo)
CORO_SLEEP(SysVar(SV_SPEECHDELAY));
@@ -4899,7 +4899,7 @@ int CallLibraryRoutine(CORO_PARAM, int operand, int32 *pp, const INT_CONTEXT *pi
case NOPAUSE:
// DW2 only
- bNoPause = true;
+ g_bNoPause = true;
return 0;
case NOSCROLL:
diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp
index cd0f9b9fa4..65900cc7f3 100644
--- a/engines/tinsel/tinsel.cpp
+++ b/engines/tinsel/tinsel.cpp
@@ -66,7 +66,7 @@ namespace Tinsel {
// In BG.CPP
extern void SetDoFadeIn(bool tf);
extern void DropBackground();
-extern const BACKGND *pCurBgnd;
+extern const BACKGND *g_pCurBgnd;
// In CURSOR.CPP
extern void CursorProcess(CORO_PARAM, const void *);
@@ -85,16 +85,16 @@ void SetNewScene(SCNHANDLE scene, int entrance, int transition);
// FIXME: Avoid non-const global vars
-bool bRestart = false;
-bool bHasRestarted = false;
-bool loadingFromGMM = false;
+bool g_bRestart = false;
+bool g_bHasRestarted = false;
+bool g_loadingFromGMM = false;
-static bool bCuttingScene = false;
+static bool g_bCuttingScene = false;
-static bool bChangingForRestore = false;
+static bool g_bChangingForRestore = false;
#ifdef DEBUG
-bool bFast; // set to make it go ludicrously fast
+bool g_bFast; // set to make it go ludicrously fast
#endif
//----------------- LOCAL GLOBAL DATA --------------------
@@ -105,14 +105,14 @@ struct Scene {
int trans; // Transition - not yet used
};
-static Scene NextScene = { 0, 0, 0 };
-static Scene HookScene = { 0, 0, 0 };
-static Scene DelayedScene = { 0, 0, 0 };
+static Scene g_NextScene = { 0, 0, 0 };
+static Scene g_HookScene = { 0, 0, 0 };
+static Scene g_DelayedScene = { 0, 0, 0 };
-static PROCESS *pMouseProcess = 0;
-static PROCESS *pKeyboardProcess = 0;
+static PROCESS *g_pMouseProcess = 0;
+static PROCESS *g_pKeyboardProcess = 0;
-static SCNHANDLE hCdChangeScene;
+static SCNHANDLE g_hCdChangeScene;
//----------------- LOCAL PROCEDURES --------------------
@@ -457,49 +457,49 @@ static void MasterScriptProcess(CORO_PARAM, const void *) {
* Store the facts pertaining to a scene change.
*/
void SetNewScene(SCNHANDLE scene, int entrance, int transition) {
- if (!bCuttingScene && TinselV2)
+ if (!g_bCuttingScene && TinselV2)
WrapScene();
// If we're loading from the GMM, load the scene as a delayed one
- if (loadingFromGMM) {
- DelayedScene.scene = scene;
- DelayedScene.entry = entrance;
- DelayedScene.trans = transition;
- loadingFromGMM = false;
+ if (g_loadingFromGMM) {
+ g_DelayedScene.scene = scene;
+ g_DelayedScene.entry = entrance;
+ g_DelayedScene.trans = transition;
+ g_loadingFromGMM = false;
return;
}
// If CD change will be required, stick in the scene change scene
if (CdNumber(scene) != GetCurrentCD()) {
// This scene gets delayed
- DelayedScene.scene = scene;
- DelayedScene.entry = entrance;
- DelayedScene.trans = transition;
+ g_DelayedScene.scene = scene;
+ g_DelayedScene.entry = entrance;
+ g_DelayedScene.trans = transition;
- NextScene.scene = hCdChangeScene;
- NextScene.entry = CdNumber(scene) - '0';
- NextScene.trans = TRANS_FADE;
+ g_NextScene.scene = g_hCdChangeScene;
+ g_NextScene.entry = CdNumber(scene) - '0';
+ g_NextScene.trans = TRANS_FADE;
return;
}
- if (HookScene.scene == 0 || bCuttingScene) {
+ if (g_HookScene.scene == 0 || g_bCuttingScene) {
// This scene comes next
- NextScene.scene = scene;
- NextScene.entry = entrance;
- NextScene.trans = transition;
+ g_NextScene.scene = scene;
+ g_NextScene.entry = entrance;
+ g_NextScene.trans = transition;
} else {
// This scene gets delayed
- DelayedScene.scene = scene;
- DelayedScene.entry = entrance;
- DelayedScene.trans = transition;
+ g_DelayedScene.scene = scene;
+ g_DelayedScene.entry = entrance;
+ g_DelayedScene.trans = transition;
// The hooked scene comes next
- NextScene.scene = HookScene.scene;
- NextScene.entry = HookScene.entry;
- NextScene.trans = HookScene.trans;
+ g_NextScene.scene = g_HookScene.scene;
+ g_NextScene.entry = g_HookScene.entry;
+ g_NextScene.trans = g_HookScene.trans;
- HookScene.scene = 0;
+ g_HookScene.scene = 0;
}
// Workaround for "Missing Red Dragon in square" bug in Discworld 1 PSX, act IV.
@@ -509,10 +509,10 @@ void SetNewScene(SCNHANDLE scene, int entrance, int transition) {
// I'm forcing the load of the right scene by checking that the player has (or has not) the
// right items: player must have Mambo the swamp dragon, and mustn't have fireworks (used on
// the swamp dragon previously to "load it up").
- if (TinselV1PSX && NextScene.scene == 0x1800000 && NextScene.entry == 2) {
+ if (TinselV1PSX && g_NextScene.scene == 0x1800000 && g_NextScene.entry == 2) {
if ((IsInInventory(261, INV_1) || IsInInventory(261, INV_2)) &&
(!IsInInventory(232, INV_1) && !IsInInventory(232, INV_2)))
- NextScene.entry = 1;
+ g_NextScene.entry = 1;
}
}
@@ -520,72 +520,72 @@ void SetNewScene(SCNHANDLE scene, int entrance, int transition) {
* Store a scene as hooked
*/
void SetHookScene(SCNHANDLE scene, int entrance, int transition) {
- assert(HookScene.scene == 0); // scene already hooked
+ assert(g_HookScene.scene == 0); // scene already hooked
- HookScene.scene = scene;
- HookScene.entry = entrance;
- HookScene.trans = transition;
+ g_HookScene.scene = scene;
+ g_HookScene.entry = entrance;
+ g_HookScene.trans = transition;
}
/**
* Hooked scene is over, trigger a change to the delayed scene
*/
void UnHookScene() {
- assert(DelayedScene.scene != 0); // no scene delayed
+ assert(g_DelayedScene.scene != 0); // no scene delayed
// The delayed scene can go now
- NextScene.scene = DelayedScene.scene;
- NextScene.entry = DelayedScene.entry;
- NextScene.trans = DelayedScene.trans;
+ g_NextScene.scene = g_DelayedScene.scene;
+ g_NextScene.entry = g_DelayedScene.entry;
+ g_NextScene.trans = g_DelayedScene.trans;
- DelayedScene.scene = 0;
+ g_DelayedScene.scene = 0;
}
void SuspendHook() {
- bCuttingScene = true;
+ g_bCuttingScene = true;
}
void CdHasChanged() {
- if (bChangingForRestore) {
- bChangingForRestore = false;
+ if (g_bChangingForRestore) {
+ g_bChangingForRestore = false;
RestoreGame(-2);
} else {
- assert(DelayedScene.scene != 0);
+ assert(g_DelayedScene.scene != 0);
WrapScene();
// The delayed scene can go now
- NextScene.scene = DelayedScene.scene;
- NextScene.entry = DelayedScene.entry;
- NextScene.trans = DelayedScene.trans;
+ g_NextScene.scene = g_DelayedScene.scene;
+ g_NextScene.entry = g_DelayedScene.entry;
+ g_NextScene.trans = g_DelayedScene.trans;
- DelayedScene.scene = 0;
+ g_DelayedScene.scene = 0;
}
}
void SetCdChangeScene(SCNHANDLE hScene) {
- hCdChangeScene = hScene;
+ g_hCdChangeScene = hScene;
}
void CDChangeForRestore(int cdNumber) {
- NextScene.scene = hCdChangeScene;
- NextScene.entry = cdNumber;
- NextScene.trans = TRANS_FADE;
- bChangingForRestore = true;
+ g_NextScene.scene = g_hCdChangeScene;
+ g_NextScene.entry = cdNumber;
+ g_NextScene.trans = TRANS_FADE;
+ g_bChangingForRestore = true;
}
void UnSuspendHook() {
- bCuttingScene = false;
+ g_bCuttingScene = false;
}
void syncSCdata(Common::Serializer &s) {
- s.syncAsUint32LE(HookScene.scene);
- s.syncAsSint32LE(HookScene.entry);
- s.syncAsSint32LE(HookScene.trans);
+ s.syncAsUint32LE(g_HookScene.scene);
+ s.syncAsSint32LE(g_HookScene.entry);
+ s.syncAsSint32LE(g_HookScene.trans);
- s.syncAsUint32LE(DelayedScene.scene);
- s.syncAsSint32LE(DelayedScene.entry);
- s.syncAsSint32LE(DelayedScene.trans);
+ s.syncAsUint32LE(g_DelayedScene.scene);
+ s.syncAsSint32LE(g_DelayedScene.entry);
+ s.syncAsSint32LE(g_DelayedScene.trans);
}
@@ -640,16 +640,16 @@ bool ChangeScene(bool bReset) {
// Prevent attempt to fade-out when restarting game
if (bReset) {
CountOut = 1; // immediate start of first scene again
- DelayedScene.scene = HookScene.scene = 0;
+ g_DelayedScene.scene = g_HookScene.scene = 0;
return false;
}
if (IsRestoringScene())
return true;
- if (NextScene.scene != 0) {
+ if (g_NextScene.scene != 0) {
if (!CountOut) {
- switch (NextScene.trans) {
+ switch (g_NextScene.trans) {
case TRANS_CUT:
CountOut = 1;
break;
@@ -667,10 +667,10 @@ bool ChangeScene(bool bReset) {
if (!TinselV2)
ClearScreen();
- StartNewScene(NextScene.scene, NextScene.entry);
- NextScene.scene = 0;
+ StartNewScene(g_NextScene.scene, g_NextScene.entry);
+ g_NextScene.scene = 0;
- switch (NextScene.trans) {
+ switch (g_NextScene.trans) {
case TRANS_CUT:
SetDoFadeIn(false);
break;
@@ -691,7 +691,7 @@ bool ChangeScene(bool bReset) {
* CuttingScene
*/
void CuttingScene(bool bCutting) {
- bCuttingScene = bCutting;
+ g_bCuttingScene = bCutting;
if (!bCutting)
WrapScene();
@@ -927,7 +927,7 @@ Common::Error TinselEngine::run() {
RebootTimers();
RebootScalingReels();
- DelayedScene.scene = HookScene.scene = 0;
+ g_DelayedScene.scene = g_HookScene.scene = 0;
#endif
// Load in text strings
@@ -957,7 +957,7 @@ Common::Error TinselEngine::run() {
if (ConfMan.hasKey("save_slot")) {
if (loadGameState(ConfMan.getInt("save_slot")).getCode() == Common::kNoError)
- loadingFromGMM = true;
+ g_loadingFromGMM = true;
}
// Foreground loop
@@ -973,10 +973,10 @@ Common::Error TinselEngine::run() {
NextGameCycle();
}
- if (bRestart) {
+ if (g_bRestart) {
RestartGame();
- bRestart = false;
- bHasRestarted = true; // Set restarted flag
+ g_bRestart = false;
+ g_bHasRestarted = true; // Set restarted flag
}
// Save/Restore scene file transfers
@@ -986,7 +986,7 @@ Common::Error TinselEngine::run() {
_bmv->FettleBMV();
#ifdef DEBUG
- if (bFast)
+ if (g_bFast)
continue; // run flat-out
#endif
// Loop processing events while there are any pending
@@ -1005,7 +1005,7 @@ Common::Error TinselEngine::run() {
_vm->_config->writeToDisk();
EndScene();
- pCurBgnd = NULL;
+ g_pCurBgnd = NULL;
return Common::kNoError;
}
@@ -1106,7 +1106,7 @@ void TinselEngine::RestartGame() {
RebootTimers();
RebootScalingReels();
- DelayedScene.scene = HookScene.scene = 0;
+ g_DelayedScene.scene = g_HookScene.scene = 0;
// remove keyboard, mouse and joystick drivers
ChopDrivers();
@@ -1135,8 +1135,8 @@ void TinselEngine::RestartDrivers() {
_scheduler->reset();
// init the event handlers
- pMouseProcess = _scheduler->createProcess(PID_MOUSE, MouseProcess, NULL, 0);
- pKeyboardProcess = _scheduler->createProcess(PID_KEYBOARD, KeyboardProcess, NULL, 0);
+ g_pMouseProcess = _scheduler->createProcess(PID_MOUSE, MouseProcess, NULL, 0);
+ g_pKeyboardProcess = _scheduler->createProcess(PID_KEYBOARD, KeyboardProcess, NULL, 0);
// open MIDI files
OpenMidiFiles();
@@ -1164,8 +1164,8 @@ void TinselEngine::ChopDrivers() {
DeleteMidiBuffer();
// remove event drivers
- _scheduler->killProcess(pMouseProcess);
- _scheduler->killProcess(pKeyboardProcess);
+ _scheduler->killProcess(g_pMouseProcess);
+ _scheduler->killProcess(g_pKeyboardProcess);
}
/**
diff --git a/engines/tinsel/token.cpp b/engines/tinsel/token.cpp
index c7490a100b..c26fa40466 100644
--- a/engines/tinsel/token.cpp
+++ b/engines/tinsel/token.cpp
@@ -34,7 +34,7 @@ struct Token {
PROCESS *proc;
};
-static Token tokens[NUMTOKENS]; // FIXME: Avoid non-const global vars
+static Token g_tokens[NUMTOKENS]; // FIXME: Avoid non-const global vars
/**
@@ -44,8 +44,8 @@ static void TerminateProcess(PROCESS *tProc) {
// Release tokens held by the process
for (int i = 0; i < NUMTOKENS; i++) {
- if (tokens[i].proc == tProc) {
- tokens[i].proc = NULL;
+ if (g_tokens[i].proc == tProc) {
+ g_tokens[i].proc = NULL;
}
}
@@ -59,8 +59,8 @@ static void TerminateProcess(PROCESS *tProc) {
void GetControlToken() {
const int which = TOKEN_CONTROL;
- if (tokens[which].proc == NULL) {
- tokens[which].proc = g_scheduler->getCurrentProcess();
+ if (g_tokens[which].proc == NULL) {
+ g_tokens[which].proc = g_scheduler->getCurrentProcess();
}
}
@@ -69,7 +69,7 @@ void GetControlToken() {
*/
void FreeControlToken() {
// Allow anyone to free TOKEN_CONTROL
- tokens[TOKEN_CONTROL].proc = NULL;
+ g_tokens[TOKEN_CONTROL].proc = NULL;
}
@@ -84,12 +84,12 @@ void FreeControlToken() {
void GetToken(int which) {
assert(TOKEN_LEAD <= which && which < NUMTOKENS);
- if (tokens[which].proc != NULL) {
- assert(tokens[which].proc != g_scheduler->getCurrentProcess());
- TerminateProcess(tokens[which].proc);
+ if (g_tokens[which].proc != NULL) {
+ assert(g_tokens[which].proc != g_scheduler->getCurrentProcess());
+ TerminateProcess(g_tokens[which].proc);
}
- tokens[which].proc = g_scheduler->getCurrentProcess();
+ g_tokens[which].proc = g_scheduler->getCurrentProcess();
}
/**
@@ -99,9 +99,9 @@ void GetToken(int which) {
void FreeToken(int which) {
assert(TOKEN_LEAD <= which && which < NUMTOKENS);
- assert(tokens[which].proc == g_scheduler->getCurrentProcess()); // we'd have been killed if some other proc had taken this token
+ assert(g_tokens[which].proc == g_scheduler->getCurrentProcess()); // we'd have been killed if some other proc had taken this token
- tokens[which].proc = NULL;
+ g_tokens[which].proc = NULL;
}
/**
@@ -111,7 +111,7 @@ bool TestToken(int which) {
if (which < 0 || which >= NUMTOKENS)
return false;
- return (tokens[which].proc == NULL);
+ return (g_tokens[which].proc == NULL);
}
/**
@@ -119,7 +119,7 @@ bool TestToken(int which) {
*/
void FreeAllTokens() {
for (int i = 0; i < NUMTOKENS; i++) {
- tokens[i].proc = NULL;
+ g_tokens[i].proc = NULL;
}
}
diff --git a/engines/touche/graphics.h b/engines/touche/graphics.h
index 4b769b0a66..5b2ea39a24 100644
--- a/engines/touche/graphics.h
+++ b/engines/touche/graphics.h
@@ -23,7 +23,7 @@
#ifndef TOUCHE_GRAPHICS_H
#define TOUCHE_GRAPHICS_H
-#include "common/util.h"
+#include "common/language.h"
namespace Touche {
diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
index eef48ad58e..3aef18f4f0 100644
--- a/engines/tsage/blue_force/blueforce_logic.cpp
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -733,7 +733,7 @@ void SceneExt::remove() {
_action->_endHandler = NULL;
_action->remove();
}
-
+
_focusObject = NULL;
}
@@ -1326,7 +1326,7 @@ bool BlueForceInvObjectList::SelectItem(int objectNumber) {
AmmoBeltDialog *dlg = new AmmoBeltDialog();
dlg->execute();
delete dlg;
-
+
return true;
}
@@ -1408,7 +1408,7 @@ void SceneMessage::signal() {
}
void SceneMessage::process(Event &event) {
- if ((event.eventType == EVENT_BUTTON_DOWN) ||
+ if ((event.eventType == EVENT_BUTTON_DOWN) ||
((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_RETURN))) {
signal();
}
@@ -1439,7 +1439,7 @@ void SceneMessage::draw() {
void SceneMessage::clear() {
// Fade out the text display
- static const uint32 black = 0;
+ static const uint32 black = 0;
BF_GLOBALS._scenePalette.fade((const byte *)&black, false, 100);
// Refresh the background
diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp
index c067cd87ea..9f1e9ce36e 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes1.cpp
@@ -430,7 +430,7 @@ void Scene110::Action1::signal() {
case 6:
// Play "Vroum"
scene->_sound.play(31);
- // The guy starts the engine
+ // The guy starts the engine
scene->_object4.setStrip(3);
scene->_object4._frame = 1;
scene->_object4.animate(ANIM_MODE_5, NULL);
@@ -837,7 +837,7 @@ void Scene110::postInit(SceneObjectList *OwnerList) {
_object10._moveDiff.y = 10;
_object10.setPosition(_object9._position);
_object10.hide();
-
+
setAction(&_action1);
}
/*--------------------------------------------------------------------------
@@ -987,7 +987,7 @@ void Scene114::signal() {
*--------------------------------------------------------------------------*/
bool Scene115::Kate::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
-
+
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 8, SET_WIDTH, 312,
@@ -1061,7 +1061,7 @@ bool Scene115::Kate::startAction(CursorType action, Event &event) {
bool Scene115::Tony::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
-
+
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 7, SET_WIDTH, 312,
@@ -1164,7 +1164,7 @@ bool Scene115::Tony::startAction(CursorType action, Event &event) {
bool Scene115::Object3::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
-
+
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 9, SET_WIDTH, 312,
@@ -1195,7 +1195,7 @@ bool Scene115::Object3::startAction(CursorType action, Event &event) {
bool Scene115::Object4::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
-
+
switch (action) {
case CURSOR_LOOK:
SceneItem::display(115, 42, SET_WIDTH, 312,
@@ -1217,7 +1217,7 @@ bool Scene115::Object4::startAction(CursorType action, Event &event) {
void Scene115::Jukebox::signal() {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
-
+
if (_jokeboxPlayingCtr == 2)
_jokeboxPlayingCtr = 0;
else if (_jokeboxPlayingCtr == 1) {
@@ -1228,7 +1228,7 @@ void Scene115::Jukebox::signal() {
bool Scene115::Jukebox::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
-
+
if (action == CURSOR_USE) {
if (_jokeboxPlayingCtr == 0) {
_jokeboxPlayingCtr = 1;
@@ -1241,7 +1241,7 @@ bool Scene115::Jukebox::startAction(CursorType action, Event &event) {
SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9,
SET_EXT_FGCOLOR, 13, LIST_END);
return true;
- } else
+ } else
return NamedHotspot::startAction(action, event);
}
@@ -1265,7 +1265,7 @@ void Scene115::EventHandler1::dispatch() {
bool Scene115::Item10::startAction(CursorType action, Event &event) {
Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
-
+
if (BF_GLOBALS.getFlag(fWithLyle)) {
scene->_object4.setStrip2(6);
Common::Point pt(-20, 122);
@@ -1591,7 +1591,7 @@ Scene115::Scene115() : SceneExt () {
void Scene115::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
-
+
BF_GLOBALS._sound1.fadeSound(15);
loadScene(115);
setZoomPercents(98, 85, 115, 100);
@@ -1641,7 +1641,7 @@ void Scene115::postInit(SceneObjectList *OwnerList) {
_object11.postInit();
_object11.hide();
-
+
_object12.postInit();
_object12.hide();
@@ -1817,7 +1817,7 @@ void Scene125::Action1::signal() {
case 0:
// No break on purpose
default:
- break;
+ break;
}
}
@@ -2054,7 +2054,7 @@ void Scene125::Action3::dispatch() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
Action::dispatch();
-
+
if ((_actionIndex == 9) && (owner->_percent > 70))
owner->changeZoom(owner->_percent - 1);
}
@@ -2095,7 +2095,7 @@ void Scene125::Action4::dispatch() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
Action::dispatch();
-
+
if ((_actionIndex == 4) && (owner->_percent > 80))
owner->changeZoom(owner->_percent - 1);
}
@@ -2134,7 +2134,7 @@ void Scene125::Action6::dispatch() {
SceneObject *owner = static_cast<SceneObject *>(this->_owner);
Action::dispatch();
-
+
if ((_actionIndex == 2) && (owner->_percent < 100))
owner->changeZoom(owner->_percent + 1);
}
@@ -2169,7 +2169,7 @@ void Scene125::postInit(SceneObjectList *OwnerList) {
BF_GLOBALS._player._moveDiff.x = 6;
BF_GLOBALS._player._moveDiff.y = 6;
BF_GLOBALS._player.disableControl();
-
+
_object5.postInit();
_object5.setVisage(128);
_object5.setPosition(Common::Point(150, 117));
@@ -2457,7 +2457,7 @@ void Scene160::Action1::signal() {
scene->_kid.setStrip(2);
scene->_kid.animate(ANIM_MODE_5, this);
- scene->_kidBody.setPosition(scene->_kid._position);
+ scene->_kidBody.setPosition(scene->_kid._position);
scene->_kidBody.setFrame(1);
scene->_kidBody.setStrip(3);
break;
@@ -2630,7 +2630,7 @@ void Scene160::Action2::signal() {
break;
case 25:
BF_GLOBALS._sound1.fade(0, 10, 10, true, this);
-// FIXME: Currently, fade() doesn't end properly with this song,
+// FIXME: Currently, fade() doesn't end properly with this song,
// thus never returns here. This hack skips the wait and changes
// directly to the next scene
// Start of hack
@@ -2895,7 +2895,7 @@ void Scene180::postInit(SceneObjectList *OwnerList) {
_vechile.setStrip(3);
_vechile._frame = 5;
_vechile.changeZoom(75);
-
+
_dispatchMode = 1;
_vechile._moveDiff.x = 45;
} else {
diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h
index b304c2aeaa..ddde200370 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.h
+++ b/engines/tsage/blue_force/blueforce_scenes1.h
@@ -137,7 +137,7 @@ class Scene110: public SceneExt {
virtual void signal();
};
public:
- NamedObject _object1, _object2, _object3, _object4, _object5, _object6, _object7, _object8, _object9, _object10;
+ NamedObject _object1, _object2, _object3, _object4, _object5, _object6, _object7, _object8, _object9, _object10;
ASound _sound;
Action1 _action1;
Action2 _action2;
@@ -354,7 +354,7 @@ public:
NamedObject _object1;
NamedObject _object2;
IntroSceneText _text;
-
+
void postInit(SceneObjectList *OwnerList);
};
diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp
index 340baae6a9..c992afe620 100644
--- a/engines/tsage/blue_force/blueforce_scenes2.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes2.cpp
@@ -67,7 +67,7 @@ void Scene200::Action1::signal() {
rot->setDelay(10);
rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
rot->setDelay(10);
-
+
scene->setAction(&scene->_sequenceManager, this, 201, &scene->_object1, &scene->_object2,
&scene->_object3, &scene->_object4, &scene->_object5, &scene->_object6, NULL);
break;
@@ -99,7 +99,7 @@ void Scene200::Action2::signal() {
break;
}
}
-
+
/*--------------------------------------------------------------------------*/
@@ -133,7 +133,7 @@ void Scene200::postInit(SceneObjectList *OwnerList) {
_object11.setVisage(200);
_object11.setPosition(Common::Point(96, 112), 1000);
_object11.setStrip(3);
- _object11.setFrame(1);
+ _object11.setFrame(1);
_object11.changeZoom(100);
_object10.setAction(&_action1);
@@ -168,7 +168,7 @@ void Scene210::Action1::signal() {
rot->setDelay(10);
rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
rot->setDelay(10);
-
+
scene->setAction(&scene->_sequenceManager, this, 210, &scene->_object10, &scene->_object11,
&scene->_object12, &scene->_object13, &scene->_object14, &scene->_object15, NULL);
break;
@@ -301,7 +301,7 @@ void Scene220::Action1::signal() {
rot->setDelay(10);
rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
rot->setDelay(10);
-
+
scene->setAction(&scene->_sequenceManager, this, 220, &scene->_object4, &scene->_object5,
&scene->_object6, &scene->_object7, &scene->_object8, &scene->_object9, NULL);
break;
@@ -508,7 +508,7 @@ void Scene225::Action1::signal() {
rot->setDelay(10);
rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
rot->setDelay(10);
-
+
scene->setAction(&scene->_sequenceManager, this, 225, &scene->_object15, &scene->_object16,
&scene->_object17, &scene->_object18, &scene->_object19, &scene->_object20, NULL);
break;
@@ -661,7 +661,7 @@ void Scene225::postInit(SceneObjectList *OwnerList) {
_object11._frame = 1;
_object11.changeZoom(100);
_object11._numFrames = 2;
-
+
_object12.postInit();
_object12.setVisage(1225);
_object12.setPosition(Common::Point(368, 35));
@@ -1007,14 +1007,14 @@ void Scene270::postInit(SceneObjectList *OwnerList) {
BF_GLOBALS._player._moveDiff.x = 8;
BF_GLOBALS._player.changeZoom(-1);
BF_GLOBALS._player.disableControl();
-
+
switch (BF_GLOBALS._sceneManager._previousScene) {
case 560:
if (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard) {
_field219A = 1;
BF_GLOBALS._player._moveDiff.x = 5;
_field386 = 0;
-
+
_grandma.animate(ANIM_MODE_1, NULL);
setAction(&_sequenceManager1, NULL, 2720, &BF_GLOBALS._player, &_grandma, NULL);
BF_GLOBALS._bookmark = bLyleStoppedBy;
@@ -1138,7 +1138,7 @@ void Scene270::signal() {
case 2717:
_sceneMode = 2718;
_lyle.setFrame2(-1);
- setAction(&_sequenceManager1, this, 2718, &BF_GLOBALS._player, &_laura, &_skip,
+ setAction(&_sequenceManager1, this, 2718, &BF_GLOBALS._player, &_laura, &_skip,
&_lyle, &_grandma, NULL);
break;
case 2718:
@@ -1167,7 +1167,7 @@ void Scene270::signal() {
break;
default:
break;
- }
+ }
}
void Scene270::process(Event &event) {
@@ -1374,7 +1374,7 @@ Scene271::Scene271() {
void Scene271::synchronize(Serializer &s) {
PalettedScene::synchronize(s);
-
+
s.syncAsSint16LE(_field796);
s.syncAsSint16LE(_field2E16);
s.syncAsSint16LE(_tempPos.x);
@@ -1396,7 +1396,7 @@ void Scene271::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_gameTextSpeaker);
_stripManager.addSpeaker(&_granTextSpeaker);
_stripManager.addSpeaker(&_lyleTextSpeaker);
-
+
_exit.setDetails(Rect(310, 115, 320, 167), 270, -1, -1, -1, 1, NULL);
_tv.postInit();
@@ -1433,7 +1433,7 @@ void Scene271::postInit(SceneObjectList *OwnerList) {
_item2.setDetails(3, 270, 24, 25, 26, 1);
_item4.setDetails(2, 270, 30, 31, 32, 1);
_item11.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 270, 0, 1, 2, 1, NULL);
-
+
BF_GLOBALS._player.postInit();
BF_GLOBALS._player._moveDiff.x = 8;
BF_GLOBALS._player.changeZoom(-1);
@@ -1477,7 +1477,7 @@ void Scene271::postInit(SceneObjectList *OwnerList) {
_object11.setStrip(1);
_object11._frame = 2;
_object11.setPosition(Common::Point(35, 136));
-
+
_object6.postInit();
_object6.hide();
@@ -1508,15 +1508,15 @@ void Scene271::postInit(SceneObjectList *OwnerList) {
_object7.setVisage(277);
_object7.setStrip(7);
_object7.setPosition(Common::Point(48, 149));
-
+
BF_GLOBALS._walkRegions.disableRegion(6);
BF_GLOBALS._walkRegions.disableRegion(14);
BF_GLOBALS._walkRegions.disableRegion(19);
-
+
_object12.postInit();
_object12.setVisage(276);
_object12.setPosition(Common::Point(129, 130));
-
+
_object2.postInit();
_object2.setVisage(270);
_object2.setStrip(3);
@@ -1637,10 +1637,10 @@ void Scene271::signal() {
BF_GLOBALS._player.enableControl();
_field796 = 1;
_field2E16 = 1;
-
+
_object1.remove();
_object11.remove();
-
+
BF_INVENTORY.setObjectScene(INV_LYLE_CARD, 1);
break;
case 2709:
@@ -1754,7 +1754,7 @@ void Scene280::Action1::signal() {
scene->_jake.setFrame(1);
scene->_jake.animate(ANIM_MODE_8, NULL);
scene->_jake._numFrames = 5;
-
+
scene->_stripManager.start(2800, this);
break;
case 2:
diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp
index 8955199286..22c831f531 100644
--- a/engines/tsage/blue_force/blueforce_scenes3.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes3.cpp
@@ -945,7 +945,7 @@ void Scene315::Action1::signal() {
T2_GLOBALS._uiElements.addScore(30);
BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1);
//HACK: This has to be checked wether or not it occurs in the original.
- //When the _sceneMode is set to 3169, the value desn't change.
+ //When the _sceneMode is set to 3169, the value desn't change.
//If you show the forest rapsheet, it gives points (and again... and again...)
scene->_sceneMode = 3154;
}
@@ -4509,12 +4509,12 @@ void Scene360::signal() {
break;
case 3607:
case 3609:
- // Original game was only using at this place visage 1363.
+ // Original game was only using at this place visage 1363.
// This workaround allow Harrison to keep his gun handy
// when entering the romm (if required)
if (! BF_GLOBALS.getFlag(gunDrawn))
_harrison.setVisage(1363);
- else
+ else
_harrison.setVisage(363);
BF_GLOBALS._player.enableControl();
break;
@@ -5365,7 +5365,7 @@ bool Scene385::Jim::startAction(CursorType action, Event &event) {
} else if (action < CURSOR_WALK)
// Any other inventory item
return false;
- else
+ else
return NamedObject::startAction(action, event);
}
diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp
index e966daf34e..a10f311791 100644
--- a/engines/tsage/blue_force/blueforce_scenes4.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes4.cpp
@@ -1083,7 +1083,7 @@ void Scene415::postInit(SceneObjectList *OwnerList) {
_animatedSeat.setStrip(1);
_animatedSeat.setPosition(Common::Point(306, 116));
_animatedSeat.fixPriority(80);
-
+
_windowLever.setDetails(16, 415, 25, -1, 26, 1);
_item7.setDetails(17, 415, 32, -1, 33, 1);
_seatBelt.setDetails(14, 415, 29, -1, 30, 1);
@@ -1271,7 +1271,7 @@ void Scene440::postInit(SceneObjectList *OwnerList) {
BF_GLOBALS._player.setVisage(303);
BF_GLOBALS._player.setPosition(Common::Point(187, 104));
-
+
_lyle.setPosition(Common::Point(135, 128));
_lyle.show();
@@ -1291,7 +1291,7 @@ void Scene440::postInit(SceneObjectList *OwnerList) {
_vechile.setVisage(580);
_vechile.setStrip(2);
_vechile.setFrame(3);
-
+
BF_GLOBALS._player.setVisage(303);
}
}
@@ -1310,7 +1310,7 @@ void Scene440::postInit(SceneObjectList *OwnerList) {
_lyle.setPosition(Common::Point(143, 93));
_lyle.setStrip(5);
_lyle.fixPriority(90);
-
+
_doorway.setFrame(_doorway.getFrameCount());
_sceneMode = 4401;
setAction(&_sequenceManager, this, 4401, &BF_GLOBALS._player, &_doorway, NULL);
@@ -1375,7 +1375,7 @@ bool Scene450::Weasel::startAction(CursorType action, Event &event) {
T2_GLOBALS._uiElements.addScore(30);
scene->_sceneMode = 4505;
- scene->setAction(&scene->_sequenceManager, scene, 4505, &BF_GLOBALS._player, this,
+ scene->setAction(&scene->_sequenceManager, scene, 4505, &BF_GLOBALS._player, this,
&scene->_counterDoor, &scene->_object2, NULL);
return true;
default:
@@ -1427,7 +1427,7 @@ bool Scene450::Manager::startAction(CursorType action, Event &event) {
if (BF_GLOBALS.getFlag(takenWeasel) && !BF_GLOBALS.getFlag(gotTrailer450)) {
BF_GLOBALS.setFlag(gotTrailer450);
scene->_sceneMode = 4517;
- scene->setAction(&scene->_sequenceManager, scene, 4517, &BF_GLOBALS._player, this,
+ scene->setAction(&scene->_sequenceManager, scene, 4517, &BF_GLOBALS._player, this,
&scene->_door, NULL);
} else {
animate(ANIM_MODE_8, 1, NULL);
@@ -1485,11 +1485,11 @@ bool Scene450::Manager::startAction(CursorType action, Event &event) {
} else {
animate(ANIM_MODE_8, 1, NULL);
BF_GLOBALS._player.disableControl();
-
+
if (!BF_GLOBALS.getFlag(showEugeneID))
T2_GLOBALS._uiElements.addScore(30);
BF_GLOBALS.setFlag(showEugeneID);
-
+
if ((BF_GLOBALS.getFlag(showRapEugene) || BF_GLOBALS.getFlag(showEugeneNapkin)) &&
!BF_GLOBALS.getFlag(fMgrCallsWeasel)) {
T2_GLOBALS._uiElements.addScore(30);
diff --git a/engines/tsage/blue_force/blueforce_scenes5.cpp b/engines/tsage/blue_force/blueforce_scenes5.cpp
index 692e142f55..abadc4300a 100644
--- a/engines/tsage/blue_force/blueforce_scenes5.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes5.cpp
@@ -60,7 +60,7 @@ bool Scene550::Lyle::startAction(CursorType action, Event &event) {
switch (action) {
case CURSOR_TALK:
- if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
+ if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
(BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) &&
(BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
@@ -132,7 +132,7 @@ bool Scene550::Vechile::startAction(CursorType action, Event &event) {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 2;
scene->setAction(&scene->_sequenceManager, scene, 5501, &BF_GLOBALS._player, NULL);
- } else if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
+ } else if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
(BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
if (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1) {
scene->_sceneMode = 5501;
@@ -164,11 +164,11 @@ void Scene550::postInit(SceneObjectList *OwnerList) {
_sceneMode = 1;
signal();
return;
- }
+ }
SceneExt::postInit();
loadScene(550);
-
+
_stripManager.addSpeaker(&_gameTextSpeaker);
_stripManager.addSpeaker(&_lyleHatSpeaker);
_stripManager.addSpeaker(&_jakeJacketSpeaker);
@@ -216,7 +216,7 @@ void Scene550::postInit(SceneObjectList *OwnerList) {
if (BF_GLOBALS.getFlag(onDuty)) {
_vechile.setVisage(301);
_vechile.setStrip(1);
-
+
BF_GLOBALS._player.setVisage(304);
} else {
_vechile.setVisage(580);
@@ -224,7 +224,7 @@ void Scene550::postInit(SceneObjectList *OwnerList) {
_vechile.setFrame(2);
BF_GLOBALS._player.setVisage(303);
- }
+ }
}
BF_GLOBALS._sceneItems.push_back(&_vechile);
@@ -299,7 +299,7 @@ void Scene551::Action2::signal() {
BF_GLOBALS._walkRegions.enableRegion(18);
BF_GLOBALS._walkRegions.enableRegion(4);
scene->_field1CD2 = 1;
-
+
scene->_harrison.setObjectWrapper(new SceneObjectWrapper());
scene->_harrison.animate(ANIM_MODE_1, NULL);
@@ -506,7 +506,7 @@ void Scene551::TrunkInset::remove() {
BF_GLOBALS._player.disableControl();
scene->_sceneMode = 0;
- scene->setAction(&scene->_sequenceManager, scene, 5516, &scene->_harrison,
+ scene->setAction(&scene->_sequenceManager, scene, 5516, &scene->_harrison,
&scene->_patrolCarTrunk, NULL);
FocusObject::remove();
@@ -711,7 +711,7 @@ void Scene551::postInit(SceneObjectList *OwnerList) {
_object12.show();
_object12.setDetails(550, 25, -1, 26, 1, (SceneItem *)NULL);
BF_GLOBALS._sceneItems.push_front(&_object12);
-
+
_harrison.postInit();
_harrison.setVisage(304);
_harrison.setPosition(Common::Point(67, 102));
@@ -1076,7 +1076,7 @@ void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) {
_item4.setDetails(Rect(143, 86, 159, 102), 560, 49, 50, -1, 1, NULL);
_item5.setDetails(Rect(159, 86, 175, 102), 560, 49, 50, -1, 1, NULL);
_item6.setDetails(Rect(175, 86, 191, 102), 560, 49, 50, -1, 1, NULL);
-
+
BF_GLOBALS._sceneItems.remove(&_item1);
BF_GLOBALS._sceneItems.remove(&_item2);
BF_GLOBALS._sceneItems.remove(&_item3);
@@ -1114,9 +1114,9 @@ void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) {
_digit0.setStrip(3);
_digit0.setPosition(Common::Point(183, 94));
_digit0.fixPriority(252);
-
+
int amount = (BF_GLOBALS._safeCombination != 0) ? BF_GLOBALS._safeCombination : 1000;
-
+
// Get digit 0 portion
int remainder = amount % 10;
amount /= 10;
@@ -1135,7 +1135,7 @@ void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) {
void Scene560::SafeInset::remove() {
Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
-
+
_item1.remove();
_item2.remove();
_item3.remove();
@@ -1145,7 +1145,7 @@ void Scene560::SafeInset::remove() {
_digit2.remove();
_digit1.remove();
_digit0.remove();
-
+
scene->_nickel.remove();
if (BF_GLOBALS._events.getCursor() == CURSOR_USE) {
@@ -1293,7 +1293,7 @@ bool Scene560::SafeInset::Item::startAction(CursorType action, Event &event) {
default:
break;
}
-
+
scene->_safeInset.signal();
scene->_sound1.play(75);
return true;
@@ -1345,7 +1345,7 @@ bool Scene560::BoxInset::Item1::startAction(CursorType action, Event &event) {
scene->_safeInset.setPosition(Common::Point(160, 141));
scene->_safeInset.fixPriority(251);
scene->_safeInset.setDetails(560, 45, 46, -1);
-
+
scene->_sceneMode = 3;
scene->_boxInset.remove();
@@ -1414,7 +1414,7 @@ void Scene560::postInit(SceneObjectList *OwnerList) {
_deskChair.setPosition(Common::Point(81, 149));
_deskChair.fixPriority(151);
_deskChair.changeZoom(81);
-
+
if (BF_GLOBALS._sceneManager._previousScene == 570) {
// Returning from using computer
BF_GLOBALS._events.setCursor(CURSOR_USE);
@@ -1448,7 +1448,7 @@ void Scene560::postInit(SceneObjectList *OwnerList) {
BF_GLOBALS._player._moveDiff.x = 11;
BF_GLOBALS._player.changeZoom(-1);
BF_GLOBALS._player.disableControl();
-
+
_sceneMode = 10;
ADD_MOVER(BF_GLOBALS._player, 85, 115);
}
@@ -1516,7 +1516,7 @@ void Scene560::signal() {
T2_GLOBALS._uiElements.addScore(10);
BF_GLOBALS.setFlag(fGotPointsForPunch);
}
-
+
_boxInset.postInit();
_boxInset.setVisage(560);
_boxInset.setStrip(2);
@@ -1605,7 +1605,7 @@ void Scene570::PasswordEntry::postInit(SceneObjectList *OwnerList) {
void Scene570::PasswordEntry::process(Event &event) {
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
bool entryChanged = false;
-
+
switch (event.eventType) {
case EVENT_KEYPRESS: {
int key = toupper(event.kbd.ascii);
@@ -1648,7 +1648,7 @@ void Scene570::PasswordEntry::process(Event &event) {
_entryText.setPosition(Common::Point(213, 40));
_entryText.fixPriority(255);
_entryText.setup(_entryBuffer);
-
+
// Pad entered text with spaces to make up the allowed width and then display
Common::String msg = _entryBuffer;
while (msg.size() < 10)
@@ -1658,7 +1658,7 @@ void Scene570::PasswordEntry::process(Event &event) {
}
void Scene570::PasswordEntry::checkPassword() {
- // Check if the password is correctly entered as 'JACKIE' or, as a nod to the
+ // Check if the password is correctly entered as 'JACKIE' or, as a nod to the
// reimplementation in ScummVM, as the project name.
Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
@@ -1794,7 +1794,7 @@ void Scene570::Icon::remove() {
}
bool Scene570::Icon::startAction(CursorType action, Event &event) {
- Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1907,7 +1907,7 @@ bool Scene570::Icon::startAction(CursorType action, Event &event) {
}
void Scene570::Icon::setDetails(int iconId, int folderId, int parentFolderId, int unused, const Common::String &msg) {
- Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
NamedObject::postInit();
_iconId = iconId;
@@ -1929,7 +1929,7 @@ void Scene570::Icon::setDetails(int iconId, int folderId, int parentFolderId, in
/*--------------------------------------------------------------------------*/
bool Scene570::PowerSwitch::startAction(CursorType action, Event &event) {
- Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
@@ -1972,7 +1972,7 @@ bool Scene570::PrinterIcon::startAction(CursorType action, Event &event) {
}
void Scene570::Object3::remove() {
- Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
scene->_object4._flag = 0;
scene->_printerIcon.remove();
@@ -1998,7 +1998,7 @@ void Scene570::Object3::remove() {
/*--------------------------------------------------------------------------*/
bool Scene570::FloppyDrive::startAction(CursorType action, Event &event) {
- Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
@@ -2326,7 +2326,7 @@ bool Scene590::Skip::startAction(CursorType action, Event &event) {
} else {
scene->_stripNumber = !scene->_field17DC ? 5901 : 5902;
}
-
+
scene->setAction(&scene->_action1);
scene->_field17DC = 1;
return true;
@@ -2404,7 +2404,7 @@ void Scene590::Action2::signal() {
case 4:
scene->_skip.setStrip(1);
scene->_skip.animate(ANIM_MODE_1, NULL);
-
+
BF_GLOBALS._player.setVisage(368);
BF_GLOBALS._player.setStrip(7);
BF_GLOBALS._player.setPosition(Common::Point(238, 131));
@@ -2456,7 +2456,7 @@ void Scene590::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_skipSpeaker);
_stripManager.addSpeaker(&_lauraSpeaker);
_stripManager.addSpeaker(&_jakeJacketSpeaker);
-
+
if (BF_GLOBALS.getFlag(onDuty)) {
BF_GLOBALS._player.setVisage(361);
BF_GLOBALS._player._moveDiff = Common::Point(6, 2);
@@ -2488,7 +2488,7 @@ void Scene590::postInit(SceneObjectList *OwnerList) {
_item10.setDetails(13, 590, 9, -1, 21, 1);
_item11.setDetails(15, 590, 10, -1, 22, 1);
_item12.setDetails(17, 590, 11, -1, 23, 1);
-
+
BF_GLOBALS._player.disableControl();
_sceneMode = 0;
setAction(&_sequenceManager, this, 5900, &BF_GLOBALS._player, NULL);
diff --git a/engines/tsage/blue_force/blueforce_scenes5.h b/engines/tsage/blue_force/blueforce_scenes5.h
index 76bf4cdbc3..73d323fc54 100644
--- a/engines/tsage/blue_force/blueforce_scenes5.h
+++ b/engines/tsage/blue_force/blueforce_scenes5.h
@@ -228,7 +228,7 @@ public:
NamedHotspot _chair, _lamp, _item4, _trophy, _watercolours, _fileCabinets;
NamedHotspot _certificate, _bookcase, _desk, _carpet, _item12, _office;
ASound _sound1;
- bool _field380;
+ bool _field380;
bool _field11EA;
Common::Point _destPosition;
diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp
index e5e7c71bef..9467df7917 100644
--- a/engines/tsage/blue_force/blueforce_scenes6.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes6.cpp
@@ -49,7 +49,7 @@ void Scene600::Action1::signal() {
break;
case 2:
scene->_sound1.play(59);
- setAction(&scene->_sequenceManager, this, 600, &scene->_object2, &scene->_ryan,
+ setAction(&scene->_sequenceManager, this, 600, &scene->_object2, &scene->_ryan,
&BF_GLOBALS._player, &scene->_skidMarks, NULL);
break;
case 3:
@@ -149,7 +149,7 @@ void Scene600::remove() {
void Scene620::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(999);
-
+
BF_GLOBALS._player.postInit();
BF_GLOBALS._player.disableControl();
BF_GLOBALS._player.setVisage(621);
@@ -176,14 +176,14 @@ void Scene620::signal() {
case 13:
case 16:
case 19:
- addFader((const byte *)&black, 2, this);
+ addFader((const byte *)&black, 2, this);
break;
case 2:
BF_GLOBALS._player.remove();
_object1.postInit();
_object1.setVisage(622);
_object1.setPosition(Common::Point(101, 41));
- add2Faders((const byte *)&black, 2, 622, this);
+ add2Faders((const byte *)&black, 2, 622, this);
break;
case 5:
_object1.remove();
@@ -441,7 +441,7 @@ void Scene690::postInit(SceneObjectList *OwnerList) {
BF_GLOBALS._dayNumber = 1;
_stripManager.addSpeaker(&_jakeSpeaker);
-
+
_object1.postInit();
_object1.setVisage(690);
_object1.setStrip2(2);
diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp
index ceee748374..5a60cd7c5e 100644
--- a/engines/tsage/blue_force/blueforce_scenes8.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes8.cpp
@@ -434,7 +434,7 @@ void Scene810::Action2::signal() {
scene->_lyle.setVisage(813);
scene->_lyle.setStrip(2);
scene->_lyle.setFrame(1);
-
+
ADD_PLAYER_MOVER(84, 113);
break;
case 5:
@@ -611,7 +611,7 @@ bool Scene810::Lyle::startAction(CursorType action, Event &event) {
default:
return NamedObjectExt::startAction(action, event);
}
-}
+}
bool Scene810::Chair::startAction(CursorType action, Event &event) {
switch (action) {
@@ -709,7 +709,7 @@ bool Scene810::Object5::startAction(CursorType action, Event &event) {
case CURSOR_USE: {
scene->_sceneMode = 8195;
BF_GLOBALS._player.disableControl();
-
+
PlayerMover *mover = new PlayerMover();
Common::Point destPos(67, 111);
BF_GLOBALS._player.addMover(mover, &destPos, scene);
@@ -804,7 +804,7 @@ bool Scene810::FaxMachine::startAction(CursorType action, Event &event) {
scene->_sceneMode = 811;
if (BF_GLOBALS._sceneObjects->contains(&scene->_lyle)) {
- scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(onDuty) ? 8108 : 8105,
+ scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(onDuty) ? 8108 : 8105,
&BF_GLOBALS._player, &scene->_object6, NULL);
} else {
scene->setAction(&scene->_sequenceManager1, scene, 8111, &BF_GLOBALS._player,
@@ -1058,12 +1058,12 @@ void Scene810::postInit(SceneObjectList *OwnerList) {
case 820:
BF_GLOBALS._player.setStrip(7);
BF_GLOBALS._player.setPosition(Common::Point(278, 116));
-
+
_lyle.setVisage(845);
_lyle.setPosition(Common::Point(340, 175));
_lyle.setObjectWrapper(new SceneObjectWrapper());
_lyle.animate(ANIM_MODE_1, NULL);
-
+
_chair.show();
BF_GLOBALS._player.disableControl();
@@ -1121,7 +1121,7 @@ void Scene810::postInit(SceneObjectList *OwnerList) {
_item12._sceneRegionId = 8;
BF_GLOBALS._sceneItems.push_back(&_item12);
- BF_GLOBALS._sceneItems.addItems(&_microficheReader, &_map, &_window, &_bookcase, &_garbageCan,
+ BF_GLOBALS._sceneItems.addItems(&_microficheReader, &_map, &_window, &_bookcase, &_garbageCan,
&_fileCabinets, &_coffeeMaker, &_shelves, &_background, NULL);
_background.setBounds(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y));
}
@@ -1276,7 +1276,7 @@ void Scene810::dispatch() {
_lyle.updateAngle(BF_GLOBALS._player._position);
}
- if (BF_GLOBALS._sceneObjects->contains(&_faxMachineInset) && (BF_GLOBALS._player._position.x != 67) &&
+ if (BF_GLOBALS._sceneObjects->contains(&_faxMachineInset) && (BF_GLOBALS._player._position.x != 67) &&
(BF_GLOBALS._player._position.y != 111)) {
_faxMachineInset.remove();
}
@@ -1341,7 +1341,7 @@ bool Scene820::PowerButton::startAction(CursorType action, Event &event) {
BF_GLOBALS._scenePalette.loadPalette(821);
BF_GLOBALS._scenePalette.refresh();
- SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
+ SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END);
} else {
BF_GLOBALS._scenePalette.loadPalette(820);
@@ -1388,7 +1388,7 @@ bool Scene820::BackButton::startAction(CursorType action, Event &event) {
scene->_object5.hide();
}
- SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
+ SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END);
return true;
default:
@@ -1419,7 +1419,7 @@ bool Scene820::ForwardButton::startAction(CursorType action, Event &event) {
if (scene->_pageNumber < 4)
++scene->_pageNumber;
- SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
+ SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END);
if (scene->_pageNumber == 4) {
@@ -1447,7 +1447,7 @@ void Scene820::synchronize(Serializer &s) {
void Scene820::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(820);
-
+
_stripManager.addSpeaker(&_gameTextSpeaker);
_powerButton.postInit();
@@ -3115,7 +3115,7 @@ void Scene870::postInit(SceneObjectList *OwnerList) {
_lyle.setPosition(Common::Point(156, 148));
_lyle.fixPriority(149);
}
-
+
if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) &&
(BF_INVENTORY.getObjectScene(INV_GRENADES) == 355)) {
_object4.postInit();
@@ -3135,7 +3135,7 @@ void Scene870::postInit(SceneObjectList *OwnerList) {
}
break;
}
-
+
_boat.setDetails(7, 870, 3, 4, 5, 1);
_crate.setDetails(14, 870, 12, 13, 14, 1);
_water.setDetails(5, 870, 24, 25, 26, 1);
@@ -3393,7 +3393,7 @@ void Scene880::postInit(SceneObjectList *OwnerList) {
_object4.setFrame2(_object4.getFrameCount());
_object4.fixPriority(160);
_object4.setPosition(Common::Point(255, 148));
-
+
_seqNumber = 8816;
} else if (BF_GLOBALS.getFlag(fBlowUpGoon)) {
_object4.setStrip(7);
@@ -3405,7 +3405,7 @@ void Scene880::postInit(SceneObjectList *OwnerList) {
} else {
_object4.setStrip(2);
_object4.setPosition(Common::Point(258, 147));
-
+
_object3.postInit();
_object3.setVisage(871);
_object3.setStrip(4);
@@ -3600,7 +3600,7 @@ void Scene880::handleAction(Action *action) {
action->_owner = NULL;
}
}
-
+
void Scene880::dispatch() {
SceneExt::dispatch();
diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp
index f5705eb471..a303576928 100644
--- a/engines/tsage/blue_force/blueforce_scenes9.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes9.cpp
@@ -386,7 +386,7 @@ void Scene900::Action3::signal() {
break;
default:
break;
- }
+ }
}
void Scene900::Action4::signal() {
@@ -540,7 +540,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) {
_lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, (SceneItem *)NULL);
_lyle.animate(ANIM_MODE_1, NULL);
_lyle.setObjectWrapper(new SceneObjectWrapper());
- }
+ }
_sceneMode = 9000;
setAction(&_sequenceManager1, this, 9000, &BF_GLOBALS._player, NULL);
@@ -2125,7 +2125,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) {
_lyle.setFrame(3);
_lyle._field90 = 1;
_lyle.setDetails(910, 69, 70 ,71 , 5, &_item4);
-
+
BF_GLOBALS._walkRegions.disableRegion(15);
BF_GLOBALS._walkRegions.disableRegion(16);
BF_GLOBALS._walkRegions.disableRegion(14);
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index c2ce426052..0a8c4ef1b4 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -1354,13 +1354,15 @@ void ScenePalette::setEntry(int index, uint r, uint g, uint b) {
* @param g G component
* @param b B component
* @param threshold Closeness threshold.
+ * @param start Starting index
+ * @param count Number of indexes to scan
* @remarks A threshold may be provided to specify how close the matching color must be
*/
-uint8 ScenePalette::indexOf(uint r, uint g, uint b, int threshold) {
+uint8 ScenePalette::indexOf(uint r, uint g, uint b, int threshold, int start, int count) {
int palIndex = -1;
byte *palData = &_palette[0];
- for (int i = 0; i < 256; ++i) {
+ for (int i = start; i < (start + count); ++i) {
byte ir = *palData++;
byte ig = *palData++;
byte ib = *palData++;
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index 45bb3506d5..60a7930eab 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -378,7 +378,7 @@ public:
void setPalette(int index, int count);
void getEntry(int index, uint *r, uint *g, uint *b);
void setEntry(int index, uint r, uint g, uint b);
- uint8 indexOf(uint r, uint g, uint b, int threshold = 0xffff);
+ uint8 indexOf(uint r, uint g, uint b, int threshold = 0xffff, int start = 0, int count = 256);
void getPalette(int start = 0, int count = 256);
void signalListeners();
void clearListeners();
diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp
index f7ba5c20f2..82645f2d62 100644
--- a/engines/tsage/debugger.cpp
+++ b/engines/tsage/debugger.cpp
@@ -305,7 +305,7 @@ bool Debugger::Cmd_Hotspots(int argc, const char **argv) {
if (ri != g_globals->_sceneRegions.end()) {
// Fill out the areas defined by the region
Region &r = *ri;
-
+
for (int y = r._bounds.top; y < r._bounds.bottom; ++y) {
LineSliceSet set = r.getLineSlices(y);
@@ -615,7 +615,7 @@ bool BlueForceDebugger::Cmd_MoveObject(int argc, const char **argv) {
if ((objNum > 0) && (objNum < 65))
BF_INVENTORY.setObjectScene(objNum, sceneNum);
- else
+ else
DebugPrintf("Invalid object Id %s\n", argv[1]);
return true;
@@ -702,7 +702,7 @@ bool Ringworld2Debugger::Cmd_MoveObject(int argc, const char **argv) {
if ((objNum > 0) && (objNum < 53))
R2_INVENTORY.setObjectScene(objNum, sceneNum);
- else
+ else
DebugPrintf("Invalid object Id %s\n", argv[1]);
return true;
diff --git a/engines/tsage/events.h b/engines/tsage/events.h
index cf2d1a34ed..475db47315 100644
--- a/engines/tsage/events.h
+++ b/engines/tsage/events.h
@@ -86,25 +86,25 @@ enum CursorType {
INV_CARAVAN_KEY = 67, BF_LAST_INVENT = 68,
// Ringworld 2 objects
- R2_OPTO_DISK = 1, R2_READER = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4,
- R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, R2_SONIC_STUNNER = 7,
- R2_CABLE_HARNESS = 8, R2_COM_SCANNER = 9, R2_SPENT_POWER_CAPSULE = 10,
- R2_CHARGED_POWER_CAPSULE = 11, R2_AEROSOL = 12, R2_REMOTE_CONTROL = 13,
- R2_OPTICAL_FIBRE = 14, R2_CLAMP = 15, R2_ATTRACTOR_CABLE_HARNESS = 16,
- R2_FUEL_CELL = 17, R2_GYROSCOPE = 18, R2_AIRBAG = 19, R2_REBREATHER_TANK = 20,
+ R2_OPTO_DISK = 1, R2_READER = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4,
+ R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, R2_SONIC_STUNNER = 7,
+ R2_CABLE_HARNESS = 8, R2_COM_SCANNER = 9, R2_SPENT_POWER_CAPSULE = 10,
+ R2_CHARGED_POWER_CAPSULE = 11, R2_AEROSOL = 12, R2_REMOTE_CONTROL = 13,
+ R2_OPTICAL_FIBRE = 14, R2_CLAMP = 15, R2_ATTRACTOR_CABLE_HARNESS = 16,
+ R2_FUEL_CELL = 17, R2_GYROSCOPE = 18, R2_AIRBAG = 19, R2_REBREATHER_TANK = 20,
R2_RESERVE_REBREATHER_TANK = 21, R2_GUIDANCE_MODULE = 22, R2_THRUSTER_VALVE = 23,
- R2_BALLOON_BACKPACK = 24, R2_RADAR_MECHANISM = 25, R2_JOYSTICK = 26,
- R2_IGNITOR = 27, R2_DIAGNOSTICS_DISPLAY = 28, R2_GLASS_DOME = 29, R2_WICK_LAMP = 30,
- R2_SCRITH_KEY = 31, R2_TANNER_MASK = 32, R2_PURE_GRAIN_ALCOHOL = 33, R2_SAPPHIRE_BLUE = 34,
- R2_ANCIENT_SCROLLS = 35, R2_FLUTE = 36, R2_GUNPOWDER = 37, R2_NONAME = 38,
+ R2_BALLOON_BACKPACK = 24, R2_RADAR_MECHANISM = 25, R2_JOYSTICK = 26,
+ R2_IGNITOR = 27, R2_DIAGNOSTICS_DISPLAY = 28, R2_GLASS_DOME = 29, R2_WICK_LAMP = 30,
+ R2_SCRITH_KEY = 31, R2_TANNER_MASK = 32, R2_PURE_GRAIN_ALCOHOL = 33, R2_SAPPHIRE_BLUE = 34,
+ R2_ANCIENT_SCROLLS = 35, R2_FLUTE = 36, R2_GUNPOWDER = 37, R2_NONAME = 38,
R2_COM_SCANNER_2 = 39, R2_SUPERCONDUCTOR_WIRE = 40, R2_PILLOW = 41, R2_FOOD_TRAY = 42,
- R2_LASER_HACKSAW = 43, R2_PHOTON_STUNNER = 44, R2_BATTERY = 45, R2_SOAKED_FACEMASK = 46,
- R2_LIGHT_BULB = 47, R2_ALCOHOL_LAMP = 48, R2_ALCOHOL_LAMP_2 = 49, R2_ALCOHOL_LAMP_3 = 50,
+ R2_LASER_HACKSAW = 43, R2_PHOTON_STUNNER = 44, R2_BATTERY = 45, R2_SOAKED_FACEMASK = 46,
+ R2_LIGHT_BULB = 47, R2_ALCOHOL_LAMP = 48, R2_ALCOHOL_LAMP_2 = 49, R2_ALCOHOL_LAMP_3 = 50,
R2_BROKEN_DISPLAY = 51, R2_TOOLBOX = 52, R2_LAST_INVENT = 53,
// Ringworld 2 cursors
- R2CURSORS_START = 0x8000, EXITCURSOR_N = 0x8007, EXITCURSOR_S = 0x8008, EXITCURSOR_W = 0x8009,
- EXITCURSOR_E = 0x800A, EXITCURSOR_LEFT_HAND = 0x800B, CURSOR_INVALID = 0x800C,
+ R2CURSORS_START = 0x8000, EXITCURSOR_N = 0x8007, EXITCURSOR_S = 0x8008, EXITCURSOR_W = 0x8009,
+ EXITCURSOR_E = 0x800A, EXITCURSOR_LEFT_HAND = 0x800B, CURSOR_INVALID = 0x800C,
EXITCURSOR_NE = 0x800D, EXITCURSOR_SE = 0x800E, EXITCURSOR_SW = 0x800F, EXITCURSOR_NW = 0x8010,
SHADECURSOR_UP = 0x8011, SHADECURSOR_DOWN = 0x8012, SHADECURSOR_HAND = 0x8013,
R2_CURSOR_20 = 0x8014, R2_CURSOR_21 = 0x8015, R2_CURSOR_22 = 0x8016, R2_CURSOR_23 = 0x8017,
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index b4c3127ea8..59eb59b194 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -380,6 +380,7 @@ void Ringworld2Globals::reset() {
_v5589E.set(0, 0, 0, 0);
_v558B6.set(0, 0, 0, 0);
_v558C2 = 0;
+ _animationCtr = 0;
_v5657C = 0;
_v565E1 = 0;
_v565E3 = 0;
@@ -493,6 +494,7 @@ void Ringworld2Globals::synchronize(Serializer &s) {
_v558B6.synchronize(s);
s.syncAsSint16LE(_v558C2);
+ s.syncAsSint16LE(_animationCtr);
s.syncAsSint16LE(_v5657C);
s.syncAsSint16LE(_v565E1);
s.syncAsSint16LE(_v565E3);
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index d80e4d9859..45226c921b 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -260,6 +260,7 @@ public:
Rect _v5589E;
Rect _v558B6;
int _v558C2;
+ int _animationCtr;
int _v565E1;
int _v565E3;
int _v565E5;
diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp
index acb615abae..5ddc7b6a1a 100644
--- a/engines/tsage/graphics.cpp
+++ b/engines/tsage/graphics.cpp
@@ -266,7 +266,7 @@ void GfxSurface::updateScreen() {
continue;
const byte *srcP = (const byte *)_customSurface->getBasePtr(r.left, r.top);
- g_system->copyRectToScreen(srcP, _customSurface->pitch, r.left, r.top,
+ g_system->copyRectToScreen(srcP, _customSurface->pitch, r.left, r.top,
r.width(), r.height());
}
@@ -287,7 +287,7 @@ void GfxSurface::addDirtyRect(const Rect &r) {
r2.translate(_bounds.left, _bounds.top);
// Add to the dirty rect list
- _dirtyRects.push_back(Rect(r2.left, r2.top,
+ _dirtyRects.push_back(Rect(r2.left, r2.top,
MIN(r2.right + 1, SCREEN_WIDTH), MIN(r2.bottom + 1, SCREEN_HEIGHT)));
}
}
@@ -1194,7 +1194,7 @@ void GfxDialog::setPalette() {
g_globals->_scenePalette.setPalette(g_globals->_fontColors.background, 1);
g_globals->_scenePalette.setPalette(g_globals->_fontColors.foreground, 1);
g_globals->_scenePalette.setEntry(255, 0xff, 0xff, 0xff);
- g_globals->_scenePalette.setPalette(255, 1);
+ g_globals->_scenePalette.setPalette(255, 1);
} else {
g_globals->_scenePalette.loadPalette(0);
g_globals->_scenePalette.setPalette(0, 1);
diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp
index f6f870be20..5987d78067 100644
--- a/engines/tsage/resources.cpp
+++ b/engines/tsage/resources.cpp
@@ -166,37 +166,7 @@ void TLib::loadSection(uint32 fileOffset) {
_file.seek(fileOffset);
_sections.fileOffset = fileOffset;
- loadSection(_file, _resources);
-}
-
-/**
- * Inner logic for decoding a section index into a passed resource list object
- */
-void TLib::loadSection(Common::File &f, ResourceList &resources) {
- if (f.readUint32BE() != 0x544D492D)
- error("Data block is not valid Rlb data");
-
- /*uint8 unknown1 = */f.readByte();
- uint16 numEntries = f.readByte();
-
- for (uint i = 0; i < numEntries; ++i) {
- uint16 id = f.readUint16LE();
- uint16 size = f.readUint16LE();
- uint16 uncSize = f.readUint16LE();
- uint8 sizeHi = f.readByte();
- uint8 type = f.readByte() >> 5;
- assert(type <= 1);
- uint32 offset = f.readUint32LE();
-
- ResourceEntry re;
- re.id = id;
- re.fileOffset = offset;
- re.isCompressed = type != 0;
- re.size = ((sizeHi & 0xF) << 16) | size;
- re.uncompressedSize = ((sizeHi & 0xF0) << 12) | uncSize;
-
- resources.push_back(re);
- }
+ ResourceManager::loadSection(_file, _resources);
}
struct DecodeReference {
@@ -342,6 +312,40 @@ byte *TLib::getResource(ResourceType resType, uint16 resNum, uint16 rlbNum, bool
return getResource(rlbNum, suppressErrors);
}
+/**
+ * Gets the offset of the start of a resource in the resource file
+ */
+uint32 TLib::getResourceStart(ResourceType resType, uint16 resNum, uint16 rlbNum, ResourceEntry &entry) {
+ // Find the correct section
+ SectionList::iterator i = _sections.begin();
+ while ((i != _sections.end()) && ((*i).resType != resType || (*i).resNum != resNum))
+ ++i;
+ if (i == _sections.end()) {
+ error("Unknown resource type %d num %d", resType, resNum);
+ }
+
+ // Load in the section index
+ loadSection((*i).fileOffset);
+
+ // Scan for an entry for the given Id
+ ResourceEntry *re = NULL;
+ ResourceList::iterator iter;
+ for (iter = _resources.begin(); iter != _resources.end(); ++iter) {
+ if ((*iter).id == rlbNum) {
+ re = &(*iter);
+ break;
+ }
+ }
+
+ // Throw an error if no resource was found, or the resource is compressed
+ if (!re || re->isCompressed)
+ error("Invalid resource Id #%d", rlbNum);
+
+ // Return the resource entry as well as the file offset
+ entry = *re;
+ return _sections.fileOffset + entry.fileOffset;
+}
+
void TLib::loadIndex() {
uint16 resNum, configId, fileOffset;
@@ -437,7 +441,7 @@ bool TLib::getMessage(int resNum, int lineNum, Common::String &result, bool supp
while (lineNum-- > 0) {
srcP += strlen(srcP) + 1;
-
+
if (srcP >= endP) {
if (suppressErrors)
return false;
@@ -453,36 +457,6 @@ bool TLib::getMessage(int resNum, int lineNum, Common::String &result, bool supp
/*--------------------------------------------------------------------------*/
-/**
- * Open up the main resource file and get an entry from the root section
- */
-bool TLib::getSectionEntry(Common::File &f, ResourceType resType, int rlbNum, int resNum,
- ResourceEntry &resEntry) {
- // Try and open the resource file
- if (!f.open(_filename))
- return false;
-
- // Load the root section index
- ResourceList resList;
- loadSection(f, resList);
-
- // Loop through the index for the desired entry
- ResourceList::iterator iter;
- for (iter = _resources.begin(); iter != _resources.end(); ++iter) {
- ResourceEntry &re = *iter;
- if (re.id == resNum) {
- // Found it, so exit
- resEntry = re;
- return true;
- }
- }
-
- // No matching entry found
- return false;
-}
-
-/*--------------------------------------------------------------------------*/
-
ResourceManager::~ResourceManager() {
for (uint idx = 0; idx < _libList.size(); ++idx)
delete _libList[idx];
@@ -557,4 +531,62 @@ Common::String ResourceManager::getMessage(int resNum, int lineNum, bool suppres
return Common::String();
}
+/*--------------------------------------------------------------------------*/
+
+/**
+ * Open up the given resource file using a passed file object. If the desired entry is found
+ * in the index, return the index entry for it, and move the file to the start of the resource
+ */
+bool ResourceManager::scanIndex(Common::File &f, ResourceType resType, int rlbNum, int resNum,
+ ResourceEntry &resEntry) {
+ // Load the root section index
+ ResourceList resList;
+ loadSection(f, resList);
+
+ // Loop through the index for the desired entry
+ ResourceList::iterator iter;
+ for (iter = resList.begin(); iter != resList.end(); ++iter) {
+ ResourceEntry &re = *iter;
+ if (re.id == resNum) {
+ // Found it, so exit
+ resEntry = re;
+ f.seek(re.fileOffset);
+ return true;
+ }
+ }
+
+ // No matching entry found
+ return false;
+}
+
+/**
+ * Inner logic for decoding a section index into a passed resource list object
+ */
+void ResourceManager::loadSection(Common::File &f, ResourceList &resources) {
+ if (f.readUint32BE() != 0x544D492D)
+ error("Data block is not valid Rlb data");
+
+ /*uint8 unknown1 = */f.readByte();
+ uint16 numEntries = f.readByte();
+
+ for (uint i = 0; i < numEntries; ++i) {
+ uint16 id = f.readUint16LE();
+ uint16 size = f.readUint16LE();
+ uint16 uncSize = f.readUint16LE();
+ uint8 sizeHi = f.readByte();
+ uint8 type = f.readByte() >> 5;
+ assert(type <= 1);
+ uint32 offset = f.readUint32LE();
+
+ ResourceEntry re;
+ re.id = id;
+ re.fileOffset = offset;
+ re.isCompressed = type != 0;
+ re.size = ((sizeHi & 0xF) << 16) | size;
+ re.uncompressedSize = ((sizeHi & 0xF0) << 12) | uncSize;
+
+ resources.push_back(re);
+ }
+}
+
} // end of namespace TsAGE
diff --git a/engines/tsage/resources.h b/engines/tsage/resources.h
index 2b5561b184..45cecf8521 100644
--- a/engines/tsage/resources.h
+++ b/engines/tsage/resources.h
@@ -150,19 +150,19 @@ private:
SectionList _sections;
void loadSection(uint32 fileOffset);
- void loadSection(Common::File &f, ResourceList &resources);
void loadIndex();
public:
TLib(MemoryManager &memManager, const Common::String &filename);
~TLib();
+ const Common::String &getFilename() { return _filename; }
+ const SectionList &getSections() { return _sections; }
byte *getResource(uint16 id, bool suppressErrors = false);
byte *getResource(ResourceType resType, uint16 resNum, uint16 rlbNum, bool suppressErrors = false);
+ uint32 getResourceStart(ResourceType resType, uint16 resNum, uint16 rlbNum, ResourceEntry &entry);
bool getPalette(int paletteNum, byte *palData, uint *startNum, uint *numEntries);
byte *getSubResource(int resNum, int rlbNum, int index, uint *size, bool suppressErrors = false);
bool getMessage(int resNum, int lineNum, Common::String &result, bool suppressErrors = false);
-
- bool getSectionEntry(Common::File &f, ResourceType resType, int rlbNum, int resNum, ResourceEntry &resEntry);
};
class ResourceManager {
@@ -179,6 +179,9 @@ public:
byte *getSubResource(int resNum, int rlbNum, int index, uint *size, bool suppressErrors = false);
Common::String getMessage(int resNum, int lineNum, bool suppressErrors = false);
TLib &first() { return **_libList.begin(); }
+
+ static bool scanIndex(Common::File &f, ResourceType resType, int rlbNum, int resNum, ResourceEntry &resEntry);
+ static void loadSection(Common::File &f, ResourceList &resources);
};
diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp
index 5178fe6418..30ae6be7b1 100644
--- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp
+++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp
@@ -389,7 +389,7 @@ HelpDialog::HelpDialog() {
_msgTitle._bounds.moveTo(5, 0);
_msgVersion.set(GAME_VERSION, 172, ALIGN_CENTER);
_msgVersion._bounds.moveTo(5, _msgTitle._bounds.bottom + 3);
- addElements(&_msgTitle, &_msgVersion, NULL);
+ addElements(&_msgTitle, &_msgVersion, NULL);
// Set buttons
_btnList[0].setText(F2);
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 89cf831088..3c5530feec 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -40,16 +40,16 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
switch (sceneNumber) {
/* Scene group #0 */
- case 50:
+ case 50:
// Waking up cutscene
return new Scene50();
- case 100:
+ case 100:
// Quinn's room
return new Scene100();
- case 125:
+ case 125:
// Computer console
return new Scene125();
- case 150:
+ case 150:
// Empty Bedroom #1
return new Scene150();
case 160:
@@ -166,7 +166,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
// Ice Maze: Large empty room
return new Scene2400();
case 2425:
- // Ice Maze:
+ // Ice Maze:
return new Scene2425();
case 2430:
// Ice Maze: Bedroom
@@ -326,7 +326,7 @@ void SceneExt::postInit(SceneObjectList *OwnerList) {
int prevScene = R2_GLOBALS._sceneManager._previousScene;
int sceneNumber = R2_GLOBALS._sceneManager._sceneNumber;
- if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50))
+ if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50))
|| (sceneNumber == 50)
|| ((prevScene == 205) && (sceneNumber == 100))
|| ((prevScene == 180) && (sceneNumber == 100))) {
@@ -549,7 +549,7 @@ void SceneExt::scalePalette(int RFactor, int GFactor, int BFactor) {
tmp += abs(tmpPal[(3 * j) + 2] - newB);
if (tmp >= varC)
continue;
-
+
varC = tmp;
varD = j;
}
@@ -628,11 +628,11 @@ void SceneHandlerExt::setupPaletteMaps() {
diffSum += ABS(palP[pIndex2 * 3 + 1] - g);
if (diffSum >= threshold)
continue;
-
+
diffSum += ABS(palP[pIndex2 * 3 + 2] - b);
if (diffSum >= threshold)
continue;
-
+
threshold = diffSum;
foundIndex = pIndex2;
}
@@ -1257,12 +1257,12 @@ void SceneAreaObject::setDetails(int visage, int strip, int frameNumber, const C
_cursorNum = CURSOR_INVALID;
Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene;
scene->_sceneAreas.push_front(this);
-
+
_insetCount = ++R2_GLOBALS._insetUp;
}
void SceneAreaObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) {
- ((SceneHotspot *)(this))->setDetails(resNum, lookLineNum, talkLineNum, useLineNum,
+ ((SceneHotspot *)(this))->setDetails(resNum, lookLineNum, talkLineNum, useLineNum,
2, (SceneItem *)NULL);
}
@@ -1306,7 +1306,7 @@ void UnkObject1200::sub51AE9(int arg1) {
int UnkObject1200::sub51AF8(Common::Point pt) {
if (!_rect1.contains(pt))
return -1;
-
+
int tmp1 = (pt.x - _rect1.left + _field2E) / _field2A;
int tmp2 = (pt.y - _rect1.top + _field30) / _field2C;
@@ -1358,7 +1358,7 @@ void UnkObject1200::sub9EDE8(Rect rect) {
int UnkObject1200::sub9EE22(int &arg1, int &arg2) {
arg1 /= _field2A;
arg2 /= _field2C;
-
+
if ((arg1 >= 0) && (arg2 >= 0) && (_field26 > arg1) && (_field28 > arg2)) {
return _field16[(((_field26 * arg2) + arg1) * 2)];
}
@@ -1368,13 +1368,13 @@ int UnkObject1200::sub9EE22(int &arg1, int &arg2) {
void Scene1200::sub9DAD6(int indx) {
_object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);
-
+
switch (indx) {
case 0:
- if ( ((_object1.sub51AF8(Common::Point(200, 50)) > 36) || (_object1.sub51AF8(Common::Point(200, 88)) > 36))
- && ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4))
- || ((R2_GLOBALS._v56AA2 == 13) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2))
- || ((R2_GLOBALS._v56AA2 == 29) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1))
+ if ( ((_object1.sub51AF8(Common::Point(200, 50)) > 36) || (_object1.sub51AF8(Common::Point(200, 88)) > 36))
+ && ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4))
+ || ((R2_GLOBALS._v56AA2 == 13) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2))
+ || ((R2_GLOBALS._v56AA2 == 29) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1))
|| ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 41)) )
) {
R2_GLOBALS._player.disableControl();
@@ -1415,10 +1415,10 @@ void Scene1200::sub9DAD6(int indx) {
}
break;
case 1:
- if ( ((_object1.sub51AF8(Common::Point(120, 50)) > 36) || (_object1.sub51AF8(Common::Point(120, 88)) > 36))
- && ( ((R2_GLOBALS._v56AA2 == 7) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4))
- || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2))
- || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1))
+ if ( ((_object1.sub51AF8(Common::Point(120, 50)) > 36) || (_object1.sub51AF8(Common::Point(120, 88)) > 36))
+ && ( ((R2_GLOBALS._v56AA2 == 7) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4))
+ || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2))
+ || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1))
|| ((R2_GLOBALS._v56AA2 == 5) && (R2_GLOBALS._v56AA4 == 5)) )
) {
R2_GLOBALS._player.disableControl();
@@ -1459,8 +1459,8 @@ void Scene1200::sub9DAD6(int indx) {
}
break;
case 2:
- if ( ((_object1.sub51AF8(Common::Point(140, 110)) > 36) || (_object1.sub51AF8(Common::Point(178, 110)) > 36))
- && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 5) && (_field418 != 3))
+ if ( ((_object1.sub51AF8(Common::Point(140, 110)) > 36) || (_object1.sub51AF8(Common::Point(178, 110)) > 36))
+ && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 5) && (_field418 != 3))
|| ((R2_GLOBALS._v56AA2 == 41) && (R2_GLOBALS._v56AA4 == 21)) )
) {
R2_GLOBALS._player.disableControl();
@@ -1501,8 +1501,8 @@ void Scene1200::sub9DAD6(int indx) {
}
break;
case 3:
- if ( ((_object1.sub51AF8(Common::Point(140, 30)) > 36) || (_object1.sub51AF8(Common::Point(178, 30)) > 36))
- && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 9) && (_field418 != 3))
+ if ( ((_object1.sub51AF8(Common::Point(140, 30)) > 36) || (_object1.sub51AF8(Common::Point(178, 30)) > 36))
+ && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 9) && (_field418 != 3))
|| ((R2_GLOBALS._v56AA2 == 35) && (R2_GLOBALS._v56AA4 == 17)) )
) {
R2_GLOBALS._player.disableControl();
@@ -1551,24 +1551,88 @@ void Scene1200::sub9DAD6(int indx) {
/*--------------------------------------------------------------------------*/
+void AnimationSplice::load(Common::File &f) {
+ _spliceOffset = f.readUint32LE();
+ f.skip(6);
+ _drawMode = f.readByte();
+ _secondaryIndex = f.readByte();
+}
+
+/*--------------------------------------------------------------------------*/
+
+AnimationSplices::AnimationSplices() {
+ _pixelData = NULL;
+}
+
+AnimationSplices::~AnimationSplices() {
+ delete[] _pixelData;
+}
+
+void AnimationSplices::load(Common::File &f) {
+ f.skip(4);
+ _dataSize = f.readUint32LE();
+ f.skip(8);
+ _dataSize2 = f.readUint32LE();
+ f.skip(28);
+
+ // Load the four splice indexes
+ for (int idx = 0; idx < 4; ++idx)
+ _splices[idx].load(f);
+}
+
+int AnimationSplices::loadPixels(Common::File &f, int splicesSize) {
+ delete[] _pixelData;
+ _pixelData = new byte[splicesSize];
+ return f.read(_pixelData, splicesSize);
+}
+
+/*--------------------------------------------------------------------------*/
+
+void AnimationPlayerSubData::load(Common::File &f) {
+ uint32 posStart = f.pos();
+
+ f.skip(6);
+ _field6 = f.readUint16LE();
+ f.skip(2);
+ _fieldA = f.readUint16LE();
+ _fieldC = f.readUint16LE();
+ _fieldE = f.readUint16LE();
+ f.skip(2);
+ _sliceSize = f.readUint16LE();
+ _ySlices = f.readUint16LE();
+ _field16 = f.readUint16LE();
+ f.skip(4);
+ _palStart = f.readUint16LE();
+ _palSize = f.readUint16LE();
+ f.read(_palData, 768);
+ _field320 = f.readSint32LE();
+ f.skip(12);
+ _splices.load(f);
+
+ uint32 posEnd = f.pos();
+ assert((posEnd - posStart) == 0x390);
+}
+
+/*--------------------------------------------------------------------------*/
+
AnimationPlayer::AnimationPlayer(): EventHandler() {
_endAction = NULL;
-
- _fieldA = NULL;
- _field16 = NULL;
-
+
+ _animData1 = NULL;
+ _animData2 = NULL;
+
_screenBounds = R2_GLOBALS._gfxManagerInstance._bounds;
_rect1 = R2_GLOBALS._gfxManagerInstance._bounds;
- _field3C = 0;
+ _paletteMode = 0;
_field3A = 1;
- _field5A = 0;
- _field58 = 0;
+ _sliceHeight = 1;
+ _field58 = 1;
_endAction = NULL;
}
AnimationPlayer::~AnimationPlayer() {
if (!method3())
- method4();
+ close();
}
void AnimationPlayer::synchronize(Serializer &s) {
@@ -1586,8 +1650,8 @@ void AnimationPlayer::remove() {
void AnimationPlayer::process(Event &event) {
if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE) &&
(_field3A)) {
- _field90C = _field576;
- }
+ _field90C = _subData._field6;
+ }
}
void AnimationPlayer::dispatch() {
@@ -1595,9 +1659,9 @@ void AnimationPlayer::dispatch() {
uint32 gameDiff = (gameFrame > _gameFrame) ? gameFrame - _gameFrame : _gameFrame - gameFrame;
if (gameDiff >= _field910) {
- drawFrame(_field904 % _field57C);
+ drawFrame(_field904 % _subData._fieldC);
++_field904;
- _field90C = _field904 / _field57C;
+ _field90C = _field904 / _subData._fieldC;
if (_field90C == _field90E)
method2();
@@ -1607,53 +1671,222 @@ void AnimationPlayer::dispatch() {
}
}
-bool AnimationPlayer::load(int rlbNum, Action *endAction) {
- ResourceEntry resEntry;
- if (!g_resourceManager->first().getSectionEntry(_resourceFile, RES_IMAGE, rlbNum, 0, resEntry)) {
- warning("Couldn't find resource index");
- // TODO: Complete animation loading
+bool AnimationPlayer::load(int animId, Action *endAction) {
+ // Open up the main resource file for access
+ TLib &libFile = g_resourceManager->first();
+ if (!_resourceFile.open(libFile.getFilename()))
+ error("Could not open resource");
+
+ // Get the offset of the given resource and seek to it in the player's file reference
+ ResourceEntry entry;
+ uint32 fileOffset = libFile.getResourceStart(RES_IMAGE, animId, 0, entry);
+ _resourceFile.seek(fileOffset);
+
+ // At this point, the file is pointing to the start of the resource data
+
+ // Set the end action
+ _endAction = endAction;
+
+ // Load the sub data block
+ _subData.load(_resourceFile);
+
+ // Set other properties
+ _field908 = -1;
+ _field904 = 0;
+ _field910 = 60 / _subData._fieldA;
+ _gameFrame = R2_GLOBALS._events.getFrameNumber() - _field910;
+
+ if (_subData._field320) {
+ _dataNeeded = _subData._field320;
+ } else {
+ int v = (_subData._sliceSize + 2) * _subData._ySlices * _subData._fieldC;
+ _dataNeeded = (_subData._field16 / _subData._fieldC) + v + 96;
}
+
+ debugC(1, ktSageDebugGraphics, "Data needed %d", _dataNeeded);
- _resourceFile.close();
- return false;
+ // Set up animation data array
+ _animData1 = new AnimationData();
+ _sliceCurrent = _animData1;
+
+ if (_subData._fieldC <= 1) {
+ _animData2 = NULL;
+ _sliceNext = _sliceCurrent;
+ } else {
+ _animData2 = new AnimationData();
+ _sliceNext = _animData2;
+ }
+
+ _field90C = 0;
+ _field90E = 1;
+
+ // Load up the first splices set
+ _sliceCurrent->_dataSize = _subData._splices._dataSize;
+ _sliceCurrent->_splices = _subData._splices;
+ int splicesSize = _sliceCurrent->_dataSize - 96;
+ int readSize = _sliceCurrent->_splices.loadPixels(_resourceFile, splicesSize);
+ _sliceCurrent->_animSlicesSize = readSize + 96;
+
+ if (_sliceNext != _sliceCurrent) {
+ getSlices();
+ }
+
+ // Handle starting palette
+ switch (_paletteMode) {
+ case 0:
+ // Use existing active palette
+ _palette.getPalette();
+ for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) {
+ uint r, g, b;
+ _palette.getEntry(idx, &r, &g, &b);
+ R2_GLOBALS._scenePalette.setEntry(idx, r, g, b);
+ }
+
+ R2_GLOBALS._sceneManager._hasPalette = true;
+ break;
+ case 2:
+ break;
+
+ default:
+ for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) {
+ byte r = _subData._palData[idx * 3];
+ byte g = _subData._palData[idx * 3 + 1];
+ byte b = _subData._palData[idx * 3 + 2];
+
+ int palIndex = R2_GLOBALS._scenePalette.indexOf(r, g, b);
+ _palIndexes[idx] = palIndex;
+ }
+ break;
+ }
+
+ ++R2_GLOBALS._animationCtr;
+ _field38 = 1;
+ return true;
}
-void AnimationPlayer::drawFrame(int frameIndex) {
- uint32 v = READ_LE_UINT32(_dataP);
-warning("v = %d", v);
-//TODO
+void AnimationPlayer::drawFrame(int spliceIndex) {
+ assert(spliceIndex < 4);
+ AnimationSplices &splices = _sliceCurrent->_splices;
+ AnimationSplice &splice = _sliceCurrent->_splices._splices[spliceIndex];
- // End check
- if (_field56 == 42) {
- _screenBounds.expandPanes();
+ byte *sliceDataStart = &splices._pixelData[splice._spliceOffset];
+ byte *sliceData1 = sliceDataStart;
- R2_GLOBALS._sceneObjects->draw();
- } else {
- if (R2_GLOBALS._sceneManager._hasPalette) {
- R2_GLOBALS._sceneManager._hasPalette = false;
- R2_GLOBALS._scenePalette.refresh();
+ Rect playerBounds = _screenBounds;
+ int y = _screenBounds.top;
+ R2_GLOBALS._screenSurface.addDirtyRect(playerBounds);
+
+ Graphics::Surface surface = R2_GLOBALS._screenSurface.lockSurface();
+
+ // Handle different drawing modes
+ switch (splice._drawMode) {
+ case 0:
+ // Draw from uncompressed source
+ for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) {
+ for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) {
+ // TODO: Check of _subData._fieldE was done for two different kinds of
+ // line slice drawing in original
+ const byte *pSrc = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2);
+ byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++);
+
+ Common::copy(pSrc, pSrc + _subData._sliceSize, pDest);
+ }
}
+ break;
+
+ case 1:
+ switch (splice._secondaryIndex) {
+ case 0xfe:
+ // Draw from uncompressed source with optional skipped rows
+ for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) {
+ for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) {
+ int offset = READ_LE_UINT16(sliceData1 + sliceNum * 2);
+
+ if (offset) {
+ const byte *pSrc = (const byte *)sliceDataStart + offset;
+ byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++);
+
+ Common::copy(pSrc, pSrc + _subData._sliceSize, pDest);
+ }
+ }
+ }
+ break;
+ case 0xff:
+ // Draw from RLE compressed source
+ for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) {
+ for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) {
+ // TODO: Check of _subData._fieldE was done for two different kinds of
+ // line slice drawing in original
+ const byte *pSrc = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2);
+ byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++);
+
+ rleDecode(pSrc, pDest, _subData._sliceSize);
+ }
+ }
+ break;
+ default: {
+ // Draw from two splice sets simultaneously
+ AnimationSplice &splice2 = _sliceCurrent->_splices._splices[splice._secondaryIndex];
+ byte *sliceData2 = &splices._pixelData[splice2._spliceOffset];
+
+ for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) {
+ for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) {
+ const byte *pSrc1 = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData2 + sliceNum * 2);
+ const byte *pSrc2 = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2);
+ byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++);
+
+ if (splice2._drawMode == 0) {
+ // Uncompressed background, foreground compressed
+ Common::copy(pSrc1, pSrc1 + _subData._sliceSize, pDest);
+ rleDecode(pSrc2, pDest, _subData._sliceSize);
+ } else {
+ // Both background and foreground is compressed
+ rleDecode(pSrc1, pDest, _subData._sliceSize);
+ rleDecode(pSrc2, pDest, _subData._sliceSize);
+ }
+ }
+ }
+ break;
+ }
+ }
+ default:
+ break;
}
}
void AnimationPlayer::method2() {
-
+ _field90C = _field90E++;
+ _field904 = _field90C * _subData._fieldC;
+ _field908 = _field904 - 1;
+
+ if (_sliceNext == _sliceCurrent) {
+ int dataSize = _sliceCurrent->_splices._dataSize2;
+ _sliceCurrent->_dataSize = dataSize;
+
+ dataSize -= 96;
+ assert(dataSize >= 0);
+ _sliceCurrent->_splices.load(_resourceFile);
+ _sliceCurrent->_animSlicesSize = _sliceCurrent->_splices.loadPixels(_resourceFile, dataSize);
+ } else {
+ SWAP(_sliceCurrent, _sliceNext);
+ getSlices();
+ }
}
bool AnimationPlayer::method3() {
- return (_field90C >= _field576);
+ return (_field90C >= _subData._field6);
}
-void AnimationPlayer::method4() {
+void AnimationPlayer::close() {
if (_field38) {
- switch (_field3C) {
+ switch (_paletteMode) {
case 0:
R2_GLOBALS._scenePalette.replace(&_palette);
changePane();
R2_GLOBALS._sceneManager._hasPalette = true;
break;
case 2:
- proc14();
+ closing();
break;
default:
changePane();
@@ -1661,7 +1894,61 @@ void AnimationPlayer::method4() {
}
}
-// TODO
+ // Close the resource file
+ _resourceFile.close();
+
+ if (_field56 != 42) {
+ // flip screen in original
+ }
+
+ // Free animation objects
+ delete _animData1;
+ delete _animData2;
+ _animData1 = NULL;
+ _animData2 = NULL;
+
+ _field38 = 0;
+ R2_GLOBALS._animationCtr = MAX(R2_GLOBALS._animationCtr, 0);
+}
+
+void AnimationPlayer::rleDecode(const byte *pSrc, byte *pDest, int size) {
+ while (size > 0) {
+ byte v = *pSrc++;
+ if (!(v & 0x80)) {
+ // Following uncompressed set of bytes
+ Common::copy(pSrc, pSrc + v, pDest);
+ pSrc += v;
+ pDest += v;
+ size -= v;
+ } else {
+ int count = v & 0x3F;
+ size -= count;
+
+ if (!(v & 0x40)) {
+ // Skip over a number of bytes
+ pDest += count;
+ } else {
+ // Replicate a number of bytes
+ Common::fill(pDest, pDest + count, *pSrc++);
+ pDest += count;
+ }
+ }
+ }
+}
+
+void AnimationPlayer::getSlices() {
+ assert((_sliceNext == _animData1) || (_sliceNext == _animData2));
+ assert((_sliceCurrent == _animData1) || (_sliceCurrent == _animData2));
+
+ _sliceNext->_dataSize = _sliceCurrent->_splices._dataSize2;
+ if (_sliceNext->_dataSize) {
+ if (_sliceNext->_dataSize >= _dataNeeded)
+ error("Bogus dataNeeded == %d / %d", _sliceNext->_dataSize, _dataNeeded);
+ }
+
+ int dataSize = _sliceNext->_dataSize - 96;
+ _sliceNext->_splices.load(_resourceFile);
+ _sliceNext->_animSlicesSize = _sliceNext->_splices.loadPixels(_resourceFile, dataSize);
}
/*--------------------------------------------------------------------------*/
diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h
index 98fcaae981..6100efc8bc 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.h
+++ b/engines/tsage/ringworld2/ringworld2_logic.h
@@ -325,24 +325,78 @@ public:
virtual Common::String getClassName() { return "UnkObject1200"; }
};
+/*--------------------------------------------------------------------------*/
+
+class AnimationSplice {
+public:
+ int _spliceOffset;
+ int _drawMode;
+ int _secondaryIndex;
+public:
+ void load(Common::File &f);
+};
+
+class AnimationSplices {
+public:
+ int _dataSize;
+ int _dataSize2;
+ AnimationSplice _splices[4];
+ byte *_pixelData;
+public:
+ AnimationSplices();
+ ~AnimationSplices();
+
+ void load(Common::File &f);
+ int loadPixels(Common::File &f, int splicesSize);
+};
+
+class AnimationPlayerSubData {
+public:
+ int _field6;
+ int _fieldA;
+ int _fieldC;
+ int _fieldE;
+ int _sliceSize;
+ int _ySlices;
+ int _field16;
+ int _palStart;
+ int _palSize;
+ byte _palData[256 * 3];
+ int32 _field320;
+ AnimationSplices _splices;
+public:
+ void load(Common::File &f);
+};
+
+class AnimationData {
+public:
+ AnimationSplices _splices;
+ int _dataSize;
+ int _animSlicesSize;
+};
+
class AnimationPlayer: public EventHandler {
+private:
+ void rleDecode(const byte *pSrc, byte *pDest, int size);
+
+ void drawFrame(int spliceIndex);
+ void method2();
+ void getSlices();
public:
+ AnimationData *_animData1, *_animData2;
+ AnimationData *_sliceCurrent;
+ AnimationData *_sliceNext;
Common::File _resourceFile;
- void *_fieldA;
- void *_field16;
-
- byte *_dataP;
Rect _rect1, _screenBounds;
int _field38;
- int _field3A, _field3C;
+ int _field3A, _paletteMode;
int _field56;
- int _field58, _field5A;
+ int _field58, _sliceHeight;
+ byte _palIndexes[256];
ScenePalette _palette;
- byte _palData[256 * 3];
+ AnimationPlayerSubData _subData;
Action *_endAction;
- int _field576;
- int _field57C;
- int _palStart, _palSize;
+ int _dataNeeded;
int _field904;
int _field908;
int _field90C;
@@ -359,14 +413,11 @@ public:
virtual void dispatch();
virtual void flipPane() {}
virtual void changePane() {}
- virtual void proc14() {}
+ virtual void closing() {}
- bool load(int rlbNum, Action *endAction = NULL);
- void drawFrame(int frameIndex);
- void method2();
+ bool load(int animId, Action *endAction = NULL);
bool method3();
- void method4();
- void method5() {}
+ void close();
};
class AnimationPlayerExt: public AnimationPlayer {
diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp
index dab9afb269..292e9c2f5e 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp
@@ -125,17 +125,17 @@ bool Scene100::Table::startAction(CursorType action, Event &event) {
scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, (SceneItem *)NULL);
}
- scene->setAction(&scene->_sequenceManager2, scene, 108, this, &scene->_object3,
+ scene->setAction(&scene->_sequenceManager2, scene, 108, this, &scene->_object3,
&scene->_stasisNegator, &R2_GLOBALS._player, NULL);
} else {
scene->_sceneMode = 109;
- scene->setAction(&scene->_sequenceManager2, scene, 109, this, &scene->_object3,
+ scene->setAction(&scene->_sequenceManager2, scene, 109, this, &scene->_object3,
&scene->_stasisNegator, &R2_GLOBALS._player, NULL);
}
return true;
case CURSOR_TALK:
R2_GLOBALS._player.disableControl();
-
+
if (_strip == 2) {
SceneItem::display2(100, 18);
scene->_sceneMode = 102;
@@ -149,12 +149,12 @@ bool Scene100::Table::startAction(CursorType action, Event &event) {
scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, (SceneItem *)NULL);
}
- scene->setAction(&scene->_sequenceManager2, scene, 102, this, &scene->_object3,
+ scene->setAction(&scene->_sequenceManager2, scene, 102, this, &scene->_object3,
&scene->_stasisNegator, NULL);
} else {
SceneItem::display2(100, 19);
scene->_sceneMode = 103;
- scene->setAction(&scene->_sequenceManager2, scene, 103, this, &scene->_object3,
+ scene->setAction(&scene->_sequenceManager2, scene, 103, this, &scene->_object3,
&scene->_stasisNegator, NULL);
}
return true;
@@ -264,7 +264,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) {
_bedLights2.setup(100, 3, 1);
_bedLights2.setPosition(Common::Point(89, 147));
_bedLights2.fixPriority(250);
- _bedLights2.animate(ANIM_MODE_7, 0, NULL);
+ _bedLights2.animate(ANIM_MODE_7, 0, NULL);
_bedLights2._numFrames = 3;
_wardrobe.postInit();
@@ -289,7 +289,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.setVisage(10);
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
R2_GLOBALS._player.disableControl();
-
+
_background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 100, 0, 1, -1, 1, NULL);
switch (R2_GLOBALS._sceneManager._previousScene) {
@@ -330,7 +330,7 @@ void Scene100::signal() {
case 109:
_table.setStrip(2);
_table.setFrame(3);
-
+
_object3.remove();
_stasisNegator.remove();
R2_GLOBALS._player.enableControl();
@@ -413,7 +413,7 @@ Scene125::Icon::Icon(): SceneActor() {
void Scene125::Icon::postInit(SceneObjectList *OwnerList) {
SceneObject::postInit();
-
+
_object1.postInit();
_object1.fixPriority(255);
_object1.hide();
@@ -621,7 +621,7 @@ void Scene125::postInit(SceneObjectList *OwnerList) {
loadScene(160);
_palette.loadPalette(0);
- if (R2_GLOBALS._sceneManager._previousScene != 125)
+ if (R2_GLOBALS._sceneManager._previousScene != 125)
// Save the prior scene to return to when the console is turned off
R2_GLOBALS._player._oldCharacterScene[1] = R2_GLOBALS._sceneManager._previousScene;
@@ -638,7 +638,7 @@ void Scene125::postInit(SceneObjectList *OwnerList) {
_object6.postInit();
_object6.setup(162, 1, 1);
_object6.setPosition(Common::Point(214, 168));
-
+
_item4.setDetails(Rect(27, 145, 81, 159), 126, 9, -1, -1, 1, NULL);
_item3.setDetails(Rect(144, 119, 286, 167), 126, 6, 7, 8, 1, NULL);
_item2.setDetails(1, 126, 3, 4, 5);
@@ -669,7 +669,7 @@ void Scene125::signal() {
_icon1._object2.postInit();
_icon1._object2.setup(160, 7, 1);
_icon1._object2.setPosition(Common::Point(106, 41));
-
+
_icon2.setup(160, 1, 1);
_icon2.setPosition(Common::Point(80, 32));
_icon2._object2.postInit();
@@ -766,7 +766,7 @@ void Scene125::signal() {
case 11:
R2_GLOBALS._player.enableControl();
R2_GLOBALS._player._canWalk = false;
-
+
if ((_consoleMode >= 27) && (_consoleMode <= 30)) {
consoleAction(11);
}
@@ -915,7 +915,7 @@ void Scene125::consoleAction(int id) {
_icon2.hideIcon();
_icon3.hideIcon();
_icon5.setIcon(24);
-
+
_icon4.setPosition(Common::Point(52, 107));
_icon4._sceneRegionId = 9;
_icon4.setIcon(25);
@@ -923,7 +923,7 @@ void Scene125::consoleAction(int id) {
_icon6.setIcon(26);
_sceneMode = 10;
-
+
_palette.loadPalette(161);
R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this);
break;
@@ -958,7 +958,7 @@ void Scene125::consoleAction(int id) {
_icon2.hideIcon();
_icon3.hideIcon();
_icon5.setIcon(24);
-
+
_icon4.setPosition(Common::Point(52, 107));
_icon4._sceneRegionId = 9;
_icon4.setIcon(25);
@@ -966,7 +966,7 @@ void Scene125::consoleAction(int id) {
_icon6.setIcon(26);
_sceneMode = 10;
-
+
_palette.loadPalette(161);
R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this);
}
@@ -1089,7 +1089,7 @@ void Scene125::consoleAction(int id) {
_icon3.hideIcon();
_icon4.hideIcon();
_icon5.setIcon(24);
-
+
_icon4.setPosition(Common::Point(52, 107));
_icon4._sceneRegionId = 9;
_icon4.setIcon(25);
@@ -1097,7 +1097,7 @@ void Scene125::consoleAction(int id) {
_icon6.setIcon(26);
_sceneMode = 10;
-
+
_palette.loadPalette(161);
R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this);
break;
@@ -1134,7 +1134,7 @@ void Scene125::consoleAction(int id) {
*/
void Scene125::setDetails(int resNum, int lineNum) {
stop();
-
+
Common::String msg = g_resourceManager->getMessage(resNum, lineNum, true);
if (!msg.empty()) {
@@ -1243,7 +1243,7 @@ void Scene150::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.setVisage(10);
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
R2_GLOBALS._player.disableControl();
-
+
_background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 150, 0, 1, -1, 1, NULL);
_sceneMode = 100;
@@ -1420,7 +1420,7 @@ void Scene160::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player._uiEnabled = false;
R2_GLOBALS._player.enableControl();
R2_GLOBALS._player._canWalk = false;
-
+
R2_GLOBALS._uiElements.hide();
R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
@@ -1555,13 +1555,13 @@ void Scene180::signal() {
case 1:
_field412 = 1;
R2_GLOBALS._sceneManager._hasPalette = true;
- _animationPlayer._field3C = 2;
+ _animationPlayer._paletteMode = 2;
_animationPlayer._v = 1;
_animationPlayer._field56 = 1;
R2_GLOBALS._scene180Mode = 1;
_animationPlayer.load(1, NULL);
- R2_GLOBALS._scenePalette.loadPalette(_animationPlayer._palData, 0, 256);
+ R2_GLOBALS._scenePalette.loadPalette(_animationPlayer._subData._palData, 0, 256);
R2_GLOBALS._sound1.play(1);
break;
@@ -1598,14 +1598,14 @@ void Scene180::signal() {
break;
case 5:
- _animationPlayer._field3C = 2;
+ _animationPlayer._paletteMode = 2;
_animationPlayer._v = 1;
_animationPlayer._field56 = 1;
R2_GLOBALS._scene180Mode = 2;
_animationPlayer.load(2);
_field412 = 1;
- R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 6, NULL);
+ R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 6, NULL);
R2_GLOBALS._sound1.play(2);
break;
@@ -1664,7 +1664,7 @@ void Scene180::signal() {
case 15:
setAction(&_sequenceManager, this, 4002, &_object4, &_object5, NULL);
break;
-
+
case 17:
setAction(&_sequenceManager, this, 4003, &_object4, &_object5, NULL);
break;
@@ -1701,7 +1701,7 @@ void Scene180::signal() {
case 29:
_field412 = 1;
- _animationPlayer._field3C = 0;
+ _animationPlayer._paletteMode = 0;
_animationPlayer._v = 1;
_animationPlayer._field56 = 42;
R2_GLOBALS._scene180Mode = 3;
@@ -1730,7 +1730,7 @@ void Scene180::signal() {
case 32:
_field412 = 1;
-
+
_object2.postInit();
_object2.setPosition(Common::Point(161, 97));
_object2.hide();
@@ -1790,7 +1790,7 @@ void Scene180::signal() {
_object4.remove();
_object5.setAction(NULL);
_object5.remove();
-
+
R2_GLOBALS._sound2.fadeOut2(NULL);
R2_GLOBALS._sound1.fadeOut2(NULL);
break;
@@ -1801,12 +1801,12 @@ void Scene180::signal() {
break;
case 40:
- _animationPlayer._field3C = 2;
+ _animationPlayer._paletteMode = 2;
_animationPlayer._field56 = 1;
R2_GLOBALS._scene180Mode = 4;
if (_animationPlayer.load(4)) {
_animationPlayer.dispatch();
- R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 8, this);
+ R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 8, this);
} else {
_sceneMode = 43;
setFrameInc(1);
@@ -1834,19 +1834,19 @@ void Scene180::signal() {
break;
case 45:
- R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 28, this);
+ R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 28, this);
break;
case 48:
_field412 = 1;
- _animationPlayer._field3C = 2;
+ _animationPlayer._paletteMode = 2;
_animationPlayer._v = 1;
_animationPlayer._field56 = 1;
R2_GLOBALS._scene180Mode = 15;
_animationPlayer.load(15, NULL);
R2_GLOBALS._sound1.play(9);
- R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 6, NULL);
+ R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 6, NULL);
break;
case 49:
@@ -1900,7 +1900,7 @@ void Scene180::dispatch() {
if (_animationPlayer._v) {
if (_animationPlayer.method3()) {
_animationPlayer._v = 0;
- _animationPlayer.method4();
+ _animationPlayer.close();
_animationPlayer.remove();
signal();
@@ -2389,7 +2389,7 @@ void Scene205::dispatch() {
void Scene205::setup() {
const Common::Point pointList1[3] = { Common::Point(2, 50), Common::Point(100, 28), Common::Point(53, 15) };
const Common::Point pointList2[3] = { Common::Point(289, 192), Common::Point(125, 60), Common::Point(130, 40) };
- const Common::Point pointList3[4] = {
+ const Common::Point pointList3[4] = {
Common::Point(140, 149), Common::Point(91, 166), Common::Point(299, 46), Common::Point(314, 10)
};
@@ -2445,13 +2445,13 @@ void Scene205::setup() {
/**
* Handles moving a group of stars in the scene background
*/
-void Scene205::processList(Object **ObjList, int count, const Common::Rect &bounds,
+void Scene205::processList(Object **ObjList, int count, const Common::Rect &bounds,
int xMultiply, int yMultiply, int xCenter, int yCenter) {
for (int idx = 0; idx < count; ++idx) {
Object *obj = ObjList[idx];
Common::Point pt(obj->_position.x - xCenter, obj->_position.y - yCenter);
- if ((obj->_position.x <= 319) && (obj->_position.x >= 0) &&
+ if ((obj->_position.x <= 319) && (obj->_position.x >= 0) &&
(obj->_position.y <= 199) && (obj->_position.y >= 0)) {
if (!pt.x && !pt.y) {
pt.x = pt.y = 1;
@@ -2484,7 +2484,7 @@ void Scene205::handleText() {
GfxFont font;
font.setFontNumber(4);
int width = font.getStringWidth(_message.c_str());
-
+
_textList[_textIndex].setPosition(Common::Point(160 - (width / 2), _yp));
}
@@ -2681,13 +2681,13 @@ void Scene250::signal() {
_field412 += 12;
R2_GLOBALS._player.setPosition(Common::Point(261, 185));
ADD_MOVER(R2_GLOBALS._player, 261, 15);
-
+
if ((_field414 - 12) == _field412)
_sceneMode = 4;
break;
case 4:
_sound1.play(21);
-
+
_currentFloor.setPosition(Common::Point(111, _currentFloor._position.y + 12));
R2_GLOBALS._player.setPosition(Common::Point(261, 185));
ADD_MOVER(R2_GLOBALS._player, 261, 15);
@@ -2837,7 +2837,7 @@ void Scene300::Action2::signal() {
case 2:
if (!R2_GLOBALS._playStream.isPlaying())
_actionIndex = R2_GLOBALS._randomSource.getRandomNumber(1);
-
+
setDelay(60 + R2_GLOBALS._randomSource.getRandomNumber(119));
break;
default:
@@ -2860,7 +2860,7 @@ void Scene300::Action3::signal() {
case 2:
if (!R2_GLOBALS._playStream.isPlaying())
_actionIndex = R2_GLOBALS._randomSource.getRandomNumber(1);
-
+
setDelay(60 + R2_GLOBALS._randomSource.getRandomNumber(119));
break;
default:
@@ -2922,7 +2922,7 @@ bool Scene300::MirandaWorkstation::startAction(CursorType action, Event &event)
if (R2_GLOBALS._player._characterIndex != 3)
SceneItem::display2(300, 49);
else
- R2_GLOBALS._sceneManager.changeScene(325);
+ R2_GLOBALS._sceneManager.changeScene(325);
return true;
case CURSOR_LOOK:
@@ -2952,7 +2952,7 @@ bool Scene300::SeekerWorkstation::startAction(CursorType action, Event &event) {
if (R2_GLOBALS._player._characterIndex != 2)
SceneItem::display2(300, 48);
else
- R2_GLOBALS._sceneManager.changeScene(325);
+ R2_GLOBALS._sceneManager.changeScene(325);
return true;
default:
@@ -3107,7 +3107,7 @@ bool Scene300::Seeker::startAction(CursorType action, Event &event) {
scene->_sceneMode = 310;
scene->setAction(&scene->_sequenceManager1, scene, 310, &R2_GLOBALS._player, NULL);
return true;
-
+
default:
break;
}
@@ -3153,7 +3153,7 @@ bool Scene300::Doorway::startAction(CursorType action, Event &event) {
Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene;
if (action == CURSOR_USE) {
- if ((R2_GLOBALS._player._characterIndex == R2_QUINN) &&
+ if ((R2_GLOBALS._player._characterIndex == R2_QUINN) &&
(!R2_GLOBALS.getFlag(44) || R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500)) {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 301;
@@ -3161,7 +3161,7 @@ bool Scene300::Doorway::startAction(CursorType action, Event &event) {
} else {
SceneItem::display2(300, 45);
}
-
+
return true;
} else {
return SceneActor::startAction(action, event);
@@ -3373,7 +3373,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.setup(302, 3, 1);
R2_GLOBALS._player.setPosition(Common::Point(271, 150));
R2_GLOBALS._player.setAction(&_action1);
-
+
if (R2_GLOBALS.getFlag(55)) {
if (R2_GLOBALS.getFlag(57)) {
R2_GLOBALS.clearFlag(60);
@@ -3689,7 +3689,7 @@ void Scene300::signal309() {
if (R2_GLOBALS.getFlag(39))
R2_GLOBALS._stripManager_lookupList[1] = 2;
-
+
if (R2_GLOBALS.getFlag(5))
R2_GLOBALS._stripManager_lookupList[1] = 3;
@@ -3728,7 +3728,7 @@ Scene325::Icon::Icon(): SceneActor() {
void Scene325::Icon::postInit(SceneObjectList *OwnerList) {
SceneObject::postInit();
-
+
_object1.postInit();
_object1.fixPriority(21);
_object1.hide();
@@ -3895,7 +3895,7 @@ Scene325::Scene325(): SceneExt() {
_field416 = _field418 = 0;
_field41A = _field41C = _field41E = _field420 = 0;
_soundCount = _soundIndex = 0;
-
+
for (int idx = 0; idx < 10; ++idx)
_soundQueue[idx] = 0;
}
@@ -3907,7 +3907,7 @@ void Scene325::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS.clearFlag(50);
_stripManager.addSpeaker(&_quinnSpeaker);
_palette.loadPalette(0);
-
+
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.hide();
R2_GLOBALS._player.disableControl();
@@ -3917,7 +3917,7 @@ void Scene325::postInit(SceneObjectList *OwnerList) {
_sceneMode = 1;
signal();
}
-
+
void Scene325::synchronize(Serializer &s) {
SceneExt::synchronize(s);
@@ -3953,7 +3953,7 @@ void Scene325::signal() {
_icon4.postInit();
_icon4._sceneRegionId = 5;
- setAction(&_sequenceManager1, this, 127, &_icon1, &_icon2, &_icon3, &_icon4,
+ setAction(&_sequenceManager1, this, 127, &_icon1, &_icon2, &_icon3, &_icon4,
&R2_GLOBALS._player, NULL);
_sceneMode = 2;
break;
@@ -3969,7 +3969,7 @@ void Scene325::signal() {
_icon2._object2.postInit();
_icon2._object2.setup(160, 7, 2);
_icon2._object2.setPosition(Common::Point(106, 56));
-
+
_icon3.setup(160, 1, 1);
_icon3.setPosition(Common::Point(65, 47));
_icon3._object2.postInit();
@@ -4008,7 +4008,7 @@ void Scene325::signal() {
_object3.postInit();
if (R2_GLOBALS.getFlag(13)) {
_object4.postInit();
- setAction(&_sequenceManager1, this, 130, &R2_GLOBALS._player, &_object1,
+ setAction(&_sequenceManager1, this, 130, &R2_GLOBALS._player, &_object1,
&_object2, &_object3, &_object4, NULL);
} else {
setAction(&_sequenceManager1, this, 129, &R2_GLOBALS._player, &_object1,
@@ -4042,12 +4042,12 @@ void Scene325::signal() {
_object13.setup(326, 4, 2);
_object13.setPosition(Common::Point(149, (int)(_field420 * ADJUST_FACTOR)));
_object13.fixPriority(21);
-
+
_object10.postInit();
_object10.setup(326, 1, 1);
_object10.setPosition(Common::Point(210, 20));
_object10.fixPriority(10);
-
+
_object1.postInit();
_object1.setup(326, 1, 1);
_object1.setPosition(Common::Point(210, 32));
@@ -4072,7 +4072,7 @@ void Scene325::signal() {
_object5.setup(326, 1, 1);
_object5.setPosition(Common::Point(210, 80));
_object5.fixPriority(10);
-
+
_object6.postInit();
_object6.setup(326, 1, 1);
_object6.setPosition(Common::Point(210, 92));
@@ -4450,7 +4450,7 @@ void Scene325::dispatch() {
for (int idx = 0; idx < 4; ++idx)
_objList[idx].remove();
-
+
if (flag) {
int v = _field420 - 758;
_object10.setFrame((v++ <= 0) ? 1 : v);
@@ -4522,7 +4522,7 @@ void Scene325::setMessage(int resNum, int lineNum) {
_text1.setPosition(Common::Point(49, 19));
R2_GLOBALS._sceneObjects->draw();
-
+
if ((_soundCount != 0) && (R2_GLOBALS._speechSubtitles != 2)) {
_sceneMode = 15;
R2_GLOBALS._playStream.play(_soundQueue[_soundIndex++], this);
@@ -4804,7 +4804,7 @@ bool Scene500::ControlPanel::startAction(CursorType action, Event &event) {
if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == R2_QUINN)) {
R2_GLOBALS._player.disableControl();
-
+
if (R2_GLOBALS.getFlag(26)) {
scene->_stripNumber = 1104;
scene->_sceneMode = 524;
@@ -4818,7 +4818,7 @@ bool Scene500::ControlPanel::startAction(CursorType action, Event &event) {
return SceneHotspot::startAction(action, event);
}
}
-
+
/*--------------------------------------------------------------------------*/
bool Scene500::Object2::startAction(CursorType action, Event &event) {
@@ -4910,7 +4910,7 @@ bool Scene500::Doorway::startAction(CursorType action, Event &event) {
scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL);
} else {
scene->_sceneMode = 500;
- scene->setAction(&scene->_sequenceManager1, scene, 500, &R2_GLOBALS._player, NULL);
+ scene->setAction(&scene->_sequenceManager1, scene, 500, &R2_GLOBALS._player, NULL);
}
return true;
@@ -4931,17 +4931,17 @@ bool Scene500::OxygenTanks::startAction(CursorType action, Event &event) {
if (R2_GLOBALS._player._characterIndex != R2_QUINN) {
SceneItem::display2(500, 52);
return true;
- } else if ((R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) != 1) &&
+ } else if ((R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) != 1) &&
(R2_GLOBALS._player._characterIndex != R2_SEEKER) && !R2_GLOBALS.getFlag(28)) {
R2_GLOBALS._player.disableControl();
-
+
if (_position.y == 120) {
scene->_sceneMode = 513;
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
&scene->_tanks1, NULL);
} else {
scene->_sceneMode = 514;
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
&scene->_tanks2, NULL);
}
return true;
@@ -4961,7 +4961,7 @@ bool Scene500::AirLock::startAction(CursorType action, Event &event) {
if ((action == CURSOR_USE) && R2_GLOBALS.getFlag(26)) {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = (R2_GLOBALS._player._characterIndex == R2_QUINN) ? 521 : 522;
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
&scene->_object2, &scene->_airLock, NULL);
return true;
} else {
@@ -5144,7 +5144,7 @@ void Scene500::postInit(SceneObjectList *OwnerList) {
_object1.setup(502, 1, 1);
_object1.setPosition(Common::Point(258, 99));
_object1.fixPriority(50);
-
+
_object8.postInit();
_object8.setPosition(Common::Point(250, 111));
@@ -5322,16 +5322,16 @@ void Scene525::postInit(SceneObjectList *OwnerList) {
loadScene(525);
R2_GLOBALS._uiElements._active = false;
SceneExt::postInit();
-
+
R2_GLOBALS._sound1.play(105);
-
+
_actor1.postInit();
_actor1._effect = 1;
-
+
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
R2_GLOBALS._player.disableControl();
-
+
setAction(&_sequenceManager, this, 525, &R2_GLOBALS._player, &_actor1, NULL);
}
@@ -5340,7 +5340,7 @@ void Scene525::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 600 -
+ * Scene 600 -
*
*--------------------------------------------------------------------------*/
Scene600::Scene600() {
@@ -5368,28 +5368,28 @@ bool Scene600::Item1::startAction(CursorType action, Event &event) {
bool Scene600::Item4::startAction(CursorType action, Event &event) {
if ((action != R2_NEGATOR_GUN) || (!R2_GLOBALS.getFlag(1)))
return SceneHotspot::startAction(action, event);
-
+
if ((R2_GLOBALS.getFlag(5)) && (!R2_GLOBALS.getFlag(8))) {
SceneItem::display(600, 32, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
return true;
}
-
+
if (R2_GLOBALS.getFlag(5)) {
SceneItem::display(600, 30, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
return true;
}
-
+
if ((!R2_GLOBALS.getFlag(8)) || (R2_GLOBALS.getFlag(9)))
return SceneHotspot::startAction(action, event);
R2_GLOBALS._player.disableControl();
-
+
Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene;
scene->_object1.setup2(603, 3, 1, 239, 54, 10, 0);
scene->_actor3.postInit();
scene->_actor2.postInit();
-
+
scene->_sceneMode = 612;
setAction(&scene->_sequenceManager1, this, 612, &scene->_actor3, &scene->_actor2, &R2_GLOBALS._player, NULL);
return true;
@@ -5405,7 +5405,7 @@ bool Scene600::Actor4::startAction(CursorType action, Event &event) {
if ((action >= CURSOR_WALK) && (action < R2CURSORS_START))
// Only action cursors
return SceneActor::startAction(action, event);
-
+
return false;
}
@@ -5417,10 +5417,10 @@ void Scene600::Actor4::draw() {
bool Scene600::Actor5::startAction(CursorType action, Event &event) {
if ((action < CURSOR_WALK) && (action >= R2CURSORS_START))
return false;
-
+
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene;
if ((R2_INVENTORY.getObjectScene(R2_CLAMP) == 600) && (!R2_GLOBALS.getFlag(6))) {
@@ -5431,17 +5431,17 @@ bool Scene600::Actor5::startAction(CursorType action, Event &event) {
scene->setAction(&scene->_sequenceManager1, scene, 609, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor6, &scene->_actor1, NULL);
return true;
}
-
+
if (_frame != 1)
return false;
-
+
if (!R2_GLOBALS.getFlag(6)) {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 616;
scene->setAction(&scene->_sequenceManager1, scene, 616, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor6, NULL);
return true;
}
-
+
if ((R2_GLOBALS.getFlag(9)) && (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600))
SceneItem::display(600, 31, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
else {
@@ -5860,10 +5860,10 @@ bool Scene700::Actor2::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
if (R2_GLOBALS._player._position.y <= 100)
return false;
-
+
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 701;
scene->setAction(&scene->_sequenceManager, scene, 701, &R2_GLOBALS._player, this, NULL);
@@ -5876,10 +5876,10 @@ bool Scene700::Actor3::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
if (R2_GLOBALS._player._position.y <= 100)
return false;
-
+
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 702;
scene->setAction(&scene->_sequenceManager, scene, 702, &R2_GLOBALS._player, this, NULL);
@@ -5892,10 +5892,10 @@ bool Scene700::Actor4::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
if (R2_GLOBALS._player._position.y <= 100)
return false;
-
+
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 704;
scene->setAction(&scene->_sequenceManager, scene, 704, &R2_GLOBALS._player, this, NULL);
@@ -5951,7 +5951,7 @@ bool Scene700::Actor5::startAction(CursorType action, Event &event) {
return SceneActor::startAction(action, event);
break;
}
-
+
return true;
}
@@ -5960,7 +5960,7 @@ bool Scene700::Actor6::startAction(CursorType action, Event &event) {
if ((action != CURSOR_USE) || (R2_GLOBALS._player._position.y >= 100))
return SceneActor::startAction(action, event);
-
+
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 1;
Common::Point pt(_position.x, 69);
@@ -5973,7 +5973,7 @@ bool Scene700::Actor6::startAction(CursorType action, Event &event) {
void Scene700::postInit(SceneObjectList *OwnerList) {
if (R2_GLOBALS._sceneManager._previousScene == 900)
g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0));
-
+
loadScene(700);
R2_GLOBALS._v558B6.set(60, 0, 260, 200);
SceneExt::postInit();
@@ -5993,7 +5993,7 @@ void Scene700::postInit(SceneObjectList *OwnerList) {
_actor3.setPosition(Common::Point(217, 120));
_actor3.fixPriority(10);
_actor3.setDetails(700, 15, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor1.postInit();
_actor1.setup(700, 4, 1);
_actor1.setPosition(Common::Point(355 - ((R2_GLOBALS._v565E3 * 8) / 5), ((R2_GLOBALS._v565E1 + 20 ) / 5) - 12));
@@ -6132,7 +6132,7 @@ void Scene700::remove() {
R2_GLOBALS._sound1.play(10);
// CHECKME: Present in the original... But it crashes badly.
// The instruction was removed as it's not used in other scene coded the same way
-// and reversed by dreammaster. A double check is required in order to verify it doesn't hide
+// and reversed by dreammaster. A double check is required in order to verify it doesn't hide
// a memory leak
// _rotation->remove();
SceneExt::remove();
@@ -6445,7 +6445,7 @@ void Scene800::postInit(SceneObjectList *OwnerList) {
if (R2_INVENTORY.getObjectScene(R2_READER) == 800) {
_reader.postInit();
-
+
if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800) {
_opticalFibre.setup(800, 4, 1);
_reader.hide();
@@ -6776,7 +6776,7 @@ void Scene825::process(Event &event) {
}
void Scene825::dispatch() {
- if (R2_GLOBALS._sceneObjects->contains(&_object4) &&
+ if (R2_GLOBALS._sceneObjects->contains(&_object4) &&
((_object4._frame == 1) || (_object4._frame == 3)) &&
(_object4._frame != _frame1)) {
_sound2.play(25);
@@ -6828,7 +6828,7 @@ void Scene825::doButtonPress(int buttonId) {
_sceneText.setup(NO_TREATMENT_REQUIRED);
} else {
_button6._buttonId = 5;
-
+
_object5.postInit();
setAction(&_sequenceManager1, this, 827, &_object5, NULL);
}
@@ -6853,7 +6853,7 @@ void Scene825::doButtonPress(int buttonId) {
case 4:
_sound4.play(27);
_button6._buttonId = 5;
-
+
_object1.postInit();
_object1.setup(826, 7, 1);
_object1.setPosition(Common::Point(112, 67));
@@ -7002,7 +7002,7 @@ bool Scene850::Panel::startAction(CursorType action, Event &event) {
scene->_sceneMode = 852;
scene->setAction(&scene->_sequenceManager1, scene, 852, &R2_GLOBALS._player, this, &scene->_object1, NULL);
return true;
- }
+ }
}
/*--------------------------------------------------------------------------*/
@@ -7171,7 +7171,7 @@ bool Scene900::Actor4::startAction(CursorType action, Event &event) {
scene->_aSound1.play(53);
setup(900, 3, 9);
R2_GLOBALS._v565E5 = 0;
-
+
if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (scene->_actor2._frame < 8) && (scene->_actor2._animateMode != ANIM_MODE_5)) {
scene->_actor2.animate(ANIM_MODE_5, NULL);
} else if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 700) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (scene->_actor2._frame < 8)) {
@@ -7292,7 +7292,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) {
_actor2.postInit();
_actor2.setPosition(Common::Point(0, 0));
_actor2.fixPriority(1);
-
+
if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) {
if (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 700) {
_actor2.setup(901, 3, 2);
@@ -7321,7 +7321,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) {
void Scene900::remove() {
if (_sceneMode != 901)
R2_GLOBALS._sound1.play(10);
-
+
SceneExt::remove();
}
@@ -7348,7 +7348,7 @@ void Scene900::signal() {
break;
case 2:
_field412 = 2;
-
+
_actor5.remove();
_actor6.remove();
@@ -7358,7 +7358,7 @@ void Scene900::signal() {
else
_actor5.setup(900, 3, 11);
_actor5.setPosition(Common::Point(36, 166));
-
+
_actor7.sub96135(5);
_actor7.setup(900, 3, 3);
_actor7.setPosition(Common::Point(76, 134));
@@ -7374,7 +7374,7 @@ void Scene900::signal() {
_actor10.sub96135(7);
_actor10.setup(900, 3, 5);
_actor10.setPosition(Common::Point(99, 144));
-
+
break;
case 3:
_field412 = 3;
@@ -7405,11 +7405,11 @@ void Scene900::signal() {
R2_GLOBALS._player._canWalk = false;
_actor1.setup(900, 1, 1);
-
+
_actor4.sub96135(1);
_actor4.setup(900, 1, 3);
_actor4.setPosition(Common::Point(77, 168));
-
+
_sceneMode = 1;
signal();
break;
diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h
index d757080156..e39efbca3d 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes0.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes0.h
@@ -45,9 +45,9 @@ class Scene50: public SceneExt {
public:
void signal();
};
-
+
public:
- Action1 _action1;
+ Action1 _action1;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void process(Event &event);
@@ -208,7 +208,7 @@ public:
SequenceManager _sequenceManager;
Action1 _action1;
ASoundExt _sound1;
-
+
int _frameNumber;
int _field412, _field480;
int _field482, _frameInc;
@@ -217,7 +217,7 @@ public:
public:
Scene180();
- virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void remove();
virtual void signal();
@@ -283,7 +283,7 @@ class Scene205: public SceneExt {
};
private:
void setup();
- void processList(Object **ObjList, int count, const Common::Rect &bounds,
+ void processList(Object **ObjList, int count, const Common::Rect &bounds,
int xMultiply, int yMultiply, int xCenter, int yCenter);
void handleText();
public:
@@ -445,7 +445,7 @@ class Scene325: public SceneExt {
void showIcon();
void hideIcon();
};
-
+
private:
void removeText();
void consoleAction(int id);
@@ -531,7 +531,7 @@ class Scene500: public SceneExt {
public:
virtual bool startAction(CursorType action, Event &event);
};
-
+
/* Objects */
class Object2: public SceneActor {
public:
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index 23a9eb2590..304d3a4298 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -118,7 +118,7 @@ void Scene1020::postInit(SceneObjectList *OwnerList) {
if (R2_GLOBALS._sceneManager._previousScene == 1010)
_sceneMode = 0;
- else
+ else
_sceneMode = 10;
}
@@ -345,7 +345,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) {
}
SceneExt::postInit();
-
+
if (R2_GLOBALS._sceneManager._previousScene == -1)
R2_GLOBALS._sceneManager._previousScene = 1000;
@@ -397,7 +397,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) {
_actor18.setDetails(1100, 4, -1, -1, 1, (SceneItem *) NULL);
else
_actor18.setDetails(1100, 3, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor17.postInit();
_actor17.setup(1105, 3, 1);
_actor17.setPosition(Common::Point(312, 165));
@@ -450,7 +450,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) {
_actor4._field9C = _field312;
R2_GLOBALS._sound1.play(86);
-
+
_sceneMode = 0;
setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL);
@@ -463,7 +463,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
-
+
_actor16.postInit();
if (R2_GLOBALS.getFlag(52)) {
@@ -492,7 +492,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.enableControl();
R2_GLOBALS._player._canWalk = false;
}
-
+
if (R2_GLOBALS._player._characterIndex == 1)
_actor16.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL);
else
@@ -535,7 +535,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) {
_item6.setDetails(Rect(123, 69, 222, 105), 1100, 13, -1, -1, 1, NULL);
_item2.setDetails(Rect(0, 0, 480, 46), 1100, 0, -1, -1, 1, NULL);
_item1.setDetails(Rect(0, 0, 480, 200), 1100, 40, 41, 42, 1, NULL);
-}
+}
void Scene1100::remove() {
R2_GLOBALS._scrollFollower = &R2_GLOBALS._player;
@@ -703,7 +703,7 @@ void Scene1100::signal() {
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
_stripManager.start(302, this);
- break;
+ break;
case 27:
R2_GLOBALS._player.disableControl();
setAction(&_sequenceManager1, this, 1120, &_actor16, &R2_GLOBALS._player, NULL);
@@ -761,7 +761,7 @@ void Scene1100::signal() {
R2_GLOBALS._player.disableControl();
_sceneMode = 1125;
setAction(&_sequenceManager1, this, 1125, &R2_GLOBALS._player, &_actor16, NULL);
- } else
+ } else
R2_GLOBALS._player.enableControl(CURSOR_TALK);
break;
case 55:
@@ -832,22 +832,22 @@ void Scene1100::dispatch() {
R2_GLOBALS._scenePalette.refresh();
_field414 = 1;
}
-
+
Scene::dispatch();
-
+
if (R2_GLOBALS._player._bounds.contains(_actor13._position))
_actor13._shade = 3;
- else
+ else
_actor13._shade = 0;
if (R2_GLOBALS._player._bounds.contains(_actor14._position))
_actor14._shade = 3;
- else
+ else
_actor14._shade = 0;
if (R2_GLOBALS._player._bounds.contains(_actor15._position))
_actor15._shade = 3;
- else
+ else
_actor15._shade = 0;
}
@@ -952,7 +952,7 @@ void Scene1200::Area1::Actor3::init(int state) {
bool Scene1200::Area1::Actor3::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
R2_GLOBALS._sound2.play(260);
switch (_state) {
case 1:
@@ -1002,10 +1002,10 @@ bool Scene1200::Area1::Actor3::startAction(CursorType action, Event &event) {
default:
break;
}
-
+
Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene;
scene->_field418 = 0;
-
+
if ((R2_GLOBALS._v56AA6 == 1) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1))
scene->_field418 = 1;
else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1))
@@ -1014,7 +1014,7 @@ bool Scene1200::Area1::Actor3::startAction(CursorType action, Event &event) {
scene->_field418 = 3;
else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 3) && (R2_GLOBALS._v56AA8 == 1))
scene->_field418 = 4;
-
+
return true;
}
@@ -1035,7 +1035,7 @@ void Scene1200::Area1::postInit(SceneObjectList *OwnerList) {
void Scene1200::Area1::remove() {
Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene;
-
+
scene->_field41A = 0;
warning("Unexpected _sceneAreas.remove() call");
// scene->_sceneAreas.remove(&_actor3);
@@ -1044,14 +1044,14 @@ void Scene1200::Area1::remove() {
_actor3.remove();
_actor4.remove();
_actor5.remove();
-
+
// sub201EA
R2_GLOBALS._sceneItems.remove((SceneItem *)this);
_actor2.remove();
SceneArea::remove();
R2_GLOBALS._insetUp--;
//
-
+
R2_GLOBALS._player._canWalk = true;
}
@@ -1388,9 +1388,9 @@ void Scene1200::signal() {
void Scene1200::process(Event &event) {
if (_field414 != 0)
return;
-
+
Scene::process(event);
-
+
if (!R2_GLOBALS._player._canWalk)
return;
@@ -1405,10 +1405,10 @@ void Scene1200::process(Event &event) {
if ((event.mousePos.x > 109) && (event.mousePos.x < 140) && (event.mousePos.y > 50) && (event.mousePos.y < 89))
sub9DAD6(2);
-
+
if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 89) && (event.mousePos.y < 120))
sub9DAD6(3);
-
+
if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 19) && (event.mousePos.y < 50))
sub9DAD6(4);
break;
@@ -1511,7 +1511,7 @@ void Scene1200::process(Event &event) {
event.handled = false;
return;
}
-
+
switch (event.kbd.keycode) {
case Common::KEYCODE_1:
warning("FIXME: keycode = 0x4800");
@@ -1538,7 +1538,7 @@ void Scene1200::process(Event &event) {
return;
}
}
-
+
void Scene1200::dispatch() {
Rect tmpRect;
Scene::dispatch();
@@ -1550,7 +1550,7 @@ void Scene1200::dispatch() {
warning("tmpRect.sub14DF3();");
_field41C = 0;
}
-
+
if (_field414 != 0) {
tmpRect.set(110, 20, 210, 120);
_field414--;
@@ -1575,7 +1575,7 @@ void Scene1200::dispatch() {
_object1.sub51B02();
warning("_gfxManager.sub294AC(unk);");
warning("tmpRect.sub14DF3();");
-
+
if (_field416 != 0) {
switch(_field412 - 1) {
case 0:
@@ -1664,7 +1664,7 @@ void Scene1337::Action1337::subD18B5(int resNum, int stripNum, int frameNum) {
void Scene1337::Action1337::skipFrames(int32 skipCount) {
uint32 firstFrameNumber = g_globals->_events.getFrameNumber();
uint32 tmpFrameNumber = firstFrameNumber;
-
+
while (tmpFrameNumber < firstFrameNumber + skipCount)
tmpFrameNumber = g_globals->_events.getFrameNumber();
@@ -1824,7 +1824,7 @@ void Scene1337::Action1::signal() {
scene->_aSound1.play(62);
R2_GLOBALS._sceneObjects->draw();
-
+
skipFrames(120);
scene->_arrunkObj1337[2]._arr2[0]._object1.remove();
scene->_arrunkObj1337[2]._arr2[1]._object1.remove();
@@ -1938,7 +1938,7 @@ void Scene1337::Action1::signal() {
scene->_arrunkObj1337[0]._arr1[2]._object1.fixPriority(170);
R2_GLOBALS._sceneObjects->draw();
-
+
scene->actionDisplay(1331, 10, 159, 10, 1, 200, 0, 7, 0, 154, 154);
scene->_item2._object1.setPosition(Common::Point(162, 95), 0);
scene->_item2._object1.show();
@@ -1976,7 +1976,7 @@ void Scene1337::Action1::signal() {
scene->_item2._object1.setStrip(scene->_arrunkObj1337[2]._arr1[2]._object1._strip);
scene->_item2._object1.setFrame(scene->_arrunkObj1337[2]._arr1[2]._object1._frame);
scene->_item2._object1.animate(ANIM_MODE_NONE, NULL);
-
+
scene->_arrunkObj1337[2]._arr1[2]._field34 = 0;
scene->_arrunkObj1337[2]._arr1[2]._object1.remove();
@@ -2102,7 +2102,7 @@ void Scene1337::Action1::signal() {
R2_GLOBALS._sceneObjects->draw();
skipFrames(240);
-
+
scene->_arrObject1[0].remove();
scene->_arrObject1[1].remove();
scene->_arrObject1[2].remove();
@@ -2125,7 +2125,7 @@ void Scene1337::Action1::signal() {
scene->_arrunkObj1337[2]._arr3[0]._field34 = 0;
scene->_arrunkObj1337[2]._arr3[0]._object1.remove();
-
+
scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr3[0]._field36, 0);
scene->_item2._object1.show();
@@ -2219,7 +2219,7 @@ void Scene1337::Action1::signal() {
R2_GLOBALS._sceneObjects->draw();
skipFrames(240);
-
+
scene->_arrObject1[0].remove();
scene->_arrObject1[1].remove();
scene->_arrObject1[2].remove();
@@ -2289,7 +2289,7 @@ void Scene1337::Action1::signal() {
scene->_arrObject2[0].setStrip(7);
scene->_arrObject2[0].setFrame(1);
scene->_arrObject2[0].fixPriority(180);
-
+
scene->_arrObject1[1].postInit();
scene->_arrObject1[1].setVisage(1332);
scene->_arrObject1[1].setPosition(Common::Point(160, 71), 0);
@@ -2303,35 +2303,35 @@ void Scene1337::Action1::signal() {
scene->_arrObject2[1].setStrip(7);
scene->_arrObject2[1].setFrame(1);
scene->_arrObject2[1].fixPriority(180);
-
+
scene->_arrObject1[2].postInit();
scene->_arrObject1[2].setVisage(1332);
scene->_arrObject1[2].setPosition(Common::Point(131, 100), 0);
scene->_arrObject1[2].fixPriority(190);
scene->_arrObject1[2].setStrip(4);
scene->_arrObject1[2].setFrame(4);
-
+
scene->_arrObject2[2].postInit();
scene->_arrObject2[2].setVisage(1332);
scene->_arrObject2[2].setPosition(Common::Point(131, 100), 0);
scene->_arrObject2[2].setStrip(7);
scene->_arrObject2[2].setFrame(1);
scene->_arrObject2[2].fixPriority(180);
-
+
scene->_arrObject1[3].postInit();
scene->_arrObject1[3].setVisage(1332);
scene->_arrObject1[3].setPosition(Common::Point(160, 100), 0);
scene->_arrObject1[3].fixPriority(190);
scene->_arrObject1[3].setStrip(4);
scene->_arrObject1[3].setFrame(2);
-
+
scene->_arrObject2[3].postInit();
scene->_arrObject2[3].setVisage(1332);
scene->_arrObject2[3].setPosition(Common::Point(160, 100), 0);
scene->_arrObject2[3].setStrip(7);
scene->_arrObject2[3].setFrame(1);
scene->_arrObject2[3].fixPriority(180);
-
+
R2_GLOBALS._sceneObjects->draw();
skipFrames(240);
@@ -2353,14 +2353,14 @@ void Scene1337::Action1::signal() {
R2_GLOBALS._sceneObjects->draw();
scene->actionDisplay(1331, 19, 159, 10, 1, 220, 0, 7, 0, 154, 154);
-
+
scene->_object1.hide();
scene->actionDisplay(1331, 20, 159, 10, 1, 220, 0, 7, 0, 154, 154);
scene->actionDisplay(1331, 21, 159, 10, 1, 220, 0, 7, 0, 154, 154);
scene->_item7._field34 = scene->_arrunkObj1337[2]._arr1[1]._field34;
-
+
scene->_item2._object1.setStrip(scene->_arrunkObj1337[2]._arr1[1]._object1._strip);
scene->_item2._object1.setFrame(scene->_arrunkObj1337[2]._arr1[1]._object1._frame);
scene->_item2._object1.animate(ANIM_MODE_NONE, NULL);
@@ -2384,7 +2384,7 @@ void Scene1337::Action1::signal() {
scene->_item2._object1.animate(ANIM_MODE_2, NULL);
R2_GLOBALS._sceneObjects->draw();
-
+
scene->actionDisplay(1331, 22, 159, 10, 1, 200, 0, 7, 0, 154, 154);
int i = -1;
@@ -2452,13 +2452,13 @@ void Scene1337::Action2::signal() {
scene->_item7._object1.remove();
scene->_item7._field34 = 0;
-
+
scene->_aSound1.play(60);
scene->_item3._object1.animate(ANIM_MODE_5, this);
break;
case 1:
scene->_item3._object1.setFrame(1);
-
+
scene->_aSound1.play(60);
scene->_item3._object1.animate(ANIM_MODE_5, this);
break;
@@ -2482,7 +2482,7 @@ void Scene1337::Action3::signal() {
Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene;
scene->_item2._object1.setPosition(Common::Point(162, 95), 0);
-
+
switch (_actionIndex++) {
case 0: {
scene->_item2._object1._moveDiff = Common::Point(30, 30);
@@ -2651,7 +2651,7 @@ void Scene1337::Action3::signal() {
scene->_arrunkObj1337[0]._arr1[1]._object1.setFrame(1);
scene->_arrunkObj1337[0]._arr1[1]._object1.fixPriority(170);
scene->_aSound2.play(61);
-
+
Common::Point pt(283, 102);
NpcMover *mover = new NpcMover();
scene->_item2._object1.addMover(mover, &pt, this);
@@ -2668,7 +2668,7 @@ void Scene1337::Action3::signal() {
scene->_arrunkObj1337[1]._arr1[2]._object1.setFrame(4);
scene->_arrunkObj1337[1]._arr1[2]._object1.fixPriority(170);
scene->_aSound2.play(61);
-
+
Common::Point pt(64, 174);
NpcMover *mover = new NpcMover();
scene->_item2._object1.addMover(mover, &pt, this);
@@ -2714,7 +2714,7 @@ void Scene1337::Action3::signal() {
scene->_arrunkObj1337[3]._arr1[2]._object1.setFrame(3);
scene->_arrunkObj1337[3]._arr1[2]._object1.fixPriority(170);
scene->_aSound2.play(61);
-
+
Common::Point pt(226, 5);
NpcMover *mover = new NpcMover();
scene->_item2._object1.addMover(mover, &pt, this);
@@ -2734,7 +2734,7 @@ void Scene1337::Action3::signal() {
default:
break;
}
-
+
if (_actionIndex > 12) {
scene->_field423E = 0;
R2_GLOBALS._sceneObjects->draw();
@@ -2764,9 +2764,9 @@ void Scene1337::Action4::signal() {
scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 = scene->_field3E28[scene->_field3E24];
scene->_field3E28[scene->_field3E24] = 0;
scene->_field3E24--;
-
+
if (scene->_field3E24 < 0)
- scene->_background2.remove();
+ scene->_background2.remove();
} else {
// Self call, forcing next actionIndex
signal();
@@ -2786,7 +2786,7 @@ void Scene1337::Action4::signal() {
if ((scene->_field4248 == 1) || (scene->_field423E == 2))
scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[0]);
-
+
scene->_item2._object1.hide();
if ((scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) {
if (scene->_field3E24 < 0)
@@ -2798,7 +2798,7 @@ void Scene1337::Action4::signal() {
NpcMover *mover = new NpcMover();
scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldB98, this);
-
+
scene->_arrunkObj1337[scene->_field423E]._arr1[1]._field34 = scene->_field3E28[scene->_field3E24];
scene->_field3E28[scene->_field3E24] = 0;
scene->_field3E24--;
@@ -2821,7 +2821,7 @@ void Scene1337::Action4::signal() {
if ((scene->_field4248 == 1) || (scene->_field423E == 2))
scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[1]);
-
+
scene->_item2._object1.hide();
if ((scene->_arrunkObj1337[scene->_field423E]._arr1[2]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) {
if (scene->_field3E24 < 0)
@@ -2833,7 +2833,7 @@ void Scene1337::Action4::signal() {
NpcMover *mover = new NpcMover();
scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldB9C, this);
-
+
scene->_arrunkObj1337[scene->_field423E]._arr1[2]._field34 = scene->_field3E28[scene->_field3E24];
scene->_field3E28[scene->_field3E24] = 0;
scene->_field3E24--;
@@ -2856,7 +2856,7 @@ void Scene1337::Action4::signal() {
if ((scene->_field4248 == 1) || (scene->_field423E == 2))
scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[2]);
-
+
scene->_item2._object1.hide();
if ((scene->_arrunkObj1337[scene->_field423E]._arr1[3]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) {
if (scene->_field3E24 < 0)
@@ -2868,7 +2868,7 @@ void Scene1337::Action4::signal() {
NpcMover *mover = new NpcMover();
scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldBA0, this);
-
+
scene->_arrunkObj1337[scene->_field423E]._arr1[3]._field34 = scene->_field3E28[scene->_field3E24];
scene->_field3E28[scene->_field3E24] = 0;
scene->_field3E24--;
@@ -2891,7 +2891,7 @@ void Scene1337::Action4::signal() {
if ((scene->_field4248 == 1) || (scene->_field423E == 2))
scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[3]);
-
+
scene->_item2._object1.hide();
switch (scene->_field423E) {
case 0:
@@ -2929,7 +2929,7 @@ void Scene1337::Action5::signal() {
scene->_item7._object1.setPosition(scene->_item7._field36, 0);
scene->_item7._object1.fixPriority(170);
}
-
+
scene->_item7._field34 = scene->_field3EF0->_field34;
scene->_field3EF0->_field34 = 0;
scene->_field3EF0->_object1.remove();
@@ -3095,7 +3095,7 @@ void Scene1337::Action9::signal() {
subD18B5(5, 1, 4);
scene->subC4CEC();
}
-
+
scene->subC20F9();
break;
default:
@@ -3143,7 +3143,7 @@ void Scene1337::Action10::signal() {
if (scene->_arrunkObj1337[0]._arr1[indexFound]._field34 == 29) {
found = true;
break;
- }
+ }
}
break;
case 1:
@@ -3151,7 +3151,7 @@ void Scene1337::Action10::signal() {
if (scene->_arrunkObj1337[1]._arr1[indexFound]._field34 == 29) {
found = true;
break;
- }
+ }
}
break;
case 2:
@@ -3159,7 +3159,7 @@ void Scene1337::Action10::signal() {
if (scene->_arrunkObj1337[2]._arr1[indexFound]._field34 == 29) {
found = true;
break;
- }
+ }
}
break;
case 3:
@@ -3167,7 +3167,7 @@ void Scene1337::Action10::signal() {
if (scene->_arrunkObj1337[3]._arr1[indexFound]._field34 == 29) {
found = true;
break;
- }
+ }
}
break;
default:
@@ -3190,7 +3190,7 @@ void Scene1337::Action10::signal() {
scene->subC4CD2();
if (MessageDialog::show(USE_INTERCEPTOR, NO_MSG, YES_MSG) == 0)
scene->subC4CEC();
- else {
+ else {
scene->subC51A0(&scene->_arrunkObj1337[2]._arr1[indexFound], scene->_field3EF8);
found2 = true;
}
@@ -3213,7 +3213,7 @@ void Scene1337::Action10::signal() {
if (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0)
++j;
}
-
+
if (j <= 1) {
for (int i = 0; i <= 7; i++) {
if (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0) {
@@ -3223,11 +3223,11 @@ void Scene1337::Action10::signal() {
}
} else {
scene->subC4CD2();
-
+
found2 = false;
while (!found2) {
scene->actionDisplay(1330, 130, 159, 10, 1, 200, 0, 7, 0, 154, 154);
-
+
// Wait for a mouse or keypress
Event event;
while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) {
@@ -3235,9 +3235,9 @@ void Scene1337::Action10::signal() {
R2_GLOBALS._sceneObjects->draw();
g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks);
}
-
+
scene->_item6._field36 = event.mousePos;
-
+
for (int i = 0; i <= 7; i++) {
if ((scene->subC2BF8(&scene->_arrunkObj1337[2]._arr2[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0)) {
scene->_field3EF4 = &scene->_arrunkObj1337[2]._arr2[0];
@@ -3249,15 +3249,15 @@ void Scene1337::Action10::signal() {
scene->subC4CEC();
}
}
-
+
scene->_field3E28[scene->_field3E26] = scene->_field3EF4->_field34;
scene->_field3E26--;
scene->_field3EF4->_field34 = 0;
scene->_field3EF4->_object1.remove();
-
+
scene->_item2._object1.setPosition(scene->_field3EF4->_field36, 0);
scene->_item2._object1.show();
-
+
NpcMover *mover = new NpcMover();
scene->_item2._object1.addMover(mover, &scene->_field3EF8->_field36, this);
}
@@ -3284,7 +3284,7 @@ void Scene1337::Action11::signal() {
scene->_field3EF4->_object1.setPosition(scene->_field3EF4->_field36, 0);
scene->_field3EF4->_object1.fixPriority(170);
scene->_field3EF4->_field34 = 25;
-
+
if (scene->_field4240 == 2) {
scene->_item2._object1.setPosition(scene->_field3EF4->_field36, 0);
subD18B5(5, 1, 4);
@@ -3353,7 +3353,7 @@ void Scene1337::Action11::signal() {
break;
}
}
-
+
if ((found) && (scene->subC3E92(scene->_field4240) != -1)) {
scene->subC4CD2();
if (MessageDialog::show(USE_DOUBLE_AGENT, NO_MSG, YES_MSG) == 0)
@@ -3393,7 +3393,7 @@ void Scene1337::Action11::signal() {
default:
break;
}
-
+
if (!noAction)
return;
@@ -3431,9 +3431,9 @@ void Scene1337::Action11::signal() {
R2_GLOBALS._sceneObjects->draw();
g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks);
}
-
+
scene->_item6._field36 = event.mousePos;
-
+
found = false;
if (scene->_field4242 != 2) {
@@ -3499,7 +3499,7 @@ void Scene1337::Action11::signal() {
scene->setAnimationInfo(scene->_field3EF0);
break;
}
-
+
scene->subC4A39(scene->_field3EF4);
break;
default:
@@ -3560,7 +3560,7 @@ void Scene1337::Action12::signal() {
scene->subC4CD2();
bool found = false;
-
+
while (!found) {
switch (scene->_field4240) {
case 0:
@@ -3582,7 +3582,7 @@ void Scene1337::Action12::signal() {
R2_GLOBALS._sceneObjects->draw();
g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks);
}
-
+
scene->_item6._field36 = event.mousePos;
if (scene->_field4240 == 0) {
@@ -3594,7 +3594,7 @@ void Scene1337::Action12::signal() {
}
}
}
-
+
if (scene->_field4240 == 3) {
for (i = 0; i <= 3; i++) {
if ((scene->subC2BF8(&scene->_arrunkObj1337[3]._arr1[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[3]._arr1[i]._field34 != 0)) {
@@ -3882,14 +3882,14 @@ void Scene1337::dispatch() {
void Scene1337::actionDisplay(int resNum, int lineNum, int x, int y, int arg5, int width, int textMode, int fontNum, int colFG, int colBGExt, int colFGExt) {
// TODO: Check if it's normal that arg5 is unused and replaced by an hardcoded 0 value
// May hide an original bug
-
+
SceneItem::display(resNum, lineNum, SET_X, x, SET_Y, y, SET_KEEP_ONSCREEN, 0, SET_WIDTH, width, SET_POS_MODE, -1, SET_TEXT_MODE, textMode, SET_FONT, fontNum, SET_FG_COLOR, colFG, SET_EXT_BGCOLOR, colBGExt, SET_EXT_FGCOLOR, colFGExt, LIST_END);
}
void Scene1337::setAnimationInfo(unkObj1337sub1 *subObj) {
if (!subObj)
return;
-
+
if (subObj->_field34 > 9) {
if (subObj->_field34 > 25) {
subObj->_object1.setStrip2(4);
@@ -3902,7 +3902,7 @@ void Scene1337::setAnimationInfo(unkObj1337sub1 *subObj) {
subObj->_object1.setStrip2(2);
subObj->_object1.setFrame(subObj->_field34);
}
-
+
subObj->_object1.show();
R2_GLOBALS._sceneObjects->draw();
}
@@ -3938,7 +3938,7 @@ void Scene1337::subC20F9() {
default:
break;
}
-
+
if (!_autoplay)
_unkFctPtr412 = &Scene1337::subC20E5;
else
@@ -3995,7 +3995,7 @@ void Scene1337::subC2586() {
switch (_field423E) {
case 2:
subC4CD2();
- if (_field4246 == 1)
+ if (_field4246 == 1)
actionDisplay(1330, 114, 159, 10, 1, 200, 0, 7, 0, 154, 154);
_field4246 = 0;
// No break on purpose
@@ -4190,7 +4190,7 @@ void Scene1337::subC2835(int arg1) {
if (found)
break;
-
+
for (i = 0; i <= 3; i++) {
if (_arrunkObj1337[arg1]._arr1[i]._field34 == 13) {
found = true;
@@ -4329,7 +4329,7 @@ void Scene1337::subC2C2F() {
return;
int randIndx = R2_GLOBALS._randomSource.getRandomNumber(3);
-
+
if (_arrunkObj1337[3]._arr1[randIndx]._field34 == 1) {
found = false;
@@ -4358,15 +4358,15 @@ void Scene1337::subC2C2F() {
for (int i = 0; i <= 7; i++) {
if ((_arrunkObj1337[3]._arr2[i]._field34 == 1) && (!subC2687(_arrunkObj1337[3]._arr3[i]._field34))) {
int tmpVal = 0;
-
+
for (int j = 0; j <= 7; j++) {
if ((_arrunkObj1337[3]._arr2[j]._field34 > 1) && (_arrunkObj1337[3]._arr2[j]._field34 <= 9))
++tmpVal;
}
-
+
if (tmpVal == 7)
_field424A = 3;
-
+
subC33C0(&_arrunkObj1337[3]._arr1[randIndx], &_arrunkObj1337[3]._arr2[i]);
found = true;
break;
@@ -4386,7 +4386,7 @@ void Scene1337::subC2C2F() {
int tmpVal = -1;
found = false;
int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3);
-
+
for (int i = 0; i <= 3; i++) {
if ( (tmpRandIndx != 3)
&& ( (_arrunkObj1337[tmpRandIndx]._arr1[0]._field34 != 0)
@@ -4396,7 +4396,7 @@ void Scene1337::subC2C2F() {
tmpVal = tmpRandIndx;
break;
}
-
+
++tmpRandIndx;
if (tmpRandIndx > 3)
tmpRandIndx = 0;
@@ -4433,7 +4433,7 @@ void Scene1337::subC2C2F() {
case 24: {
int tmpVal = -1;
int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3);
-
+
for (int i = 0; i <= 3; i++) {
if (tmpRandIndx != 3) {
// The variables 'i' and 'j' are not used in the inner code of the loop.
@@ -4449,11 +4449,11 @@ void Scene1337::subC2C2F() {
++tmpRandIndx;
if (tmpRandIndx > 3)
tmpRandIndx = 0;
-
+
if (tmpVal != -1)
break;
}
-
+
if (tmpVal != -1) {
// Useless second identical check skipped
subC3456(&_arrunkObj1337[3]._arr1[randIndx], &_arrunkObj1337[tmpVal]._arr3[0]);
@@ -4473,7 +4473,7 @@ void Scene1337::subC318B(int arg1, unkObj1337sub1 *subObj1, int arg3) {
_field4242 = arg3;
int randIndx;
-
+
for (;;) {
randIndx = R2_GLOBALS._randomSource.getRandomNumber(3);
if (_arrunkObj1337[arg3]._arr1[randIndx]._field34 != 0)
@@ -4581,7 +4581,7 @@ void Scene1337::subC33C0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) {
}
int Scene1337::subC3E92(int arg1) {
- if ( (_arrunkObj1337[arg1]._arr1[0]._field34 == 0)
+ if ( (_arrunkObj1337[arg1]._arr1[0]._field34 == 0)
&& (_arrunkObj1337[arg1]._arr1[1]._field34 == 0)
&& (_arrunkObj1337[arg1]._arr1[2]._field34 == 0)
&& (_arrunkObj1337[arg1]._arr1[3]._field34 == 0))
@@ -4624,13 +4624,13 @@ Scene1337::unkObj1337sub1 *Scene1337::subC34EC(int arg1) {
return &_arrunkObj1337[arg1]._arr2[i];
}
}
-
+
for (int i = 0; i <= 7; i++) {
if ((_arrunkObj1337[arg1]._arr2[i]._field34 != 0) && (_arrunkObj1337[arg1]._arr2[i]._field34 < 10)) {
return &_arrunkObj1337[arg1]._arr2[i];
}
}
-
+
return NULL;
}
@@ -5003,7 +5003,7 @@ void Scene1337::subCD193() {
void Scene1337::subCDB90(int arg1, Common::Point pt) {
bool found = false;
int curReg = R2_GLOBALS._sceneRegions.indexOf(g_globals->_events._mousePos);
-
+
if (arg1 == 3) {
int i;
for (i = 0; i <= 7; i++) {
@@ -5015,7 +5015,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) {
break;
}
}
-
+
if (found) {
switch (curReg) {
case 5:
@@ -5052,7 +5052,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) {
|| (subC2BF8(&_arrunkObj1337[3]._arr3[0], pt)) ) {
found = true;
}
-
+
if (found) {
switch (curReg) {
case 5:
@@ -5140,10 +5140,10 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) {
}
}
}
-
+
if (arg1 != 1)
return;
-
+
for (int i = 0; i <= 7; i++) {
if (subC2BF8(&_arrunkObj1337[2]._arr2[i], pt)) {
switch (_arrunkObj1337[2]._arr2[i]._field34) {
@@ -5203,7 +5203,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) {
}
found = true;
}
-
+
if (subC2BF8(&_arrunkObj1337[3]._arr3[0], pt)) {
if (_arrunkObj1337[3]._arr3[0]._field34 != 0) {
actionDisplay(1330, 145, 20, 99, 1, 136, 0, 7, 0, 172, 172);
@@ -5212,7 +5212,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) {
}
found = true;
}
-
+
if (subC2BF8(&_arrunkObj1337[1]._arr3[0], pt)) {
if (_arrunkObj1337[1]._arr3[0]._field34 != 0) {
actionDisplay(1330, 144, 300, 99, 1, 136, 0, 7, 0, 117, 117);
@@ -5221,7 +5221,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) {
}
found = true;
}
-
+
if (subC2BF8(&_arrunkObj1337[0]._arr3[0], pt)) {
if (_arrunkObj1337[0]._arr3[0]._field34 != 0) {
actionDisplay(1330, 1, 159, 10, 1, 200, 0, 7, 0, 154, 154);
@@ -5248,12 +5248,12 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) {
if (found)
return;
-
+
if (_background1._bounds.contains(pt)) {
subCD193();
return;
}
-
+
if (subC2BF8(&_item7, pt))
actionDisplay(1330, 9, 159, 10, 1, 200, 0, 7, 0, 154, 154);
else if (subC2BF8(&_item8, pt))
@@ -5353,7 +5353,7 @@ void Scene1337::subCF31D() {
int tmpIndx = subC26CB(1, i);
if (tmpIndx == -1)
break;
-
+
tmpVal = 0;
for (int j = 0; j <= 7; j++) {
if (_arrunkObj1337[1]._arr2[j]._field34 == _arrunkObj1337[1]._arr1[tmpIndx]._field34) {
@@ -5361,7 +5361,7 @@ void Scene1337::subCF31D() {
break;
}
}
-
+
if (tmpVal == 0)
break;
@@ -5373,7 +5373,7 @@ void Scene1337::subCF31D() {
if ((_arrunkObj1337[1]._arr2[k]._field34 > 1) && (_arrunkObj1337[1]._arr2[k]._field34 <= 9))
++count;
}
-
+
if (count == 7)
_field424A = 1;
@@ -5397,7 +5397,7 @@ void Scene1337::subCF31D() {
}
}
}
-
+
if (found)
return;
@@ -5416,9 +5416,9 @@ void Scene1337::subCF31D() {
int rndVal = R2_GLOBALS._randomSource.getRandomNumber(3);
for (int i = 0; i <= 3; i++) {
if (rndVal != 1) {
- if ( (_arrunkObj1337[rndVal]._arr1[0]._field34 != 0)
- || (_arrunkObj1337[rndVal]._arr1[1]._field34 != 0)
- || (_arrunkObj1337[rndVal]._arr1[2]._field34 != 0)
+ if ( (_arrunkObj1337[rndVal]._arr1[0]._field34 != 0)
+ || (_arrunkObj1337[rndVal]._arr1[1]._field34 != 0)
+ || (_arrunkObj1337[rndVal]._arr1[2]._field34 != 0)
|| (_arrunkObj1337[rndVal]._arr1[3]._field34 == 0)) {
count = rndVal;
break;
@@ -5435,7 +5435,7 @@ void Scene1337::subCF31D() {
found = true;
}
}
-
+
if (found)
return;
@@ -5449,7 +5449,7 @@ void Scene1337::subCF31D() {
for (int j = 0; j <= 3; j++) {
if (tmpVal != 1) {
for (int k = 0; k <= 7; k++) {
- // 'k' is not used in that loop.
+ // 'k' is not used in that loop.
// It looks suspicious.
if ((_arrunkObj1337[tmpVal]._arr3[0]._field34 == 0) && (subC32B1(tmpVal, _arrunkObj1337[1]._arr1[i]._field34))) {
count = tmpVal;
@@ -5510,7 +5510,7 @@ void Scene1337::subCF31D() {
if (found) {
if (count == -1)
- return;
+ return;
subC3456(&_arrunkObj1337[1]._arr1[j], &_arrunkObj1337[count]._arr3[0]);
} else {
@@ -5561,10 +5561,10 @@ void Scene1337::subCF979() {
break;
}
}
-
+
if (found)
return;
-
+
int tmpVal;
found = false;
for (int i = 0; i <= 3; i++) {
@@ -5578,7 +5578,7 @@ void Scene1337::subCF979() {
break;
}
}
-
+
if (!flag) {
for (int j = 0; j <= 7; j++) {
if ((_arrunkObj1337[0]._arr2[j]._field34 == 1) && (!subC2687(_arrunkObj1337[0]._arr3[0]._field34))) {
@@ -5591,21 +5591,21 @@ void Scene1337::subCF979() {
if (count == 7)
_field424A = 0;
-
+
subC33C0(&_arrunkObj1337[0]._arr1[tmpVal], &_arrunkObj1337[0]._arr2[j]);
found = true;
}
}
}
}
-
+
if (found)
break;
}
if (found)
return;
-
+
found = false;
tmpVal = subC2719(0);
@@ -5618,10 +5618,10 @@ void Scene1337::subCF979() {
}
}
}
-
+
if (found)
return;
-
+
tmpVal = subC274D(0);
if (tmpVal != -1) {
for (int i = 0; i <= 7; i++) {
@@ -5632,10 +5632,10 @@ void Scene1337::subCF979() {
}
}
}
-
- if (found)
+
+ if (found)
return;
-
+
tmpVal = subC2781(0);
if (tmpVal != -1) {
if ( (_arrunkObj1337[2]._arr1[0]._field34 != 0)
@@ -5646,10 +5646,10 @@ void Scene1337::subCF979() {
found = true;
}
}
-
- if (found)
+
+ if (found)
return;
-
+
for (int i = 0; i <= 3; i++) {
if (subC27B5(_arrunkObj1337[0]._arr1[i]._field34) != -1) {
// The variable 'j' is not used in the inner code of the loop. It's suspect
@@ -5666,7 +5666,7 @@ void Scene1337::subCF979() {
}
}
- if (found)
+ if (found)
return;
for (int i = 0; i <= 3; i++) {
@@ -5678,26 +5678,26 @@ void Scene1337::subCF979() {
found = true;
}
}
-
+
if (found)
break;
}
}
-
- if (found)
+
+ if (found)
return;
tmpVal = subC274D(0);
int tmpVal2 = subC331B(0);
-
+
if ((tmpVal != -1) && (tmpVal2 != -1)) {
subC358E(&_arrunkObj1337[0]._arr1[tmpVal], tmpVal2);
found = true;
}
-
+
if (found)
return;
-
+
tmpVal = subC2781(0);
if (tmpVal != -1) {
if ( (_arrunkObj1337[1]._arr1[0]._field34 != 0)
@@ -5708,7 +5708,7 @@ void Scene1337::subCF979() {
found = true;
}
}
-
+
if (found)
return;
@@ -5722,7 +5722,7 @@ void Scene1337::subCF979() {
found = true;
}
}
-
+
if (!found) {
// The variable 'j' is not used in the inner code of the loop. It's suspect.
for (int j = 0; j <= 7; j++) {
@@ -5732,7 +5732,7 @@ void Scene1337::subCF979() {
}
}
}
-
+
if (found)
break;
}
@@ -5761,12 +5761,12 @@ void Scene1337::subCF979() {
}
}
}
-
+
if (found)
break;
}
}
-
+
if (found)
return;
@@ -5847,7 +5847,7 @@ void Scene1337::subD02CA() {
_item6._object1 = _arrunkObj1337[2]._arr1[di]._object1;
}
}
-
+
if (di == 4) {
subCDB90(1, _item6._field36);
subD0281();
@@ -5862,7 +5862,7 @@ void Scene1337::subD02CA() {
subD0281();
return;
}
-
+
// That continues the block when R2_GLOBALS._v57810 == 200 and di != 4
subD18B5(1332, _item6._object1._strip, _item6._object1._frame);
R2_GLOBALS._sceneObjects->draw();
@@ -5874,7 +5874,7 @@ void Scene1337::subD02CA() {
|| (g_globals->_events.getEvent(event, EVENT_KEYPRESS)) ){
_item6._field36 = g_globals->_events._mousePos;
found_di = false;
-
+
for (int i = 0; i <= 3; i ++) {
if (subC2BF8(&_arrunkObj1337[2]._arr1[i], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) {
if (_arrunkObj1337[2]._arr1[i]._field34 == 0) {
@@ -5897,7 +5897,7 @@ void Scene1337::subD02CA() {
break;
}
}
-
+
if ((!found) && (!found_di)) {
if (subC2BF8(&_item7, Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) {
subC4A39(&_item6);
@@ -5947,7 +5947,7 @@ void Scene1337::subD02CA() {
} else {
if (j == 7)
_field424A = 2;
-
+
subC33C0(&_item6, &_arrunkObj1337[2]._arr2[i]);
return;
}
@@ -6048,7 +6048,7 @@ void Scene1337::subD02CA() {
actionDisplay(1330, 99, 159, 10, 1, 200, 0, 7, 0, 154, 154);
}
}
-
+
if (subC2BF8(&_arrunkObj1337[3]._arr4[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) {
if ( (_arrunkObj1337[3]._arr1[0]._field34 != 0)
|| (_arrunkObj1337[3]._arr1[1]._field34 != 0)
@@ -6188,7 +6188,7 @@ void Scene1337::subD02CA() {
}
}
}
-
+
if (found)
return;
} else {
@@ -6234,7 +6234,7 @@ int Scene1337::subD18F5() {
// The cursor looks... very dummy
// To be checked
warning("TODO: CursorManager.setData(R2_GLOBALS.off_57705)");
-
+
++R2_GLOBALS._v57709;
return R2_GLOBALS._v57709;
@@ -6339,7 +6339,7 @@ void Scene1500::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._sound1.play(110);
} else if (R2_GLOBALS._sceneManager._previousScene == 1550) {
_actor1.setPosition(Common::Point(189, 139), 5);
-
+
_actor3.setup(1400, 2, 1);
_actor3.changeZoom(-1);
_actor3.setPosition(Common::Point(298, 258), 5);
@@ -6505,7 +6505,7 @@ void Scene1530::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_quinnSpeaker);
_stripManager.addSpeaker(&_seekerSpeaker);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 1000) {
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.hide();
@@ -6677,7 +6677,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) {
R2_GLOBALS._player.disableControl();
if (R2_GLOBALS._player._characterIndex == 1)
scene->_sceneMode = 1576;
- else
+ else
scene->_sceneMode = 1584;
// strcpy(scene->_arrUnkObj15502[7]._actorName, 'hatch');
scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[7], NULL);
@@ -6887,7 +6887,7 @@ bool Scene1550::UnkObj15503::startAction(CursorType action, Event &event) {
} else {
if (scene->_actor4._frame == 1)
scene->_sceneMode = 24;
- else
+ else
scene->_sceneMode = 22;
scene->setAction(&scene->_sequenceManager1, scene, 1561, this, NULL);
}
@@ -6911,7 +6911,7 @@ void Scene1550::UnkArea1550::remove() {
//
if ((scene->_sceneMode >= 20) && (scene->_sceneMode <= 29))
return;
-
+
R2_GLOBALS._player.disableControl();
if (scene->_actor4._frame == 1) {
scene->_sceneMode = 1559;
@@ -7016,14 +7016,14 @@ bool Scene1550::Actor7::startAction(CursorType action, Event &event) {
Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
scene->_sceneMode = 80;
scene->signal();
-
+
return true;
}
bool Scene1550::Actor8::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
R2_GLOBALS._player.disableControl();
Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
scene->_field412 = 1;
@@ -7031,7 +7031,7 @@ bool Scene1550::Actor8::startAction(CursorType action, Event &event) {
scene->_sceneMode = 1552;
else
scene->_sceneMode = 1588;
-
+
scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor8, NULL);
return true;
}
@@ -7071,7 +7071,7 @@ bool Scene1550::Actor10::startAction(CursorType action, Event &event) {
scene->_sceneMode = 1589;
scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor10, NULL);
- return true;
+ return true;
}
bool Scene1550::Actor11::startAction(CursorType action, Event &event) {
@@ -7087,7 +7087,7 @@ bool Scene1550::Actor11::startAction(CursorType action, Event &event) {
scene->_sceneMode = 1587;
scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor11, NULL);
- return true;
+ return true;
}
bool Scene1550::Actor12::startAction(CursorType action, Event &event) {
@@ -7132,7 +7132,7 @@ bool Scene1550::Actor13::startAction(CursorType action, Event &event) {
case CURSOR_USE:
if (scene->_field415 != 2)
return SceneActor::startAction(action, event);
-
+
if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 1564;
@@ -7180,13 +7180,13 @@ void Scene1550::postInit(SceneObjectList *OwnerList) {
loadScene(1234);
else
loadScene(1550);
-
+
scalePalette(65, 65, 65);
setZoomPercents(30, 75, 170, 100);
_field417 = 1550;
_field419 = 0;
SceneExt::postInit();
-
+
if (R2_GLOBALS._sceneManager._previousScene == -1)
R2_GLOBALS.setFlag(R2_ATTRACTOR_CABLE_HARNESS);
@@ -7194,12 +7194,12 @@ void Scene1550::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player._characterScene[1] = 1550;
R2_GLOBALS._player._characterScene[2] = 1550;
}
-
+
_stripManager.setColors(60, 255);
_stripManager.setFontNumber(3);
_stripManager.addSpeaker(&_quinnSpeaker);
_stripManager.addSpeaker(&_seekerSpeaker);
-
+
R2_GLOBALS._player.postInit();
R2_GLOBALS._player._effect = 6;
@@ -7209,19 +7209,19 @@ void Scene1550::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.setup(1505, 3, 1);
R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
-
+
if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11))
R2_GLOBALS._player.setPosition(Common::Point(157, 135));
else
R2_GLOBALS._player.setPosition(Common::Point(160, 100));
-
+
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
R2_GLOBALS._player.disableControl();
-
+
_field414 = 0;
_actor7.changeZoom(-1);
R2_GLOBALS._player.changeZoom(-1);
-
+
switch (R2_GLOBALS._sceneManager._previousScene) {
case 1530:
R2_GLOBALS._v565AE = 0;
@@ -7237,9 +7237,9 @@ void Scene1550::postInit(SceneObjectList *OwnerList) {
if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1580) {
R2_GLOBALS._player.disableControl();
R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL);
-
+
_field412 = 1;
-
+
_actor1.postInit();
_arrUnkObj15502[7].subA5CDF(8);
_arrUnkObj15502[7].hide();
@@ -7247,7 +7247,7 @@ void Scene1550::postInit(SceneObjectList *OwnerList) {
_sceneMode = 1577;
else
_sceneMode = 1578;
-
+
setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_arrUnkObj15502[7], NULL);
R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1550;
} else {
@@ -7257,13 +7257,13 @@ void Scene1550::postInit(SceneObjectList *OwnerList) {
default:
break;
}
-
+
subA2B2F();
-
+
_item1.setDetails(16, 1550, 10, -1, -1);
_item2.setDetails(24, 1550, 10, -1, -1);
_item3.setDetails(Rect(0, 0, 320, 200), 1550, 0, 1, -1, 1, NULL);
-
+
if ((R2_GLOBALS._sceneManager._previousScene == 1500) && (R2_GLOBALS.getFlag(16))) {
_sceneMode = 70;
if (!R2_GLOBALS._sceneObjects->contains(&_actor7))
@@ -7454,7 +7454,7 @@ void Scene1550::signal() {
++R2_GLOBALS._v565AE;
if (R2_GLOBALS._player._characterIndex == 1)
_stripManager.start(499 + R2_GLOBALS._v565AE, this);
- else
+ else
_stripManager.start(502 + R2_GLOBALS._v565AE, this);
}
} else {
@@ -7470,7 +7470,7 @@ void Scene1550::signal() {
++R2_GLOBALS._v565AE;
if (R2_GLOBALS._player._characterIndex == 1)
_stripManager.start(563 + R2_GLOBALS._v565AE, this);
- else
+ else
_stripManager.start(567 + R2_GLOBALS._v565AE, this);
}
}
@@ -7635,11 +7635,11 @@ void Scene1550::process(Event &event) {
_field412 = 1;
else
_field412 = 0;
-
+
if ((curReg == 13) || (curReg == 14))
_field412 = 0;
}
-
+
Scene::process(event);
}
@@ -7675,10 +7675,10 @@ void Scene1550::dispatch() {
break;
}
}
-
+
if (_field412 != 0)
return;
-
+
switch (R2_GLOBALS._player.getRegionIndex() - 11) {
case 0:
// No break on purpose
@@ -7687,9 +7687,9 @@ void Scene1550::dispatch() {
_sceneMode = 1;
_field412 = 1;
--R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex];
-
+
subA2B2F();
-
+
R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 108) * 172) / 100), 145));
if (R2_GLOBALS._player._position.x < 160) {
Common::Point pt(R2_GLOBALS._player._position.x + 5, 135);
@@ -7710,9 +7710,9 @@ void Scene1550::dispatch() {
_sceneMode = 3;
_field412 = 1;
++R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex];
-
+
subA2B2F();
-
+
R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 172) * 108) / 100), 19));
if (R2_GLOBALS._player._position.x < 160) {
Common::Point pt(R2_GLOBALS._player._position.x + 5, 29);
@@ -7733,9 +7733,9 @@ void Scene1550::dispatch() {
_sceneMode = 5;
_field412 = 1;
++R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex];
-
+
subA2B2F();
-
+
if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11) && (R2_GLOBALS._player._position.y > 50) && (R2_GLOBALS._player._position.y < 135)) {
if (R2_GLOBALS._player._position.y >= 85) {
R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 10));
@@ -7792,7 +7792,7 @@ void Scene1550::dispatch() {
void Scene1550::saveCharacter(int characterIndex) {
if (R2_GLOBALS._player._characterIndex == 3)
R2_GLOBALS._sound1.fadeOut2(NULL);
-
+
SceneExt::saveCharacter(characterIndex);
}
@@ -7913,7 +7913,7 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) {
fixPriority(2);
if (scene->_field414 == 2)
setup(1553, 2, 1);
- else
+ else
setup(1556, 2, 1);
setPosition(Common::Point(160, 44));
break;
@@ -7943,7 +7943,7 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) {
} else {
fixPriority(2);
}
-
+
if (frameNumber != 1)
setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
@@ -7984,40 +7984,40 @@ void Scene1550::subA2B2F() {
Rect tmpRect;
_field419 = 0;
_field415 = 0;
-
+
tmpRect = R2_GLOBALS._v5589E;
-
+
_actor14.remove();
_actor17.remove();
_actor15.remove();
_actor19.remove();
_actor16.remove();
_actor18.remove();
-
+
for (int i = 0; i < 8; ++i)
_arrUnkObj15501[i].remove();
-
+
_actor6.remove();
for (int i = 0; i < 8; ++i)
_arrUnkObj15502[i].remove();
-
+
_actor8.remove();
_actor9.remove();
_actor10.remove();
_actor3.remove();
_actor11.remove();
-
+
if ((_sceneMode != 1577) && (_sceneMode != 1578))
_actor1.remove();
-
+
_actor2.remove();
_actor7.remove();
_actor13.remove();
_actor5.remove();
_actor12.remove();
_actor4.remove();
-
+
switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2]) {
case 0:
switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) {
@@ -8218,7 +8218,7 @@ void Scene1550::subA2B2F() {
} else {
_field414 = 2;
}
-
+
if (R2_GLOBALS._sceneManager._sceneNumber == 1550){
warning("Mouse_hideIfNeeded()");
warning("gfx_set_pane_p");
@@ -8528,7 +8528,7 @@ void Scene1550::subA2B2F() {
_actor6.setPosition(Common::Point(243, 131));
_actor6.fixPriority(10);
_actor6.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
-
+
_actor1.postInit();
_actor1.setup(1550, 2, 3);
_actor1.setPosition(Common::Point(243, 64));
@@ -8658,7 +8658,7 @@ void Scene1550::subA2B2F() {
}
/*--------------------------------------------------------------------------
- * Scene 1575 -
+ * Scene 1575 -
*
*--------------------------------------------------------------------------*/
Scene1575::Scene1575() {
@@ -8709,7 +8709,7 @@ void Scene1575::Hotspot1::process(Event &event) {
return;
}
int di = scene->_actor1._position.x;
-
+
switch (_field34 - 1) {
case 0:
if (R2_GLOBALS.getFlag(18)) {
@@ -8730,10 +8730,10 @@ void Scene1575::Hotspot1::process(Event &event) {
di -= 65;
di += 2;
scene->_field41A += 2;
-
+
for (int i = 0; i < 17; i++)
scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x + 2, scene->_arrActor[i]._position.y));
-
+
scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x + 2, scene->_actor13._position.y));
scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x + 2, scene->_actor12._position.y));
scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y));
@@ -8745,12 +8745,12 @@ void Scene1575::Hotspot1::process(Event &event) {
if (scene->_field41A > 0) {
if (di < -8)
di += 65;
-
+
di -= 2;
scene->_field41A -= 2;
for (int i = 0; i < 178; i++)
scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x - 2, scene->_arrActor[i]._position.y));
-
+
scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x - 2, scene->_actor13._position.y));
scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x - 2, scene->_actor12._position.y));
scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y));
@@ -9061,9 +9061,9 @@ bool Scene1580::Hotspot1::startAction(CursorType action, Event &event) {
scene->_actor2.setup(1580, 1, 4);
scene->_actor2.setPosition(Common::Point(159, 163));
scene->_actor2.setDetails(1550, 78, -1, -1, 2, (SceneItem *) NULL);
-
+
scene->_arrActor[5].remove();
-
+
return true;
}
@@ -9082,12 +9082,12 @@ bool Scene1580::Hotspot2::startAction(CursorType action, Event &event) {
scene->_actor3.setup(1580, 1, 1);
scene->_actor3.setPosition(Common::Point(124, 108));
scene->_actor3.fixPriority(10);
-
+
if (R2_INVENTORY.getObjectScene(26) == 1580)
scene->_actor3.setDetails(1550, 14, -1, -1, 5, &scene->_actor2);
else
scene->_actor3.setDetails(1550, 14, -1, -1, 2, (SceneItem *)NULL);
-
+
scene->_actor1.postInit();
scene->_actor1.setup(1580, 3, 1);
scene->_actor1.setPosition(Common::Point(124, 109));
@@ -9115,7 +9115,7 @@ bool Scene1580::Actor2::startAction(CursorType action, Event &event) {
scene->_stripManager.start(536, scene);
else
scene->_stripManager.start(537, scene);
-
+
return true;
}
@@ -9132,35 +9132,35 @@ bool Scene1580::Actor3::startAction(CursorType action, Event &event) {
remove();
return true;
}
-
+
return SceneActor::startAction(action, event);
}
bool Scene1580::Actor4::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
R2_GLOBALS._player.disableControl();
R2_GLOBALS._sceneItems.remove(&scene->_actor4);
scene->_sceneMode = 0;
animate(ANIM_MODE_5, scene);
-
+
return true;
}
bool Scene1580::Actor5::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
R2_GLOBALS._player.disableControl();
setFrame(2);
scene->_sceneMode = 20;
scene->setAction(&scene->_sequenceManager, scene, 2, &R2_GLOBALS._player, NULL);
-
+
return true;
}
@@ -9238,9 +9238,9 @@ void Scene1580::postInit(SceneObjectList *OwnerList) {
_stripManager.setFontNumber(3);
_stripManager.addSpeaker(&_quinnSpeaker);
_stripManager.addSpeaker(&_seekerSpeaker);
-
+
_sceneMode = 0;
-
+
R2_GLOBALS._player.disableControl();
if (R2_INVENTORY.getObjectScene(26) == 1580) {
_actor2.postInit();
@@ -9250,14 +9250,14 @@ void Scene1580::postInit(SceneObjectList *OwnerList) {
} else {
_item1.setDetails(Rect(141, 148, 179, 167), 1550, 79, -1, -1, 1, NULL);
}
-
+
if (R2_INVENTORY.getObjectScene(51) == 1580) {
_actor3.postInit();
_actor3.setup(1580, 1, 1);
_actor3.setPosition(Common::Point(124, 108));
_actor3.fixPriority(10);
_actor3.setDetails(1550, 13, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor1.postInit();
_actor1.setup(1580, 1, 3);
_actor1.setPosition(Common::Point(124, 96));
@@ -9273,7 +9273,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) {
_actor1.setup(1580, 3, 1);
_actor1.setPosition(Common::Point(124, 109));
_actor1.fixPriority(20);
-
+
_sceneMode = 10;
} else {
_item2.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 1, NULL);
@@ -9289,7 +9289,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) {
_actor4.setPosition(Common::Point(216, 108));
_actor4.fixPriority(100);
-
+
_actor5.postInit();
_actor5.setup(1580, 4, 1);
_actor5.setPosition(Common::Point(291, 147));
@@ -9303,7 +9303,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) {
_actor6.fixPriority(50);
_actor6.setDetails(1550, 32, -1, 34, 1, (SceneItem *) NULL);
}
-
+
if (R2_INVENTORY.getObjectScene(27) == 1580) {
_actor7.postInit();
_actor7.setup(1580, 6, 1);
@@ -9311,13 +9311,13 @@ void Scene1580::postInit(SceneObjectList *OwnerList) {
_actor7.fixPriority(50);
_actor7.setDetails(1550, 38, -1, 34, 1, (SceneItem *) NULL);
}
-
+
R2_GLOBALS._player.postInit();
R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1580;
R2_GLOBALS._player.hide();
setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
_item3.setDetails(Rect(0, 0, 320, 200), 1550, 50, -1, -1, 1, NULL);
-
+
}
void Scene1580::signal() {
@@ -9334,7 +9334,7 @@ void Scene1580::signal() {
_arrActor[0].setup(1580, 2, 1);
_arrActor[0].setPosition(Common::Point(138, 56));
}
-
+
if (R2_INVENTORY.getObjectScene(25) != 0) {
_arrActor[1].postInit();
_arrActor[1].setup(1580, 2, 2);
@@ -9663,7 +9663,7 @@ void Scene1625::process(Event &event) {
}
/*--------------------------------------------------------------------------
- * Scene 1700 -
+ * Scene 1700 -
*
*--------------------------------------------------------------------------*/
Scene1700::Scene1700() {
@@ -9751,7 +9751,7 @@ void Scene1700::Exit3::changeScene() {
void Scene1700::subAF3F8() {
Rect tmpRect;
R2_GLOBALS._walkRegions.load(1700);
-
+
_actor3.remove();
_actor4.remove();
_actor5.remove();
@@ -9759,22 +9759,22 @@ void Scene1700::subAF3F8() {
_actor7.remove();
_actor8.remove();
_actor11.remove();
-
+
if (_sceneMode != 40) {
_actor9.remove();
_actor10.remove();
}
-
+
warning("tmpRect = _v5589E;");
warning("Mouse_hideIfNeeded");
warning("set_pane_p(_paneNumber);");
warning("Big loop calling gfx_draw_slice_p");
-
+
if (_field77A == 0)
_field77A = 1;
else
_field77A = 0;
-
+
warning("set_pane_p(_paneNumber);");
if ((_sceneMode != 40) && (R2_GLOBALS._v565F6 != 0)){
@@ -9784,57 +9784,57 @@ void Scene1700::subAF3F8() {
_actor9.setDetails(1700, 6, -1, -1, 2, (SceneItem *) NULL);
R2_GLOBALS._walkRegions.enableRegion(2);
R2_GLOBALS._walkRegions.enableRegion(12);
- }
-
+ }
+
if ((R2_GLOBALS._v565F6 + 2) % 4 == 0) {
_actor3.postInit();
_actor3.setup(1700, 1, 1);
_actor3.setPosition(Common::Point(222, 82));
_actor3.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL);
-
+
_actor5.postInit();
_actor5.setup(1700, 2, 1);
_actor5.setPosition(Common::Point(177, 82));
_actor5.fixPriority(0);
-
+
_actor6.postInit();
_actor6.setup(1700, 2, 2);
_actor6.setPosition(Common::Point(332, 96));
_actor6.fixPriority(0);
-
+
_actor4.postInit();
_actor4.setup(1700, 1, 2);
_actor4.setPosition(Common::Point(424, 84));
-
+
R2_GLOBALS._walkRegions.enableRegion(11);
}
-
+
if ((R2_GLOBALS._v565F6 + 399) % 800 == 0) {
_actor7.postInit();
_actor7.setup(1700, 3, 2);
_actor7.setPosition(Common::Point(51, 141));
_actor7.fixPriority(0);
_actor7.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL);
-
+
_exit3._enabled = true;
} else {
R2_GLOBALS._walkRegions.enableRegion(1);
_exit3._enabled = false;
}
-
- if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._v565F6 == 25) || (R2_GLOBALS._v565F6 == -3)))
+
+ if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._v565F6 == 25) || (R2_GLOBALS._v565F6 == -3)))
|| ((R2_GLOBALS.getFlag(15)) && (R2_GLOBALS._v565F6 == R2_GLOBALS._v565FA))
) {
R2_GLOBALS._v565FA = R2_GLOBALS._v565F6;
if (!R2_GLOBALS.getFlag(15))
_field77C = 1;
-
+
_actor11.postInit();
_actor11.setup(1700, 3, 1);
_actor11.setPosition(Common::Point(338, 150));
_actor11.setDetails(1700, 9, -1, -1, 2, (SceneItem *) NULL);
_actor11.fixPriority(15);
-
+
_actor8.postInit();
_actor8.setup(1700, 4, 1);
_actor8.setPosition(Common::Point(312, 106));
@@ -9847,14 +9847,14 @@ void Scene1700::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
if (R2_GLOBALS._sceneManager._previousScene == -1)
R2_GLOBALS._sceneManager._previousScene = 1530;
-
+
scalePalette(65, 65, 65);
_stripManager.addSpeaker(&_quinnSpeaker);
_stripManager.addSpeaker(&_seekerSpeaker);
_field77A = 0;
_field77C = 0;
-
+
_exit1.setDetails(Rect(94, 0, 319, 12), EXITCURSOR_N, 1700);
_exit2.setDetails(Rect(0, 161, 319, 168), EXITCURSOR_S, 1700);
_exit3.setDetails(Rect(0, 0, 2, 138), EXITCURSOR_W, 1800);
@@ -9869,11 +9869,11 @@ void Scene1700::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.setVisage(1506);
R2_GLOBALS._player._moveDiff = Common::Point(3, 1);
}
-
+
_actor12.postInit();
_actor12.animate(ANIM_MODE_1, NULL);
_actor12.setObjectWrapper(new SceneObjectWrapper());
-
+
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
_actor12.setVisage(1506);
_actor12._moveDiff = Common::Point(3, 1);
@@ -9883,41 +9883,41 @@ void Scene1700::postInit(SceneObjectList *OwnerList) {
_actor12._moveDiff = Common::Point(2, 1);
_actor12.setDetails(9001, 1, -1, -1, 1, (SceneItem *) NULL);
}
-
+
R2_GLOBALS._sound1.play(134);
-
+
_actor1.postInit();
_actor1.fixPriority(10);
-
+
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_actor1.setVisage(1112);
- else
+ else
_actor1.setVisage(1111);
-
+
_actor1._effect = 5;
_actor1._field9C = _field312;
R2_GLOBALS._player._linkedActor = &_actor1;
-
+
_actor2.postInit();
_actor2.fixPriority(10);
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_actor2.setVisage(1111);
- else
+ else
_actor2.setVisage(1112);
-
+
_actor2._effect = 5;
_actor2._field9C = _field312;
_actor12._linkedActor = &_actor2;
-
+
R2_GLOBALS._sound1.play(134);
-
+
switch (R2_GLOBALS._sceneManager._previousScene) {
case 1530:
R2_GLOBALS._player._characterIndex = R2_QUINN;
R2_GLOBALS._player.disableControl();
R2_GLOBALS._player.hide();
_actor12.hide();
-
+
_actor10.postInit();
warning("_actor10._actorName = \"hatch\";");
_actor10.hide();
@@ -9926,7 +9926,7 @@ void Scene1700::postInit(SceneObjectList *OwnerList) {
_actor9.setup(1701, 1, 1);
_actor9.setPosition(Common::Point(220, 137));
_actor9.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor1.hide();
_actor2.hide();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
@@ -10003,7 +10003,7 @@ void Scene1700::signal() {
Common::Point pt(R2_GLOBALS._player._position.x, 160);
NpcMover *mover = new NpcMover();
R2_GLOBALS._player.addMover(mover, &pt, this);
-
+
if (R2_GLOBALS._player._position.x < 132) {
_actor12.setPosition(Common::Point(156, 170));
Common::Point pt2(156, 160);
@@ -10028,7 +10028,7 @@ void Scene1700::signal() {
Common::Point pt(R2_GLOBALS._player._position.x, 10);
NpcMover *mover = new NpcMover();
R2_GLOBALS._player.addMover(mover, &pt, this);
-
+
if (R2_GLOBALS._player._position.x >= 171) {
_actor12.setPosition(Common::Point(155, 0));
Common::Point pt2(155, 10);
@@ -10112,7 +10112,7 @@ void Scene1700::signal() {
R2_GLOBALS._walkRegions.enableRegion(15);
else
R2_GLOBALS._walkRegions.enableRegion(17);
-
+
R2_GLOBALS._player.enableControl();
break;
case 1704:
@@ -10130,7 +10130,7 @@ void Scene1700::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 1750 -
+ * Scene 1750 -
*
*--------------------------------------------------------------------------*/
Scene1750::Actor4::Actor4() {
@@ -10193,7 +10193,7 @@ void Scene1750::Actor4::subB1A76(int arg1, int arg2, int arg3, int arg4, int arg
_fieldA8 = arg3;
_fieldAA = arg4;
_fieldAC = arg5;
-
+
postInit();
setup(1750, 1, 1);
fixPriority(255);
@@ -10227,7 +10227,7 @@ void Scene1750::Actor4::process(Event &event) {
addMover(NULL);
subB1B27();
}
-
+
if (_fieldAE != 0) {
event.handled = true;
if (event.mousePos.y >= _fieldA8) {
@@ -10251,7 +10251,7 @@ bool Scene1750::Actor4::startAction(CursorType action, Event &event) {
bool Scene1750::Actor5::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene;
switch (_fieldA4) {
@@ -10294,7 +10294,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._uiElements._active = false;
R2_GLOBALS._v5589E.set(0, 0, 320, 200);
SceneExt::postInit();
-
+
R2_GLOBALS._player._characterScene[1] = 1750;
R2_GLOBALS._player._characterScene[2] = 1750;
R2_GLOBALS._player._oldCharacterScene[1] = 1750;
@@ -10304,7 +10304,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) {
_rotation->setDelay(0);
_rotation->_idxChange = 0;
_rotation->_countdown = 2;
-
+
switch ((R2_GLOBALS._v565F6 + 2) % 4) {
case 0:
_rotation->_currIndex = 247;
@@ -10321,7 +10321,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) {
default:
break;
}
-
+
byte tmpPal[768];
for (int i = 224; i < 255; i++) {
@@ -10348,40 +10348,40 @@ void Scene1750::postInit(SceneObjectList *OwnerList) {
_actor3.setPosition(Common::Point(49, 185));
_actor3.fixPriority(7);
_actor3.setDetails(1750, 30, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor1.postInit();
_actor1.setup(1750, 2, 1);
_actor1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._v565F6 % 800) * 4) - 1440));
_actor1.fixPriority(8);
-
+
_actor2.postInit();
_actor2.setup(1750, 1, 4);
-
+
int tmpVar = abs(_actor1._position.y - 158) / 100;
-
+
if (tmpVar >= 8)
_actor2.hide();
else if (_actor1._position.y <= 158)
_actor2.setPosition(Common::Point(137, (tmpVar * 7) + 122));
else
_actor2.setPosition(Common::Point(148, (tmpVar * 7) + 122));
-
+
_actor4.subB1A76(1, 286, 143, 41, 15);
_actor4.setDetails(1750, 24, 1, -1, 1, (SceneItem *) NULL);
-
+
_actor5.postInit();
_actor5._fieldA4 = 1;
_actor5.setup(1750, 1, 2);
_actor5.setPosition(Common::Point(192, 140));
_actor5.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL);
-
+
_actor6.postInit();
_actor6._fieldA4 = 2;
_actor6.setup(1750, 1, 3);
_actor6.setPosition(Common::Point(192, 163));
_actor6.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL);
_actor6.hide();
-
+
_actor7.postInit();
_actor7._fieldA4 = 3;
_actor7.setup(1750, 1, 5);
@@ -10393,7 +10393,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) {
_field413 = 0;
_field415 = 0;
_field419 = ((_rotation->_currIndex - 218) / 4) % 4;
-
+
_item2.setDetails(Rect(129, 112, 155, 175), 1750, 21, -1, -1, 1, NULL);
_item3.setDetails(Rect(93, 122, 126, 172), 1750, 15, -1, -1, 1, NULL);
_item4.setDetails(Rect(3, 3, 157, 99), 1750, 9, -1, -1, 1, NULL);
@@ -10403,15 +10403,15 @@ void Scene1750::postInit(SceneObjectList *OwnerList) {
void Scene1750::remove() {
_rotation->remove();
-
+
if (R2_GLOBALS._v565F6 == 2400)
R2_GLOBALS._v565F6 = 2399;
-
+
if (R2_GLOBALS._v565F6 == -2400)
R2_GLOBALS._v565F6 = -2399;
-
+
R2_GLOBALS._v565FA = R2_GLOBALS._v565F6;
-
+
SceneExt::remove();
R2_GLOBALS._sound1.fadeOut2(NULL);
R2_GLOBALS._v5589E.top = 3;
@@ -10432,7 +10432,7 @@ void Scene1750::process(Event &event) {
void Scene1750::dispatch() {}
/*--------------------------------------------------------------------------
- * Scene 1800 -
+ * Scene 1800 -
*
*--------------------------------------------------------------------------*/
Scene1800::Scene1800() {
@@ -10448,10 +10448,10 @@ void Scene1800::synchronize(Serializer &s) {
bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) {
if ((action != R2_COM_SCANNER) && (action != R2_COM_SCANNER_2))
return false;
-
+
Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
if (R2_GLOBALS._v565F6 == 1201) {
@@ -10624,41 +10624,41 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._sound1.play(116);
_stripManager.addSpeaker(&_quinnSpeaker);
_stripManager.addSpeaker(&_seekerSpeaker);
-
+
if (R2_GLOBALS._sceneManager._previousScene == -1)
R2_GLOBALS._v565F6 = 1201;
-
+
if (R2_GLOBALS._v565F6 == 1201)
_field412 = 2;
else
_field412 = 0;
-
+
scalePalette(65, 65, 65);
_exit1.setDetails(Rect(0, 160, 319, 168), EXITCURSOR_S, 1800);
_item5.setDetails(Rect(0, 0, 320, 200), -1, -1, -1, -1, 1, NULL);
-
+
_actor6.postInit();
_actor6.setup(1801, 4, 1);
_actor6.setPosition(Common::Point(170, 24));
_actor6.setDetails(1800, 13, 14, 15, 1, (SceneItem *) NULL);
-
+
_actor7.postInit();
_actor7.setup(1801, 3, 1);
_actor7.setPosition(Common::Point(160, 139));
_actor7.setDetails(1800, 6, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor8.postInit();
_actor8.setup(1800, 1, 1);
_actor8.setPosition(Common::Point(110, 78));
_actor8.fixPriority(135);
_actor8.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor9.postInit();
_actor9.setup(1800, 2, 1);
_actor9.setPosition(Common::Point(209, 78));
_actor9.fixPriority(135);
_actor9.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor4.postInit();
if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64)))
_actor4.setup(1801, 2, 1);
@@ -10666,7 +10666,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
_actor4.setup(1801, 2, 10);
_actor4.setPosition(Common::Point(76, 142));
_actor4.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor5.postInit();
if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64)))
_actor5.setup(1801, 1, 1);
@@ -10674,7 +10674,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
_actor5.setup(1801, 1, 10);
_actor5.setPosition(Common::Point(243, 142));
_actor5.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL);
-
+
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
@@ -10693,7 +10693,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.setVisage(1503);
R2_GLOBALS._player._moveDiff = Common::Point(2, 2);
}
-
+
_actor2.postInit();
_actor2.animate(ANIM_MODE_1, NULL);
_actor2.setObjectWrapper(new SceneObjectWrapper());
@@ -10716,7 +10716,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
_actor2.setVisage(1503);
_actor2._moveDiff = Common::Point(2, 2);
}
-
+
if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) {
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
R2_GLOBALS._player.setPosition(Common::Point(114, 150));
@@ -10751,34 +10751,34 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
_actor2.setPosition(Common::Point(140, 160));
}
}
-
+
_actor1.postInit();
_actor1.fixPriority(10);
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_actor1.setVisage(1111);
else
_actor1.setVisage(1110);
-
+
_actor1._effect = 5;
_actor1._field9C = _field312;
R2_GLOBALS._player._linkedActor = &_actor1;
-
+
_actor3.postInit();
_actor3.fixPriority(10);
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
_actor3.setVisage(1110);
else
_actor3.setVisage(1111);
-
+
_actor3._effect = 5;
_actor3._field9C = _field312;
-
+
_actor2._linkedActor = &_actor3;
-
+
R2_GLOBALS._player._characterScene[1] = 1800;
R2_GLOBALS._player._characterScene[2] = 1800;
-
+
_item2.setDetails(Rect(128, 95, 190, 135), 1800, 10, -1, -1, 1, NULL);
_item1.setDetails(Rect(95, 3, 223, 135), 1800, 0, -1, -1, 1, NULL);
@@ -10786,7 +10786,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
// This is *wrong*. The following statement is a wild guess based on good common sense
_item3.setDetails(11, 1800, 23, 24, 25);
_item4.setDetails(Rect(0, 0, 320, 200), 1800, 17, -1, 19, 1, NULL);
-
+
R2_GLOBALS._player.disableControl();
if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) {
if ((R2_GLOBALS.getFlag(14)) && (R2_GLOBALS._player._characterIndex == R2_SEEKER)) {
@@ -10822,7 +10822,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) {
setAction(&_sequenceManager, this, 1801, &R2_GLOBALS._player, &_actor2, NULL);
}
}
-
+
R2_GLOBALS._player._oldCharacterScene[1] = 1800;
R2_GLOBALS._player._oldCharacterScene[2] = 1800;
}
@@ -10956,7 +10956,7 @@ void Scene1800::saveCharacter(int characterIndex) {
}
/*--------------------------------------------------------------------------
- * Scene 1850 -
+ * Scene 1850 -
*
*--------------------------------------------------------------------------*/
Scene1850::Scene1850() {
@@ -10970,7 +10970,7 @@ void Scene1850::synchronize(Serializer &s) {
bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneHotspot::startAction(action, event);
-
+
Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene;
R2_GLOBALS._player.disableControl();
@@ -10988,7 +10988,7 @@ bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) {
scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_actor5, NULL);
else
scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_actor5, NULL);
-
+
R2_GLOBALS.clearFlag(30);
} else {
scene->_sceneMode = 1853;
@@ -10998,7 +10998,7 @@ bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) {
else
scene->setAction(&scene->_sequenceManager1, scene, 1853, &R2_GLOBALS._player, NULL);
}
-
+
return true;
}
@@ -11009,10 +11009,10 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) {
case CURSOR_USE:
if ((R2_GLOBALS._player._characterIndex != R2_SEEKER) || (R2_GLOBALS.getFlag(33)) || (R2_GLOBALS.getFlag(30)))
return SceneActor::startAction(action, event);
-
+
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 1857;
-
+
if (R2_GLOBALS.getFlag(32))
scene->setAction(&scene->_sequenceManager1, scene, 1858, &R2_GLOBALS._player, &scene->_actor5, NULL);
else
@@ -11026,7 +11026,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) {
SceneItem::display(1850, 2, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
else
SceneItem::display(1850, 1, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
-
+
return true;
break;
case R2_AIRBAG:
@@ -11046,7 +11046,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 1875;
scene->_actor2.postInit();
-
+
if (R2_GLOBALS.getFlag(32))
scene->setAction(&scene->_sequenceManager1, scene, 1876, &R2_GLOBALS._player, &scene->_actor2, NULL);
else
@@ -11059,7 +11059,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) {
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
scene->_stripManager.start(557, scene);
R2_GLOBALS.setFlag(69);
-
+
return true;
} else {
return SceneActor::startAction(action, event);
@@ -11074,7 +11074,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) {
scene->_sceneMode = 1878;
scene->setAction(&scene->_sequenceManager1, scene, 1878, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor2, NULL);
}
-
+
return true;
break;
default:
@@ -11086,31 +11086,31 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) {
bool Scene1850::Actor6::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneHotspot::startAction(action, event);
-
+
Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene;
-
+
if (R2_GLOBALS.getFlag(32)) {
SceneItem::display(3240, 4, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
return true;
}
-
+
R2_GLOBALS._player.disableControl();
if (scene->_field412 == 1851)
R2_GLOBALS._player._effect = 1;
-
+
if (_position.x >= 160)
R2_GLOBALS.setFlag(29);
- else
+ else
R2_GLOBALS.clearFlag(29);
-
+
if ((R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) {
if (_position.x >= 160)
scene->_field41E = 3;
else
scene->_field41E = 2;
-
+
scene->_sceneMode = 1860;
-
+
if (R2_GLOBALS.getFlag(32)) {
scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_actor5, NULL);
} else {
@@ -11136,13 +11136,13 @@ bool Scene1850::Actor8::startAction(CursorType action, Event &event) {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 1881;
-
+
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
scene->setAction(&scene->_sequenceManager1, scene, 1881, &R2_GLOBALS._player, NULL);
} else {
scene->setAction(&scene->_sequenceManager1, scene, 1880, &R2_GLOBALS._player, NULL);
}
-
+
return true;
}
@@ -11166,10 +11166,10 @@ void Scene1850::postInit(SceneObjectList *OwnerList) {
if (R2_GLOBALS._sceneManager._previousScene == 3150)
R2_GLOBALS._sound1.play(116);
-
+
_stripManager.addSpeaker(&_quinnSpeaker);
_stripManager.addSpeaker(&_seekerSpeaker);
-
+
_field418 = 0;
_field41E = 0;
_field41A = Common::Point(0, 0);
@@ -11192,7 +11192,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._walkRegions.enableRegion(1);
_actor5.postInit();
-
+
if (R2_GLOBALS.getFlag(34)) {
R2_GLOBALS._walkRegions.enableRegion(2);
_actor5.setup(1851, 4, 3);
@@ -11371,7 +11371,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.setPosition(Common::Point(164, 106));
}
- }
+ }
R2_GLOBALS._player.enableControl();
} else { // R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 1850
@@ -11412,7 +11412,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) {
}
_actor8.fixPriority(113);
-
+
if (R2_GLOBALS.getFlag(34)) {
_actor8.setDetails(1850, 25, -1, -1, 4, &_actor5);
} else {
@@ -11432,10 +11432,10 @@ void Scene1850::postInit(SceneObjectList *OwnerList) {
void Scene1850::remove() {
g_globals->_scenePalette.loadPalette(0);
- R2_GLOBALS._scenePalette._palette[771] = 255;
- R2_GLOBALS._scenePalette._palette[772] = 255;
- R2_GLOBALS._scenePalette._palette[773] = 255;
-
+ R2_GLOBALS._scenePalette._palette[765] = 255;
+ R2_GLOBALS._scenePalette._palette[766] = 255;
+ R2_GLOBALS._scenePalette._palette[767] = 255;
+
SceneExt::remove();
}
@@ -11447,9 +11447,9 @@ void Scene1850::signal() {
_actor1._effect = 6;
_actor1._shade = 6;
-
+
R2_GLOBALS._walkRegions.enableRegion(5);
-
+
if (R2_GLOBALS.getFlag(68)) {
R2_GLOBALS._player.enableControl();
} else {
@@ -11495,7 +11495,7 @@ void Scene1850::signal() {
_palette1.loadPalette(1851);
_field412 = 1851;
}
-
+
_field418 = 1;
if (R2_GLOBALS.getFlag(30)) {
_actor8.setAction(&_sequenceManager2, NULL, 1867, &_actor8, NULL);
@@ -11511,33 +11511,33 @@ void Scene1850::signal() {
R2_GLOBALS.setFlag(62);
R2_GLOBALS.setFlag(34);
R2_GLOBALS._walkRegions.enableRegion(2);
-
+
_actor2.postInit();
_actor2.setDetails(1850, 6, -1, -1, 5, &_actor5);
-
+
_sceneMode = 1879;
_actor8.setAction(&_sequenceManager2, this, 1879, &_actor5, &_actor8, &_actor2, NULL);
} else {
_actor8.setAction(&_sequenceManager2, NULL, 1867, &_actor8, NULL);
}
-
+
if (R2_GLOBALS.getFlag(34))
R2_GLOBALS._scenePalette.addFader(_palette1._palette, 256, 5, NULL);
else
R2_GLOBALS._scenePalette.addFader(_palette1._palette, 256, 5, this);
-
+
if (_field412 == 1851)
_field416 = -20;
else
_field416 = 20;
-
+
_field414 = 20;
-
+
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
if (_sceneMode == 1879)
_sceneMode = 1854;
-
+
if (R2_GLOBALS.getFlag(32)) {
setAction(&_sequenceManager1, NULL, 1873, &R2_GLOBALS._player, NULL);
} else {
@@ -11546,7 +11546,7 @@ void Scene1850::signal() {
} else {
if (_sceneMode == 1879)
_sceneMode = 1855;
-
+
if (R2_GLOBALS.getFlag(32)) {
setAction(&_sequenceManager1, NULL, 1874, &R2_GLOBALS._player, NULL);
} else {
@@ -11583,10 +11583,10 @@ void Scene1850::signal() {
PlayerMover *mover = new PlayerMover();
R2_GLOBALS._player.addMover(mover, &_field41A, this);
-
+
_field41A = Common::Point(0, 0);
}
-
+
switch (_field41E) {
case 1:
_sceneMode = 1853;
@@ -11608,7 +11608,7 @@ void Scene1850::signal() {
default:
break;
}
-
+
_field41E = 0;
break;
case 1870:
@@ -11632,16 +11632,16 @@ void Scene1850::signal() {
} else {
_actor3.setDetails(1850, 30, -1, -1, 2, (SceneItem *)NULL);
}
-
+
_actor4.postInit();
_actor4._effect = 6;
-
+
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
_actor4.setDetails(1850, 29, -1, -1, 2, (SceneItem *)NULL);
} else {
_actor4.setDetails(1850, 28, -1, -1, 2, (SceneItem *)NULL);
}
-
+
if (R2_GLOBALS.getFlag(31)) {
_actor3._shade = 0;
_actor4._shade = 0;
@@ -11649,12 +11649,12 @@ void Scene1850::signal() {
_actor3._shade = 6;
_actor4._shade = 6;
}
-
+
R2_GLOBALS.clearFlag(30);
_sceneMode = 15;
setAction(&_sequenceManager1, this, 1869, &R2_GLOBALS._player, &_actor3, NULL);
setAction(&_sequenceManager2, this, 1868, &_actor1, &_actor4, NULL);
- break;
+ break;
case 1878:
R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1850);
R2_GLOBALS.setFlag(33);
@@ -11678,7 +11678,7 @@ void Scene1850::signal() {
}
void Scene1850::process(Event &event) {
- if ( (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_ARROW)
+ if ( (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_ARROW)
&& (R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) {
_field41A = event.mousePos;
R2_GLOBALS._player.disableControl();
@@ -11691,7 +11691,7 @@ void Scene1850::process(Event &event) {
R2_GLOBALS.clearFlag(32);
event.handled = true;
}
-
+
Scene::process(event);
}
@@ -11700,7 +11700,7 @@ void Scene1850::dispatch() {
_field414--;
if (_field414 == 0)
_field418 = 0;
-
+
if (_field416 >= 0) {
R2_GLOBALS._player._shade = (_field414 * 6) / _field416;
} else {
@@ -11726,12 +11726,12 @@ void Scene1850::dispatch() {
if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) {
_actor2.setPosition(Common::Point(_actor8._position.x + 20, _actor8._position.y - 71));
}
-
+
Scene::dispatch();
}
/*--------------------------------------------------------------------------
- * Scene 1875 -
+ * Scene 1875 -
*
*--------------------------------------------------------------------------*/
Scene1875::Actor1875::Actor1875() {
@@ -11821,7 +11821,7 @@ void Scene1875::Actor1875::subB8271(int indx) {
void Scene1875::Actor1875::process(Event &event) {
if ((R2_GLOBALS._player._uiEnabled) || (event.handled))
return;
-
+
Scene1875 *scene = (Scene1875 *)R2_GLOBALS._sceneManager._scene;
if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == R2_STEPPING_DISKS) && (_bounds.contains(event.mousePos)) && (_fieldA6 == 0)) {
@@ -11841,7 +11841,7 @@ void Scene1875::Actor1875::process(Event &event) {
_fieldA6 = 1;
event.handled = true;
}
-
+
if ((event.eventType == EVENT_BUTTON_UP) && (_fieldA6 != 0)) {
if ((_fieldA4 == 3) || (_fieldA4 == 4) || (_fieldA4 == 5)) {
setStrip(1);
@@ -11855,10 +11855,10 @@ void Scene1875::Actor1875::process(Event &event) {
void Scene1875::postInit(SceneObjectList *OwnerList) {
loadScene(1875);
SceneExt::postInit();
-
+
R2_GLOBALS._player._characterScene[1] = 1875;
R2_GLOBALS._player._characterScene[2] = 1875;
-
+
_stripManager.addSpeaker(&_quinnSpeaker);
_stripManager.addSpeaker(&_seekerSpeaker);
@@ -11867,11 +11867,11 @@ void Scene1875::postInit(SceneObjectList *OwnerList) {
_actor6.subB8271(3);
_actor7.subB8271(4);
_actor8.subB8271(5);
-
+
_actor1.postInit();
_actor1.setup(1855, 4, 1);
_actor1.setPosition(Common::Point(160, 116));
-
+
R2_GLOBALS._player.postInit();
if (R2_GLOBALS._sceneManager._previousScene == 1625) {
R2_GLOBALS._sound1.play(122);
@@ -11885,10 +11885,10 @@ void Scene1875::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.enableControl();
R2_GLOBALS._player._canWalk = false;
}
-
+
_item2.setDetails(Rect(43, 14, 275, 122), 1875, 9, 1, -1, 1, NULL);
_item1.setDetails(Rect(0, 0, 320, 200), 1875, 3, -1, -1, 1, NULL);
-
+
R2_GLOBALS._player._characterScene[1] = 1875;
R2_GLOBALS._player._characterScene[2] = 1875;
R2_GLOBALS._player._oldCharacterScene[1] = 1875;
@@ -11930,7 +11930,7 @@ void Scene1875::signal() {
void Scene1875::process(Event &event) {
Scene::process(event);
-
+
_actor4.process(event);
_actor5.process(event);
_actor6.process(event);
@@ -11939,7 +11939,7 @@ void Scene1875::process(Event &event) {
}
/*--------------------------------------------------------------------------
- * Scene 1900 -
+ * Scene 1900 -
*
*--------------------------------------------------------------------------*/
bool Scene1900::Actor2::startAction(CursorType action, Event &event) {
@@ -12005,11 +12005,11 @@ void Scene1900::postInit(SceneObjectList *OwnerList) {
if (R2_GLOBALS._sceneManager._previousScene != 1875)
R2_GLOBALS._sound1.play(200);
-
+
_stripManager.setColors(60, 255);
_stripManager.setFontNumber(3);
_stripManager.addSpeaker(&_seekerSpeaker);
-
+
_exit1.setDetails(Rect(0, 105, 14, 145), R2_COM_SCANNER, 2000);
_exit1.setDest(Common::Point(14, 135));
@@ -12027,7 +12027,7 @@ void Scene1900::postInit(SceneObjectList *OwnerList) {
else
R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
R2_GLOBALS._player.disableControl();
-
+
if (R2_GLOBALS._sceneManager._previousScene != 1925)
R2_GLOBALS.clearFlag(29);
@@ -12061,7 +12061,7 @@ void Scene1900::postInit(SceneObjectList *OwnerList) {
_object2.setPosition(Common::Point(223, 109));
_object2.fixPriority(80);
}
-
+
if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1875) {
R2_GLOBALS._player._characterIndex = R2_QUINN;
_actor1.postInit();
@@ -12129,7 +12129,7 @@ void Scene1900::postInit(SceneObjectList *OwnerList) {
}
R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1900;
}
-
+
_item2.setDetails(Rect(77, 2, 240, 103), 1900, 6, -1, -1, 1, NULL);
_item1.setDetails(Rect(0, 0, 320, 200), 1900, 3, -1, -1, 1, NULL);
}
@@ -12242,17 +12242,17 @@ bool Scene1925::Hotspot3::startAction(CursorType action, Event &event) {
scene->_sceneMode = 1925;
scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, NULL);
return true;
- }
-
+ }
+
if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 20) && (event.mousePos.y >= 30)) {
scene->_sceneMode = 1931;
} else if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 200) && (event.mousePos.y < 140)) {
scene->_sceneMode = 1932;
- } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101))
+ } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101))
|| ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 110))
) && (event.mousePos.y >= 100)) {
scene->_sceneMode = 1926;
- } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101))
+ } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101))
|| ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 110))
) && (event.mousePos.y < 60)) {
scene->_sceneMode = 1927;
@@ -12415,7 +12415,7 @@ void Scene1925::postInit(SceneObjectList *OwnerList) {
_actor1.setDetails(1925, 0, 1, 2, 1, (SceneItem *) NULL);
_item2.setDetails(Rect(133, 68, 140, 77), 1925, 3, -1, 5, 1, NULL);
// No break on purpose
- case -3:
+ case -3:
_exit3.setDetails(Rect(83, 38, 128, 101), EXITCURSOR_W, 1925);
// No break on purpose
default:
@@ -12510,7 +12510,7 @@ void Scene1925::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 1945 -
+ * Scene 1945 -
*
*--------------------------------------------------------------------------*/
Scene1945::Scene1945() {
@@ -12588,7 +12588,7 @@ bool Scene1945::Hotspot4::startAction(CursorType action, Event &event) {
R2_GLOBALS._player.enableControl(CURSOR_USE);
R2_GLOBALS._player._canWalk = false;
}
-
+
if (scene->_sceneMode != 0)
scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL);
@@ -12822,7 +12822,7 @@ void Scene1945::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 1950 -
+ * Scene 1950 -
*
*--------------------------------------------------------------------------*/
Scene1950::Area1::Area1() {
@@ -12831,7 +12831,7 @@ Scene1950::Area1::Area1() {
}
void Scene1950::Area1::synchronize(Serializer &s) {
SceneArea::synchronize(s);
-
+
s.syncAsByte(_field20);
s.syncAsSint16LE(_fieldB65);
}
@@ -12846,7 +12846,7 @@ Scene1950::Scene1950() {
void Scene1950::synchronize(Serializer &s) {
SceneExt::synchronize(s);
-
+
s.syncAsSint16LE(_field412);
s.syncAsSint16LE(_field414);
s.syncAsSint16LE(_field416);
@@ -12863,7 +12863,7 @@ Scene1950::Area1::Actor10::Actor10() {
void Scene1950::Area1::Actor10::synchronize(Serializer &s) {
SceneActor::synchronize(s);
-
+
s.syncAsSint16LE(_fieldA4);
s.syncAsSint16LE(_fieldA6);
s.syncAsSint16LE(_fieldA8);
@@ -12925,7 +12925,7 @@ void Scene1950::Area1::remove() {
SceneArea::remove();
R2_GLOBALS._insetUp--;
//
-
+
if (!R2_GLOBALS.getFlag(37))
R2_GLOBALS._sound2.play(278);
@@ -12990,7 +12990,7 @@ void Scene1950::Area1::proc12(int visage, int stripFrameNum, int frameNum, int p
_areaActor.fixPriority(248);
scene->_exit3._enabled = false;
proc13(1950, 27, 28, 27);
-
+
for (_fieldB65 = 0; _fieldB65 < 16; _fieldB65++)
_arrActor1[_fieldB65].init(_fieldB65);
}
@@ -13068,7 +13068,7 @@ Scene1950::Actor8::Actor8() {
void Scene1950::Actor8::synchronize(Serializer &s) {
SceneActor::synchronize(s);
-
+
s.syncAsSint16LE(_fieldA4);
s.syncAsSint16LE(_fieldA6);
s.syncAsSint16LE(_fieldA8);
@@ -13111,7 +13111,7 @@ void Scene1950::Actor8::signal() {
_fieldA6 = _position.y -4;
setVisage(1961);
-
+
if (R2_GLOBALS._v566A5 == 3)
setStrip(2);
else
@@ -13155,7 +13155,7 @@ void Scene1950::Actor8::signal() {
for (_fieldAF = 0; _fieldAF < 18; ++_fieldAF)
if (R2_GLOBALS._v56613[4 * _fieldAF] == 0)
++_fieldAE;
-
+
if (_fieldAE == 18) {
R2_GLOBALS.setFlag(36);
_fieldAC = 23;
@@ -13197,14 +13197,14 @@ bool Scene1950::Actor8::startAction(CursorType action, Event &event) {
if ((R2_GLOBALS._v56613[(scene->_field41C - 1) * 4] == 0) || (action != R2_PHOTON_STUNNER))
return SceneActor::startAction(action, event);
-
+
R2_GLOBALS._player.disableControl();
if (R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 1] <= 1)
_fieldAC = 21;
else
_fieldAC = 20;
-
+
R2_GLOBALS._player.setVisage(25);
if (R2_GLOBALS._v566A5 == 3)
R2_GLOBALS._player.setStrip(2);
@@ -13212,7 +13212,7 @@ bool Scene1950::Actor8::startAction(CursorType action, Event &event) {
R2_GLOBALS._player.setStrip(1);
R2_GLOBALS._player.animate(ANIM_MODE_5, this);
R2_GLOBALS._sound3.play(99);
-
+
return true;
}
@@ -13305,7 +13305,7 @@ void Scene1950::Exit6::changeScene() {
Common::Point pt(-20, 160);
NpcMover *mover = new NpcMover();
R2_GLOBALS._player.addMover(mover, &pt, scene);
- } else {
+ } else {
if (!R2_GLOBALS.getFlag(36))
SceneItem::display(1950, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
if ((R2_INVENTORY.getObjectScene(34) == 1950) || (R2_INVENTORY.getObjectScene(35) == 1950))
@@ -13612,7 +13612,7 @@ void Scene1950::subBDC1E() {
default:
break;
}
-
+
if (R2_GLOBALS._v566A4 != 1)
R2_GLOBALS._walkRegions.load(1950);
@@ -13806,11 +13806,11 @@ void Scene1950::subBDC1E() {
R2_GLOBALS._walkRegions.enableRegion(13);
break;
}
-
+
_object1.remove();
_object1.removeObject();
_actor1.remove();
-
+
switch (R2_GLOBALS._v566A4 - 4) {
case 0:
// No break on purpose
@@ -13934,7 +13934,7 @@ void Scene1950::subBDC1E() {
_actor1.fixPriority(220);
break;
}
-
+
switch (R2_GLOBALS._v566A4 - 3) {
case 0:
// No break on purpose
@@ -14162,7 +14162,7 @@ void Scene1950::subBE59B() {
_actor6.setFrame(1);
_actor6.setPosition(Common::Point(193, 158));
_actor6.setDetails(1950, 3, 4, 5, 2, (SceneItem *) NULL);
-
+
_actor7.postInit();
_actor7.setVisage(1970);
_actor7.setStrip(3);
@@ -14172,7 +14172,7 @@ void Scene1950::subBE59B() {
_actor7.fixPriority(159);
_item2.setDetails(Rect(188, 124, 199, 133), 1950, 27, 28, -1, 2, NULL);
-
+
if (R2_INVENTORY.getObjectScene(34) == 1950) {
_actor5.postInit();
_actor5.setVisage(1970);
@@ -14180,7 +14180,7 @@ void Scene1950::subBE59B() {
_actor5.setFrame(2);
_actor5.fixPriority(160);
}
-
+
if (R2_GLOBALS.getFlag(37)) {
_actor5.setPosition(Common::Point(192, 118));
_actor5.setDetails(1950, 9, 4, -1, 2, (SceneItem *) NULL);
@@ -14193,11 +14193,11 @@ void Scene1950::subBE59B() {
_actor4.setPosition(Common::Point(192, 121));
_actor4.fixPriority(159);
_actor4.setDetails(1950, 6, 7, 8, 2, (SceneItem *) NULL);
-
+
_actor5.setPosition(Common::Point(192, 109));
_actor5.setDetails(1950, 9, 7, 8, 2, (SceneItem *) NULL);
}
-
+
_actor3.postInit();
_actor3.setVisage(1972);
_actor3.setStrip(1);
@@ -14208,7 +14208,7 @@ void Scene1950::subBE59B() {
_actor3.setFrame(2);
else
_actor3.setFrame(1);
-
+
_field414 = 1;
} else if (_field414 != 0) {
_actor6.remove();
@@ -14219,7 +14219,7 @@ void Scene1950::subBE59B() {
_item1.setDetails(Rect(0, 0, 320, 200), 1950, 0, 1, 2, 2, NULL);
}
-
+
switch (R2_GLOBALS._v566A5) {
case 0:
_sceneMode = 1950;
@@ -14263,7 +14263,7 @@ void Scene1950::subBE59B() {
_actor8.setStrip(2);
NpcMover *mover = new NpcMover();
_actor8.addMover(mover, &_field418, this);
-
+
R2_GLOBALS._player.setPosition(Common::Point(-20, 160));
Common::Point pt2(30, 160);
NpcMover *mover2 = new NpcMover();
@@ -14311,11 +14311,11 @@ void Scene1950::subBE59B() {
R2_GLOBALS._v56AAB = 0;
R2_GLOBALS._player.enableControl(CURSOR_USE);
R2_GLOBALS._player._canWalk = false;
-
+
_actor8.setStrip(1);
NpcMover *mover = new NpcMover();
_actor8.addMover(mover, &_field418, this);
-
+
R2_GLOBALS._player.setPosition(Common::Point(340, 160));
Common::Point pt2(289, 160);
NpcMover *mover2 = new NpcMover();
@@ -14335,7 +14335,7 @@ void Scene1950::subBF4B4(int indx) {
si = 3;
} else
si = 4;
-
+
if (_area1._arrActor1[si]._fieldA8 == 0) {
_area1._arrActor1[si].setFrame(2);
_area1._arrActor1[si]._fieldA8 = 1;
@@ -14343,14 +14343,14 @@ void Scene1950::subBF4B4(int indx) {
_area1._arrActor1[si].setFrame(1);
_area1._arrActor1[si]._fieldA8 = 0;
}
-
+
si = indx + 1;
if ((indx / 4) == (si / 4)) {
if (si > 15)
si = 12;
} else
si -= 4;
-
+
if (_area1._arrActor1[si]._fieldA8 == 0) {
_area1._arrActor1[si].setFrame(2);
_area1._arrActor1[si]._fieldA8 = 1;
@@ -14358,7 +14358,7 @@ void Scene1950::subBF4B4(int indx) {
_area1._arrActor1[si].setFrame(1);
_area1._arrActor1[si]._fieldA8 = 0;
}
-
+
si = indx - 4;
if (si < 0)
si += 16;
@@ -14370,7 +14370,7 @@ void Scene1950::subBF4B4(int indx) {
_area1._arrActor1[si].setFrame(1);
_area1._arrActor1[si]._fieldA8 = 0;
}
-
+
si = indx + 4;
if (si > 15)
si -= 16;
@@ -14395,7 +14395,7 @@ void Scene1950::subBF4B4(int indx) {
} else {
R2_GLOBALS.setFlag(37);
_sceneMode = 24;
- // TODO: check if correct. The original doesn't countain a sceneActor in
+ // TODO: check if correct. The original doesn't countain a sceneActor in
// this call, but it's extremely unusual
setAction(&_sequenceManager, this, 1976, NULL);
}
@@ -14408,45 +14408,45 @@ void Scene1950::postInit(SceneObjectList *OwnerList) {
_field41C = 0;
if (R2_GLOBALS._sceneManager._previousScene == 300)
R2_GLOBALS._v566A4 = 103;
-
+
subBDC1E();
SceneExt::postInit();
R2_GLOBALS._sound1.play(105);
_exit1.setDetails(Rect(130, 46, 189, 135), SHADECURSOR_UP, 1950);
_exit1.setDest(Common::Point(160, 145));
-
+
_exit2.setDetails(Rect(208, 0, 255, 73), EXITCURSOR_N, 1950);
_exit2.setDest(Common::Point(200, 151));
-
+
_exit3.setDetails(Rect(305, 95, 320, 147), EXITCURSOR_E, 1950);
_exit3.setDest(Common::Point(312, 160));
-
+
_exit4.setDetails(Rect(208, 99, 255, 143), EXITCURSOR_S, 1950);
_exit4.setDest(Common::Point(200, 151));
-
+
_exit5.setDetails(Rect(113, 154, 206, 168), SHADECURSOR_DOWN, 1950);
_exit5.setDest(Common::Point(160, 165));
-
+
_exit6.setDetails(Rect(0, 95, 14, 147), EXITCURSOR_W, 1950);
_exit6.setDest(Common::Point(7, 160));
-
+
_exit7.setDetails(Rect(72, 54, 120, 128), EXITCURSOR_NW, 1950);
_exit7.setDest(Common::Point(120, 140));
-
+
_exit8.setDetails(Rect(258, 60, 300, 145), EXITCURSOR_NE, 1950);
_exit8.setDest(Common::Point(268, 149));
-
+
R2_GLOBALS._player.postInit();
- if ( (R2_INVENTORY.getObjectScene(32) == 0) && (R2_INVENTORY.getObjectScene(33) == 0)
+ if ( (R2_INVENTORY.getObjectScene(32) == 0) && (R2_INVENTORY.getObjectScene(33) == 0)
&& (R2_INVENTORY.getObjectScene(46) == 0) && (!R2_GLOBALS.getFlag(36)) )
R2_GLOBALS._player.setVisage(22);
else
R2_GLOBALS._player.setVisage(20);
-
+
R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
_item1.setDetails(Rect(0, 0, 320, 200), 1950, 0, 1, 2, 1, NULL);
-
+
subBE59B();
}
@@ -14578,7 +14578,7 @@ void Scene1950::signal() {
R2_GLOBALS._player.setVisage(20);
else
R2_GLOBALS._player.setVisage(22);
-
+
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
Common::Point pt(218, 165);
NpcMover *mover = new NpcMover();
@@ -14593,7 +14593,7 @@ void Scene1950::signal() {
R2_GLOBALS._player.setVisage(20);
else
R2_GLOBALS._player.setVisage(22);
- R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
break;
default:
R2_GLOBALS._v56AAB = 0;
@@ -14604,7 +14604,7 @@ void Scene1950::signal() {
void Scene1950::process(Event &event) {
if ( (event.eventType == EVENT_BUTTON_DOWN)
- && (R2_GLOBALS._player._uiEnabled)
+ && (R2_GLOBALS._player._uiEnabled)
&& (R2_GLOBALS._events.getCursor() == R2_LIGHT_BULB)
&& (R2_GLOBALS._player._bounds.contains(event.mousePos))
&& (R2_INVENTORY.getObjectScene(31) == 0)) {
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h
index 5906030c5f..f65a89972d 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.h
@@ -142,7 +142,7 @@ class Scene1200 : public SceneExt {
virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY);
virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum);
};
-
+
public:
NamedHotspot _item1;
SceneActor _actor1;
@@ -567,7 +567,7 @@ class Scene1575 : public SceneExt {
public:
int _field34;
int _field36;
-
+
Hotspot1();
void synchronize(Serializer &s);
void subA910D(int indx);
@@ -750,7 +750,7 @@ public:
Exit2 _exit2;
Exit3 _exit3;
SequenceManager _sequenceManager;
-
+
int _field77A;
int _field77C;
@@ -772,7 +772,7 @@ class Scene1750 : public SceneExt {
int _fieldAA;
int _fieldAC;
int _fieldAE;
-
+
Actor4();
virtual void synchronize(Serializer &s);
void subB1A76(int arg1, int arg2, int arg3, int arg4, int arg5);
@@ -782,11 +782,11 @@ class Scene1750 : public SceneExt {
virtual void process(Event &event);
virtual bool startAction(CursorType action, Event &event);
};
-
+
class Actor5 : public SceneActor {
public:
int _fieldA4;
-
+
Actor5();
virtual void synchronize(Serializer &s);
@@ -845,7 +845,7 @@ class Scene1800 : public SceneExt {
public:
virtual bool startAction(CursorType action, Event &event);
};
-
+
class Exit1 : public SceneExit {
public:
virtual void changeScene();
@@ -897,7 +897,7 @@ class Scene1850 : public SceneExt {
public:
virtual bool startAction(CursorType action, Event &event);
};
-
+
public:
int _field412;
int _field414;
@@ -936,11 +936,11 @@ class Scene1875 : public SceneExt {
public:
int _fieldA4;
int _fieldA6;
-
+
Actor1875();
void subB84AB();
void subB8271(int indx);
-
+
void synchronize(Serializer &s);
virtual void process(Event &event);
};
diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp
index 5567519046..6a030e5b44 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp
@@ -261,7 +261,7 @@ void Scene2000::initExits() {
_mazePlayerMode = 0;
} else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2350)
_mazePlayerMode = 1;
- else
+ else
_mazePlayerMode = 10;
R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000;
R2_GLOBALS._sceneManager._previousScene = 2000;
@@ -422,12 +422,12 @@ void Scene2000::Action1::signal() {
default:
break;
}
-
+
if (R2_GLOBALS._v56605[3 + _state] == R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex])
scene->_objList1[_state].show();
else
scene->_objList1[_state].hide();
-
+
signal();
break;
case 5: {
@@ -783,7 +783,7 @@ void Scene2000::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._sound1.play(200);
initExits();
g_globals->_sceneManager._fadeMode = FADEMODE_IMMEDIATE;
-
+
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
@@ -1003,9 +1003,9 @@ void Scene2000::signal() {
}
void Scene2000::process(Event &event) {
- if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) &&
+ if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) &&
(R2_GLOBALS._events.getCursor() == CURSOR_CROSSHAIRS)) {
-
+
Common::Point pt(event.mousePos.x, 129);
PlayerMover *mover = new PlayerMover();
R2_GLOBALS._player.addMover(mover, &pt, this);
@@ -1048,7 +1048,7 @@ bool Scene2350::Actor3::startAction(CursorType action, Event &event) {
void Scene2350::ExitUp::changeScene() {
Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene;
-
+
R2_GLOBALS._player.disableControl(CURSOR_CROSSHAIRS);
scene->_sceneMode = 12;
if (R2_GLOBALS._player._characterIndex == 1)
@@ -1056,7 +1056,7 @@ void Scene2350::ExitUp::changeScene() {
else
scene->setAction(&scene->_sequenceManager, scene, 2352, &R2_GLOBALS._player, NULL);
}
-
+
void Scene2350::ExitWest::changeScene() {
Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene;
@@ -1129,7 +1129,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) {
if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == 34) {
if (R2_GLOBALS._player._characterIndex == 1)
_sceneMode = 2351;
- else
+ else
_sceneMode = 2353;
setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL);
} else {
@@ -1147,7 +1147,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) {
}
R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2350;
}
-
+
void Scene2350::remove() {
R2_GLOBALS._sound1.fadeOut(NULL);
SceneExt::remove();
@@ -1189,7 +1189,7 @@ void Scene2350::signal() {
}
void Scene2350::process(Event &event) {
- if ((R2_GLOBALS._player._canWalk) && (event.eventType != EVENT_BUTTON_DOWN) &&
+ if ((R2_GLOBALS._player._canWalk) && (event.eventType != EVENT_BUTTON_DOWN) &&
(R2_GLOBALS._events.getCursor() == CURSOR_CROSSHAIRS)){
Common::Point pt(event.mousePos.x, 129);
PlayerMover *mover = new PlayerMover();
@@ -1205,7 +1205,7 @@ void Scene2350::process(Event &event) {
*--------------------------------------------------------------------------*/
void Scene2400::Exit1::changeScene() {
Scene2400 *scene = (Scene2400 *)R2_GLOBALS._sceneManager._scene;
-
+
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 10;
@@ -1214,7 +1214,7 @@ void Scene2400::Exit1::changeScene() {
R2_GLOBALS._player.addMover(mover, &pt, scene);
}
-
+
void Scene2400::Exit2::changeScene() {
Scene2400 *scene = (Scene2400 *)R2_GLOBALS._sceneManager._scene;
@@ -1244,7 +1244,7 @@ void Scene2400::postInit(SceneObjectList *OwnerList) {
setAction(&_sequenceManager, this, 2401, &R2_GLOBALS._player, NULL);
}
}
-
+
void Scene2400::signal() {
switch (_sceneMode) {
case 10:
@@ -1339,7 +1339,7 @@ bool Scene2425::Actor1::startAction(CursorType action, Event &event) {
}
} else if (R2_GLOBALS._events.getCursor() == R2_GUNPOWDER)
return false;
- else
+ else
return SceneActor::startAction(action, event);
}
@@ -1405,7 +1405,7 @@ void Scene2425::postInit(SceneObjectList *OwnerList) {
_actor1.setup(2426, 1, 1);
else
_actor1.setup(2426, 1, 2);
-
+
_actor1.setPosition(Common::Point(290, 9));
_actor1.fixPriority(20);
_actor1.setDetails(2455, 12, -1, -1, 1, (SceneItem *)NULL);
@@ -1511,7 +1511,7 @@ bool Scene2430::Actor3::startAction(CursorType action, Event &event) {
void Scene2430::Exit1::changeScene() {
Scene2430 *scene = (Scene2430 *)R2_GLOBALS._sceneManager._scene;
-
+
scene->_sceneMode = 0;
R2_GLOBALS._events.setCursor(R2_NEGATOR_GUN);
R2_GLOBALS._player.disableControl();
@@ -1790,7 +1790,7 @@ bool Scene2440::Actor2::startAction(CursorType action, Event &event) {
scene->_sceneMode = 2440;
scene->setAction(&scene->_sequenceManager, scene, 2440, &R2_GLOBALS._player, &scene->_actor2, NULL);
return true;
- }
+ }
return SceneActor::startAction(action, event);
}
@@ -2296,7 +2296,7 @@ void Scene2455::postInit(SceneObjectList *OwnerList) {
_actor1.setup(2456, 3, 3);
_actor1.setPosition(Common::Point(162, 165));
_actor1.setDetails(2455, 15, 1, -1, 1, (SceneItem *)NULL);
- }
+ }
} else {
_actor3.postInit();
_actor3.setup(2456, 3, 1);
@@ -2309,9 +2309,9 @@ void Scene2455::postInit(SceneObjectList *OwnerList) {
_actor2.setup(2456, 3, 2);
_actor2.setDetails(2455, 9, 1, -1, 1, (SceneItem *)NULL);
} else {
- if ((R2_INVENTORY.getObjectScene(50) != 2455) && (R2_INVENTORY.getObjectScene(49) != 2455))
+ if ((R2_INVENTORY.getObjectScene(50) != 2455) && (R2_INVENTORY.getObjectScene(49) != 2455))
_actor2.setup(2455, 1, 1);
- else
+ else
_actor2.setup(2456, 1, 1);
_actor2.setDetails(2455, 3, 1, -1, 1, (SceneItem *)NULL);
}
@@ -3679,7 +3679,7 @@ void Scene2700::process(Event &event) {
break;
}
}
- }
+ }
}
Scene::process(event);
}
@@ -4184,7 +4184,7 @@ bool Scene2800::Actor1::startAction(CursorType action, Event &event) {
scene->_sceneMode = 10;
scene->setAction(&scene->_sequenceManager, scene, 2802, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor1, NULL);
return true;
- } else
+ } else
return SceneActor::startAction(action, event);
}
@@ -4432,7 +4432,7 @@ void Scene2800::postInit(SceneObjectList *OwnerList) {
_actor1.animate(ANIM_MODE_NONE, NULL);
_actor1.setDetails(2800, -1, -1, -1, 1, (SceneItem *)NULL);
}
-
+
_item1.setDetails(Rect(0, 0, 320, 200), 2800, -1, -1, -1, 1, NULL);
_stripManager.setColors(60, 255);
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
index 2b97cba8e9..3dd566c900 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
@@ -30,7 +30,7 @@ namespace TsAGE {
namespace Ringworld2 {
/*--------------------------------------------------------------------------
- * Scene 3100 -
+ * Scene 3100 -
*
*--------------------------------------------------------------------------*/
Scene3100::Scene3100() {
@@ -131,7 +131,7 @@ void Scene3100::postInit(SceneObjectList *OwnerList) {
_guard.changeZoom(50);
_guard.setPosition(Common::Point(10, 149));
_guard.setDetails(3100, 6, -1, -1, 2, (SceneItem *)NULL);
-
+
_actor4.postInit();
_actor4.setup(3103, 1, 1);
_actor4.setPosition(Common::Point(278, 113));
@@ -152,7 +152,7 @@ void Scene3100::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._sound1.play(243);
}
-
+
R2_GLOBALS._player._oldCharacterScene[1] = 3100;
}
@@ -322,7 +322,7 @@ void Scene3125::postInit(SceneObjectList *OwnerList) {
_actor4.setup(3126, 1, 1);
_actor4.setPosition(Common::Point(171, 160));
_actor4.fixPriority(201);
-
+
_item3.setDetails(12, 3125, 9, 13, -1);
_item2.setDetails(11, 3125, 15, 13, -1);
_item1.setDetails(Rect(0, 0, 320, 200), 3125, 0, 1, 2, 1, NULL);
@@ -442,7 +442,7 @@ bool Scene3150::Actor4::startAction(CursorType action, Event &event) {
case CURSOR_USE:
if (R2_GLOBALS.getFlag(75))
return SceneActor::startAction(action, event);
-
+
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 3151;
scene->setAction(&scene->_sequenceManager, scene, 3151, &R2_GLOBALS._player, &scene->_actor4, NULL);
@@ -504,7 +504,7 @@ bool Scene3150::Actor7::startAction(CursorType action, Event &event) {
scene->setAction(&scene->_sequenceManager, scene, 3160, &R2_GLOBALS._player, &scene->_actor7, NULL);
return true;
}
-
+
return SceneActor::startAction(action, event);
}
@@ -554,7 +554,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.disableControl();
-
+
_actor2.postInit();
_actor2.setPosition(Common::Point(64, 139));
if (R2_GLOBALS.getFlag(78)) {
@@ -686,7 +686,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) {
_actor5.postInit();
_actor5._effect = 6;
_actor5._shade = 3;
-
+
setAction(&_sequenceManager, this, 3156, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor5, NULL);
} else {
if (R2_GLOBALS._v56AA0 != 2)
@@ -1699,7 +1699,7 @@ void Scene3350::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 3375 -
+ * Scene 3375 -
*
*--------------------------------------------------------------------------*/
Scene3375::Scene3375() {
@@ -1799,13 +1799,13 @@ bool Scene3375::Actor1::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
if (R2_GLOBALS._player._characterIndex == 2)
scene->_stripManager.start(3302, scene);
else
scene->_stripManager.start(3304, scene);
-
+
return true;
}
@@ -1814,13 +1814,13 @@ bool Scene3375::Actor2::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
if (R2_GLOBALS._player._characterIndex == 3)
scene->_stripManager.start(3302, scene);
else
scene->_stripManager.start(3301, scene);
-
+
return true;
}
@@ -1829,10 +1829,10 @@ bool Scene3375::Actor3::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
scene->_stripManager.start(3303, scene);
-
+
return true;
}
@@ -1841,7 +1841,7 @@ bool Scene3375::Actor4::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
-
+
if (R2_GLOBALS._v56A9E != 0) {
R2_GLOBALS._walkRegions.disableRegion(2);
R2_GLOBALS._walkRegions.disableRegion(3);
@@ -1855,10 +1855,10 @@ bool Scene3375::Actor4::startAction(CursorType action, Event &event) {
R2_GLOBALS._walkRegions.disableRegion(8);
R2_GLOBALS._player.disableControl(CURSOR_ARROW);
-
+
scene->_sceneMode = 3375;
scene->setAction(&scene->_sequenceManager, scene, 3375, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL);
-
+
return true;
}
@@ -1944,10 +1944,10 @@ void Scene3375::postInit(SceneObjectList *OwnerList) {
_field148A[1] = 3377;
_field148A[2] = 3375;
_field148A[3] = 3378;
-
+
loadScene(_field148A[R2_GLOBALS._v56A9E]);
SceneExt::postInit();
-
+
R2_GLOBALS._sound1.play(313);
_stripManager.setColors(60, 255);
@@ -1963,14 +1963,14 @@ void Scene3375::postInit(SceneObjectList *OwnerList) {
setZoomPercents(126, 55, 200, 167);
R2_GLOBALS._player.postInit();
-
+
if (R2_GLOBALS._player._characterIndex == 2) {
R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
} else {
R2_GLOBALS._player._moveDiff = Common::Point(3, 2);
}
R2_GLOBALS._player.changeZoom(-1);
-
+
switch (R2_GLOBALS._player._characterIndex) {
case 2:
if (R2_GLOBALS._sceneManager._previousScene == 3385)
@@ -1991,7 +1991,7 @@ void Scene3375::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._player.setup(10, 3, 1);
break;
}
-
+
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
R2_GLOBALS._player.disableControl();
@@ -2005,21 +2005,21 @@ void Scene3375::postInit(SceneObjectList *OwnerList) {
}
_actor1.changeZoom(-1);
_actor1._effect = 1;
-
+
int tmpStrip, tmpVisage;
if (R2_GLOBALS._sceneManager._previousScene == 3385)
tmpStrip = 1;
else
tmpStrip = 4;
-
+
if (R2_GLOBALS._player._characterIndex == 2)
tmpVisage = 10;
else
tmpVisage = 20;
-
+
_actor1.setup(tmpVisage, tmpStrip, 1);
_actor1.animate(ANIM_MODE_1, NULL);
-
+
_actor2.postInit();
_actor2._moveDiff = Common::Point(3, 2);
_actor2.changeZoom(-1);
@@ -2033,10 +2033,10 @@ void Scene3375::postInit(SceneObjectList *OwnerList) {
tmpVisage = 10;
else
tmpVisage = 30;
-
+
_actor2.setup(tmpVisage, tmpStrip, 1);
_actor2.animate(ANIM_MODE_1, NULL);
-
+
_actor3.postInit();
_actor3._moveRate = 7;
_actor3._moveDiff = Common::Point(5, 3);
@@ -2049,34 +2049,34 @@ void Scene3375::postInit(SceneObjectList *OwnerList) {
_actor3.setup(40, tmpStrip, 1);
_actor3.animate(ANIM_MODE_1, NULL);
-
+
_actor2.setDetails(3375, -1, -1, -1, 1, (SceneItem *)NULL);
_actor3.setDetails(3375, 21, -1, -1, 1, (SceneItem *)NULL);
_actor1.setDetails(3375, -1, -1, -1, 1, (SceneItem *)NULL);
-
+
_actor4.postInit();
_actor4.setup(3375, 1, 1);
_actor4.setPosition(Common::Point(254, 166));
_actor4.fixPriority(140);
_actor4.hide();
-
+
_exit1.setDetails(Rect(0, 84, 24, 167), EXITCURSOR_W, 3375);
_exit1.setDest(Common::Point(65, 155));
_exit2.setDetails(Rect(103, 152, 183, 170), SHADECURSOR_DOWN, 3375);
_exit2.setDest(Common::Point(158, 151));
_exit3.setDetails(Rect(180, 75, 213, 132), EXITCURSOR_E, 3375);
_exit3.setDest(Common::Point(201, 131));
-
+
for (int i = 0; i <= 12; ++i)
_itemArray[i].setDetails(i, 3375, 3, -1, -1);
-
+
_item1.setDetails(Rect(0, 0, 320, 200), 3375, 0, -1, 1, 1, NULL);
if (R2_GLOBALS._sceneManager._previousScene == 3385)
_sceneMode = 3379;
else
_sceneMode = 0;
-
+
subFC696(_sceneMode);
}
@@ -2186,7 +2186,7 @@ void Scene3375::dispatch() {
}
/*--------------------------------------------------------------------------
- * Scene 3385 -
+ * Scene 3385 -
*
*--------------------------------------------------------------------------*/
Scene3385::Scene3385() {
@@ -2204,13 +2204,13 @@ bool Scene3385::Actor1::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
if (R2_GLOBALS._player._characterIndex == 2)
scene->_stripManager.start(3302, scene);
else
scene->_stripManager.start(3304, scene);
-
+
return true;
}
@@ -2219,13 +2219,13 @@ bool Scene3385::Actor2::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
if (R2_GLOBALS._player._characterIndex == 3)
scene->_stripManager.start(3302, scene);
else
scene->_stripManager.start(3301, scene);
-
+
return true;
}
@@ -2234,10 +2234,10 @@ bool Scene3385::Actor3::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
scene->_stripManager.start(3303, scene);
-
+
return true;
}
@@ -2253,7 +2253,7 @@ bool Scene3385::Actor4::startAction(CursorType action, Event &event) {
scene->_sceneMode = 3386;
scene->setAction(&scene->_sequenceManager, scene, 3386, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL);
-
+
return true;
}
@@ -2303,21 +2303,21 @@ void Scene3385::postInit(SceneObjectList *OwnerList) {
setZoomPercents(102, 40, 200, 160);
R2_GLOBALS._player.postInit();
-
+
if (R2_GLOBALS._player._characterIndex == 2)
R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
else
R2_GLOBALS._player._moveDiff = Common::Point(3, 2);
R2_GLOBALS._player.changeZoom(-1);
-
+
if (R2_GLOBALS._player._characterIndex == 2)
R2_GLOBALS._player.setup(20, _field11B2, 1);
else if (R2_GLOBALS._player._characterIndex == 3)
R2_GLOBALS._player.setup(30, _field11B2, 1);
else
R2_GLOBALS._player.setup(10, _field11B2, 1);
-
+
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
R2_GLOBALS._player.disableControl();
@@ -2337,7 +2337,7 @@ void Scene3385::postInit(SceneObjectList *OwnerList) {
_actor1.setup(20, _field11B2, 1);
_actor1.animate(ANIM_MODE_1, NULL);
_actor1.setDetails(3385, -1, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor2.postInit();
_actor2._moveDiff = Common::Point(3, 2);
_actor2.changeZoom(-1);
@@ -2356,15 +2356,15 @@ void Scene3385::postInit(SceneObjectList *OwnerList) {
_actor3.setup(40, _field11B2, 1);
_actor3.animate(ANIM_MODE_1, NULL);
_actor3.setDetails(3385, 15, -1, -1, 1, (SceneItem *) NULL);
-
+
_exit1.setDetails(Rect(103, 152, 217, 170), SHADECURSOR_DOWN, 3395);
_exit1.setDest(Common::Point(158, 151));
-
+
_actor4.postInit();
_actor4.setPosition(Common::Point(160, 100));
_actor4.fixPriority(90);
_actor4.setDetails(3385, 3, 4, -1, 1, (SceneItem *) NULL);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3375) {
R2_GLOBALS._player.setPosition(Common::Point(158, 102));
_actor1.setPosition(Common::Point(164, 100));
@@ -2385,7 +2385,7 @@ void Scene3385::postInit(SceneObjectList *OwnerList) {
_actor4.setup(3385, 1, 1);
_sceneMode = 3385;
setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL);
- }
+ }
_item1.setDetails(Rect(0, 0, 320, 200), 3385, 0, -1, -1, 1, NULL);
R2_GLOBALS._v56A9E = 0;
@@ -2418,7 +2418,7 @@ void Scene3385::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 3395 -
+ * Scene 3395 -
*
*--------------------------------------------------------------------------*/
Scene3395::Scene3395() {
@@ -2436,13 +2436,13 @@ bool Scene3395::Actor1::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
if (R2_GLOBALS._player._characterIndex == 2)
scene->_stripManager.start(3302, scene);
else
scene->_stripManager.start(3304, scene);
-
+
return true;
}
@@ -2451,13 +2451,13 @@ bool Scene3395::Actor2::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
if (R2_GLOBALS._player._characterIndex == 3)
scene->_stripManager.start(3302, scene);
else
scene->_stripManager.start(3301, scene);
-
+
return true;
}
@@ -2466,10 +2466,10 @@ bool Scene3395::Actor3::startAction(CursorType action, Event &event) {
if (action != CURSOR_TALK)
return SceneActor::startAction(action, event);
-
+
scene->_sceneMode = 9999;
scene->_stripManager.start(3303, scene);
-
+
return true;
}
@@ -2485,7 +2485,7 @@ bool Scene3395::Actor4::startAction(CursorType action, Event &event) {
scene->_sceneMode = 3396;
scene->setAction(&scene->_sequenceManager, scene, 3396, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL);
-
+
return true;
}
@@ -2523,21 +2523,21 @@ void Scene3395::postInit(SceneObjectList *OwnerList) {
setZoomPercents(51, 40, 200, 137);
R2_GLOBALS._player.postInit();
-
+
if (R2_GLOBALS._player._characterIndex == 2)
R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
else
R2_GLOBALS._player._moveDiff = Common::Point(3, 2);
R2_GLOBALS._player.changeZoom(-1);
-
+
if (R2_GLOBALS._player._characterIndex == 2)
R2_GLOBALS._player.setup(20, _field142E, 1);
else if (R2_GLOBALS._player._characterIndex == 3)
R2_GLOBALS._player.setup(30, _field142E, 1);
else
R2_GLOBALS._player.setup(10, _field142E, 1);
-
+
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
R2_GLOBALS._player.disableControl();
@@ -2576,7 +2576,7 @@ void Scene3395::postInit(SceneObjectList *OwnerList) {
_actor3.setup(40, _field142E, 1);
_actor3.animate(ANIM_MODE_1, NULL);
_actor3.setDetails(3385, 18, -1, -1, 1, (SceneItem *) NULL);
-
+
_actor4.postInit();
_actor4.setPosition(Common::Point(159, 50));
_actor4.fixPriority(40);
@@ -2638,7 +2638,7 @@ void Scene3395::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 3400 -
+ * Scene 3400 -
*
*--------------------------------------------------------------------------*/
Scene3400::Scene3400() {
@@ -2802,7 +2802,7 @@ void Scene3400::signal() {
_sceneMode = 3403;
if (R2_GLOBALS._player._characterIndex == 2)
setAction(&_sequenceManager, this, 3403, &R2_GLOBALS._player, &_actor3, &_actor7, NULL);
- else
+ else
setAction(&_sequenceManager, this, 3403, &_actor1, &_actor3, &_actor7, NULL);
break;
case 3309:
@@ -2811,7 +2811,7 @@ void Scene3400::signal() {
_sceneMode = 3405;
if (R2_GLOBALS._player._characterIndex == 3)
setAction(&_sequenceManager, this, 3405, &R2_GLOBALS._player, &_actor7, NULL);
- else
+ else
setAction(&_sequenceManager, this, 3405, &_actor2, &_actor7, NULL);
break;
case 3310:
@@ -2885,7 +2885,7 @@ void Scene3400::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 3500 -
+ * Scene 3500 -
*
*--------------------------------------------------------------------------*/
Scene3500::Action1::Action1() {
@@ -2910,10 +2910,10 @@ void Scene3500::Action1::sub108670(int arg1) {
_field1E = arg1;
_field20 = 1;
_field24 = 1;
-
+
scene->_actor9.setStrip(2);
scene->_actor9.show();
-
+
if (_field1E == 1)
scene->_actor6.show();
else
@@ -2954,7 +2954,7 @@ void Scene3500::Action1::sub108732(int arg1) {
Common::Point pt(160, 73);
NpcMover *mover = new NpcMover();
scene->_actor8.addMover(mover, &pt, NULL);
-
+
scene->_fieldB9E = 160 - (_field1E * 2 * 160);
Common::Point pt2(scene->_fieldB9E, 73);
NpcMover *mover2 = new NpcMover();
@@ -3153,7 +3153,7 @@ void Scene3500::sub107F71(int arg1) {
_action1.signal();
} else if (_action == 0) {
_action1.sub108670(1);
- setAction(&_action1, &_actor1, NULL);
+ setAction(&_action1, &_actor1, NULL);
}
break;
case 104:
@@ -3177,7 +3177,7 @@ void Scene3500::sub107F71(int arg1) {
_action1.signal();
} else if (_action == 0) {
_action1.sub108670(-1);
- setAction(&_action1, &_actor1, NULL);
+ setAction(&_action1, &_actor1, NULL);
}
break;
default:
@@ -3221,16 +3221,16 @@ void Scene3500::Action1::signal() {
int var4 = scene->_unkObj1.sub1097EF(scene->_field127C + 46) - 46;
int di = abs(var2 - scene->_field127A);
int var6 = abs(var4 - scene->_field127C);
-
+
if ((scene->_actor1._frame % 2) != 0) {
scene->_actor1._frameChange = _field1E;
scene->_actor1.setFrame(scene->_actor1.changeFrame());
}
int var8 = (scene->_action1._field1E * 2 + scene->_field1276);
- if (var8 > 7)
+ if (var8 > 7)
var8 = 1;
- else if (var8 < 1)
+ else if (var8 < 1)
var8 = 7;
switch (var8) {
@@ -3293,7 +3293,7 @@ void Scene3500::Action1::signal() {
Common::Point pt(scene->_fieldAF8, 73);
NpcMover *mover = new NpcMover();
scene->_actor8.addMover(mover, &pt, this);
-
+
scene->_actor9.setPosition(Common::Point(160 + ((_field1E * 2) * 160), 73));;
scene->_actor9._moveDiff.x = 160 - scene->_field126E;
scene->_fieldB9E = 160;
@@ -3315,7 +3315,7 @@ void Scene3500::Action1::signal() {
else
scene->_actor8.setStrip(2);
scene->_actor8.fixPriority(1);
-
+
scene->_actor9.setPosition(Common::Point(-160, 73));
scene->_actor9.setStrip(9);
scene->_actor9.fixPriority(11);
@@ -3343,12 +3343,12 @@ void Scene3500::Action1::signal() {
// The following code allows the switch to work properly.
warning("Checkme: fix for dead code");
int var_8 = (_field1E * 2 + scene->_field1276);
- if (var_8 > 7)
+ if (var_8 > 7)
var_8 = 1;
- else if (var_8 < 1)
+ else if (var_8 < 1)
var_8 = 7;
//
-
+
switch (var_8 - 1) {
case 0:
// No break on purpose
@@ -3378,7 +3378,7 @@ void Scene3500::Action1::signal() {
Common::Point pt(160, 73);
NpcMover *mover = new NpcMover();
scene->_actor8.addMover(mover, &pt, NULL);
-
+
scene->_fieldB9E = 160 - (_field1E * 2 * 160);
Common::Point pt2(scene->_fieldB9E, 73);
NpcMover *mover2 = new NpcMover();
@@ -3419,7 +3419,7 @@ void Scene3500::Action1::dispatch() {
if ((_actionIndex == 1) && (scene->_field126E <= 4)) {
scene->_rotation->_idxChange = 0;
signal();
- }
+ }
}
void Scene3500::Action2::sub10831F(int arg1) {
@@ -3451,12 +3451,12 @@ void Scene3500::Action2::signal() {
scene->_fieldB9E = scene->_actor9._position.y;
di = scene->_fieldB9E;
}
-
+
scene->_actor8._moveDiff.y = 9 - (scene->_field126E / 2);
Common::Point pt(si, 73 - (_field1E * 12));
NpcMover *mover = new NpcMover();
scene->_actor8.addMover(mover, &pt, NULL);
-
+
scene->_actor9._moveDiff.y = 9 - (scene->_field126E / 2);
Common::Point pt2(di, 73 - (_field1E * 12));
NpcMover *mover2 = new NpcMover();
@@ -3474,7 +3474,7 @@ void Scene3500::Action2::signal() {
si = scene->_actor8._position.x;
di = scene->_actor9._position.x;
}
-
+
scene->_actor7.sub1094ED();
scene->_actor8._moveDiff.y = 9 - (scene->_field126E / 2);
@@ -3486,7 +3486,7 @@ void Scene3500::Action2::signal() {
Common::Point pt2(di, 73);
NpcMover *mover2 = new NpcMover();
scene->_actor9.addMover(mover2, &pt2, NULL);
-
+
scene->_actor3.setFrame2(2);
}
break;
@@ -3500,13 +3500,13 @@ bool Scene3500::Item4::startAction(CursorType action, Event &event) {
if (scene->_field1286 == 0)
return true;
-
+
if (scene->_field1286 != 4)
return SceneHotspot::startAction(action, event);
-
+
R2_GLOBALS._sound2.play(14);
scene->sub107F71(_field34);
-
+
return true;
}
@@ -3515,22 +3515,22 @@ void Scene3500::Actor7::process(Event &event) {
if (scene->_field1286 == 0)
return;
-
+
if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && (_bounds.contains(event.mousePos))) {
_fieldAE = 1 + event.mousePos.y - _position.y;
event.eventType = EVENT_NONE;
}
-
+
if ((event.eventType == EVENT_BUTTON_UP) && (_fieldAE != 0)) {
_fieldAE = 0;
event.handled = true;
if (scene->_action1._field24 == 0)
sub1094ED();
}
-
+
if (_fieldAE == 0)
return;
-
+
R2_GLOBALS._sound2.play(338);
event.handled = true;
@@ -3550,10 +3550,10 @@ bool Scene3500::Actor7::startAction(CursorType action, Event &event) {
if (scene->_field1286 == 0)
return true;
-
+
if (scene->_field1286 == 4)
return false;
-
+
return SceneActor::startAction(action, event);
}
@@ -3586,7 +3586,7 @@ void Scene3500::postInit(SceneObjectList *OwnerList) {
if (tmpIndex > 254)
tmpIndex--;
-
+
tmpPal[3 * i] = R2_GLOBALS._scenePalette._palette[3 * tmpIndex];
tmpPal[(3 * i) + 1] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 1];
tmpPal[(3 * i) + 2] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 2];
@@ -3597,7 +3597,7 @@ void Scene3500::postInit(SceneObjectList *OwnerList) {
R2_GLOBALS._scenePalette._palette[(3 * i) + 1] = tmpPal[(3 * i) + 1];
R2_GLOBALS._scenePalette._palette[(3 * i) + 2] = tmpPal[(3 * i) + 2];
}
-
+
_actor7.sub109466(38, 165, 16, 32, _field1270);
_actor7.setDetails(3500, 6, 7, -1, 1, (SceneItem *)NULL);
R2_GLOBALS._sound1.play(276);
@@ -3696,7 +3696,7 @@ void Scene3500::signal() {
void Scene3500::process(Event &event) {
if (_field1286 == 0)
return;
-
+
if (event.eventType == EVENT_KEYPRESS) {
switch (event.kbd.keycode) {
case Common::KEYCODE_1:
@@ -3765,7 +3765,7 @@ void Scene3500::process(Event &event) {
break;
}
}
-
+
if (!event.handled)
_actor7.process(event);
@@ -3864,7 +3864,7 @@ void Scene3500::dispatch() {
var_a = abs(var_6 - di);
tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46));
- if ( (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4)) && (di <= var_6) && (_field127C>= var_6))
+ if ( (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4)) && (di <= var_6) && (_field127C>= var_6))
|| (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5) || (tmpVar == 14) || (tmpVar == 15)) && (_field126E >= var_a) && (_field126E > 3) && (_action1._field24 != 0)) ) {
di = var_6;
if ((tmpVar != 25) && (tmpVar != 26) && (tmpVar != 5) && (tmpVar != 14) && (tmpVar == 15))
@@ -3894,7 +3894,7 @@ void Scene3500::dispatch() {
break;
case 2:
tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46));
- if ( ((tmpVar == 12) || (tmpVar == 13) || (tmpVar == 11) || (tmpVar == 16) || (tmpVar == 31))
+ if ( ((tmpVar == 12) || (tmpVar == 13) || (tmpVar == 11) || (tmpVar == 16) || (tmpVar == 31))
|| (((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14) || (tmpVar == 5) || (tmpVar == 4)) && (var_a > 3)) ) {
R2_GLOBALS._sound2.play(339);
_rotation->_idxChange = 0;
@@ -4003,7 +4003,7 @@ void Scene3500::dispatch() {
var_6 = _unkObj1.sub1097EF(di + 46) - 46;
var_a = abs(di - var_6);
tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46));
- if ( (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5)) && (di >= var_6) && (_field127C <= var_6))
+ if ( (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5)) && (di >= var_6) && (_field127C <= var_6))
|| (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4) || (tmpVar == 14) || (tmpVar == 15)) && (_field126E >= var_a) && (_field126E <= 3) && (_action1._field24 != 0)) ){
if ((tmpVar != 23) && (tmpVar != 24) && (tmpVar != 4) && (tmpVar != 14) && (tmpVar != 15))
R2_GLOBALS._sound2.play(339);
@@ -4179,7 +4179,7 @@ void Scene3500::dispatch() {
}
/*--------------------------------------------------------------------------
- * Scene 3600 -
+ * Scene 3600 -
*
*--------------------------------------------------------------------------*/
Scene3600::Scene3600() {
@@ -4227,7 +4227,7 @@ void Scene3600::Action3600::signal() {
R2_GLOBALS._sound2.fade(127, 5, 10, false, NULL);
}
setDelay(1);
- warning("TODO: Palette fader using parameter 2 = 256");
+ warning("TODO: Palette fader using parameter 2 = 256");
R2_GLOBALS._scenePalette.fade((const byte *)&scene->_palette1._palette, true, _field20);
if (_field20 > 0)
_field20 -= 2;
@@ -4359,7 +4359,7 @@ void Scene3600::postInit(SceneObjectList *OwnerList) {
g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0));
R2_GLOBALS._v558B6.set(25, 0, 260, 200);
}
-
+
loadScene(3600);
SceneExt::postInit();
_field254C = 0;
@@ -4502,7 +4502,7 @@ void Scene3600::postInit(SceneObjectList *OwnerList) {
_action1._field1E = 1;
_action1._field20 = 0;
_action1.setActionIndex(1);
-
+
_actor3.setAction(&_action1);
_sceneMode = 3623;
@@ -4768,7 +4768,7 @@ void Scene3600::signal() {
R2_GLOBALS.setFlag(71);
_sceneMode = 3626;
setAction(&_sequenceManager1, this, 3626, &_actor13, NULL);
- }
+ }
break;
case 3624:
R2_GLOBALS._player.disableControl();
@@ -4946,7 +4946,7 @@ void Scene3700::signal() {
}
/*--------------------------------------------------------------------------
- * Scene 3800 -
+ * Scene 3800 -
*
*--------------------------------------------------------------------------*/
Scene3800::Scene3800() {
@@ -5227,7 +5227,7 @@ void Scene3800::postInit(SceneObjectList *OwnerList) {
_field412 = 0;
initScene3800();
-
+
SceneExt::postInit();
R2_GLOBALS._sound1.play(231);
@@ -5338,7 +5338,7 @@ void Scene3800::process(Event &event) {
}
/*--------------------------------------------------------------------------
- * Scene 3900 -
+ * Scene 3900 -
*
*--------------------------------------------------------------------------*/
void Scene3900::Exit1::changeScene() {
@@ -5350,7 +5350,7 @@ void Scene3900::Exit1::changeScene() {
R2_GLOBALS._v566AA = 1;
R2_GLOBALS._v566A8 = 1;
scene->_sceneMode = 14;
-
+
Common::Point pt(160, 115);
NpcMover *mover = new NpcMover();
R2_GLOBALS._player.addMover(mover, &pt, scene);
@@ -5365,7 +5365,7 @@ void Scene3900::Exit2::changeScene() {
R2_GLOBALS._v566AA = 2;
R2_GLOBALS._v566A8 = 1;
scene->_sceneMode = 14;
-
+
Common::Point pt(330, 145);
NpcMover *mover = new NpcMover();
R2_GLOBALS._player.addMover(mover, &pt, scene);
@@ -5380,7 +5380,7 @@ void Scene3900::Exit3::changeScene() {
R2_GLOBALS._v566AA = 3;
R2_GLOBALS._v566A8 = 1;
scene->_sceneMode = 14;
-
+
Common::Point pt(160, 220);
NpcMover *mover = new NpcMover();
R2_GLOBALS._player.addMover(mover, &pt, scene);
@@ -5395,7 +5395,7 @@ void Scene3900::Exit4::changeScene() {
R2_GLOBALS._v566AA = 4;
R2_GLOBALS._v566A8 = 1;
scene->_sceneMode = 14;
-
+
Common::Point pt(-10, 145);
NpcMover *mover = new NpcMover();
R2_GLOBALS._player.addMover(mover, &pt, scene);
@@ -5407,7 +5407,7 @@ void Scene3900::Exit5::changeScene() {
_enabled = false;
R2_GLOBALS._player.disableControl(CURSOR_ARROW);
scene->_sceneMode = 13;
-
+
if (R2_GLOBALS._v566A9 == 4) {
Common::Point pt(-10, 135);
NpcMover *mover = new NpcMover();
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h
index 6088c88479..44787b9eef 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.h
@@ -494,7 +494,7 @@ public:
Exit1 _exit1;
Action1 _action1;
SequenceManager _sequenceManager;
-
+
int _field11B2;
Scene3385();
@@ -536,7 +536,7 @@ public:
Actor4 _actor4;
Action1 _action1;
SequenceManager _sequenceManager;
-
+
int _field142E;
Scene3395();
@@ -600,10 +600,10 @@ class Scene3500 : public SceneExt {
class Item4 : public NamedHotspot {
public:
int _field34;
-
+
Item4();
virtual void synchronize(Serializer &s);
-
+
virtual bool startAction(CursorType action, Event &event);
};
@@ -615,7 +615,7 @@ class Scene3500 : public SceneExt {
int _fieldAA;
int _fieldAC;
int _fieldAE;
-
+
Actor7();
virtual void synchronize(Serializer &s);
@@ -695,7 +695,7 @@ class Scene3600 : public SceneExt {
class Action3600: public ActionExt {
public:
int _field1E, _field20;
-
+
Action3600();
virtual void synchronize(Serializer &s);
virtual void signal();
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp
index f729881e8f..da1449efdf 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.cpp
+++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp
@@ -159,7 +159,7 @@ void VisualSpeaker::setText(const Common::String &msg) {
if (s.empty())
_numFrames = 0;
-
+
if (_fieldF6) {
if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId)
_sceneText.hide();
@@ -229,7 +229,7 @@ void SpeakerCaptain3210::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -285,7 +285,7 @@ void SpeakerChief1100::proc15() {
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -342,7 +342,7 @@ void SpeakerGuard2800::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -382,7 +382,7 @@ void SpeakerJocko3200::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -405,7 +405,7 @@ void SpeakerJocko3220::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -428,7 +428,7 @@ void SpeakerJocko3230::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -442,7 +442,7 @@ void SpeakerJocko3230::proc15() {
}
//----------------------------------------------------------------------------
-// Classes related to MIRANDA
+// Classes related to MIRANDA
//----------------------------------------------------------------------------
SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() {
@@ -472,7 +472,7 @@ void SpeakerMiranda300::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -507,7 +507,7 @@ void SpeakerMiranda1625::proc15() {
_object1.postInit();
_object1.setPosition(Common::Point(196, 65));
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -547,7 +547,7 @@ void SpeakerMiranda3375::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 3)
+ if (R2_GLOBALS._player._characterIndex == 3)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor2;
@@ -558,7 +558,7 @@ void SpeakerMiranda3375::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (scene->_actor1._position.y != 163)
R2_GLOBALS._player.setStrip(8);
else
@@ -574,7 +574,7 @@ void SpeakerMiranda3375::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -597,7 +597,7 @@ void SpeakerMiranda3385::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 3)
+ if (R2_GLOBALS._player._characterIndex == 3)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor2;
@@ -608,7 +608,7 @@ void SpeakerMiranda3385::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3375)
R2_GLOBALS._player.setStrip(4);
else
@@ -623,7 +623,7 @@ void SpeakerMiranda3385::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -646,7 +646,7 @@ void SpeakerMiranda3395::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 3)
+ if (R2_GLOBALS._player._characterIndex == 3)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor2;
@@ -657,7 +657,7 @@ void SpeakerMiranda3395::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3385)
R2_GLOBALS._player.setStrip(4);
else
@@ -673,7 +673,7 @@ void SpeakerMiranda3395::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -696,7 +696,7 @@ void SpeakerMiranda3400::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 3)
+ if (R2_GLOBALS._player._characterIndex == 3)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor2;
@@ -740,7 +740,7 @@ void SpeakerMiranda3600::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 3)
+ if (R2_GLOBALS._player._characterIndex == 3)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor12;
@@ -858,7 +858,7 @@ void SpeakerNej2700::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -893,7 +893,7 @@ void SpeakerNej2750::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -925,7 +925,7 @@ void SpeakerNej2800::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1002,7 +1002,7 @@ void SpeakerPrivate3210::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1047,7 +1047,7 @@ void SpeakerProtector3600::proc15() {
R2_GLOBALS._player.disableControl();
R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1107,7 +1107,7 @@ void SpeakerQuinn300::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1122,7 +1122,7 @@ void SpeakerQuinn300::proc15() {
_object1.animate(ANIM_MODE_6, this);
} else {
((SceneItem *)_action)->_sceneRegionId = 0;
-
+
switch (_object2->_visage) {
case 10:
_object1.setup((v - 1) / 4 + 4010, ((v - ((v - 1) / 4 * 4) - 1) % 8) * 2 + 1, 1);
@@ -1158,7 +1158,7 @@ void SpeakerQuinn1100::proc15() {
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1250,7 +1250,7 @@ void SpeakerQuinn2700::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1281,7 +1281,7 @@ void SpeakerQuinn2750::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1312,7 +1312,7 @@ void SpeakerQuinn2800::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1371,9 +1371,9 @@ void SpeakerQuinn3375::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 1)
+ if (R2_GLOBALS._player._characterIndex == 1)
_object2 = &R2_GLOBALS._player;
- else if (R2_GLOBALS._player._characterIndex == 2)
+ else if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &scene->_actor1;
else
_object2 = &scene->_actor2;
@@ -1384,7 +1384,7 @@ void SpeakerQuinn3375::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (scene->_actor1._position.y != 163)
R2_GLOBALS._player.setStrip(8);
else
@@ -1399,7 +1399,7 @@ void SpeakerQuinn3375::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -1422,9 +1422,9 @@ void SpeakerQuinn3385::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 1)
+ if (R2_GLOBALS._player._characterIndex == 1)
_object2 = &R2_GLOBALS._player;
- else if (R2_GLOBALS._player._characterIndex == 2)
+ else if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &scene->_actor1;
else
_object2 = &scene->_actor2;
@@ -1435,7 +1435,7 @@ void SpeakerQuinn3385::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3375)
R2_GLOBALS._player.setStrip(4);
else
@@ -1450,7 +1450,7 @@ void SpeakerQuinn3385::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -1477,9 +1477,9 @@ void SpeakerQuinn3395::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 1)
+ if (R2_GLOBALS._player._characterIndex == 1)
_object2 = &R2_GLOBALS._player;
- else if (R2_GLOBALS._player._characterIndex == 2)
+ else if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &scene->_actor1;
else
_object2 = &scene->_actor2;
@@ -1490,7 +1490,7 @@ void SpeakerQuinn3395::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3385)
R2_GLOBALS._player.setStrip(4);
else
@@ -1505,7 +1505,7 @@ void SpeakerQuinn3395::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -1532,9 +1532,9 @@ void SpeakerQuinn3400::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 1)
+ if (R2_GLOBALS._player._characterIndex == 1)
_object2 = &R2_GLOBALS._player;
- else if (R2_GLOBALS._player._characterIndex == 2)
+ else if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &scene->_actor1;
else
_object2 = &scene->_actor2;
@@ -1581,7 +1581,7 @@ void SpeakerQuinn3600::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 1)
+ if (R2_GLOBALS._player._characterIndex == 1)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor10;
@@ -1736,7 +1736,7 @@ void SpeakerRalf3245::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1788,7 +1788,7 @@ void SpeakerRocko3200::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1811,7 +1811,7 @@ void SpeakerRocko3220::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1834,7 +1834,7 @@ void SpeakerRocko3230::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1879,7 +1879,7 @@ void SpeakerSeeker300::proc15() {
_object1.fixPriority(140);
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1918,7 +1918,7 @@ void SpeakerSeeker1100::proc15() {
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -1974,7 +1974,7 @@ void SpeakerSeeker1900::proc15() {
_object1.setPosition(_object2->_position);
_object1._numFrames = 7;
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -2045,7 +2045,7 @@ void SpeakerSeeker3375::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 2)
+ if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor1;
@@ -2056,7 +2056,7 @@ void SpeakerSeeker3375::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (scene->_actor1._position.y != 163)
R2_GLOBALS._player.setStrip(8);
else
@@ -2071,7 +2071,7 @@ void SpeakerSeeker3375::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -2094,7 +2094,7 @@ void SpeakerSeeker3385::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 2)
+ if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor1;
@@ -2105,7 +2105,7 @@ void SpeakerSeeker3385::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3375)
R2_GLOBALS._player.setStrip(4);
else
@@ -2120,7 +2120,7 @@ void SpeakerSeeker3385::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -2143,7 +2143,7 @@ void SpeakerSeeker3395::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 2)
+ if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor1;
@@ -2154,7 +2154,7 @@ void SpeakerSeeker3395::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3385)
R2_GLOBALS._player.setStrip(4);
else
@@ -2169,7 +2169,7 @@ void SpeakerSeeker3395::proc15() {
if (_object2->_mover)
_object2->addMover(NULL);
}
-
+
switch (v) {
case 0:
@@ -2192,7 +2192,7 @@ void SpeakerSeeker3400::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 2)
+ if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor1;
@@ -2251,7 +2251,7 @@ void SpeakerSeeker3600::proc15() {
int v = _fieldF6;
if (!_object2) {
- if (R2_GLOBALS._player._characterIndex == 2)
+ if (R2_GLOBALS._player._characterIndex == 2)
_object2 = &R2_GLOBALS._player;
else
_object2 = &scene->_actor11;
@@ -2394,7 +2394,7 @@ void SpeakerSocko3200::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -2434,7 +2434,7 @@ void SpeakerSoldier300::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -2478,7 +2478,7 @@ void SpeakerTeal300::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -2502,7 +2502,7 @@ void SpeakerTeal1625::proc15() {
_object1.postInit();
_object1.setPosition(Common::Point(68, 68));
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -2525,7 +2525,7 @@ void SpeakerTeal3240::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -2677,7 +2677,7 @@ void SpeakerTomko3245::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -2729,7 +2729,7 @@ void SpeakerWebbster3240::proc15() {
_object1.postInit();
_object1.setPosition(_object2->_position);
- if (_object2->_mover)
+ if (_object2->_mover)
_object2->addMover(NULL);
}
@@ -2755,7 +2755,7 @@ void SpeakerWebbster3375::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (scene->_actor1._position.y != 163)
R2_GLOBALS._player.setStrip(8);
else
@@ -2799,7 +2799,7 @@ void SpeakerWebbster3385::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3375)
R2_GLOBALS._player.setStrip(4);
else
@@ -2843,7 +2843,7 @@ void SpeakerWebbster3395::proc15() {
_object1._numFrames = 7;
_object1._effect = 1;
_object1.changeZoom(-1);
-
+
if (R2_GLOBALS._sceneManager._previousScene == 3385)
R2_GLOBALS._player.setStrip(4);
else
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index c091afe34c..0756d71d4c 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -240,7 +240,7 @@ void SceneManager::listenerSynchronize(Serializer &s) {
if (s.isLoading()) {
changeScene(_sceneNumber);
-
+
if (_nextSceneNumber != -1) {
sceneChange();
_nextSceneNumber = -1;
@@ -317,7 +317,7 @@ void Scene::loadSceneData(int sceneNum) {
_activeScreenNumber = sceneNum;
if (g_vm->getGameID() == GType_Ringworld2) {
- // Most scenes in Ringworld 2 don't have a scene size resource, but rather just have
+ // Most scenes in Ringworld 2 don't have a scene size resource, but rather just have
// a standard 320x200 size. Only read the scene size data for the specific few scenes
switch (sceneNum) {
case 700:
@@ -457,7 +457,7 @@ void Scene::refreshBackground(int xAmount, int yAmount) {
Rect destBounds(xSectionDest * 160, ySectionDest * 100,
(xSectionDest + 1) * 160, (ySectionDest + 1) * 100);
if (g_vm->getGameID() != GType_Ringworld) {
- // For Blue Force and Return to Ringworld, if the scene has an interface area,
+ // For Blue Force and Return to Ringworld, if the scene has an interface area,
// exclude it from the copy
srcBounds.bottom = MIN<int16>(srcBounds.bottom, BF_GLOBALS._interfaceY);
destBounds.bottom = MIN<int16>(destBounds.bottom, BF_GLOBALS._interfaceY);
diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp
index c254565aca..a273ec2a0b 100644
--- a/engines/tsage/staticres.cpp
+++ b/engines/tsage/staticres.cpp
@@ -400,8 +400,8 @@ const byte k5A4D6[] = {
const byte k5A72E[] = {0, 98, 135, 183, 229, 81, 133, 185, 235, 75, 131, 187, 241, 70, 129, 190, 247};
const byte k5A73F[] = {0, 42, 42, 42, 42, 67, 67, 67, 67, 92, 92, 92, 92, 116, 116, 116, 116};
const byte k5A750[] = {
- 9, 10, 7, 13, 7, 8, 9, 7, 9, 10,
- 2, 3, 3, 2, 2, 2, 4, 3, 3, 4,
+ 9, 10, 7, 13, 7, 8, 9, 7, 9, 10,
+ 2, 3, 3, 2, 2, 2, 4, 3, 3, 4,
3, 2, 3, 4, 3, 8, 10, 4, 0
};
const byte k5A76D[] = {
diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h
index eb36cf0790..41179c4915 100644
--- a/engines/tsage/tsage.h
+++ b/engines/tsage/tsage.h
@@ -54,7 +54,8 @@ enum {
enum {
kRingDebugScripts = 1 << 0,
ktSageSound = 1 << 1,
- ktSageCore = 1 << 2
+ ktSageCore = 1 << 2,
+ ktSageDebugGraphics = 1 << 3
};
struct tSageGameDescription;
diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp
index ca9fddc6ce..10cb6961dc 100644
--- a/engines/tsage/user_interface.cpp
+++ b/engines/tsage/user_interface.cpp
@@ -316,7 +316,7 @@ void UIElements::synchronize(Serializer &s) {
}
void UIElements::process(Event &event) {
- if (_clearScreen && GLOBALS._player._enabled &&
+ if (_clearScreen && GLOBALS._player._enabled &&
((g_vm->getGameID() != GType_BlueForce) || (GLOBALS._sceneManager._sceneNumber != 50))) {
if (_bounds.contains(event.mousePos)) {
// Cursor inside UI area
diff --git a/graphics/sjis.h b/graphics/sjis.h
index f96eef6ad1..2d05005fc3 100644
--- a/graphics/sjis.h
+++ b/graphics/sjis.h
@@ -43,7 +43,7 @@
#endif
#include "common/scummsys.h"
-#include "common/util.h"
+#include "common/platform.h"
namespace Graphics {
diff --git a/gui/dialog.cpp b/gui/dialog.cpp
index 0522b40b46..fd15ba5e09 100644
--- a/gui/dialog.cpp
+++ b/gui/dialog.cpp
@@ -334,25 +334,7 @@ void Dialog::removeWidget(Widget *del) {
if (del == _dragWidget)
_dragWidget = NULL;
- Widget *w = _firstWidget;
-
- if (del == _firstWidget) {
- Widget *del_next = del->_next;
- del->_next = 0;
- _firstWidget = del_next;
- return;
- }
-
- w = _firstWidget;
- while (w) {
- if (w->_next == del) {
- Widget *del_next = del->_next;
- del->_next = 0;
- w->_next = del_next;
- return;
- }
- w = w->_next;
- }
+ GuiObject::removeWidget(del);
}
} // End of namespace GUI
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 5bb358452a..a3e4925848 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -24,6 +24,7 @@
#include "common/config-manager.h"
#include "common/events.h"
#include "common/fs.h"
+#include "common/gui_options.h"
#include "common/util.h"
#include "common/system.h"
#include "common/translation.h"
diff --git a/gui/object.cpp b/gui/object.cpp
index 2ec42df9d7..73c4f74d6c 100644
--- a/gui/object.cpp
+++ b/gui/object.cpp
@@ -59,4 +59,24 @@ void GuiObject::reflowLayout() {
}
}
+void GuiObject::removeWidget(Widget *del) {
+ if (del == _firstWidget) {
+ Widget *del_next = del->next();
+ del->setNext(0);
+ _firstWidget = del_next;
+ return;
+ }
+
+ Widget *w = _firstWidget;
+ while (w) {
+ if (w->next() == del) {
+ Widget *del_next = del->next();
+ del->setNext(0);
+ w->setNext(del_next);
+ return;
+ }
+ w = w->next();
+ }
+}
+
} // End of namespace GUI
diff --git a/gui/object.h b/gui/object.h
index 34ff0d47f2..bce3cd7846 100644
--- a/gui/object.h
+++ b/gui/object.h
@@ -83,6 +83,8 @@ public:
virtual void reflowLayout();
+ virtual void removeWidget(Widget *widget);
+
protected:
virtual void releaseFocus() = 0;
};
diff --git a/gui/options.cpp b/gui/options.cpp
index bfad81c07b..5085f9cdd9 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -30,6 +30,8 @@
#include "common/fs.h"
#include "common/config-manager.h"
+#include "common/gui_options.h"
+#include "common/rendermode.h"
#include "common/system.h"
#include "common/textconsole.h"
#include "common/translation.h"
@@ -79,7 +81,7 @@ static const char *outputRateLabels[] = { _s("<default>"), _s("8 kHz"), _s("11kH
static const int outputRateValues[] = { 0, 8000, 11025, 22050, 44100, 48000, -1 };
OptionsDialog::OptionsDialog(const Common::String &domain, int x, int y, int w, int h)
- : Dialog(x, y, w, h), _domain(domain), _graphicsTabId(-1), _tabWidget(0) {
+ : Dialog(x, y, w, h), _domain(domain), _graphicsTabId(-1), _midiTabId(-1), _pathsTabId(-1), _tabWidget(0) {
init();
}
@@ -1050,7 +1052,8 @@ Common::String OptionsDialog::renderType2GUIO(uint32 renderType) {
{ Common::kRenderVGA, GUIO_RENDERVGA },
{ Common::kRenderAmiga, GUIO_RENDERAMIGA },
{ Common::kRenderFMTowns, GUIO_RENDERFMTOWNS },
- { Common::kRenderPC98, GUIO_RENDERPC98 }
+ { Common::kRenderPC9821, GUIO_RENDERPC9821 },
+ { Common::kRenderPC9801, GUIO_RENDERPC9801 }
};
Common::String res;
@@ -1119,7 +1122,7 @@ GlobalOptionsDialog::GlobalOptionsDialog()
//
// 3) The MIDI tab
//
- tab->addTab(_("MIDI"));
+ _midiTabId = tab->addTab(_("MIDI"));
addMIDIControls(tab, "GlobalOptions_MIDI.");
//
@@ -1132,9 +1135,9 @@ GlobalOptionsDialog::GlobalOptionsDialog()
// 5) The Paths tab
//
if (g_system->getOverlayWidth() > 320)
- tab->addTab(_("Paths"));
+ _pathsTabId = tab->addTab(_("Paths"));
else
- tab->addTab(_c("Paths", "lowres"));
+ _pathsTabId = tab->addTab(_c("Paths", "lowres"));
#if !( defined(__DC__) || defined(__GP32__) )
// These two buttons have to be extra wide, or the text will be
@@ -1493,4 +1496,39 @@ void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3
}
}
+void GlobalOptionsDialog::reflowLayout() {
+ int activeTab = _tabWidget->getActiveTab();
+
+ if (_midiTabId != -1) {
+ _tabWidget->setActiveTab(_midiTabId);
+
+ _tabWidget->removeWidget(_soundFontClearButton);
+ _soundFontClearButton->setNext(0);
+ delete _soundFontClearButton;
+ _soundFontClearButton = addClearButton(_tabWidget, "GlobalOptions_MIDI.mcFontClearButton", kClearSoundFontCmd);
+ }
+
+ if (_pathsTabId != -1) {
+ _tabWidget->setActiveTab(_pathsTabId);
+
+ _tabWidget->removeWidget(_savePathClearButton);
+ _savePathClearButton->setNext(0);
+ delete _savePathClearButton;
+ _savePathClearButton = addClearButton(_tabWidget, "GlobalOptions_Paths.SavePathClearButton", kSavePathClearCmd);
+
+ _tabWidget->removeWidget(_themePathClearButton);
+ _themePathClearButton->setNext(0);
+ delete _themePathClearButton;
+ _themePathClearButton = addClearButton(_tabWidget, "GlobalOptions_Paths.ThemePathClearButton", kThemePathClearCmd);
+
+ _tabWidget->removeWidget(_extraPathClearButton);
+ _extraPathClearButton->setNext(0);
+ delete _extraPathClearButton;
+ _extraPathClearButton = addClearButton(_tabWidget, "GlobalOptions_Paths.ExtraPathClearButton", kExtraPathClearCmd);
+ }
+
+ _tabWidget->setActiveTab(activeTab);
+ OptionsDialog::reflowLayout();
+}
+
} // End of namespace GUI
diff --git a/gui/options.h b/gui/options.h
index 4e0187f50f..83c9d60d59 100644
--- a/gui/options.h
+++ b/gui/options.h
@@ -89,6 +89,8 @@ protected:
TabWidget *_tabWidget;
int _graphicsTabId;
+ int _midiTabId;
+ int _pathsTabId;
private:
//
@@ -193,6 +195,8 @@ public:
void close();
void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
+ virtual void reflowLayout();
+
protected:
#ifdef SMALL_SCREEN_DEVICE
KeysDialog *_keysDialog;
diff --git a/gui/themes/scummclassic.zip b/gui/themes/scummclassic.zip
index 8b2a3e7899..d4cfd0cba3 100644
--- a/gui/themes/scummclassic.zip
+++ b/gui/themes/scummclassic.zip
Binary files differ
diff --git a/gui/themes/scummmodern.zip b/gui/themes/scummmodern.zip
index 84416636bc..fc4c89cbcc 100644
--- a/gui/themes/scummmodern.zip
+++ b/gui/themes/scummmodern.zip
Binary files differ
diff --git a/gui/themes/scummmodern/scummmodern_gfx.stx b/gui/themes/scummmodern/scummmodern_gfx.stx
index b420ce0903..5f7cc69acd 100644
--- a/gui/themes/scummmodern/scummmodern_gfx.stx
+++ b/gui/themes/scummmodern/scummmodern_gfx.stx
@@ -125,7 +125,7 @@
/>
<font id = 'text_normal'
file = 'helvb12.bdf'
- scalable_file = 'FreeSansBold.ttf'
+ scalable_file = 'FreeSans.ttf'
/>
<font resolution = 'y<400'
id = 'text_normal'
diff --git a/gui/widgets/edittext.cpp b/gui/widgets/edittext.cpp
index af8ab8aa5b..4b266e8194 100644
--- a/gui/widgets/edittext.cpp
+++ b/gui/widgets/edittext.cpp
@@ -33,6 +33,7 @@ EditTextWidget::EditTextWidget(GuiObject *boss, int x, int y, int w, int h, cons
_finishCmd = finishCmd;
setEditString(text);
+ setFontStyle(ThemeEngine::kFontStyleNormal);
}
EditTextWidget::EditTextWidget(GuiObject *boss, const String &name, const String &text, const char *tooltip, uint32 cmd, uint32 finishCmd)
@@ -42,6 +43,7 @@ EditTextWidget::EditTextWidget(GuiObject *boss, const String &name, const String
_finishCmd = finishCmd;
setEditString(text);
+ setFontStyle(ThemeEngine::kFontStyleNormal);
}
void EditTextWidget::setEditString(const String &str) {
diff --git a/video/module.mk b/video/module.mk
index ceeac94384..900a781d0a 100644
--- a/video/module.mk
+++ b/video/module.mk
@@ -5,6 +5,7 @@ MODULE_OBJS := \
coktel_decoder.o \
dxa_decoder.o \
flic_decoder.o \
+ psx_decoder.o \
qt_decoder.o \
smk_decoder.o \
video_decoder.o \
diff --git a/video/psx_decoder.cpp b/video/psx_decoder.cpp
new file mode 100644
index 0000000000..7c04b7f041
--- /dev/null
+++ b/video/psx_decoder.cpp
@@ -0,0 +1,697 @@
+/* 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.
+ *
+ */
+
+// PlayStation Stream demuxer and XA audio decoder based on FFmpeg/libav
+// MDEC video emulation based on http://kenai.com/downloads/jpsxdec/Old/PlayStation1_STR_format1-00.txt
+
+#include "audio/audiostream.h"
+#include "audio/mixer.h"
+#include "audio/decoders/raw.h"
+#include "common/bitstream.h"
+#include "common/huffman.h"
+#include "common/memstream.h"
+#include "common/stream.h"
+#include "common/system.h"
+#include "common/textconsole.h"
+#include "graphics/yuv_to_rgb.h"
+
+#include "video/psx_decoder.h"
+
+namespace Video {
+
+// Here are the codes/lengths/symbols that are used for decoding
+// DC coefficients (version 3 frames only)
+
+#define DC_CODE_COUNT 9
+#define DC_HUFF_VAL(b, n, p) (((b) << 16) | ((n) << 8) | (p))
+#define GET_DC_BITS(x) ((x) >> 16)
+#define GET_DC_NEG(x) ((int)(((x) >> 8) & 0xff))
+#define GET_DC_POS(x) ((int)((x) & 0xff))
+
+static const uint32 s_huffmanDCChromaCodes[DC_CODE_COUNT] = {
+ 254, 126, 62, 30, 14, 6, 2, 1, 0
+};
+
+static const byte s_huffmanDCChromaLengths[DC_CODE_COUNT] = {
+ 8, 7, 6, 5, 4, 3, 2, 2, 2
+};
+
+static const uint32 s_huffmanDCLumaCodes[DC_CODE_COUNT] = {
+ 126, 62, 30, 14, 6, 5, 1, 0, 4
+};
+
+static const byte s_huffmanDCLumaLengths[DC_CODE_COUNT] = {
+ 7, 6, 5, 4, 3, 3, 2, 2, 3
+};
+
+static const uint32 s_huffmanDCSymbols[DC_CODE_COUNT] = {
+ DC_HUFF_VAL(8, 255, 128), DC_HUFF_VAL(7, 127, 64), DC_HUFF_VAL(6, 63, 32),
+ DC_HUFF_VAL(5, 31, 16), DC_HUFF_VAL(4, 15, 8), DC_HUFF_VAL(3, 7, 4),
+ DC_HUFF_VAL(2, 3, 2), DC_HUFF_VAL(1, 1, 1), DC_HUFF_VAL(0, 0, 0)
+};
+
+// Here are the codes/lengths/symbols that are used for decoding
+// DC coefficients (version 2 and 3 frames)
+
+#define AC_CODE_COUNT 113
+#define AC_HUFF_VAL(z, a) ((z << 8) | a)
+#define ESCAPE_CODE ((uint32)-1) // arbitrary, just so we can tell what code it is
+#define END_OF_BLOCK ((uint32)-2) // arbitrary, just so we can tell what code it is
+#define GET_AC_ZERO_RUN(code) (code >> 8)
+#define GET_AC_COEFFICIENT(code) ((int)(code & 0xff))
+
+static const uint32 s_huffmanACCodes[AC_CODE_COUNT] = {
+ // Regular codes
+ 3, 3, 4, 5, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7,
+ 32, 33, 34, 35, 36, 37, 38, 39, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31,
+
+ // Escape code
+ 1,
+ // End of block code
+ 2
+};
+
+static const byte s_huffmanACLengths[AC_CODE_COUNT] = {
+ // Regular codes
+ 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10,
+ 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16,
+
+ // Escape code
+ 6,
+ // End of block code
+ 2
+};
+
+static const uint32 s_huffmanACSymbols[AC_CODE_COUNT] = {
+ // Regular codes
+ AC_HUFF_VAL(0, 1), AC_HUFF_VAL(1, 1), AC_HUFF_VAL(0, 2), AC_HUFF_VAL(2, 1), AC_HUFF_VAL(0, 3),
+ AC_HUFF_VAL(4, 1), AC_HUFF_VAL(3, 1), AC_HUFF_VAL(7, 1), AC_HUFF_VAL(6, 1), AC_HUFF_VAL(1, 2),
+ AC_HUFF_VAL(5, 1), AC_HUFF_VAL(2, 2), AC_HUFF_VAL(9, 1), AC_HUFF_VAL(0, 4), AC_HUFF_VAL(8, 1),
+ AC_HUFF_VAL(13, 1), AC_HUFF_VAL(0, 6), AC_HUFF_VAL(12, 1), AC_HUFF_VAL(11, 1), AC_HUFF_VAL(3, 2),
+ AC_HUFF_VAL(1, 3), AC_HUFF_VAL(0, 5), AC_HUFF_VAL(10, 1), AC_HUFF_VAL(16, 1), AC_HUFF_VAL(5, 2),
+ AC_HUFF_VAL(0, 7), AC_HUFF_VAL(2, 3), AC_HUFF_VAL(1, 4), AC_HUFF_VAL(15, 1), AC_HUFF_VAL(14, 1),
+ AC_HUFF_VAL(4, 2), AC_HUFF_VAL(0, 11), AC_HUFF_VAL(8, 2), AC_HUFF_VAL(4, 3), AC_HUFF_VAL(0, 10),
+ AC_HUFF_VAL(2, 4), AC_HUFF_VAL(7, 2), AC_HUFF_VAL(21, 1), AC_HUFF_VAL(20, 1), AC_HUFF_VAL(0, 9),
+ AC_HUFF_VAL(19, 1), AC_HUFF_VAL(18, 1), AC_HUFF_VAL(1, 5), AC_HUFF_VAL(3, 3), AC_HUFF_VAL(0, 8),
+ AC_HUFF_VAL(6, 2), AC_HUFF_VAL(17, 1), AC_HUFF_VAL(10, 2), AC_HUFF_VAL(9, 2), AC_HUFF_VAL(5, 3),
+ AC_HUFF_VAL(3, 4), AC_HUFF_VAL(2, 5), AC_HUFF_VAL(1, 7), AC_HUFF_VAL(1, 6), AC_HUFF_VAL(0, 15),
+ AC_HUFF_VAL(0, 14), AC_HUFF_VAL(0, 13), AC_HUFF_VAL(0, 12), AC_HUFF_VAL(26, 1), AC_HUFF_VAL(25, 1),
+ AC_HUFF_VAL(24, 1), AC_HUFF_VAL(23, 1), AC_HUFF_VAL(22, 1), AC_HUFF_VAL(0, 31), AC_HUFF_VAL(0, 30),
+ AC_HUFF_VAL(0, 29), AC_HUFF_VAL(0, 28), AC_HUFF_VAL(0, 27), AC_HUFF_VAL(0, 26), AC_HUFF_VAL(0, 25),
+ AC_HUFF_VAL(0, 24), AC_HUFF_VAL(0, 23), AC_HUFF_VAL(0, 22), AC_HUFF_VAL(0, 21), AC_HUFF_VAL(0, 20),
+ AC_HUFF_VAL(0, 19), AC_HUFF_VAL(0, 18), AC_HUFF_VAL(0, 17), AC_HUFF_VAL(0, 16), AC_HUFF_VAL(0, 40),
+ AC_HUFF_VAL(0, 39), AC_HUFF_VAL(0, 38), AC_HUFF_VAL(0, 37), AC_HUFF_VAL(0, 36), AC_HUFF_VAL(0, 35),
+ AC_HUFF_VAL(0, 34), AC_HUFF_VAL(0, 33), AC_HUFF_VAL(0, 32), AC_HUFF_VAL(1, 14), AC_HUFF_VAL(1, 13),
+ AC_HUFF_VAL(1, 12), AC_HUFF_VAL(1, 11), AC_HUFF_VAL(1, 10), AC_HUFF_VAL(1, 9), AC_HUFF_VAL(1, 8),
+ AC_HUFF_VAL(1, 18), AC_HUFF_VAL(1, 17), AC_HUFF_VAL(1, 16), AC_HUFF_VAL(1, 15), AC_HUFF_VAL(6, 3),
+ AC_HUFF_VAL(16, 2), AC_HUFF_VAL(15, 2), AC_HUFF_VAL(14, 2), AC_HUFF_VAL(13, 2), AC_HUFF_VAL(12, 2),
+ AC_HUFF_VAL(11, 2), AC_HUFF_VAL(31, 1), AC_HUFF_VAL(30, 1), AC_HUFF_VAL(29, 1), AC_HUFF_VAL(28, 1),
+ AC_HUFF_VAL(27, 1),
+
+ // Escape code
+ ESCAPE_CODE,
+ // End of block code
+ END_OF_BLOCK
+};
+
+PSXStreamDecoder::PSXStreamDecoder(CDSpeed speed, uint32 frameCount) : _nextFrameStartTime(0, speed), _frameCount(frameCount) {
+ _stream = 0;
+ _audStream = 0;
+ _surface = new Graphics::Surface();
+ _yBuffer = _cbBuffer = _crBuffer = 0;
+ _acHuffman = new Common::Huffman(0, AC_CODE_COUNT, s_huffmanACCodes, s_huffmanACLengths, s_huffmanACSymbols);
+ _dcHuffmanChroma = new Common::Huffman(0, DC_CODE_COUNT, s_huffmanDCChromaCodes, s_huffmanDCChromaLengths, s_huffmanDCSymbols);
+ _dcHuffmanLuma = new Common::Huffman(0, DC_CODE_COUNT, s_huffmanDCLumaCodes, s_huffmanDCLumaLengths, s_huffmanDCSymbols);
+}
+
+PSXStreamDecoder::~PSXStreamDecoder() {
+ close();
+ delete _surface;
+ delete _acHuffman;
+ delete _dcHuffmanLuma;
+ delete _dcHuffmanChroma;
+}
+
+#define RAW_CD_SECTOR_SIZE 2352
+
+#define CDXA_TYPE_MASK 0x0E
+#define CDXA_TYPE_DATA 0x08
+#define CDXA_TYPE_AUDIO 0x04
+#define CDXA_TYPE_VIDEO 0x02
+
+bool PSXStreamDecoder::loadStream(Common::SeekableReadStream *stream) {
+ close();
+
+ _stream = stream;
+
+ Common::SeekableReadStream *sector = readSector();
+
+ if (!sector) {
+ close();
+ return false;
+ }
+
+ // Rip out video info from the first frame
+ sector->seek(18);
+ byte sectorType = sector->readByte() & CDXA_TYPE_MASK;
+
+ if (sectorType != CDXA_TYPE_VIDEO && sectorType != CDXA_TYPE_DATA) {
+ close();
+ return false;
+ }
+
+ sector->seek(40);
+
+ uint16 width = sector->readUint16LE();
+ uint16 height = sector->readUint16LE();
+ _surface->create(width, height, g_system->getScreenFormat());
+
+ _macroBlocksW = (width + 15) / 16;
+ _macroBlocksH = (height + 15) / 16;
+ _yBuffer = new byte[_macroBlocksW * _macroBlocksH * 16 * 16];
+ _cbBuffer = new byte[_macroBlocksW * _macroBlocksH * 8 * 8];
+ _crBuffer = new byte[_macroBlocksW * _macroBlocksH * 8 * 8];
+
+ delete sector;
+ _stream->seek(0);
+
+ return true;
+}
+
+void PSXStreamDecoder::close() {
+ if (!_stream)
+ return;
+
+ delete _stream;
+ _stream = 0;
+
+ // Deinitialize sound
+ g_system->getMixer()->stopHandle(_audHandle);
+ _audStream = 0;
+
+ _surface->free();
+
+ memset(&_adpcmStatus, 0, sizeof(_adpcmStatus));
+
+ _macroBlocksW = _macroBlocksH = 0;
+ delete[] _yBuffer; _yBuffer = 0;
+ delete[] _cbBuffer; _cbBuffer = 0;
+ delete[] _crBuffer; _crBuffer = 0;
+
+ reset();
+}
+
+uint32 PSXStreamDecoder::getElapsedTime() const {
+ // TODO: Currently, the audio is always after the video so using this
+ // can often lead to gaps in the audio...
+ //if (_audStream)
+ // return _mixer->getSoundElapsedTime(_audHandle);
+
+ return VideoDecoder::getElapsedTime();
+}
+
+uint32 PSXStreamDecoder::getTimeToNextFrame() const {
+ if (!isVideoLoaded() || endOfVideo())
+ return 0;
+
+ uint32 nextTimeMillis = _nextFrameStartTime.msecs();
+ uint32 elapsedTime = getElapsedTime();
+
+ if (elapsedTime > nextTimeMillis)
+ return 0;
+
+ return nextTimeMillis - elapsedTime;
+}
+
+#define VIDEO_DATA_CHUNK_SIZE 2016
+#define VIDEO_DATA_HEADER_SIZE 56
+
+const Graphics::Surface *PSXStreamDecoder::decodeNextFrame() {
+ Common::SeekableReadStream *sector = 0;
+ byte *partialFrame = 0;
+ int sectorsRead = 0;
+
+ while (!endOfVideo()) {
+ sector = readSector();
+ sectorsRead++;
+
+ if (!sector)
+ error("Corrupt PSX stream sector");
+
+ sector->seek(0x11);
+ byte track = sector->readByte();
+ if (track >= 32)
+ error("Bad PSX stream track");
+
+ byte sectorType = sector->readByte() & CDXA_TYPE_MASK;
+
+ switch (sectorType) {
+ case CDXA_TYPE_DATA:
+ case CDXA_TYPE_VIDEO:
+ if (track == 1) {
+ sector->seek(28);
+ uint16 curSector = sector->readUint16LE();
+ uint16 sectorCount = sector->readUint16LE();
+ sector->readUint32LE();
+ uint16 frameSize = sector->readUint32LE();
+
+ if (curSector >= sectorCount)
+ error("Bad sector");
+
+ if (!partialFrame)
+ partialFrame = (byte *)malloc(sectorCount * VIDEO_DATA_CHUNK_SIZE);
+
+ sector->seek(VIDEO_DATA_HEADER_SIZE);
+ sector->read(partialFrame + curSector * VIDEO_DATA_CHUNK_SIZE, VIDEO_DATA_CHUNK_SIZE);
+
+ if (curSector == sectorCount - 1) {
+ // Done assembling the frame
+ Common::SeekableReadStream *frame = new Common::MemoryReadStream(partialFrame, frameSize, DisposeAfterUse::YES);
+
+ decodeFrame(frame);
+
+ delete frame;
+ delete sector;
+
+ _curFrame++;
+ if (_curFrame == 0)
+ _startTime = g_system->getMillis();
+
+ // Increase the time by the amount of sectors we read
+ // One may notice that this is still not the most precise
+ // method since a frame takes up the time its sectors took
+ // up instead of the amount of time it takes the next frame
+ // to be read from the sectors. The actual frame rate should
+ // be constant instead of variable, so the slight difference
+ // in a frame's showing time is negligible (1/150 of a second).
+ _nextFrameStartTime = _nextFrameStartTime.addFrames(sectorsRead);
+
+ return _surface;
+ }
+ } else
+ error("Unhandled multi-track video");
+ break;
+ case CDXA_TYPE_AUDIO:
+ // We only handle one audio channel so far
+ if (track == 1)
+ queueAudioFromSector(sector);
+ else
+ warning("Unhandled multi-track audio");
+ break;
+ default:
+ // This shows up way too often, but the other sectors
+ // are safe to ignore
+ //warning("Unknown PSX sector type 0x%x", sectorType);
+ break;
+ }
+
+ delete sector;
+ }
+
+ return 0;
+}
+
+static const byte s_syncHeader[12] = { 0x00, 0xff ,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 };
+
+Common::SeekableReadStream *PSXStreamDecoder::readSector() {
+ assert(_stream);
+
+ Common::SeekableReadStream *stream = _stream->readStream(RAW_CD_SECTOR_SIZE);
+
+ byte syncHeader[12];
+ stream->read(syncHeader, 12);
+ if (!memcmp(s_syncHeader, syncHeader, 12))
+ return stream;
+
+ return 0;
+}
+
+// Ha! It's palindromic!
+#define AUDIO_DATA_CHUNK_SIZE 2304
+#define AUDIO_DATA_SAMPLE_COUNT 4032
+
+static const int s_xaTable[5][2] = {
+ { 0, 0 },
+ { 60, 0 },
+ { 115, -52 },
+ { 98, -55 },
+ { 122, -60 }
+};
+
+void PSXStreamDecoder::queueAudioFromSector(Common::SeekableReadStream *sector) {
+ assert(sector);
+
+ if (!_audStream) {
+ // Initialize audio stream
+ sector->seek(19);
+ byte format = sector->readByte();
+
+ bool stereo = (format & (1 << 0)) != 0;
+ uint rate = (format & (1 << 2)) ? 18900 : 37800;
+
+ _audStream = Audio::makeQueuingAudioStream(rate, stereo);
+ g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &_audHandle, _audStream);
+ }
+
+ sector->seek(24);
+
+ // This XA audio is different (yet similar) from normal XA audio! Watch out!
+ // TODO: It's probably similar enough to normal XA that we can merge it somehow...
+ // TODO: RTZ PSX needs the same audio code in a regular AudioStream class. Probably
+ // will do something similar to QuickTime and creating a base class 'ISOMode2Parser'
+ // or something similar.
+ byte *buf = new byte[AUDIO_DATA_CHUNK_SIZE];
+ sector->read(buf, AUDIO_DATA_CHUNK_SIZE);
+
+ int channels = _audStream->isStereo() ? 2 : 1;
+ int16 *dst = new int16[AUDIO_DATA_SAMPLE_COUNT];
+ int16 *leftChannel = dst;
+ int16 *rightChannel = dst + 1;
+
+ for (byte *src = buf; src < buf + AUDIO_DATA_CHUNK_SIZE; src += 128) {
+ for (int i = 0; i < 4; i++) {
+ int shift = 12 - (src[4 + i * 2] & 0xf);
+ int filter = src[4 + i * 2] >> 4;
+ int f0 = s_xaTable[filter][0];
+ int f1 = s_xaTable[filter][1];
+ int16 s_1 = _adpcmStatus[0].sample[0];
+ int16 s_2 = _adpcmStatus[0].sample[1];
+
+ for (int j = 0; j < 28; j++) {
+ byte d = src[16 + i + j * 4];
+ int t = (int8)(d << 4) >> 4;
+ int s = (t << shift) + ((s_1 * f0 + s_2 * f1 + 32) >> 6);
+ s_2 = s_1;
+ s_1 = CLIP<int>(s, -32768, 32767);
+ *leftChannel = s_1;
+ leftChannel += channels;
+ }
+
+ if (channels == 2) {
+ _adpcmStatus[0].sample[0] = s_1;
+ _adpcmStatus[0].sample[1] = s_2;
+ s_1 = _adpcmStatus[1].sample[0];
+ s_2 = _adpcmStatus[1].sample[1];
+ }
+
+ shift = 12 - (src[5 + i * 2] & 0xf);
+ filter = src[5 + i * 2] >> 4;
+ f0 = s_xaTable[filter][0];
+ f1 = s_xaTable[filter][1];
+
+ for (int j = 0; j < 28; j++) {
+ byte d = src[16 + i + j * 4];
+ int t = (int8)d >> 4;
+ int s = (t << shift) + ((s_1 * f0 + s_2 * f1 + 32) >> 6);
+ s_2 = s_1;
+ s_1 = CLIP<int>(s, -32768, 32767);
+
+ if (channels == 2) {
+ *rightChannel = s_1;
+ rightChannel += 2;
+ } else {
+ *leftChannel++ = s_1;
+ }
+ }
+
+ if (channels == 2) {
+ _adpcmStatus[1].sample[0] = s_1;
+ _adpcmStatus[1].sample[1] = s_2;
+ } else {
+ _adpcmStatus[0].sample[0] = s_1;
+ _adpcmStatus[0].sample[1] = s_2;
+ }
+ }
+ }
+
+ int flags = Audio::FLAG_16BITS;
+
+ if (_audStream->isStereo())
+ flags |= Audio::FLAG_STEREO;
+
+#ifdef SCUMM_LITTLE_ENDIAN
+ flags |= Audio::FLAG_LITTLE_ENDIAN;
+#endif
+
+ _audStream->queueBuffer((byte *)dst, AUDIO_DATA_SAMPLE_COUNT * 2, DisposeAfterUse::YES, flags);
+ delete[] buf;
+}
+
+void PSXStreamDecoder::decodeFrame(Common::SeekableReadStream *frame) {
+ // A frame is essentially an MPEG-1 intra frame
+
+ Common::BitStream16LEMSB bits(frame);
+
+ bits.skip(16); // unknown
+ bits.skip(16); // 0x3800
+ uint16 scale = bits.getBits(16);
+ uint16 version = bits.getBits(16);
+
+ if (version != 2 && version != 3)
+ error("Unknown PSX stream frame version");
+
+ // Initalize default v3 DC here
+ _lastDC[0] = _lastDC[1] = _lastDC[2] = 0;
+
+ for (int mbX = 0; mbX < _macroBlocksW; mbX++)
+ for (int mbY = 0; mbY < _macroBlocksH; mbY++)
+ decodeMacroBlock(&bits, mbX, mbY, scale, version);
+
+ // Output data onto the frame
+ Graphics::convertYUV420ToRGB(_surface, _yBuffer, _cbBuffer, _crBuffer, _surface->w, _surface->h, _macroBlocksW * 16, _macroBlocksW * 8);
+}
+
+void PSXStreamDecoder::decodeMacroBlock(Common::BitStream *bits, int mbX, int mbY, uint16 scale, uint16 version) {
+ int pitchY = _macroBlocksW * 16;
+ int pitchC = _macroBlocksW * 8;
+
+ // Note the strange order of red before blue
+ decodeBlock(bits, _crBuffer + (mbY * pitchC + mbX) * 8, pitchC, scale, version, kPlaneV);
+ decodeBlock(bits, _cbBuffer + (mbY * pitchC + mbX) * 8, pitchC, scale, version, kPlaneU);
+ decodeBlock(bits, _yBuffer + (mbY * pitchY + mbX) * 16, pitchY, scale, version, kPlaneY);
+ decodeBlock(bits, _yBuffer + (mbY * pitchY + mbX) * 16 + 8, pitchY, scale, version, kPlaneY);
+ decodeBlock(bits, _yBuffer + (mbY * pitchY + mbX) * 16 + 8 * pitchY, pitchY, scale, version, kPlaneY);
+ decodeBlock(bits, _yBuffer + (mbY * pitchY + mbX) * 16 + 8 * pitchY + 8, pitchY, scale, version, kPlaneY);
+}
+
+// Standard JPEG/MPEG zig zag table
+static const byte s_zigZagTable[8 * 8] = {
+ 0, 1, 5, 6, 14, 15, 27, 28,
+ 2, 4, 7, 13, 16, 26, 29, 42,
+ 3, 8, 12, 17, 25, 30, 41, 43,
+ 9, 11, 18, 24, 31, 40, 44, 53,
+ 10, 19, 23, 32, 39, 45, 52, 54,
+ 20, 22, 33, 38, 46, 51, 55, 60,
+ 21, 34, 37, 47, 50, 56, 59, 61,
+ 35, 36, 48, 49, 57, 58, 62, 63
+};
+
+// One byte different from the standard MPEG-1 table
+static const byte s_quantizationTable[8 * 8] = {
+ 2, 16, 19, 22, 26, 27, 29, 34,
+ 16, 16, 22, 24, 27, 29, 34, 37,
+ 19, 22, 26, 27, 29, 34, 34, 38,
+ 22, 22, 26, 27, 29, 34, 37, 40,
+ 22, 26, 27, 29, 32, 35, 40, 48,
+ 26, 27, 29, 32, 35, 40, 48, 58,
+ 26, 27, 29, 34, 38, 46, 56, 69,
+ 27, 29, 35, 38, 46, 56, 69, 83
+};
+
+void PSXStreamDecoder::dequantizeBlock(int *coefficients, float *block, uint16 scale) {
+ // Dequantize the data, un-zig-zagging as we go along
+ for (int i = 0; i < 8 * 8; i++) {
+ if (i == 0) // Special case for the DC coefficient
+ block[i] = coefficients[i] * s_quantizationTable[i];
+ else
+ block[i] = (float)coefficients[s_zigZagTable[i]] * s_quantizationTable[i] * scale / 8;
+ }
+}
+
+int PSXStreamDecoder::readDC(Common::BitStream *bits, uint16 version, PlaneType plane) {
+ // Version 2 just has its coefficient as 10-bits
+ if (version == 2)
+ return readSignedCoefficient(bits);
+
+ // Version 3 has it stored as huffman codes as a difference from the previous DC value
+
+ Common::Huffman *huffman = (plane == kPlaneY) ? _dcHuffmanLuma : _dcHuffmanChroma;
+
+ uint32 symbol = huffman->getSymbol(*bits);
+ int dc = 0;
+
+ if (GET_DC_BITS(symbol) != 0) {
+ bool negative = (bits->getBit() == 0);
+ dc = bits->getBits(GET_DC_BITS(symbol) - 1);
+
+ if (negative)
+ dc -= GET_DC_NEG(symbol);
+ else
+ dc += GET_DC_POS(symbol);
+ }
+
+ _lastDC[plane] += dc * 4; // convert from 8-bit to 10-bit
+ return _lastDC[plane];
+}
+
+#define BLOCK_OVERFLOW_CHECK() \
+ if (count > 63) \
+ error("PSXStreamDecoder::readAC(): Too many coefficients")
+
+void PSXStreamDecoder::readAC(Common::BitStream *bits, int *block) {
+ // Clear the block first
+ for (int i = 0; i < 63; i++)
+ block[i] = 0;
+
+ int count = 0;
+
+ while (!bits->eos()) {
+ uint32 symbol = _acHuffman->getSymbol(*bits);
+
+ if (symbol == ESCAPE_CODE) {
+ // The escape code!
+ int zeroes = bits->getBits(6);
+ count += zeroes + 1;
+ BLOCK_OVERFLOW_CHECK();
+ block += zeroes;
+ *block++ = readSignedCoefficient(bits);
+ } else if (symbol == END_OF_BLOCK) {
+ // We're done
+ break;
+ } else {
+ // Normal huffman code
+ int zeroes = GET_AC_ZERO_RUN(symbol);
+ count += zeroes + 1;
+ BLOCK_OVERFLOW_CHECK();
+ block += zeroes;
+
+ if (bits->getBit())
+ *block++ = -GET_AC_COEFFICIENT(symbol);
+ else
+ *block++ = GET_AC_COEFFICIENT(symbol);
+ }
+ }
+}
+
+int PSXStreamDecoder::readSignedCoefficient(Common::BitStream *bits) {
+ uint val = bits->getBits(10);
+
+ // extend the sign
+ uint shift = 8 * sizeof(int) - 10;
+ return (int)(val << shift) >> shift;
+}
+
+// IDCT table built with :
+// _idct8x8[x][y] = cos(((2 * x + 1) * y) * (M_PI / 16.0)) * 0.5;
+// _idct8x8[x][y] /= sqrt(2.0) if y == 0
+static const double s_idct8x8[8][8] = {
+ { 0.353553390593274, 0.490392640201615, 0.461939766255643, 0.415734806151273, 0.353553390593274, 0.277785116509801, 0.191341716182545, 0.097545161008064 },
+ { 0.353553390593274, 0.415734806151273, 0.191341716182545, -0.097545161008064, -0.353553390593274, -0.490392640201615, -0.461939766255643, -0.277785116509801 },
+ { 0.353553390593274, 0.277785116509801, -0.191341716182545, -0.490392640201615, -0.353553390593274, 0.097545161008064, 0.461939766255643, 0.415734806151273 },
+ { 0.353553390593274, 0.097545161008064, -0.461939766255643, -0.277785116509801, 0.353553390593274, 0.415734806151273, -0.191341716182545, -0.490392640201615 },
+ { 0.353553390593274, -0.097545161008064, -0.461939766255643, 0.277785116509801, 0.353553390593274, -0.415734806151273, -0.191341716182545, 0.490392640201615 },
+ { 0.353553390593274, -0.277785116509801, -0.191341716182545, 0.490392640201615, -0.353553390593273, -0.097545161008064, 0.461939766255643, -0.415734806151273 },
+ { 0.353553390593274, -0.415734806151273, 0.191341716182545, 0.097545161008064, -0.353553390593274, 0.490392640201615, -0.461939766255643, 0.277785116509801 },
+ { 0.353553390593274, -0.490392640201615, 0.461939766255643, -0.415734806151273, 0.353553390593273, -0.277785116509801, 0.191341716182545, -0.097545161008064 }
+};
+
+void PSXStreamDecoder::idct(float *dequantData, float *result) {
+ // IDCT code based on JPEG's IDCT code
+ // TODO: Switch to the integer-based one mentioned in the docs
+ // This is by far the costliest operation here
+
+ float tmp[8 * 8];
+
+ // Apply 1D IDCT to rows
+ for (int y = 0; y < 8; y++) {
+ for (int x = 0; x < 8; x++) {
+ tmp[y + x * 8] = dequantData[0] * s_idct8x8[x][0]
+ + dequantData[1] * s_idct8x8[x][1]
+ + dequantData[2] * s_idct8x8[x][2]
+ + dequantData[3] * s_idct8x8[x][3]
+ + dequantData[4] * s_idct8x8[x][4]
+ + dequantData[5] * s_idct8x8[x][5]
+ + dequantData[6] * s_idct8x8[x][6]
+ + dequantData[7] * s_idct8x8[x][7];
+ }
+
+ dequantData += 8;
+ }
+
+ // Apply 1D IDCT to columns
+ for (int x = 0; x < 8; x++) {
+ const float *u = tmp + x * 8;
+ for (int y = 0; y < 8; y++) {
+ result[y * 8 + x] = u[0] * s_idct8x8[y][0]
+ + u[1] * s_idct8x8[y][1]
+ + u[2] * s_idct8x8[y][2]
+ + u[3] * s_idct8x8[y][3]
+ + u[4] * s_idct8x8[y][4]
+ + u[5] * s_idct8x8[y][5]
+ + u[6] * s_idct8x8[y][6]
+ + u[7] * s_idct8x8[y][7];
+ }
+ }
+}
+
+void PSXStreamDecoder::decodeBlock(Common::BitStream *bits, byte *block, int pitch, uint16 scale, uint16 version, PlaneType plane) {
+ // Version 2 just has signed 10 bits for DC
+ // Version 3 has them huffman coded
+ int coefficients[8 * 8];
+ coefficients[0] = readDC(bits, version, plane);
+ readAC(bits, &coefficients[1]); // Read in the AC
+
+ // Dequantize
+ float dequantData[8 * 8];
+ dequantizeBlock(coefficients, dequantData, scale);
+
+ // Perform IDCT
+ float idctData[8 * 8];
+ idct(dequantData, idctData);
+
+ // Now output the data
+ for (int y = 0; y < 8; y++) {
+ byte *start = block + pitch * y;
+
+ // Convert the result to be in the range [0, 255]
+ for (int x = 0; x < 8; x++)
+ *start++ = (int)CLIP<float>(idctData[y * 8 + x], -128.0f, 127.0f) + 128;
+ }
+}
+
+} // End of namespace Video
diff --git a/video/psx_decoder.h b/video/psx_decoder.h
new file mode 100644
index 0000000000..c8ad92c45a
--- /dev/null
+++ b/video/psx_decoder.h
@@ -0,0 +1,128 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef VIDEO_PSX_DECODER_H
+#define VIDEO_PSX_DECODER_H
+
+#include "common/endian.h"
+#include "common/rational.h"
+#include "common/rect.h"
+#include "common/str.h"
+#include "graphics/surface.h"
+#include "video/video_decoder.h"
+
+namespace Audio {
+class QueuingAudioStream;
+}
+
+namespace Common {
+class BitStream;
+class Huffman;
+class SeekableReadStream;
+}
+
+namespace Graphics {
+struct PixelFormat;
+}
+
+namespace Video {
+
+/**
+ * Decoder for PSX stream videos.
+ * This currently implements the most basic PSX stream format that is
+ * used by most games on the system. Special variants are not supported
+ * at this time.
+ *
+ * Video decoder used in engines:
+ * - sword1 (psx)
+ * - sword2 (psx)
+ */
+class PSXStreamDecoder : public VideoDecoder {
+public:
+ // CD speed in sectors/second
+ // Calling code should use these enum values instead of the constants
+ enum CDSpeed {
+ kCD1x = 75,
+ kCD2x = 150
+ };
+
+ PSXStreamDecoder(CDSpeed speed, uint32 frameCount = 0);
+ virtual ~PSXStreamDecoder();
+
+ bool loadStream(Common::SeekableReadStream *stream);
+ void close();
+
+ bool isVideoLoaded() const { return _stream != 0; }
+ uint16 getWidth() const { return _surface->w; }
+ uint16 getHeight() const { return _surface->h; }
+ uint32 getFrameCount() const { return _frameCount; }
+ uint32 getElapsedTime() const;
+ uint32 getTimeToNextFrame() const;
+ const Graphics::Surface *decodeNextFrame();
+ Graphics::PixelFormat getPixelFormat() const { return _surface->format; }
+ bool endOfVideo() const { return _stream->pos() >= _stream->size(); }
+
+private:
+ void initCommon();
+ Common::SeekableReadStream *_stream;
+ Graphics::Surface *_surface;
+
+ uint32 _frameCount;
+ Audio::Timestamp _nextFrameStartTime;
+
+ Audio::SoundHandle _audHandle;
+ Audio::QueuingAudioStream *_audStream;
+ void queueAudioFromSector(Common::SeekableReadStream *sector);
+
+ enum PlaneType {
+ kPlaneY = 0,
+ kPlaneU = 1,
+ kPlaneV = 2
+ };
+
+ uint16 _macroBlocksW, _macroBlocksH;
+ byte *_yBuffer, *_cbBuffer, *_crBuffer;
+ void decodeFrame(Common::SeekableReadStream *frame);
+ void decodeMacroBlock(Common::BitStream *bits, int mbX, int mbY, uint16 scale, uint16 version);
+ void decodeBlock(Common::BitStream *bits, byte *block, int pitch, uint16 scale, uint16 version, PlaneType plane);
+
+ void readAC(Common::BitStream *bits, int *block);
+ Common::Huffman *_acHuffman;
+
+ int readDC(Common::BitStream *bits, uint16 version, PlaneType plane);
+ Common::Huffman *_dcHuffmanLuma, *_dcHuffmanChroma;
+ int _lastDC[3];
+
+ void dequantizeBlock(int *coefficients, float *block, uint16 scale);
+ void idct(float *dequantData, float *result);
+ int readSignedCoefficient(Common::BitStream *bits);
+
+ struct ADPCMStatus {
+ int16 sample[2];
+ } _adpcmStatus[2];
+
+ Common::SeekableReadStream *readSector();
+};
+
+} // End of namespace Video
+
+#endif