[Scummvm-cvs-logs] SF.net SVN: scummvm: [26059] scummvm/trunk/engines/parallaction

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Sat Mar 10 15:52:34 CET 2007


Revision: 26059
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26059&view=rev
Author:   peres001
Date:     2007-03-10 06:52:33 -0800 (Sat, 10 Mar 2007)

Log Message:
-----------
character loading/freeing routines now also handle Heads and Talks, instead of having scattered code around

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/dialogue.cpp
    scummvm/trunk/engines/parallaction/graphics.cpp
    scummvm/trunk/engines/parallaction/parallaction.cpp
    scummvm/trunk/engines/parallaction/parallaction.h
    scummvm/trunk/engines/parallaction/zone.cpp

Modified: scummvm/trunk/engines/parallaction/dialogue.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/dialogue.cpp	2007-03-10 14:15:47 UTC (rev 26058)
+++ scummvm/trunk/engines/parallaction/dialogue.cpp	2007-03-10 14:52:33 UTC (rev 26059)
@@ -229,15 +229,13 @@
 		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 @@
 	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 @@
 
 		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 @@
 	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 @@
 			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 @@
 				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,

Modified: scummvm/trunk/engines/parallaction/graphics.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/graphics.cpp	2007-03-10 14:15:47 UTC (rev 26058)
+++ scummvm/trunk/engines/parallaction/graphics.cpp	2007-03-10 14:52:33 UTC (rev 26059)
@@ -926,7 +926,7 @@
 	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;

Modified: scummvm/trunk/engines/parallaction/parallaction.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.cpp	2007-03-10 14:15:47 UTC (rev 26058)
+++ scummvm/trunk/engines/parallaction/parallaction.cpp	2007-03-10 14:52:33 UTC (rev 26059)
@@ -56,6 +56,8 @@
 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 @@
 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 @@
 	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 @@
 	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 @@
 		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);

Modified: scummvm/trunk/engines/parallaction/parallaction.h
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.h	2007-03-10 14:15:47 UTC (rev 26058)
+++ scummvm/trunk/engines/parallaction/parallaction.h	2007-03-10 14:52:33 UTC (rev 26059)
@@ -119,7 +119,7 @@
 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;

Modified: scummvm/trunk/engines/parallaction/zone.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/zone.cpp	2007-03-10 14:15:47 UTC (rev 26058)
+++ scummvm/trunk/engines/parallaction/zone.cpp	2007-03-10 14:52:33 UTC (rev 26059)
@@ -37,6 +37,7 @@
 Node _animations = { NULL, NULL };
 
 extern Node helperNode;
+extern StaticCnv	_yourHead;
 
 Zone *findZone(const char *name) {
 
@@ -365,13 +366,11 @@
 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,16 +381,10 @@
 	_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 @@
 
 	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 @@
 
 	_vm->_graphics->copyScreen(Graphics::kBitBack, Graphics::kBitFront);
 
-//	printf("done");
-
 	return;
 }
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list