aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction
diff options
context:
space:
mode:
authorNicola Mettifogo2007-11-22 21:51:33 +0000
committerNicola Mettifogo2007-11-22 21:51:33 +0000
commit919c0a2833273d3ae92d0eb3635a479c34e1ced9 (patch)
tree66cdf8a6d46da4e6a57e7e64351ba43c6671b9cc /engines/parallaction
parentf4946e64008ebebcbba340c7b0d51ad466219e85 (diff)
downloadscummvm-rg350-919c0a2833273d3ae92d0eb3635a479c34e1ced9.tar.gz
scummvm-rg350-919c0a2833273d3ae92d0eb3635a479c34e1ced9.tar.bz2
scummvm-rg350-919c0a2833273d3ae92d0eb3635a479c34e1ced9.zip
* added adapter from Graphics::Surface to Frames
* changed all Disk routines to return Frames* instead of Graphics::Surface* * changed displayItemComment to use new gfx routines * merged code for Examine zones into displayComment svn-id: r29615
Diffstat (limited to 'engines/parallaction')
-rw-r--r--engines/parallaction/disk.h28
-rw-r--r--engines/parallaction/disk_br.cpp8
-rw-r--r--engines/parallaction/disk_ns.cpp26
-rw-r--r--engines/parallaction/exec_ns.cpp74
-rw-r--r--engines/parallaction/graphics.cpp11
-rw-r--r--engines/parallaction/graphics.h30
-rw-r--r--engines/parallaction/objects.cpp6
-rw-r--r--engines/parallaction/objects.h4
-rw-r--r--engines/parallaction/parallaction.cpp2
-rw-r--r--engines/parallaction/parallaction.h15
-rw-r--r--engines/parallaction/parallaction_br.cpp9
-rw-r--r--engines/parallaction/parallaction_ns.cpp4
-rw-r--r--engines/parallaction/parser_ns.cpp9
13 files changed, 117 insertions, 109 deletions
diff --git a/engines/parallaction/disk.h b/engines/parallaction/disk.h
index 6adab69f51..f6bb87d247 100644
--- a/engines/parallaction/disk.h
+++ b/engines/parallaction/disk.h
@@ -56,10 +56,10 @@ public:
virtual Script* loadScript(const char* name) = 0;
virtual Frames* loadTalk(const char *name) = 0;
virtual Frames* loadObjects(const char *name) = 0;
- virtual Graphics::Surface* loadPointer(const char *name) = 0;
- virtual Graphics::Surface* loadHead(const char* name) = 0;
+ virtual Frames* loadPointer(const char *name) = 0;
+ virtual Frames* loadHead(const char* name) = 0;
virtual Font* loadFont(const char* name) = 0;
- virtual Graphics::Surface* loadStatic(const char* name) = 0;
+ virtual Frames* loadStatic(const char* name) = 0;
virtual Frames* loadFrames(const char* name) = 0;
virtual void loadSlide(BackgroundInfo& info, const char *filename) = 0;
virtual void loadScenery(BackgroundInfo& info, const char* background, const char* mask, const char* path) = 0;
@@ -130,7 +130,7 @@ private:
void unpackBackground(Common::ReadStream *stream, byte *screen, byte *mask, byte *path);
Cnv* loadExternalCnv(const char *filename);
Cnv* loadCnv(const char *filename);
- Graphics::Surface *loadExternalStaticCnv(const char *filename);
+ Frames* loadExternalStaticCnv(const char *filename);
void loadBackground(BackgroundInfo& info, const char *filename);
void loadMaskAndPath(BackgroundInfo& info, const char *name);
void parseDepths(Common::SeekableReadStream &stream);
@@ -148,10 +148,10 @@ public:
Script* loadScript(const char* name);
Frames* loadTalk(const char *name);
Frames* loadObjects(const char *name);
- Graphics::Surface* loadPointer(const char *name);
- Graphics::Surface* loadHead(const char* name);
+ Frames* loadPointer(const char *name);
+ Frames* loadHead(const char* name);
Font* loadFont(const char* name);
- Graphics::Surface* loadStatic(const char* name);
+ Frames* loadStatic(const char* name);
Frames* loadFrames(const char* name);
void loadSlide(BackgroundInfo& info, const char *filename);
void loadScenery(BackgroundInfo& info, const char* background, const char* mask, const char* path);
@@ -164,7 +164,7 @@ class AmigaDisk_ns : public Disk_ns {
protected:
Cnv* makeCnv(Common::SeekableReadStream &stream);
- Graphics::Surface* makeStaticCnv(Common::SeekableReadStream &stream);
+ Frames* makeStaticCnv(Common::SeekableReadStream &stream);
void patchFrame(byte *dst, byte *dlta, uint16 bytesPerPlane, uint16 height);
void unpackFrame(byte *dst, byte *src, uint16 planeSize);
void unpackBitmap(byte *dst, byte *src, uint16 numFrames, uint16 bytesPerPlane, uint16 height);
@@ -182,10 +182,10 @@ public:
Script* loadScript(const char* name);
Frames* loadTalk(const char *name);
Frames* loadObjects(const char *name);
- Graphics::Surface* loadPointer(const char *name);
- Graphics::Surface* loadHead(const char* name);
+ Frames* loadPointer(const char *name);
+ Frames* loadHead(const char* name);
Font* loadFont(const char* name);
- Graphics::Surface* loadStatic(const char* name);
+ Frames* loadStatic(const char* name);
Frames* loadFrames(const char* name);
void loadSlide(BackgroundInfo& info, const char *filename);
void loadScenery(BackgroundInfo& info, const char* background, const char* mask, const char* path);
@@ -220,10 +220,10 @@ public:
Script* loadScript(const char* name);
Frames* loadTalk(const char *name);
Frames* loadObjects(const char *name);
- Graphics::Surface* loadPointer(const char *name);
- Graphics::Surface* loadHead(const char* name);
+ Frames* loadPointer(const char *name);
+ Frames* loadHead(const char* name);
Font* loadFont(const char* name);
- Graphics::Surface* loadStatic(const char* name);
+ Frames* loadStatic(const char* name);
Frames* loadFrames(const char* name);
void loadSlide(BackgroundInfo& info, const char *filename);
void loadScenery(BackgroundInfo& info, const char* background, const char* mask, const char* path);
diff --git a/engines/parallaction/disk_br.cpp b/engines/parallaction/disk_br.cpp
index c89bc0ddde..aca01e0880 100644
--- a/engines/parallaction/disk_br.cpp
+++ b/engines/parallaction/disk_br.cpp
@@ -166,13 +166,13 @@ Script* DosDisk_br::loadScript(const char* name) {
}
// there are no Head resources in Big Red Adventure
-Graphics::Surface* DosDisk_br::loadHead(const char* name) {
+Frames* DosDisk_br::loadHead(const char* name) {
debugC(5, kDebugDisk, "DosDisk_br::loadHead");
return 0;
}
-Graphics::Surface* DosDisk_br::loadPointer(const char *name) {
+Frames* DosDisk_br::loadPointer(const char *name) {
debugC(5, kDebugDisk, "DosDisk_br::loadPointer");
char path[PATH_LEN];
@@ -193,7 +193,7 @@ Graphics::Surface* DosDisk_br::loadPointer(const char *name) {
surf->create(width, height, 1);
stream.read(surf->pixels, width * height);
- return surf;
+ return new SurfaceToFrames(surf);
}
@@ -220,7 +220,7 @@ void genSlidePath(char *path, const char* name) {
sprintf(path, "%s.bmp", name);
}
-Graphics::Surface* DosDisk_br::loadStatic(const char* name) {
+Frames* DosDisk_br::loadStatic(const char* name) {
debugC(5, kDebugDisk, "DosDisk_br::loadStatic");
return 0;
}
diff --git a/engines/parallaction/disk_ns.cpp b/engines/parallaction/disk_ns.cpp
index 1ec15c842c..3654d0a336 100644
--- a/engines/parallaction/disk_ns.cpp
+++ b/engines/parallaction/disk_ns.cpp
@@ -343,7 +343,7 @@ Cnv* DosDisk_ns::loadExternalCnv(const char *filename) {
return new Cnv(numFrames, width, height, data);
}
-Graphics::Surface *DosDisk_ns::loadExternalStaticCnv(const char *filename) {
+Frames* DosDisk_ns::loadExternalStaticCnv(const char *filename) {
char path[PATH_LEN];
@@ -363,7 +363,7 @@ Graphics::Surface *DosDisk_ns::loadExternalStaticCnv(const char *filename) {
cnv->create(w, h, 1);
stream.read(cnv->pixels, w*h);
- return cnv;
+ return new SurfaceToFrames(cnv);
}
Cnv* DosDisk_ns::loadCnv(const char *filename) {
@@ -440,7 +440,7 @@ Script* DosDisk_ns::loadScript(const char* name) {
return new Script(new DummyArchiveStream(_resArchive), true);
}
-Graphics::Surface* DosDisk_ns::loadHead(const char* name) {
+Frames* DosDisk_ns::loadHead(const char* name) {
char path[PATH_LEN];
@@ -451,7 +451,7 @@ Graphics::Surface* DosDisk_ns::loadHead(const char* name) {
}
-Graphics::Surface* DosDisk_ns::loadPointer(const char *name) {
+Frames* DosDisk_ns::loadPointer(const char *name) {
return loadExternalStaticCnv(name);
}
@@ -471,7 +471,7 @@ Frames* DosDisk_ns::loadObjects(const char *name) {
}
-Graphics::Surface* DosDisk_ns::loadStatic(const char* name) {
+Frames* DosDisk_ns::loadStatic(const char* name) {
char path[PATH_LEN];
@@ -493,7 +493,7 @@ Graphics::Surface* DosDisk_ns::loadStatic(const char* name) {
Graphics::PackBitsReadStream decoder(_resArchive);
decoder.read(cnv->pixels, w*h);
- return cnv;
+ return new SurfaceToFrames(cnv);
}
Frames* DosDisk_ns::loadFrames(const char* name) {
@@ -937,7 +937,7 @@ void AmigaDisk_ns::unpackBitmap(byte *dst, byte *src, uint16 numFrames, uint16 b
}
-Graphics::Surface* AmigaDisk_ns::makeStaticCnv(Common::SeekableReadStream &stream) {
+Frames* AmigaDisk_ns::makeStaticCnv(Common::SeekableReadStream &stream) {
stream.skip(1);
uint16 width = stream.readByte();
@@ -958,7 +958,7 @@ Graphics::Surface* AmigaDisk_ns::makeStaticCnv(Common::SeekableReadStream &strea
free(buf);
- return cnv;
+ return new SurfaceToFrames(cnv);
}
Cnv* AmigaDisk_ns::makeCnv(Common::SeekableReadStream &stream) {
@@ -1017,7 +1017,7 @@ Script* AmigaDisk_ns::loadScript(const char* name) {
return new Script(new DummyArchiveStream(_resArchive), true);
}
-Graphics::Surface* AmigaDisk_ns::loadPointer(const char* name) {
+Frames* AmigaDisk_ns::loadPointer(const char* name) {
debugC(1, kDebugDisk, "AmigaDisk_ns::loadPointer");
Common::File stream;
@@ -1027,11 +1027,11 @@ Graphics::Surface* AmigaDisk_ns::loadPointer(const char* name) {
return makeStaticCnv(stream);
}
-Graphics::Surface* AmigaDisk_ns::loadStatic(const char* name) {
+Frames* AmigaDisk_ns::loadStatic(const char* name) {
debugC(1, kDebugDisk, "AmigaDisk_ns::loadStatic '%s'", name);
Common::SeekableReadStream *s = openArchivedFile(name, true);
- Graphics::Surface *cnv = makeStaticCnv(*s);
+ Frames *cnv = makeStaticCnv(*s);
delete s;
@@ -1285,14 +1285,14 @@ Frames* AmigaDisk_ns::loadFrames(const char* name) {
return cnv;
}
-Graphics::Surface* AmigaDisk_ns::loadHead(const char* name) {
+Frames* AmigaDisk_ns::loadHead(const char* name) {
debugC(1, kDebugDisk, "AmigaDisk_ns::loadHead '%s'", name);
char path[PATH_LEN];
sprintf(path, "%s.head", name);
Common::SeekableReadStream *s = openArchivedFile(path, true);
- Graphics::Surface *cnv = makeStaticCnv(*s);
+ Frames *cnv = makeStaticCnv(*s);
delete s;
diff --git a/engines/parallaction/exec_ns.cpp b/engines/parallaction/exec_ns.cpp
index 1545dc9d07..1c63d78ac3 100644
--- a/engines/parallaction/exec_ns.cpp
+++ b/engines/parallaction/exec_ns.cpp
@@ -482,53 +482,29 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
// ZONE TYPE: EXAMINE
//
-// displays character head commenting an examined object
-//
-void Parallaction::displayCharacterComment(ExamineData *data) {
- if (data->_description == NULL) return;
+void Parallaction::displayComment(ExamineData *data) {
+ if (!data->_description) {
+ return;
+ }
- _gfx->setDialogueBalloon(data->_description, 140, 10, 130, 0, 0);
- _gfx->setItem(_char._talk, 190, 80);
- _gfx->setItemFrame(0, 0);
+ if (data->_filename) {
+ _gfx->setHalfbriteMode(true);
+ _gfx->setDialogueBalloon(data->_description, 0, 90, 130, 0, 0);
+ Common::Rect r;
+ data->_cnv->getRect(0, r);
+ _gfx->setItem(data->_cnv, 140, (_screenHeight - r.height())/2);
+ _gfx->setItemFrame(0, 0);
+ _gfx->setItem(_char._head, 100, 152);
+ _gfx->setItemFrame(1, 0);
+ } else {
+ _gfx->setDialogueBalloon(data->_description, 140, 10, 130, 0, 0);
+ _gfx->setItem(_char._talk, 190, 80);
+ _gfx->setItemFrame(0, 0);
+ }
_inputMode = kInputModeComment;
}
-// display detail view of an item (and eventually comments)
-//
-void Parallaction::displayItemComment(ExamineData *data) {
-
- if (data->_description == NULL) return;
-
- _gfx->setHalfbriteMode(true);
-
- char v68[PATH_LEN];
- strcpy(v68, data->_filename);
- data->_cnv = _disk->loadStatic(v68);
- _gfx->flatBlitCnv(data->_cnv, 140, (_screenHeight - data->_cnv->h)/2, Gfx::kBitFront);
- delete data->_cnv;
-
- int16 v6A = 0, v6C = 0;
-
- _gfx->setFont(_dialogueFont);
- _gfx->getStringExtent(data->_description, 130, &v6C, &v6A);
- Common::Rect r(v6C, v6A);
- r.moveTo(0, 90);
- _gfx->drawBalloon(r, 0);
- _gfx->flatBlitCnv(_char._head, 100, 152, Gfx::kBitFront);
- _gfx->displayWrappedString(data->_description, 0, 90, 0, 130);
-
- _gfx->updateScreen();
-
- waitUntilLeftClick();
-
- _gfx->setHalfbriteMode(false);
- _gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
- _gfx->updateScreen();
-
- return;
-}
-
uint16 Parallaction::runZone(Zone *z) {
@@ -540,11 +516,7 @@ uint16 Parallaction::runZone(Zone *z) {
switch(subtype) {
case kZoneExamine:
- if (z->u.examine->_filename) {
- displayItemComment(z->u.examine);
- } else {
- displayCharacterComment(z->u.examine);
- }
+ displayComment(z->u.examine);
break;
case kZoneGet:
@@ -631,7 +603,9 @@ void Parallaction_ns::jobRemovePickedItem(void *parm, Job *j) {
static uint16 count = 0;
if (z->u.get->_cnv) {
- Common::Rect r(z->_left, z->_top, z->_left + z->u.get->_cnv->w, z->_top + z->u.get->_cnv->h);
+ Common::Rect r;
+ z->u.get->_cnv->getRect(0, r);
+ r.moveTo(z->_left, z->_top);
_gfx->restoreGetBackground(r, z->u.get->_backup);
}
@@ -655,8 +629,8 @@ void Parallaction_ns::jobDisplayDroppedItem(void *parm, Job *j) {
_gfx->backupGetBackground(z->u.get, z->_left, z->_top);
}
- _gfx->flatBlitCnv(z->u.get->_cnv, z->_left, z->_top, Gfx::kBitBack);
- _gfx->flatBlitCnv(z->u.get->_cnv, z->_left, z->_top, Gfx::kBit2);
+ _gfx->flatBlitCnv(z->u.get->_cnv, 0, z->_left, z->_top, Gfx::kBitBack);
+ _gfx->flatBlitCnv(z->u.get->_cnv, 0, z->_left, z->_top, Gfx::kBit2);
}
j->_count++;
diff --git a/engines/parallaction/graphics.cpp b/engines/parallaction/graphics.cpp
index e40d954f10..41f818a8a8 100644
--- a/engines/parallaction/graphics.cpp
+++ b/engines/parallaction/graphics.cpp
@@ -565,14 +565,17 @@ void Gfx::backupDoorBackground(DoorData *data, int16 x, int16 y) {
void Gfx::backupGetBackground(GetData *data, int16 x, int16 y) {
- byte *t = (byte*)data->_cnv->pixels;
+ byte *t = (byte*)data->_cnv->getData(0);
byte *s = (byte*)_buffers[kBitBack]->getBasePtr(x, y);
byte *d = data->_backup;
- uint pitch = _backgroundWidth - data->_cnv->w;
+ Common::Rect r;
+ data->_cnv->getRect(0, r);
+
+ uint pitch = _backgroundWidth - r.width();
- for (uint16 i = 0; i < data->_cnv->h ; i++) {
- for (uint16 j = 0; j < data->_cnv->w ; j++) {
+ for (uint16 i = 0; i < r.height(); i++) {
+ for (uint16 j = 0; j < r.width(); j++) {
*d = (*t) ? *s : 0;
d++;
diff --git a/engines/parallaction/graphics.h b/engines/parallaction/graphics.h
index 2bc17f0b77..7eacff4f5d 100644
--- a/engines/parallaction/graphics.h
+++ b/engines/parallaction/graphics.h
@@ -84,6 +84,36 @@ struct Frames {
};
+struct SurfaceToFrames : public Frames {
+
+ Graphics::Surface *_surf;
+
+public:
+ SurfaceToFrames(Graphics::Surface *surf) : _surf(surf) {
+ }
+
+ ~SurfaceToFrames() {
+ delete _surf;
+ }
+
+ uint16 getNum() {
+ return 1;
+ }
+ byte* getData(uint16 index) {
+ assert(index == 0);
+ return (byte*)_surf->getBasePtr(0,0);
+ }
+ void getRect(uint16 index, Common::Rect &r) {
+ assert(index == 0);
+ r.left = 0;
+ r.top = 0;
+ r.setWidth(_surf->w);
+ r.setHeight(_surf->h);
+ }
+
+
+};
+
struct Cnv : public Frames {
uint16 _count; // # of frames
uint16 _width; //
diff --git a/engines/parallaction/objects.cpp b/engines/parallaction/objects.cpp
index 0d46568106..93ebca5ff1 100644
--- a/engines/parallaction/objects.cpp
+++ b/engines/parallaction/objects.cpp
@@ -131,6 +131,7 @@ Zone::~Zone() {
case kZoneExamine:
free(u.examine->_filename);
free(u.examine->_description);
+ delete u.examine->_cnv;
delete u.examine;
break;
@@ -148,10 +149,7 @@ Zone::~Zone() {
case kZoneGet:
free(u.get->_backup);
- if (u.get->_cnv) {
- u.get->_cnv->free();
- delete u.get->_cnv;
- }
+ delete u.get->_cnv;
delete u.get;
break;
diff --git a/engines/parallaction/objects.h b/engines/parallaction/objects.h
index fdbe062e8b..c62dedc829 100644
--- a/engines/parallaction/objects.h
+++ b/engines/parallaction/objects.h
@@ -170,7 +170,7 @@ struct Dialogue {
struct GetData { // size = 24
uint32 _icon;
- Graphics::Surface *_cnv;
+ Frames *_cnv;
byte *_backup;
uint16 field_14; // unused
uint16 field_16; // unused
@@ -191,7 +191,7 @@ struct SpeakData { // size = 36
}
};
struct ExamineData { // size = 28
- Graphics::Surface *_cnv;
+ Frames *_cnv;
uint16 _opBase; // unused
uint16 field_12; // unused
char* _description;
diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp
index 5031e7be22..1bbe06984b 100644
--- a/engines/parallaction/parallaction.cpp
+++ b/engines/parallaction/parallaction.cpp
@@ -432,6 +432,8 @@ void Parallaction::updateCommentInput() {
waitUntilLeftClick();
_gfx->hideDialogueStuff();
+ _gfx->setHalfbriteMode(false);
+
_inputMode = kInputModeGame;
}
diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h
index f6749d908f..521aa634b5 100644
--- a/engines/parallaction/parallaction.h
+++ b/engines/parallaction/parallaction.h
@@ -213,7 +213,7 @@ struct Character {
Animation _ani;
- Graphics::Surface *_head;
+ Frames *_head;
Frames *_talk;
Frames *_objs;
PathBuilder _builder;
@@ -558,8 +558,7 @@ protected: // members
void freeLocation();
void showLocationComment(const char *text, bool end);
- void displayCharacterComment(ExamineData *data);
- void displayItemComment(ExamineData *data);
+ void displayComment(ExamineData *data);
uint16 checkDoor();
@@ -705,7 +704,7 @@ private:
void initCursors();
static byte _mouseArrow[256];
- Graphics::Surface *_mouseComposedArrow;
+ Frames *_mouseComposedArrow;
static const Callable _dosCallables[25];
static const Callable _amigaCallables[25];
@@ -1002,10 +1001,10 @@ private:
void setMousePointer(int16 index);
void initCursors();
- Graphics::Surface *_dinoCursor;
- Graphics::Surface *_dougCursor;
- Graphics::Surface *_donnaCursor;
- Graphics::Surface *_mouseArrow;
+ Frames *_dinoCursor;
+ Frames *_dougCursor;
+ Frames *_donnaCursor;
+ Frames *_mouseArrow;
int showMenu();
diff --git a/engines/parallaction/parallaction_br.cpp b/engines/parallaction/parallaction_br.cpp
index 232e08799e..b832b50fd9 100644
--- a/engines/parallaction/parallaction_br.cpp
+++ b/engines/parallaction/parallaction_br.cpp
@@ -92,10 +92,6 @@ int Parallaction_br::init() {
Parallaction_br::~Parallaction_br() {
freeFonts();
- _dinoCursor->free();
- _dougCursor->free();
- _donnaCursor->free();
-
delete _dinoCursor;
delete _dougCursor;
delete _donnaCursor;
@@ -308,7 +304,10 @@ void Parallaction_br::initCursors() {
void Parallaction_br::setMousePointer(int16 index) {
- _system->setMouseCursor((byte*)_mouseArrow->pixels, _mouseArrow->w, _mouseArrow->h, 0, 0, 0);
+ Common::Rect r;
+ _mouseArrow->getRect(0, r);
+
+ _system->setMouseCursor(_mouseArrow->getData(0), r.width(), r.height(), 0, 0, 0);
_system->showMouse(true);
}
diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp
index b810ff7da7..6541498988 100644
--- a/engines/parallaction/parallaction_ns.cpp
+++ b/engines/parallaction/parallaction_ns.cpp
@@ -146,10 +146,8 @@ int Parallaction_ns::init() {
Parallaction_ns::~Parallaction_ns() {
freeFonts();
- _mouseComposedArrow->free();
delete _mouseComposedArrow;
-
delete _commandsNames;
delete _instructionNames;
delete _locationStmt;
@@ -223,7 +221,7 @@ void Parallaction_ns::setInventoryCursor(int pos) {
_activeItem._id = item->_id;
- byte *v8 = (byte*)_mouseComposedArrow->pixels;
+ byte *v8 = _mouseComposedArrow->getData(0);
// FIXME: destination offseting is not clear
byte* s = _char._objs->getData(item->_index);
diff --git a/engines/parallaction/parser_ns.cpp b/engines/parallaction/parser_ns.cpp
index 35f6f20346..9681d67a8b 100644
--- a/engines/parallaction/parser_ns.cpp
+++ b/engines/parallaction/parser_ns.cpp
@@ -1275,11 +1275,15 @@ void Parallaction_ns::parseGetData(Script &script, Zone *z) {
if (!scumm_stricmp(_tokens[0], "file")) {
data->_cnv = _disk->loadStatic(_tokens[1]);
- data->_backup = (byte*)malloc(data->_cnv->w*data->_cnv->h);
+
+ Common::Rect r;
+ data->_cnv->getRect(0, r);
+
+ data->_backup = (byte*)malloc(r.width() * r.height());
if ((z->_flags & kFlagsRemove) == 0) {
_gfx->backupGetBackground(data, z->_left, z->_top);
- _gfx->flatBlitCnv(data->_cnv, z->_left, z->_top, Gfx::kBitBack);
+ _gfx->flatBlitCnv(data->_cnv, 0, z->_left, z->_top, Gfx::kBitBack);
}
}
@@ -1303,6 +1307,7 @@ void Parallaction_ns::parseExamineData(Script &script, Zone *z) {
if (!scumm_stricmp(_tokens[0], "file")) {
data->_filename = strdup(_tokens[1]);
+ data->_cnv = _disk->loadStatic(_tokens[1]);
}
if (!scumm_stricmp(_tokens[0], "desc")) {
data->_description = parseComment(script);