diff options
Diffstat (limited to 'scumm')
| -rw-r--r-- | scumm/actor.cpp | 15 | ||||
| -rw-r--r-- | scumm/scumm.cpp | 2 | ||||
| -rw-r--r-- | scumm/scumm.h | 1 | 
3 files changed, 7 insertions, 11 deletions
| diff --git a/scumm/actor.cpp b/scumm/actor.cpp index ea761c538d..09163b4481 100644 --- a/scumm/actor.cpp +++ b/scumm/actor.cpp @@ -979,30 +979,25 @@ static int compareDrawOrder(const void* a, const void* b)  void ScummEngine::processActors() {  	int numactors = 0; -	// TODO : put this actors as a member array. It never has to grow or shrink -	// since _numActors is constant within a game. -	Actor** actors = new Actor * [_numActors]; -	  	// Make a list of all actors in this room  	for (int i = 1; i < _numActors; i++) {  		if (_version == 8 && _actors[i]._layer < 0)  			continue;  		if (_actors[i].isInCurrentRoom() && _actors[i]._costume) -			actors[numactors++] = &_actors[i]; +			_sortedActors[numactors++] = &_actors[i];  	}  	if (!numactors) { -		delete [] actors;  		return;  	}  	// Sort actors by position before we draw them (to ensure that actors in  	// front are drawn after those "behind" them). -	qsort(actors, numactors, sizeof (Actor*), compareDrawOrder); +	qsort(_sortedActors, numactors, sizeof (Actor*), compareDrawOrder); -	Actor** end = actors + numactors; +	Actor** end = _sortedActors + numactors;  	// Finally draw the now sorted actors -	for (Actor** ac = actors; ac != end; ++ac) { +	for (Actor** ac = _sortedActors; ac != end; ++ac) {  		Actor* a = *ac;  		CHECK_HEAP  		a->drawActorCostume(); @@ -1010,8 +1005,6 @@ void ScummEngine::processActors() {  		a->animateCostume();  	} -	delete [] actors; -  	if (_features & GF_NEW_COSTUMES)  		akos_processQueue();  } diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp index 94158ae417..b0e504d062 100644 --- a/scumm/scumm.cpp +++ b/scumm/scumm.cpp @@ -1175,6 +1175,7 @@ ScummEngine::~ScummEngine() {  	_mixer->stopAll();  	delete [] _actors; +	delete [] _sortedActors;  	delete _2byteFontPtr;  	delete _charset; @@ -1546,6 +1547,7 @@ void ScummEngine::scummInit() {  	// Allocate and Initialize actors  	Actor::initActorClass(this);  	_actors = new Actor[_numActors]; +	_sortedActors = new Actor * [_numActors];  	for (i = 0; i < _numActors; i++) {  		_actors[i]._number = i;  		_actors[i].initActor(1); diff --git a/scumm/scumm.h b/scumm/scumm.h index d5fad5ca20..5afc978229 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -462,6 +462,7 @@ protected:  	byte _numActors;  	Actor *_actors;	// Has _numActors elements +	Actor **_sortedActors;  	byte *_arraySlot;  	uint16 *_inventory; | 
