diff options
-rw-r--r-- | engines/parallaction/commands.cpp | 3 | ||||
-rw-r--r-- | engines/parallaction/graphics.cpp | 6 | ||||
-rw-r--r-- | engines/parallaction/zone.cpp | 27 | ||||
-rw-r--r-- | engines/parallaction/zone.h | 3 |
4 files changed, 21 insertions, 18 deletions
diff --git a/engines/parallaction/commands.cpp b/engines/parallaction/commands.cpp index 5e50912bee..0c0ca1b36a 100644 --- a/engines/parallaction/commands.cpp +++ b/engines/parallaction/commands.cpp @@ -284,7 +284,7 @@ void runCommands(Command *list, Zone *z) { case CMD_OPEN: // open u->_zone->_flags &= ~kFlagsClosed; - if (u->_zone->u.door->_cnv._count != 0) { + if (u->_zone->u.door->_cnv) { _vm->addJob(&jobToggleDoor, (void*)u->_zone, kPriority18 ); } break; @@ -350,3 +350,4 @@ void runCommands(Command *list, Zone *z) { } // namespace Parallaction + diff --git a/engines/parallaction/graphics.cpp b/engines/parallaction/graphics.cpp index 6067a329fc..afafa46897 100644 --- a/engines/parallaction/graphics.cpp +++ b/engines/parallaction/graphics.cpp @@ -521,11 +521,11 @@ void Gfx::backupDoorBackground(DoorData *data, int16 x, int16 y) { byte *s = _buffers[kBit2] + x + y * SCREEN_WIDTH; byte *d = data->_background; - for (uint16 i = 0; i < data->_cnv._height ; i++) { - memcpy(d, s, data->_cnv._width); + for (uint16 i = 0; i < data->_cnv->_height ; i++) { + memcpy(d, s, data->_cnv->_width); s += SCREEN_WIDTH; - d += data->_cnv._width; + d += data->_cnv->_width; } return; diff --git a/engines/parallaction/zone.cpp b/engines/parallaction/zone.cpp index b49463c9e8..abdc22dfe6 100644 --- a/engines/parallaction/zone.cpp +++ b/engines/parallaction/zone.cpp @@ -152,7 +152,9 @@ void Parallaction::freeZones(Node *list) { case kZoneDoor: free(z->u.door->_location); free(z->u.door->_background); - _vm->_gfx->freeCnv(&z->u.door->_cnv); + _vm->_gfx->freeCnv(z->u.door->_cnv); + if (z->u.door->_cnv) + delete z->u.door->_cnv; delete z->u.door; break; @@ -265,19 +267,19 @@ void Parallaction::parseZoneTypeBlock(Script &script, Zone *z) { if (!scumm_stricmp(_tokens[0], "file")) { // printf("file: '%s'", _tokens[0]); - Cnv *doorcnv = &u->door->_cnv; + u->door->_cnv = new Cnv; strcpy(vC8, _tokens[1]); StaticCnv vE0; - _disk->loadFrames(vC8, doorcnv); + _disk->loadFrames(vC8, u->door->_cnv); // printf("door width: %i, height: %i", doorcnv->_width, doorcnv->_height ); - vE0._width = doorcnv->_width; - vE0._height = doorcnv->_height; + vE0._width = u->door->_cnv->_width; + vE0._height = u->door->_cnv->_height; uint16 _ax = (z->_flags & kFlagsClosed ? 0 : 1); - vE0._data0 = doorcnv->_array[_ax]; + vE0._data0 = u->door->_cnv->_array[_ax]; // _ax = (z->_flags & kFlagsClosed ? 0 : 1); // vE0._data1 = doorcnv->field_8[_ax]; @@ -445,7 +447,7 @@ uint16 runZone(Zone *z) { case kZoneDoor: if (z->_flags & kFlagsLocked) break; z->_flags ^= kFlagsClosed; - if (z->u.door->_cnv._count == 0) break; + if (z->u.door->_cnv == NULL) break; _vm->addJob(&jobToggleDoor, z, kPriority18 ); break; @@ -473,20 +475,19 @@ void jobToggleDoor(void *parm, Job *j) { Zone *z = (Zone*)parm; - Cnv *v18 = &z->u.door->_cnv; StaticCnv v14; - if (v18) { - v14._width = v18->_width; - v14._height = v18->_height; + if (z->u.door->_cnv) { + v14._width = z->u.door->_cnv->_width; + v14._height = z->u.door->_cnv->_height; - Common::Rect r(z->_left, z->_top, z->_left+v18->_width, z->_top+v18->_height); + Common::Rect r(z->_left, z->_top, z->_left+z->u.door->_cnv->_width, z->_top+z->u.door->_cnv->_height); _vm->_gfx->restoreZoneBackground(r, z->u.door->_background); uint16 _ax = (z->_flags & kFlagsClosed ? 0 : 1); - v14._data0 = v18->_array[_ax]; + v14._data0 = z->u.door->_cnv->_array[_ax]; _vm->_gfx->flatBlitCnv(&v14, z->_left, z->_top, Gfx::kBitBack); _vm->_gfx->flatBlitCnv(&v14, z->_left, z->_top, Gfx::kBit2); diff --git a/engines/parallaction/zone.h b/engines/parallaction/zone.h index 046403d7a0..c9d53d2f20 100644 --- a/engines/parallaction/zone.h +++ b/engines/parallaction/zone.h @@ -125,7 +125,7 @@ struct ExamineData { // size = 28 }; struct DoorData { // size = 28 char* _location; - Cnv _cnv; + Cnv *_cnv; byte* _background; Common::Point _startPos; uint16 _startFrame; @@ -134,6 +134,7 @@ struct DoorData { // size = 28 _location = NULL; _background = NULL; _startFrame = 0; + _cnv = NULL; } }; struct HearData { // size = 20 |