diff options
author | Nicola Mettifogo | 2007-03-10 14:52:33 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2007-03-10 14:52:33 +0000 |
commit | 479c8bdc18080e1d39740fc151bcb88628382a5a (patch) | |
tree | ac576e808997beeec88c250f8db74b83fb308e06 /engines/parallaction | |
parent | 6ee9e52f4b1c1481a88d1285f8e5c53e33939255 (diff) | |
download | scummvm-rg350-479c8bdc18080e1d39740fc151bcb88628382a5a.tar.gz scummvm-rg350-479c8bdc18080e1d39740fc151bcb88628382a5a.tar.bz2 scummvm-rg350-479c8bdc18080e1d39740fc151bcb88628382a5a.zip |
character loading/freeing routines now also handle Heads and Talks, instead of having scattered code around
svn-id: r26059
Diffstat (limited to 'engines/parallaction')
-rw-r--r-- | engines/parallaction/dialogue.cpp | 23 | ||||
-rw-r--r-- | engines/parallaction/graphics.cpp | 2 | ||||
-rw-r--r-- | engines/parallaction/parallaction.cpp | 19 | ||||
-rw-r--r-- | engines/parallaction/parallaction.h | 2 | ||||
-rw-r--r-- | engines/parallaction/zone.cpp | 27 |
5 files changed, 35 insertions, 38 deletions
diff --git a/engines/parallaction/dialogue.cpp b/engines/parallaction/dialogue.cpp index d0bd979b69..27ba38ded0 100644 --- a/engines/parallaction/dialogue.cpp +++ b/engines/parallaction/dialogue.cpp @@ -229,15 +229,13 @@ void runDialogue(SpeakData *data) { debugC(1, kDebugDialogue, "runDialogue: special trick for 'museum' location"); } - _vm->_disk->loadTalk(_vm->_characterName, &_characterFace); - _vm->_graphics->setFont("comic"); Cnv v6E; StaticCnv v5C, v48; if (!scumm_stricmp(data->_name, "yourself") || data->_name[0] == '\0') { - memcpy(&v6E, &_characterFace, sizeof(Cnv)); + memcpy(&v6E, &_yourTalk, sizeof(Cnv)); debugC(1, kDebugDialogue, "runDialogue: using default character head"); } else { debugC(1, kDebugDialogue, "runDialogue: loading 2nd character head '%s'", _vm->_characterName); @@ -248,8 +246,8 @@ void runDialogue(SpeakData *data) { v5C._width = v6E._width; v5C._height = v6E._height; - v48._width = _characterFace._width; - v48._height = _characterFace._height; + v48._width = _yourTalk._width; + v48._height = _yourTalk._height; bool displayedAnswers = false; int16 question_width = 0, question_height = 0; @@ -262,8 +260,8 @@ void runDialogue(SpeakData *data) { v5C._data0 = v6E._array[v60->_mood & 0xF]; // v5C._data1 = v6E.field_8[v60->_mood & 0xF]; - v48._data0 = _characterFace._array[0]; -// v48._data1 = _characterFace.field_8[0]; + v48._data0 = _yourTalk._array[0]; +// v48._data1 = _yourTalk.field_8[0]; // display Question if any if (scumm_stricmp(v60->_text, "NULL")) { @@ -497,9 +495,6 @@ void runDialogue(SpeakData *data) { debugC(1, kDebugDialogue, "runDialogue: out of dialogue loop"); _vm->_graphics->copyScreen(Graphics::kBitBack, Graphics::kBitFront); - _vm->_graphics->freeCnv(&_characterFace); - debugC(1, kDebugDialogue, "runDialogue: 1st character head free'd"); - if (scumm_stricmp(data->_name, "yourself") || data->_name[0] == '\0') { _vm->_graphics->freeCnv(&v6E); debugC(1, kDebugDialogue, "runDialogue: 2nd character head free'd"); @@ -551,8 +546,8 @@ int16 selectAnswer(Question *q, StaticCnv *cnv) { 0 ); - cnv->_data0 = _characterFace._array[q->_answer_moods[_di] & 0xF]; -// cnv->_data1 = _characterFace.field_8[q->_answer_moods[_di] & 0xF]; + cnv->_data0 = _yourTalk._array[q->_answer_moods[_di] & 0xF]; +// cnv->_data1 = _yourTalk.field_8[q->_answer_moods[_di] & 0xF]; _vm->_graphics->flatBlitCnv( cnv, @@ -593,8 +588,8 @@ int16 selectAnswer(Question *q, StaticCnv *cnv) { 0 ); - cnv->_data0 = _characterFace._array[q->_answer_moods[_si] & 0xF]; -// cnv->_data1 = _characterFace.field_8[q->_answer_moods[_si] & 0xF]; + cnv->_data0 = _yourTalk._array[q->_answer_moods[_si] & 0xF]; +// cnv->_data1 = _yourTalk.field_8[q->_answer_moods[_si] & 0xF]; _vm->_graphics->flatBlitCnv( cnv, diff --git a/engines/parallaction/graphics.cpp b/engines/parallaction/graphics.cpp index 1b2168e8ee..775035e78a 100644 --- a/engines/parallaction/graphics.cpp +++ b/engines/parallaction/graphics.cpp @@ -926,7 +926,7 @@ void Graphics::freeCnv(Cnv *cnv) { for (uint16 _si = 0; _si < cnv->_count; _si++) { free(cnv->_array[_si]); } - free(cnv->_array); + if (cnv->_array) free(cnv->_array); cnv->_array = NULL; return; diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp index cb31ad63f4..1a958eb3e9 100644 --- a/engines/parallaction/parallaction.cpp +++ b/engines/parallaction/parallaction.cpp @@ -56,6 +56,8 @@ uint32 _engineFlags = 0; char *_objectsNames[100]; Zone *_activeZone = NULL; Animation _yourself; +StaticCnv _yourHead; +Cnv _yourTalk; uint16 _score = 1; Command *_locationACommands = NULL; Command *_locationCommands = NULL; @@ -131,7 +133,6 @@ Point _firstPosition = { -1000, -1000 }; char _newLocation[100]; char *_globalTable[32]; uint16 _firstFrame = 0; -Cnv _characterFace; byte _mouseHidden = 0; Node _locationWalkNodes = { 0, 0 }; uint32 _commandFlags = 0; @@ -261,6 +262,17 @@ int Parallaction::init() { memset(_locationNames, 0, 120*32); _numLocations = 0; + _yourTalk._width = 0; + _yourTalk._height = 0; + _yourTalk._count = 0; + _yourTalk._array = NULL; + + _yourHead._width = 0; + _yourHead._height = 0; + _yourHead._data0 = NULL; + _yourHead._data1 = NULL; + _yourHead._data2 = NULL; + _yourself._zone.pos._position._x = 150; _yourself._zone.pos._position._y = 100; initInventory(); @@ -820,6 +832,8 @@ void freeCharacterFrames() { if (_vm->_characterName[0] != 'D') { _vm->_graphics->freeCnv(&_miniCharacterFrames); _vm->freeTable(_objectsNames); + _vm->_graphics->freeCnv(&_yourTalk); + _vm->_graphics->freeStaticCnv(&_yourHead); } return; @@ -858,6 +872,9 @@ void Parallaction::changeCharacter(const char *name) { strcpy(path, v32); _disk->loadFrames(path, &_tempFrames); + _disk->loadHead(path, &_yourHead); + _disk->loadTalk(path, &_yourTalk); + if (name[0] != 'D') { sprintf(path, "mini%s", v32); _disk->loadFrames(path, &_miniCharacterFrames); diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index 65afe9da94..6309fd442b 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -119,7 +119,7 @@ extern char *_globalTable[]; extern char _saveData1[]; extern Point _firstPosition; // starting position after load game?? extern uint16 _firstFrame; // starting frame after load game?? -extern Cnv _characterFace; +extern Cnv _yourTalk; extern byte _mouseHidden; extern uint32 _commandFlags; extern Cnv _tempFrames; diff --git a/engines/parallaction/zone.cpp b/engines/parallaction/zone.cpp index 82669c3ca4..bfb730b856 100644 --- a/engines/parallaction/zone.cpp +++ b/engines/parallaction/zone.cpp @@ -37,6 +37,7 @@ Node _zones = { NULL, NULL }; Node _animations = { NULL, NULL }; extern Node helperNode; +extern StaticCnv _yourHead; Zone *findZone(const char *name) { @@ -365,13 +366,11 @@ void Parallaction::parseZoneTypeBlock(Script &script, Zone *z) { void displayCharacterComment(ExamineData *data) { if (data->_description == NULL) return; - _vm->_disk->loadTalk(_vm->_characterName, &_characterFace); - StaticCnv v3C; - v3C._width = _characterFace._width; - v3C._height = _characterFace._height; - v3C._data0 = _characterFace._array[0]; - v3C._data1 = NULL; //_characterFace.field_8[0]; + v3C._width = _yourTalk._width; + v3C._height = _yourTalk._height; + v3C._data0 = _yourTalk._array[0]; + v3C._data1 = NULL; //_yourTalk.field_8[0]; v3C._data2 = NULL; _vm->_graphics->setFont("comic"); @@ -382,15 +381,9 @@ void displayCharacterComment(ExamineData *data) { _vm->_graphics->drawBalloon(140, 10, v28, v26, 0); _vm->_graphics->displayWrappedString(data->_description, 140, 10, 130, 0); -// printf("wait left"); - waitUntilLeftClick(); _vm->_graphics->copyScreen(Graphics::kBitBack, Graphics::kBitFront); - _vm->_graphics->freeCnv(&_characterFace); - -// printf("done"); - return; } @@ -408,24 +401,18 @@ void displayItemComment(ExamineData *data) { if (data->_description == NULL) return; -// printf("displayItemComment()..."); - char v68[PATH_LEN]; strcpy(v68, data->_filename); _vm->_disk->loadStatic(v68, &data->_cnv); _vm->_graphics->flatBlitCnv(&data->_cnv, 140, (SCREEN_HEIGHT - data->_cnv._height)/2, Graphics::kBitFront, data->_cnv._data1); _vm->_graphics->freeStaticCnv(&data->_cnv); - StaticCnv cnv; - _vm->_disk->loadHead(_vm->_characterName, &cnv); - int16 v6A = 0, v6C = 0; _vm->_graphics->setFont("comic"); _vm->_graphics->getStringExtent(data->_description, 130, &v6C, &v6A); _vm->_graphics->drawBalloon(0, 90, v6C, v6A, 0); - _vm->_graphics->flatBlitCnv(&cnv, 100, 152, Graphics::kBitFront, cnv._data1); - _vm->_graphics->freeStaticCnv(&cnv); + _vm->_graphics->flatBlitCnv(&_yourHead, 100, 152, Graphics::kBitFront, _yourHead._data1); _vm->_graphics->displayWrappedString(data->_description, 0, 90, 130, 0); jobEraseAnimations((void*)1, NULL); @@ -434,8 +421,6 @@ void displayItemComment(ExamineData *data) { _vm->_graphics->copyScreen(Graphics::kBitBack, Graphics::kBitFront); -// printf("done"); - return; } |