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

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Sun Dec 21 16:42:48 CET 2008


Revision: 35466
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35466&view=rev
Author:   peres001
Date:     2008-12-21 15:42:47 +0000 (Sun, 21 Dec 2008)

Log Message:
-----------
Moved more GfxObj management to Gfx object.

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/dialogue.cpp
    scummvm/trunk/engines/parallaction/gfxbase.cpp
    scummvm/trunk/engines/parallaction/graphics.cpp
    scummvm/trunk/engines/parallaction/graphics.h
    scummvm/trunk/engines/parallaction/gui_br.cpp
    scummvm/trunk/engines/parallaction/inventory.cpp
    scummvm/trunk/engines/parallaction/parallaction.cpp
    scummvm/trunk/engines/parallaction/parallaction.h
    scummvm/trunk/engines/parallaction/parallaction_br.cpp
    scummvm/trunk/engines/parallaction/parallaction_ns.cpp
    scummvm/trunk/engines/parallaction/parser.h

Modified: scummvm/trunk/engines/parallaction/dialogue.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/dialogue.cpp	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/dialogue.cpp	2008-12-21 15:42:47 UTC (rev 35466)
@@ -309,7 +309,7 @@
 	debugC(9, kDebugDialogue, "runQuestion\n");
 
 	if (_mouseButtons == kMouseLeftUp) {
-		_vm->hideDialogueStuff();
+		_vm->_gfx->freeDialogueObjects();
 		_state = NEXT_ANSWER;
 	}
 
@@ -347,7 +347,7 @@
 
 	if (_answerId != -1) {
 		_cmdList = &_q->_answers[_answerId]->_commands;
-		_vm->hideDialogueStuff();
+		_vm->_gfx->freeDialogueObjects();
 		_state = NEXT_QUESTION;
 	}
 }

Modified: scummvm/trunk/engines/parallaction/gfxbase.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/gfxbase.cpp	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/gfxbase.cpp	2008-12-21 15:42:47 UTC (rev 35466)
@@ -103,6 +103,12 @@
 	return obj;
 }
 
+GfxObj* Gfx::loadCharacterAnim(const char *name) {
+	GfxObj *obj = loadAnim(name);
+	obj->setFlags(kGfxObjCharacter);
+	obj->clearFlags(kGfxObjNormal);
+	return obj;
+}
 
 GfxObj* Gfx::loadGet(const char *name) {
 	GfxObj *obj = _disk->loadStatic(name);
@@ -140,6 +146,18 @@
 
 }
 
+void Gfx::freeLocationObjects() {
+	freeDialogueObjects();
+	clearGfxObjects(kGfxObjNormal);
+	freeLabels();
+}
+
+void Gfx::freeCharacterObjects() {
+	freeDialogueObjects();
+	clearGfxObjects(kGfxObjCharacter);
+}
+
+
 void Gfx::loadGfxObjMask(const char *name, GfxObj *obj) {
 	Common::Rect rect;
 	obj->getRect(0, rect);

Modified: scummvm/trunk/engines/parallaction/graphics.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/graphics.cpp	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/graphics.cpp	2008-12-21 15:42:47 UTC (rev 35466)
@@ -775,6 +775,11 @@
 	_balloons.clear();
 }
 
+void Gfx::freeDialogueObjects() {
+	freeItems();
+	_vm->_balloonMan->freeBalloons();
+}
+
 void Gfx::freeItems() {
 	_items.clear();
 }

Modified: scummvm/trunk/engines/parallaction/graphics.h
===================================================================
--- scummvm/trunk/engines/parallaction/graphics.h	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/graphics.h	2008-12-21 15:42:47 UTC (rev 35466)
@@ -507,6 +507,9 @@
 	GfxObj* loadAnim(const char *name);
 	GfxObj* loadGet(const char *name);
 	GfxObj* loadDoor(const char *name);
+	GfxObj* loadCharacterAnim(const char *name);
+	void freeCharacterObjects();
+	void freeLocationObjects();
 	void showGfxObj(GfxObj* obj, bool visible);
 	void clearGfxObjects(uint filter);
 	void sortScene();
@@ -526,6 +529,8 @@
 	GfxObj* registerBalloon(Frames *frames, const char *text);
 	void destroyBalloons();
 
+	void freeDialogueObjects();
+
 	// other items
 	int setItem(GfxObj* obj, uint16 x, uint16 y, byte transparentColor = 0);
 	void setItemFrame(uint item, uint16 f);

Modified: scummvm/trunk/engines/parallaction/gui_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/gui_br.cpp	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/gui_br.cpp	2008-12-21 15:42:47 UTC (rev 35466)
@@ -160,7 +160,7 @@
 
 	void cleanup() {
 		_vm->_system->showMouse(false);
-		_vm->hideDialogueStuff();
+		_vm->_gfx->freeDialogueObjects();
 
 		for (int i = 0; i < _availItems; i++) {
 			delete _lines[i];

Modified: scummvm/trunk/engines/parallaction/inventory.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/inventory.cpp	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/inventory.cpp	2008-12-21 15:42:47 UTC (rev 35466)
@@ -216,7 +216,7 @@
 }
 
 void InventoryRenderer::drawItem(ItemName name, byte *buffer, uint pitch) {
-	byte* s = _vm->_char._objs->getData(name);
+	byte* s = _vm->_objects->getData(name);
 	byte* d = buffer;
 	for (uint i = 0; i < _props->_itemHeight; i++) {
 		memcpy(d, s, _props->_itemWidth);

Modified: scummvm/trunk/engines/parallaction/parallaction.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.cpp	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/parallaction.cpp	2008-12-21 15:42:47 UTC (rev 35466)
@@ -83,11 +83,10 @@
 	delete _programExec;
 	delete _saveLoad;
 
-	_gfx->clearGfxObjects(kGfxObjCharacter | kGfxObjNormal);
-	hideDialogueStuff();
+	_gfx->freeCharacterObjects();
+	_gfx->freeLocationObjects();
 	delete _balloonMan;
 
-	freeCharacter();
 	destroyInventory();
 
 	cleanupGui();
@@ -110,6 +109,7 @@
 	_location._startPosition.x = -1000;
 	_location._startPosition.y = -1000;
 	_location._startFrame = 0;
+	_objects = 0;
 
 	_screenSize = _screenWidth * _screenHeight;
 
@@ -173,26 +173,7 @@
 }
 
 
-void Parallaction::hideDialogueStuff() {
-	_gfx->freeItems();
-	_balloonMan->freeBalloons();
-}
 
-
-void Parallaction::freeCharacter() {
-	debugC(1, kDebugExec, "freeCharacter()");
-
-	delete _objectsNames;
-	_objectsNames = 0;
-
-	_gfx->clearGfxObjects(kGfxObjCharacter);
-
-	_char.free();
-
-	return;
-}
-
-
 void Parallaction::pauseJobs() {
 	debugC(9, kDebugExec, "pausing jobs execution");
 
@@ -571,7 +552,7 @@
 void Parallaction::exitCommentMode() {
 	_input->_inputMode = Input::kInputModeGame;
 
-	hideDialogueStuff();
+	_gfx->freeDialogueObjects();
 	_gfx->setHalfbriteMode(false);
 
 	_cmdExec->run(_commentZone->_commands, _commentZone);
@@ -848,7 +829,6 @@
 Character::Character(Parallaction *vm) : _vm(vm), _ani(new Animation) {
 	_talk = NULL;
 	_head = NULL;
-	_objs = NULL;
 
 	_direction = WALK_DOWN;
 	_step = 0;
@@ -877,8 +857,6 @@
 
 	delete _walker;
 	_walker = 0;
-
-	free();
 }
 
 void Character::getFoot(Common::Point &foot) {
@@ -918,22 +896,7 @@
 	_engineFlags |= kEngineWalking;
 }
 
-void Character::free() {
 
-	delete _talk;
-	delete _head;
-	delete _objs;
-	delete _ani->gfxobj;
-
-	_talk = NULL;
-	_head = NULL;
-	_objs = NULL;
-	_ani->gfxobj = NULL;
-
-	return;
-}
-
-
 void Character::setName(const char *name) {
 	_name.bind(name);
 }

Modified: scummvm/trunk/engines/parallaction/parallaction.h
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.h	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/parallaction.h	2008-12-21 15:42:47 UTC (rev 35466)
@@ -198,7 +198,6 @@
 	AnimationPtr	_ani;
 	GfxObj			*_head;
 	GfxObj			*_talk;
-	GfxObj			*_objs;
 	PathBuilder		*_builder;
 	PathWalker		*_walker;
 	PointList		_walkPath;
@@ -210,8 +209,6 @@
 	void setFoot(const Common::Point &foot);
 	void scheduleWalk(int16 x, int16 y);
 
-	void free();
-
 protected:
 	CharacterName	_name;
 
@@ -281,6 +278,7 @@
 	// game utilities
 	Table				*_globalFlagsNames;
 	Table				*_objectsNames;
+	GfxObj				*_objects;
 	Table				*_callableNames;
 	Table				*_localFlagNames;
 	CommandExec			*_cmdExec;
@@ -314,7 +312,6 @@
 	void 	exitCommentMode();
 	void	updateView();
 	void 	drawAnimations();
-	void	freeCharacter();
 	void	doLocationEnterTransition();
 	void	allocateLocationSlot(const char *name);
 	void	finalizeLocationParsing();
@@ -325,7 +322,6 @@
 	void	beep();
 	void	pauseJobs();
 	void	resumeJobs();
-	void 	hideDialogueStuff();
 	uint 	getInternLanguage();
 	void 	setInternLanguage(uint id);
 	void 	enterDialogueMode(ZonePtr z);
@@ -388,7 +384,6 @@
 	virtual void 	runPendingZones();
 	virtual void 	cleanupGame();
 
-
 	void 	switchBackground(const char* background, const char* mask);
 
 private:
@@ -405,6 +400,7 @@
 	void	startEndPartSequence();
 	void	loadProgram(AnimationPtr a, const char *filename);
 	void	freeLocation(bool removeAll);
+	void 	freeCharacter();
 
 
 	//  callables data
@@ -478,7 +474,6 @@
 	virtual void runPendingZones();
 	virtual void cleanupGame();
 
-
 	void setupSubtitles(char *s, char *s2, int y);
 	void clearSubtitles();
 
@@ -509,6 +504,7 @@
 	void	freeLocation(bool removeAll);
 	void 	loadProgram(AnimationPtr a, const char *filename);
 	void 	startGui(bool showSplash);
+	void 	freeCharacter();
 
 	typedef void (Parallaction_br::*Callable)(void*);
 	const Callable *_callables;

Modified: scummvm/trunk/engines/parallaction/parallaction_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction_br.cpp	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/parallaction_br.cpp	2008-12-21 15:42:47 UTC (rev 35466)
@@ -100,6 +100,7 @@
 
 Parallaction_br::~Parallaction_br() {
 	freeFonts();
+	freeCharacter();
 
 	delete _locationParser;
 	delete _programParser;
@@ -178,14 +179,24 @@
 	}
 }
 
+void Parallaction_br::freeCharacter() {
+	_gfx->freeCharacterObjects();
+
+	delete _char._talk;
+	delete _char._ani->gfxobj;
+
+	_char._talk = 0;
+	_char._ani->gfxobj = 0;
+}
+
 void Parallaction_br::freeLocation(bool removeAll) {
 
 	// free open location stuff
 	clearSubtitles();
-	_gfx->clearGfxObjects(kGfxObjNormal);
-	_gfx->freeLabels();
 	_subtitle[0] = _subtitle[1] = -1;
 
+	_gfx->freeLocationObjects();
+
 	_location._animations.remove(_char._ani);
 	_location.cleanup(removeAll);
 	_location._animations.push_front(_char._ani);
@@ -195,7 +206,7 @@
 void Parallaction_br::cleanupGame() {
 	freeLocation(true);
 
-//		freeCharacter();
+	freeCharacter();
 
 	delete _globalFlagsNames;
 	delete _objectsNames;
@@ -233,9 +244,9 @@
 
 		// TODO: maybe handle this into Disk
 		if (getPlatform() == Common::kPlatformPC) {
-			_char._objs = _disk->loadObjects("icone.ico");
+			_objects = _disk->loadObjects("icone.ico");
 		} else {
-			_char._objs = _disk->loadObjects("icons.ico");
+			_objects = _disk->loadObjects("icons.ico");
 		}
 
 		parseLocation("common.slf");
@@ -299,15 +310,16 @@
 
 
 void Parallaction_br::changeCharacter(const char *name) {
+
 	const char *charName = _char.getName();
 
 	if (scumm_stricmp(charName, name)) {
+		freeCharacter();
+
 		debugC(1, kDebugExec, "changeCharacter(%s)", name);
 
 		_char.setName(name);
-		_char._ani->gfxobj = _gfx->loadAnim(name);
-		_char._ani->gfxobj->setFlags(kGfxObjCharacter);
-		_char._ani->gfxobj->clearFlags(kGfxObjNormal);
+		_char._ani->gfxobj = _gfx->loadCharacterAnim(name);
 		_char._talk = _disk->loadTalk(name);
 	}
 

Modified: scummvm/trunk/engines/parallaction/parallaction_ns.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction_ns.cpp	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/parallaction_ns.cpp	2008-12-21 15:42:47 UTC (rev 35466)
@@ -202,13 +202,13 @@
 
 Parallaction_ns::~Parallaction_ns() {
 	freeFonts();
+	freeCharacter();
 
 	delete _locationParser;
 	delete _programParser;
 	freeLocation(true);
 
 	_location._animations.remove(_char._ani);
-
 }
 
 
@@ -405,18 +405,14 @@
 		return;
 	}
 
-	// freeCharacter takes responsibility for checking
-	// character for sanity before memory is freed
 	freeCharacter();
 
-	_char._ani->gfxobj = _gfx->loadAnim(_char.getFullName());
-	_char._ani->gfxobj->setFlags(kGfxObjCharacter);
-	_char._ani->gfxobj->clearFlags(kGfxObjNormal);
+	_char._ani->gfxobj = _gfx->loadCharacterAnim(_char.getFullName());
 
 	if (!_char.dummy()) {
 		_char._head = _disk->loadHead(_char.getBaseName());
 		_char._talk = _disk->loadTalk(_char.getBaseName());
-		_char._objs = _disk->loadObjects(_char.getBaseName());
+		_objects = _disk->loadObjects(_char.getBaseName());
 		_objectsNames = _disk->loadTable(_char.getBaseName());
 
 		_soundMan->playCharacterMusic(_char.getBaseName());
@@ -437,6 +433,23 @@
 	return;
 }
 
+void Parallaction_ns::freeCharacter() {
+	_gfx->freeCharacterObjects();
+
+	delete _char._talk;
+	delete _char._head;
+	delete _char._ani->gfxobj;
+	delete _objects;
+	delete _objectsNames;
+
+	_char._talk = 0;
+	_char._head = 0;
+	_char._ani->gfxobj = 0;
+
+	_objects = 0;
+	_objectsNames = 0;
+}
+
 void Parallaction_ns::freeLocation(bool removeAll) {
 	debugC(2, kDebugExec, "freeLocation");
 
@@ -447,7 +460,7 @@
 
 	_localFlagNames->clear();
 
-	_gfx->clearGfxObjects(kGfxObjNormal);
+	_gfx->freeLocationObjects();
 
 	_location._animations.remove(_char._ani);
 	_location.cleanup(removeAll);

Modified: scummvm/trunk/engines/parallaction/parser.h
===================================================================
--- scummvm/trunk/engines/parallaction/parser.h	2008-12-21 15:41:41 UTC (rev 35465)
+++ scummvm/trunk/engines/parallaction/parser.h	2008-12-21 15:42:47 UTC (rev 35466)
@@ -190,6 +190,7 @@
 	Dialogue	*parseDialogue();
 	void		resolveDialogueForwards(Dialogue *dialogue, uint numQuestions, Table &forwards);
 	Answer		*parseAnswer();
+	void 		parseAnswerVariants(Answer *answer);
 	Question	*parseQuestion();
 
 	void		parseZone(ZoneList &list, char *name);


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