aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicola Mettifogo2007-03-29 18:34:31 +0000
committerNicola Mettifogo2007-03-29 18:34:31 +0000
commit711865ef635cecac9d425976e0f0407ca137f4e5 (patch)
tree1cce36663d243b918095746a4cb5f27fa62415ff
parent623ca8802269914ab90a1127f89c66dd2cb571f1 (diff)
downloadscummvm-rg350-711865ef635cecac9d425976e0f0407ca137f4e5.tar.gz
scummvm-rg350-711865ef635cecac9d425976e0f0407ca137f4e5.tar.bz2
scummvm-rg350-711865ef635cecac9d425976e0f0407ca137f4e5.zip
- implemented destructor for Cnv, thus removing calls to Gfx::freeCnv()
- enforced use of getFramePtr instead of Cnv::_array member svn-id: r26317
-rw-r--r--engines/parallaction/animation.cpp1
-rw-r--r--engines/parallaction/defs.h11
-rw-r--r--engines/parallaction/dialogue.cpp9
-rw-r--r--engines/parallaction/graphics.cpp33
-rw-r--r--engines/parallaction/graphics.h1
-rw-r--r--engines/parallaction/inventory.cpp2
-rw-r--r--engines/parallaction/parallaction.cpp22
-rw-r--r--engines/parallaction/parallaction.h1
-rw-r--r--engines/parallaction/zone.cpp7
9 files changed, 34 insertions, 53 deletions
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);