aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicola Mettifogo2007-08-11 13:07:21 +0000
committerNicola Mettifogo2007-08-11 13:07:21 +0000
commit8c2ae45ab443ac4b9d3d21341fbb74b44858fd8f (patch)
tree662ffb2e86c5781225e78122700b5a638dcce9be
parent2c6c654435d94b523ac458fc18ebce46fdce1c21 (diff)
downloadscummvm-rg350-8c2ae45ab443ac4b9d3d21341fbb74b44858fd8f.tar.gz
scummvm-rg350-8c2ae45ab443ac4b9d3d21341fbb74b44858fd8f.tar.bz2
scummvm-rg350-8c2ae45ab443ac4b9d3d21341fbb74b44858fd8f.zip
Overhaul of background/mask/path handling:
- added new BackgroundInfo structure - added helper functions to aid management of BackgroundInfo. Engine is now responsible for allocation/deallocation. - simplified loading and handling of background resources. svn-id: r28524
-rw-r--r--engines/parallaction/disk.h29
-rw-r--r--engines/parallaction/disk_br.cpp8
-rw-r--r--engines/parallaction/disk_ns.cpp126
-rw-r--r--engines/parallaction/graphics.cpp20
-rw-r--r--engines/parallaction/location.cpp63
-rw-r--r--engines/parallaction/menu.cpp26
-rw-r--r--engines/parallaction/parallaction.cpp8
-rw-r--r--engines/parallaction/parallaction.h19
-rw-r--r--engines/parallaction/walk.cpp5
9 files changed, 154 insertions, 150 deletions
diff --git a/engines/parallaction/disk.h b/engines/parallaction/disk.h
index d1bb404739..a52e9e1981 100644
--- a/engines/parallaction/disk.h
+++ b/engines/parallaction/disk.h
@@ -39,6 +39,7 @@ class Script;
class Font;
struct Cnv;
+struct BackgroundInfo;
class Disk {
@@ -58,8 +59,8 @@ public:
virtual Font* loadFont(const char* name) = 0;
virtual Graphics::Surface* loadStatic(const char* name) = 0;
virtual Cnv* loadFrames(const char* name) = 0;
- virtual void loadSlide(const char *filename) = 0;
- virtual void loadScenery(const char* background, const char* mask) = 0;
+ virtual BackgroundInfo* loadSlide(const char *filename) = 0;
+ virtual BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path) = 0;
virtual Table* loadTable(const char* name) = 0;
virtual Common::SeekableReadStream* loadMusic(const char* name) = 0;
virtual Common::ReadStream* loadSound(const char* name) = 0;
@@ -128,10 +129,10 @@ private:
Cnv* loadExternalCnv(const char *filename);
Cnv* loadCnv(const char *filename);
Graphics::Surface *loadExternalStaticCnv(const char *filename);
- void loadBackground(const char *filename);
- void loadMaskAndPath(const char *name);
+ BackgroundInfo* loadBackground(const char *filename);
+ void loadMaskAndPath(const char *name, BackgroundInfo *info);
void parseDepths(Common::SeekableReadStream &stream);
- void parseBackground(Common::SeekableReadStream &stream);
+ void parseBackground(Common::SeekableReadStream &stream, BackgroundInfo *info);
Font *createFont(const char *name, Cnv* cnv);
protected:
@@ -150,8 +151,8 @@ public:
Font* loadFont(const char* name);
Graphics::Surface* loadStatic(const char* name);
Cnv* loadFrames(const char* name);
- void loadSlide(const char *filename);
- void loadScenery(const char* background, const char* mask);
+ BackgroundInfo* loadSlide(const char *filename);
+ BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
Table* loadTable(const char* name);
Common::SeekableReadStream* loadMusic(const char* name);
Common::ReadStream* loadSound(const char* name);
@@ -167,9 +168,9 @@ protected:
void unpackBitmap(byte *dst, byte *src, uint16 numFrames, uint16 bytesPerPlane, uint16 height);
Common::SeekableReadStream *openArchivedFile(const char* name, bool errorOnFileNotFound = false);
Font *createFont(const char *name, Common::SeekableReadStream &stream);
- void loadMask(const char *name);
- void loadPath(const char *name);
- void loadBackground(const char *name);
+ void loadMask(const char *name, BackgroundInfo* info);
+ void loadPath(const char *name, BackgroundInfo* info);
+ BackgroundInfo* loadBackground(const char *name);
public:
AmigaDisk_ns(Parallaction *vm);
@@ -184,8 +185,8 @@ public:
Font* loadFont(const char* name);
Graphics::Surface* loadStatic(const char* name);
Cnv* loadFrames(const char* name);
- void loadSlide(const char *filename);
- void loadScenery(const char* background, const char* mask);
+ BackgroundInfo* loadSlide(const char *filename);
+ BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
Table* loadTable(const char* name);
Common::SeekableReadStream* loadMusic(const char* name);
Common::ReadStream* loadSound(const char* name);
@@ -218,8 +219,8 @@ public:
Font* loadFont(const char* name);
Graphics::Surface* loadStatic(const char* name);
Cnv* loadFrames(const char* name);
- void loadSlide(const char *filename);
- void loadScenery(const char* background, const char* mask);
+ BackgroundInfo* loadSlide(const char *filename);
+ BackgroundInfo* loadScenery(const char* background, const char* mask, const char* path);
Table* loadTable(const char* name);
Common::SeekableReadStream* loadMusic(const char* name);
Common::ReadStream* loadSound(const char* name);
diff --git a/engines/parallaction/disk_br.cpp b/engines/parallaction/disk_br.cpp
index 900a025756..dbdd308ad4 100644
--- a/engines/parallaction/disk_br.cpp
+++ b/engines/parallaction/disk_br.cpp
@@ -133,15 +133,15 @@ Cnv* DosDisk_br::loadFrames(const char* name) {
// there are no Slide resources in Big Red Adventure
-void DosDisk_br::loadSlide(const char *name) {
+BackgroundInfo* DosDisk_br::loadSlide(const char *name) {
debugC(5, kDebugDisk, "DosDisk_br::loadSlide");
- return;
+ return 0;
}
-void DosDisk_br::loadScenery(const char *name, const char *mask) {
+BackgroundInfo* DosDisk_br::loadScenery(const char *name, const char *mask, const char* path) {
debugC(5, kDebugDisk, "DosDisk_br::loadScenery");
- return;
+ return 0;
}
Table* DosDisk_br::loadTable(const char* name) {
diff --git a/engines/parallaction/disk_ns.cpp b/engines/parallaction/disk_ns.cpp
index 6506ddd2ac..cfcb9552e4 100644
--- a/engines/parallaction/disk_ns.cpp
+++ b/engines/parallaction/disk_ns.cpp
@@ -562,7 +562,7 @@ void DosDisk_ns::parseDepths(Common::SeekableReadStream &stream) {
}
-void DosDisk_ns::parseBackground(Common::SeekableReadStream &stream) {
+void DosDisk_ns::parseBackground(Common::SeekableReadStream &stream, BackgroundInfo *info) {
byte tmp[3];
@@ -570,11 +570,9 @@ void DosDisk_ns::parseBackground(Common::SeekableReadStream &stream) {
tmp[0] = stream.readByte();
tmp[1] = stream.readByte();
tmp[2] = stream.readByte();
- _vm->_gfx->_palette.setEntry(i, tmp[0], tmp[1], tmp[2]);
+ info->palette.setEntry(i, tmp[0], tmp[1], tmp[2]);
}
- _vm->_gfx->setPalette(_vm->_gfx->_palette);
-
parseDepths(stream);
for (uint32 _si = 0; _si < 6; _si++) {
@@ -587,30 +585,25 @@ void DosDisk_ns::parseBackground(Common::SeekableReadStream &stream) {
}
-void DosDisk_ns::loadBackground(const char *filename) {
+BackgroundInfo* DosDisk_ns::loadBackground(const char *filename) {
if (!_resArchive.openArchivedFile(filename))
errorFileNotFound(filename);
- parseBackground(_resArchive);
-
- Graphics::Surface *bg = new Graphics::Surface;
- bg->create(_vm->_screenWidth, _vm->_screenHeight, 1);
+ BackgroundInfo *info = new BackgroundInfo;
+ info->width = _vm->_screenWidth; // 320
+ info->height = _vm->_screenHeight; // 200
- MaskBuffer *mask = new MaskBuffer;
- mask->create(_vm->_screenWidth, _vm->_screenHeight);
+ parseBackground(_resArchive, info);
- PathBuffer *path = new PathBuffer;
- path->create(_vm->_screenWidth, _vm->_screenHeight);
+ info->bg.create(info->width, info->height, 1);
+ info->mask.create(info->width, info->height);
+ info->path.create(info->width, info->height);
Graphics::PackBitsReadStream stream(_resArchive);
- unpackBackground(&stream, (byte*)bg->pixels, mask->data, path->data);
+ unpackBackground(&stream, (byte*)info->bg.pixels, info->mask.data, info->path.data);
- _vm->_gfx->setBackground(bg);
- _vm->_gfx->setMask(mask);
- _vm->setPath(path);
-
- return;
+ return info;
}
//
@@ -619,46 +612,41 @@ void DosDisk_ns::loadBackground(const char *filename) {
// mask and path are normally combined (via OR) into the background picture itself
// read the comment on the top of this file for more
//
-void DosDisk_ns::loadMaskAndPath(const char *name) {
+void DosDisk_ns::loadMaskAndPath(const char *name, BackgroundInfo *info) {
char path[PATH_LEN];
sprintf(path, "%s.msk", name);
if (!_resArchive.openArchivedFile(path))
errorFileNotFound(name);
- MaskBuffer *mask = new MaskBuffer;
- mask->create(_vm->_screenWidth, _vm->_screenHeight);
-
- PathBuffer *pathBuf = new PathBuffer;
- pathBuf->create(_vm->_screenWidth, _vm->_screenHeight);
-
parseDepths(_resArchive);
- _resArchive.read(pathBuf->data, pathBuf->size);
- _resArchive.read(mask->data, mask->size);
+ info->path.create(info->width, info->height);
+ _resArchive.read(info->path.data, info->path.size);
- _vm->_gfx->setMask(mask);
- _vm->setPath(pathBuf);
+ info->mask.create(info->width, info->height);
+ _resArchive.read(info->mask.data, info->mask.size);
return;
}
-void DosDisk_ns::loadSlide(const char *filename) {
+BackgroundInfo* DosDisk_ns::loadSlide(const char *filename) {
char path[PATH_LEN];
sprintf(path, "%s.slide", filename);
- loadBackground(path);
+ return loadBackground(path);
}
-void DosDisk_ns::loadScenery(const char *name, const char *mask) {
- char path[PATH_LEN];
- sprintf(path, "%s.dyn", name);
- loadBackground(path);
+BackgroundInfo* DosDisk_ns::loadScenery(const char *name, const char *mask, const char* path) {
+ char filename[PATH_LEN];
+ sprintf(filename, "%s.dyn", name);
+ BackgroundInfo *info = loadBackground(filename);
if (mask != NULL) {
// load external masks and paths only for certain locations
- loadMaskAndPath(mask);
+ loadMaskAndPath(mask, info);
}
+ return info;
}
Table* DosDisk_ns::loadTable(const char* name) {
@@ -1188,15 +1176,20 @@ public:
};
-void AmigaDisk_ns::loadBackground(const char *name) {
+BackgroundInfo* AmigaDisk_ns::loadBackground(const char *name) {
Common::SeekableReadStream *s = openArchivedFile(name, true);
- Graphics::Surface *surf = new Graphics::Surface;
byte *pal;
- BackgroundDecoder decoder(*s, *surf, pal, _vm->_gfx->_palettefx);
+
+ BackgroundInfo* info = new BackgroundInfo;
+
+ BackgroundDecoder decoder(*s, info->bg, pal, _vm->_gfx->_palettefx);
decoder.decode();
+ info->width = info->bg.w;
+ info->height = info->bg.h;
+
byte *p = pal;
for (uint i = 0; i < 32; i++) {
byte r = *p >> 2;
@@ -1205,21 +1198,18 @@ void AmigaDisk_ns::loadBackground(const char *name) {
p++;
byte b = *p >> 2;
p++;
- _vm->_gfx->_palette.setEntry(i, r, g, b);
-
+ info->palette.setEntry(i, r, g, b);
}
free(pal);
- _vm->_gfx->setPalette(_vm->_gfx->_palette);
- _vm->_gfx->setBackground(surf);
delete s;
- return;
+ return info;
}
-void AmigaDisk_ns::loadMask(const char *name) {
+void AmigaDisk_ns::loadMask(const char *name, BackgroundInfo* info) {
debugC(5, kDebugDisk, "AmigaDisk_ns::loadMask(%s)", name);
char path[PATH_LEN];
@@ -1248,18 +1238,16 @@ void AmigaDisk_ns::loadMask(const char *name) {
s->seek(0x126, SEEK_SET); // HACK: skipping IFF/ILBM header should be done by analysis, not magic
Graphics::PackBitsReadStream stream(*s);
- MaskBuffer *mask = new MaskBuffer;
- mask->create(_vm->_screenWidth, _vm->_screenHeight);
- stream.read(mask->data, mask->size);
- buildMask(mask->data);
- _vm->_gfx->setMask(mask);
+ info->mask.create(info->width, info->height);
+ stream.read(info->mask.data, info->mask.size);
+ buildMask(info->mask.data);
delete s;
return;
}
-void AmigaDisk_ns::loadPath(const char *name) {
+void AmigaDisk_ns::loadPath(const char *name, BackgroundInfo* info) {
char path[PATH_LEN];
sprintf(path, "%s.path", name);
@@ -1273,49 +1261,49 @@ void AmigaDisk_ns::loadPath(const char *name) {
Graphics::PackBitsReadStream stream(*s);
- PathBuffer *buf = new PathBuffer;
- buf->create(_vm->_screenWidth, _vm->_screenHeight);
- stream.read(buf->data, buf->size);
- _vm->setPath(buf);
+ info->path.create(info->width, info->height);
+ stream.read(info->path.data, info->path.size);
delete s;
return;
}
-void AmigaDisk_ns::loadScenery(const char* background, const char* mask) {
+BackgroundInfo* AmigaDisk_ns::loadScenery(const char* background, const char* mask, const char* path) {
debugC(1, kDebugDisk, "AmigaDisk_ns::loadScenery '%s', '%s'", background, mask);
- char path[PATH_LEN];
- sprintf(path, "%s.bkgnd", background);
+ char filename[PATH_LEN];
+ sprintf(filename, "%s.bkgnd", background);
- loadBackground(path);
+ BackgroundInfo* info = loadBackground(filename);
if (mask == NULL) {
- loadMask(background);
- loadPath(background);
+ loadMask(background, info);
+ loadPath(background, info);
} else {
- loadMask(mask);
- loadPath(mask);
+ loadMask(mask, info);
+ loadPath(mask, info);
}
- return;
+ return info;
}
-void AmigaDisk_ns::loadSlide(const char *name) {
+BackgroundInfo* AmigaDisk_ns::loadSlide(const char *name) {
debugC(1, kDebugDisk, "AmigaDisk_ns::loadSlide '%s'", name);
char path[PATH_LEN];
sprintf(path, "slides/%s", name);
Common::SeekableReadStream *s = openArchivedFile(path, false);
+
+ BackgroundInfo *info;
if (s)
- loadBackground(path);
+ info = loadBackground(path);
else
- loadBackground(name);
+ info = loadBackground(name);
delete s;
- return;
+ return info;
}
Cnv* AmigaDisk_ns::loadFrames(const char* name) {
diff --git a/engines/parallaction/graphics.cpp b/engines/parallaction/graphics.cpp
index 80185ef73d..536ac76583 100644
--- a/engines/parallaction/graphics.cpp
+++ b/engines/parallaction/graphics.cpp
@@ -765,21 +765,11 @@ void Gfx::restoreBackground(const Common::Rect& r) {
void Gfx::setBackground(Graphics::Surface *surface) {
- if (_buffers[kBit2]) {
- _buffers[kBit2]->free();
- delete _buffers[kBit2];
- }
-
_buffers[kBit2] = surface;
copyScreen(kBit2, kBitBack);
}
void Gfx::setMask(MaskBuffer *buffer) {
- if (_depthMask) {
- _depthMask->free();
- delete _depthMask;
- }
-
_depthMask = buffer;
}
@@ -882,21 +872,11 @@ Gfx::Gfx(Parallaction* vm) :
Gfx::~Gfx() {
- if (_depthMask) {
- _depthMask->free();
- delete _depthMask;
- }
-
_buffers[kBitFront]->free();
delete _buffers[kBitFront];
_buffers[kBitBack]->free();
delete _buffers[kBitBack];
- if (_buffers[kBit2]) {
- _buffers[kBit2]->free();
- delete _buffers[kBit2];
- }
-
delete _fonts[kFontDialogue];
delete _fonts[kFontLabel];
delete _fonts[kFontMenu];
diff --git a/engines/parallaction/location.cpp b/engines/parallaction/location.cpp
index 9961a41652..a03c948ae8 100644
--- a/engines/parallaction/location.cpp
+++ b/engines/parallaction/location.cpp
@@ -235,6 +235,39 @@ void Parallaction::parseWalkNodes(Script& script, WalkNodeList &list) {
}
+void Parallaction::freeBackground() {
+
+ if (!_backgroundInfo)
+ return;
+
+ _backgroundInfo->bg.free();
+ _backgroundInfo->mask.free();
+ _backgroundInfo->path.free();
+ delete _backgroundInfo;
+
+ _backgroundInfo = 0;
+
+}
+
+void Parallaction::setBackground(const char *background, const char *mask, const char *path) {
+
+ freeBackground();
+
+ _backgroundInfo = _disk->loadScenery(background, mask, path);
+
+ _gfx->setPalette(_backgroundInfo->palette);
+ _gfx->_palette.clone(_backgroundInfo->palette);
+ _gfx->setBackground(&_backgroundInfo->bg);
+
+ if (_backgroundInfo->mask.data)
+ _gfx->setMask(&_backgroundInfo->mask);
+
+ if (_backgroundInfo->path.data)
+ setPath(&_backgroundInfo->path);
+
+ return;
+}
+
void Parallaction::switchBackground(const char* background, const char* mask) {
// printf("switchBackground(%s)", name);
@@ -253,7 +286,7 @@ void Parallaction::switchBackground(const char* background, const char* mask) {
_gfx->updateScreen();
}
- _disk->loadScenery(background, mask);
+ setBackground(background, mask, mask);
return;
}
@@ -264,20 +297,21 @@ extern Job *_jEraseLabel;
void Parallaction::showSlide(const char *name) {
- _disk->loadSlide(name);
- _gfx->setPalette(_gfx->_palette);
- _gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
-
- debugC(1, kDebugLocation, "changeLocation: new background set");
+ BackgroundInfo *info;
- _gfx->setFont(kFontMenu);
+ info = _disk->loadSlide(name);
- _gfx->displayCenteredString(14, _slideText[0]); // displays text on screen
- _gfx->updateScreen();
-
- waitUntilLeftClick();
+ // TODO: avoid using screen buffers for displaying slides. Using a generic buffer
+ // allows for positioning of graphics as needed by Big Red Adventure.
+ // The main problem lies with menu, which relies on multiple buffers, mainly because
+ // it is crappy code.
+ _gfx->setBackground(&info->bg);
+ _gfx->setPalette(info->palette);
+ _gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
- debugC(2, kDebugLocation, "changeLocation: intro text shown");
+ info->bg.free();
+ info->mask.free();
+ info->path.free();
return;
}
@@ -340,6 +374,11 @@ void Parallaction::changeLocation(char *location) {
if (list.size() > 1) {
if (list[1] == "slide") {
showSlide(list[0].c_str());
+ _gfx->setFont(kFontMenu);
+ _gfx->displayCenteredString(14, _slideText[0]); // displays text on screen
+ _gfx->updateScreen();
+ waitUntilLeftClick();
+
list.remove_at(0); // removes slide name
list.remove_at(0); // removes 'slide'
}
diff --git a/engines/parallaction/menu.cpp b/engines/parallaction/menu.cpp
index ed065b4ae4..9718843bfc 100644
--- a/engines/parallaction/menu.cpp
+++ b/engines/parallaction/menu.cpp
@@ -128,15 +128,11 @@ void Menu::start() {
void Menu::splash() {
- _vm->_disk->loadSlide("intro");
- _vm->_gfx->setPalette(_vm->_gfx->_palette);
- _vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
+ _vm->showSlide("intro");
_vm->_gfx->updateScreen();
g_system->delayMillis(2000);
- _vm->_disk->loadSlide("minintro");
- _vm->_gfx->setPalette(_vm->_gfx->_palette);
- _vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
+ _vm->showSlide("minintro");
_vm->_gfx->updateScreen();
g_system->delayMillis(2000);
@@ -155,8 +151,8 @@ void Menu::newGame() {
_vm->_disk->selectArchive("disk1");
- _vm->_disk->loadScenery("test", NULL);
- _vm->_gfx->setPalette(_vm->_gfx->_palette);
+ _vm->setBackground("test", NULL, NULL);
+
_vm->_gfx->swapBuffers();
_vm->_gfx->displayCenteredString(50, v14[0]);
@@ -200,11 +196,7 @@ uint16 Menu::chooseLanguage() {
}
// user can choose language in dos version
-
- _vm->_disk->loadSlide("lingua");
- _vm->_gfx->setPalette(_vm->_gfx->_palette);
- _vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
-
+ _vm->showSlide("lingua");
_vm->_gfx->displayString(60, 30, "SELECT LANGUAGE", 1);
_vm->changeCursor(kCursorArrow);
@@ -260,8 +252,7 @@ uint16 Menu::selectGame() {
return 0; // can't load a savegame in demo versions
}
- _vm->_disk->loadSlide("restore");
- _vm->_gfx->setPalette(_vm->_gfx->_palette);
+ _vm->showSlide("restore");
uint16 _si = 0;
uint16 _di = 3;
@@ -353,10 +344,7 @@ void Menu::selectCharacter() {
_vm->_disk->selectArchive((_vm->getFeatures() & GF_LANG_MULT) ? "disk1" : "disk0");
- _vm->_disk->loadSlide("password"); // loads background into kBitBack buffer
- _vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront); //
-
- _vm->_gfx->setPalette(_vm->_gfx->_palette);
+ _vm->showSlide("password"); // loads background into kBitBack buffer
while (true) {
diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp
index 35e29351ca..51811e3078 100644
--- a/engines/parallaction/parallaction.cpp
+++ b/engines/parallaction/parallaction.cpp
@@ -123,6 +123,8 @@ Parallaction::Parallaction(OSystem *syst) :
Parallaction::~Parallaction() {
delete _debugger;
+ freeBackground();
+
delete _globalTable;
delete _callableNames;
@@ -131,11 +133,6 @@ Parallaction::~Parallaction() {
delete _zoneTypeNames;
delete _zoneFlagNames;
- if (_pathBuffer) {
- _pathBuffer->free();
- delete _pathBuffer;
- }
-
_animations.remove(&_char._ani);
freeLocation();
@@ -169,6 +166,7 @@ int Parallaction::init() {
_location._comment = NULL;
_location._endComment = NULL;
+ _backgroundInfo = 0;
_screenPathWidth = _screenWidth / 8;
_screenSize = _screenWidth * _screenHeight;
_screenPathSize = _screenPathWidth * _screenHeight;
diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h
index 5c134ec3e7..56f3bf1b86 100644
--- a/engines/parallaction/parallaction.h
+++ b/engines/parallaction/parallaction.h
@@ -221,7 +221,6 @@ class Menu;
class SoundMan;
-
struct Location {
Common::Point _startPosition;
@@ -281,6 +280,17 @@ public:
int16 lookup(const char* s);
};
+struct BackgroundInfo {
+ uint width;
+ uint height;
+
+ Graphics::Surface bg;
+ MaskBuffer mask;
+ PathBuffer path;
+
+ Palette palette;
+};
+
class Parallaction : public Engine {
friend class Debugger;
@@ -333,6 +343,10 @@ public:
void sortAnimations();
void freeAnimations();
+ void showSlide(const char *name);
+ void setBackground(const char *background, const char *mask, const char *path);
+ void freeBackground();
+
Table *_globalTable;
Table *_objectsNames;
Table *_zoneTypeNames;
@@ -421,6 +435,8 @@ protected: // data
bool _hasLocationSound;
char _locationSound[50];
+ BackgroundInfo *_backgroundInfo;
+
protected: // members
bool detectGame(void);
@@ -441,7 +457,6 @@ protected: // members
void doLocationEnterTransition();
void changeLocation(char *location);
- void showSlide(const char *name);
void resolveLocationForwards();
void switchBackground(const char* background, const char* mask);
void freeLocation();
diff --git a/engines/parallaction/walk.cpp b/engines/parallaction/walk.cpp
index 281f2388e4..872109b48b 100644
--- a/engines/parallaction/walk.cpp
+++ b/engines/parallaction/walk.cpp
@@ -422,11 +422,6 @@ void jobWalk(void *parm, Job *j) {
void Parallaction::setPath(PathBuffer *buffer) {
- if (_pathBuffer) {
- _pathBuffer->free();
- delete _pathBuffer;
- }
-
_pathBuffer = buffer;
}