From 711865ef635cecac9d425976e0f0407ca137f4e5 Mon Sep 17 00:00:00 2001 From: Nicola Mettifogo Date: Thu, 29 Mar 2007 18:34:31 +0000 Subject: - implemented destructor for Cnv, thus removing calls to Gfx::freeCnv() - enforced use of getFramePtr instead of Cnv::_array member svn-id: r26317 --- engines/parallaction/animation.cpp | 1 - engines/parallaction/defs.h | 11 +++++++++++ engines/parallaction/dialogue.cpp | 9 ++++----- engines/parallaction/graphics.cpp | 33 +++------------------------------ engines/parallaction/graphics.h | 1 - engines/parallaction/inventory.cpp | 2 +- engines/parallaction/parallaction.cpp | 22 ++++++++++++---------- engines/parallaction/parallaction.h | 1 - engines/parallaction/zone.cpp | 7 +++---- 9 files changed, 34 insertions(+), 53 deletions(-) (limited to 'engines/parallaction') diff --git a/engines/parallaction/animation.cpp b/engines/parallaction/animation.cpp index 5069dd238c..b74ce0bebd 100644 --- a/engines/parallaction/animation.cpp +++ b/engines/parallaction/animation.cpp @@ -168,7 +168,6 @@ void Parallaction::freeAnimations() { Animation *v4 = (Animation*)_animations._next; while (v4) { freeScript(v4->_program); - _vm->_gfx->freeCnv(v4->_cnv); if (v4->_cnv) delete v4->_cnv; v4 = (Animation*)v4->_next; diff --git a/engines/parallaction/defs.h b/engines/parallaction/defs.h index f5325c760d..d2c1efdf1f 100644 --- a/engines/parallaction/defs.h +++ b/engines/parallaction/defs.h @@ -101,6 +101,17 @@ public: _array = NULL; } + ~Cnv() { + if (_count == 0 || _array == NULL) return; + + for (uint16 _si = 0; _si < _count; _si++) { + if (_array[_si]) + free(_array[_si]); + } + + free(_array); + } + byte* getFramePtr(uint16 index) { if (index >= _count) return NULL; diff --git a/engines/parallaction/dialogue.cpp b/engines/parallaction/dialogue.cpp index 166da25380..14cd262b62 100644 --- a/engines/parallaction/dialogue.cpp +++ b/engines/parallaction/dialogue.cpp @@ -318,7 +318,7 @@ void displayQuestion(Dialogue *q, Cnv *cnv) { StaticCnv face; face._width = cnv->_width; face._height = cnv->_height; - face._data0 = cnv->_array[q->_mood & 0xF]; + face._data0 = cnv->getFramePtr(q->_mood & 0xF); face._data1 = NULL; // cnv->field_8[v60->_mood & 0xF]; _vm->_gfx->flatBlitCnv(&face, QUESTION_CHARACTER_X, QUESTION_CHARACTER_Y, Gfx::kBitFront); @@ -344,7 +344,7 @@ uint16 getDialogueAnswer(Dialogue *q, Cnv *cnv) { StaticCnv face; face._width = cnv->_width; face._height = cnv->_height; - face._data0 = cnv->_array[0]; + face._data0 = cnv->getFramePtr(0); face._data1 = NULL; // cnv->field_8[0]; _vm->_gfx->flatBlitCnv(&face, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront); @@ -399,7 +399,6 @@ void Parallaction::runDialogue(SpeakData *data) { _vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront); if (isNpc) { - _vm->_gfx->freeCnv(face); delete face; } @@ -427,7 +426,7 @@ int16 selectAnswer(Question *q, StaticCnv *cnv) { if (numAvailableAnswers == 1) { _vm->_gfx->displayWrappedString(q->_answers[_di], _answerBalloonX[_di], _answerBalloonY[_di], MAX_BALLOON_WIDTH, 0); - cnv->_data0 = _vm->_char._talk->_array[q->_answer_moods[_di] & 0xF]; + cnv->_data0 = _vm->_char._talk->getFramePtr(q->_answer_moods[_di] & 0xF); // cnv->_data1 = _vm->_char._talk->field_8[q->_answer_moods[_di] & 0xF]; _vm->_gfx->flatBlitCnv(cnv, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront); waitUntilLeftClick(); @@ -447,7 +446,7 @@ int16 selectAnswer(Question *q, StaticCnv *cnv) { _vm->_gfx->displayWrappedString(q->_answers[v2], _answerBalloonX[v2], _answerBalloonY[v2], MAX_BALLOON_WIDTH, 3); _vm->_gfx->displayWrappedString(q->_answers[_si], _answerBalloonX[_si], _answerBalloonY[_si], MAX_BALLOON_WIDTH, 0); - cnv->_data0 = _vm->_char._talk->_array[q->_answer_moods[_si] & 0xF]; + cnv->_data0 = _vm->_char._talk->getFramePtr(q->_answer_moods[_si] & 0xF); // cnv->_data1 = _vm->_char._talk->field_8[q->_answer_moods[_si] & 0xF]; _vm->_gfx->flatBlitCnv(cnv, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront); } diff --git a/engines/parallaction/graphics.cpp b/engines/parallaction/graphics.cpp index c4203cb0b9..2565be1b06 100644 --- a/engines/parallaction/graphics.cpp +++ b/engines/parallaction/graphics.cpp @@ -552,7 +552,7 @@ void Gfx::displayString(uint16 x, uint16 y, const char *text) { tmp._width = _font->_width; tmp._height = _font->_height; - tmp._data0 = _font->_array[c]; + tmp._data0 = _font->getFramePtr(c); flatBlitCnv(&tmp, x, y, kBitFront); @@ -572,7 +572,7 @@ void Gfx::displayBalloonString(uint16 x, uint16 y, const char *text, byte color) byte c = mapChar(text[i]); uint16 w = _proportionalFont ? _glyphWidths[(int)c] : 8; - byte *s = _font->_array[c]; + byte *s = _font->getFramePtr(c); byte *d = _buffers[kBitFront] + x + y*SCREEN_WIDTH; // printf("%i\n", text[i]); @@ -705,7 +705,6 @@ void Gfx::getStringExtent(char *text, uint16 maxwidth, int16* width, int16* heig void Gfx::setFont(const char* name) { - freeCnv(_font); if (_font) delete _font; _font = _vm->_disk->loadFont(name); @@ -757,7 +756,7 @@ void Gfx::makeCnvFromString(StaticCnv *cnv, char *text) { for (uint16 i = 0; i < len; i++) { byte c = mapChar(text[i]); - byte *s = _font->_array[c]; + byte *s = _font->getFramePtr(c); byte *d = cnv->_data0 + _font->_width * i; for (uint16 j = 0; j < _font->_height; j++) { @@ -785,31 +784,6 @@ byte Gfx::mapChar(byte c) { } -void Gfx::freeCnv(Cnv *cnv) { -// printf("Gfx::freeCnv()\n"); - - if (!cnv) return; - if (cnv->_count == 0) return; - if (!cnv->_array) return; - - for (uint16 _si = 0; _si < cnv->_count; _si++) { - if (cnv->_array[_si]) { - free(cnv->_array[_si]); - } - cnv->_array[_si] = NULL; - } - - if (cnv->_array) - free(cnv->_array); - - cnv->_count = 0; - cnv->_array = NULL; - - return; -} - - - void Gfx::freeStaticCnv(StaticCnv *cnv) { // printf("free_static_cnv()\n"); @@ -944,7 +918,6 @@ Gfx::~Gfx() { free(_buffers[kBitBack]); free(_buffers[kBit2]); - freeCnv(_font); if (_font) delete _font; return; diff --git a/engines/parallaction/graphics.h b/engines/parallaction/graphics.h index 84a602e9b8..400f08d43f 100644 --- a/engines/parallaction/graphics.h +++ b/engines/parallaction/graphics.h @@ -98,7 +98,6 @@ public: // cnv management void makeCnvFromString(StaticCnv *cnv, char *text); - void freeCnv(Cnv *cnv); void freeStaticCnv(StaticCnv *cnv); void backupDoorBackground(DoorData *data, int16 x, int16 y); void backupGetBackground(GetData *data, int16 x, int16 y); diff --git a/engines/parallaction/inventory.cpp b/engines/parallaction/inventory.cpp index 0a70df12db..9fca713482 100644 --- a/engines/parallaction/inventory.cpp +++ b/engines/parallaction/inventory.cpp @@ -187,7 +187,7 @@ void drawInventoryItem(uint16 pos, InventoryItem *item) { uint16 col = pos % INVENTORY_ITEMS_PER_LINE; // FIXME: this will end up in a general blit function - byte* s = _vm->_char._objs->_array[item->_index]; + byte* s = _vm->_char._objs->getFramePtr(item->_index); byte* d = _buffer + col * INVENTORYITEM_WIDTH + line * _vm->_char._objs->_height * INVENTORY_WIDTH; for (uint32 i = 0; i < INVENTORYITEM_HEIGHT; i++) { memcpy(d, s, INVENTORYITEM_WIDTH); diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp index 24faab7da3..490e2115de 100644 --- a/engines/parallaction/parallaction.cpp +++ b/engines/parallaction/parallaction.cpp @@ -696,24 +696,26 @@ void Parallaction::changeCursor(int32 index) { void Parallaction::freeCharacter() { - _vm->_gfx->freeCnv(_vm->_char._normalFrames); - if (_vm->_char._normalFrames) delete _vm->_char._normalFrames; + if (_vm->_char._normalFrames) + delete _vm->_char._normalFrames; if (!IS_DUMMY_CHARACTER(_vm->_characterName)) { - _vm->_gfx->freeCnv(_vm->_char._miniFrames); - if (_vm->_char._miniFrames) delete _vm->_char._miniFrames; + if (_vm->_char._miniFrames) + delete _vm->_char._miniFrames; - if (_objectsNames) delete _objectsNames; + if (_objectsNames) + delete _objectsNames; _objectsNames = NULL; - _vm->_gfx->freeCnv(_vm->_char._talk); - if (_vm->_char._talk) delete _vm->_char._talk; + if (_vm->_char._talk) + delete _vm->_char._talk; _vm->_gfx->freeStaticCnv(_vm->_char._head); - if (_vm->_char._head) delete _vm->_char._head; + if (_vm->_char._head) + delete _vm->_char._head; - _vm->_gfx->freeCnv(_vm->_char._objs); - if (_vm->_char._objs) delete _vm->_char._objs; + if (_vm->_char._objs) + delete _vm->_char._objs; } return; diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index 611381c5ca..176ab9cccb 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -229,7 +229,6 @@ struct Character { // ._width = 0; // _talk._height = 0; // _talk._count = 0; -// _talk._array = NULL; _head = NULL; // _head._width = 0; diff --git a/engines/parallaction/zone.cpp b/engines/parallaction/zone.cpp index a7a8b8a31b..53adb3b885 100644 --- a/engines/parallaction/zone.cpp +++ b/engines/parallaction/zone.cpp @@ -150,7 +150,6 @@ void Parallaction::freeZones(Node *list) { case kZoneDoor: free(z->u.door->_location); free(z->u.door->_background); - _vm->_gfx->freeCnv(z->u.door->_cnv); if (z->u.door->_cnv) delete z->u.door->_cnv; delete z->u.door; @@ -276,7 +275,7 @@ void Parallaction::parseZoneTypeBlock(Script &script, Zone *z) { vE0._height = u->door->_cnv->_height; uint16 _ax = (z->_flags & kFlagsClosed ? 0 : 1); - vE0._data0 = u->door->_cnv->_array[_ax]; + vE0._data0 = u->door->_cnv->getFramePtr(_ax); // _ax = (z->_flags & kFlagsClosed ? 0 : 1); // vE0._data1 = doorcnv->field_8[_ax]; @@ -356,7 +355,7 @@ void displayCharacterComment(ExamineData *data) { StaticCnv v3C; v3C._width = _vm->_char._talk->_width; v3C._height = _vm->_char._talk->_height; - v3C._data0 = _vm->_char._talk->_array[0]; + v3C._data0 = _vm->_char._talk->getFramePtr(0); v3C._data1 = NULL; //_talk->field_8[0]; _vm->_gfx->setFont("comic"); @@ -484,7 +483,7 @@ void jobToggleDoor(void *parm, Job *j) { uint16 _ax = (z->_flags & kFlagsClosed ? 0 : 1); - v14._data0 = z->u.door->_cnv->_array[_ax]; + v14._data0 = z->u.door->_cnv->getFramePtr(_ax); _vm->_gfx->flatBlitCnv(&v14, z->_left, z->_top, Gfx::kBitBack); _vm->_gfx->flatBlitCnv(&v14, z->_left, z->_top, Gfx::kBit2); -- cgit v1.2.3