diff options
| author | lukaslw | 2014-05-29 19:46:48 +0200 | 
|---|---|---|
| committer | lukaslw | 2014-06-22 20:08:19 +0200 | 
| commit | 2e1f7db043b0f960c2325e2ec3946ba375d78988 (patch) | |
| tree | cf38554cd463efcd68507ea5866fc96134083c69 | |
| parent | ac845b5b98849ed328534abe5dd82e528255ae05 (diff) | |
| download | scummvm-rg350-2e1f7db043b0f960c2325e2ec3946ba375d78988.tar.gz scummvm-rg350-2e1f7db043b0f960c2325e2ec3946ba375d78988.tar.bz2 scummvm-rg350-2e1f7db043b0f960c2325e2ec3946ba375d78988.zip | |
PRINCE: showBackAnims anim type 2, memory leaks debugging
| -rw-r--r-- | engines/prince/animation.cpp | 7 | ||||
| -rw-r--r-- | engines/prince/animation.h | 6 | ||||
| -rw-r--r-- | engines/prince/hero.cpp | 2 | ||||
| -rw-r--r-- | engines/prince/prince.cpp | 187 | ||||
| -rw-r--r-- | engines/prince/script.cpp | 22 | 
5 files changed, 160 insertions, 64 deletions
| diff --git a/engines/prince/animation.cpp b/engines/prince/animation.cpp index c27505735e..e2197c22f2 100644 --- a/engines/prince/animation.cpp +++ b/engines/prince/animation.cpp @@ -68,12 +68,12 @@ int16 Animation::getLoopCount() const {  }  // AH_Fazy -uint Animation::getPhaseCount() const { +int32 Animation::getPhaseCount() const {  	return READ_LE_UINT16(_data + 4);  }  // AH_Ramki -uint Animation::getFrameCount() const { +int32 Animation::getFrameCount() const {  	return READ_LE_UINT16(_data + 6);  } @@ -113,7 +113,7 @@ int16 Animation::getFrameHeight(uint frameIndex) const {  	return READ_LE_UINT16(frameData + 2);  } -Graphics::Surface *Animation::getFrame(uint frameIndex) { +Graphics::Surface *Animation::getFrame(uint frameIndex, int i, int phase) {  	byte *frameData = _data + READ_LE_UINT32(_data + 16 + frameIndex * 4);  	int16 width = READ_LE_UINT16(frameData + 0);  	int16 height = READ_LE_UINT16(frameData + 2); @@ -132,6 +132,7 @@ Graphics::Surface *Animation::getFrame(uint frameIndex) {  		}  		free(ddata);  	} else { +		debug("nr: %d, phase: %d", i, phase);  		// Uncompressed          for (uint16 i = 0; i < height; i++) {              memcpy(surf->getBasePtr(0, i), frameData + 4 + width * i, width); diff --git a/engines/prince/animation.h b/engines/prince/animation.h index d5b5938ce0..03ea220c91 100644 --- a/engines/prince/animation.h +++ b/engines/prince/animation.h @@ -40,12 +40,12 @@ public:  	int16 getLoopCount() const;  	int16 getBaseX() const;  	int16 getBaseY() const; -	uint getPhaseCount() const; -	uint getFrameCount() const; +	int32 getPhaseCount() const; +	int32 getFrameCount() const;  	int16 getPhaseOffsetX(uint phaseIndex) const;  	int16 getPhaseOffsetY(uint phaseIndex) const;  	int16 getPhaseFrameIndex(uint phaseIndex) const; -	Graphics::Surface *getFrame(uint frameIndex); +	Graphics::Surface *getFrame(uint frameIndex, int i, int phase);  	int16 getFrameWidth(uint frameIndex) const;  	int16 getFrameHeight(uint frameIndex) const;  	int16 getZoom(uint16 offset) const; diff --git a/engines/prince/hero.cpp b/engines/prince/hero.cpp index 58f729a73e..37b9679dbc 100644 --- a/engines/prince/hero.cpp +++ b/engines/prince/hero.cpp @@ -80,7 +80,7 @@ bool Hero::loadAnimSet(uint32 animSetNr) {  Graphics::Surface *Hero::getSurface() {  	if (_moveSet[_moveSetType]) {  		int16 phaseFrameIndex = _moveSet[_moveSetType]->getPhaseFrameIndex(_phase); -		Graphics::Surface *heroFrame = _moveSet[_moveSetType]->getFrame(phaseFrameIndex); +		Graphics::Surface *heroFrame = _moveSet[_moveSetType]->getFrame(phaseFrameIndex, 0, 0);  		return heroFrame;  	}  	return NULL; diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index 73789efedb..c631038fe8 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -619,6 +619,16 @@ void PrinceEngine::keyHandler(Common::Event event) {  	case Common::KEYCODE_l:  		_mainHero->_middleX += 5;  		break; +	case Common::KEYCODE_EQUALS: +		if (_debugger->_locationNr > 1) { +			_debugger->_locationNr--; +		} +		break; +	case Common::KEYCODE_BACKSPACE: +		if (_debugger->_locationNr < 43) { +			_debugger->_locationNr++; +		} +		break;  	}  } @@ -741,9 +751,10 @@ void PrinceEngine::showBackAnims() {  	for (uint i = 0; i < _backAnimList.size(); i++) {  		int activeSubAnim = _backAnimList[i]._seq._currRelative; -		if (_backAnimList[i].backAnims[activeSubAnim]._state == 0 && _backAnimList[i]._seq._type != 2 && _backAnimList[i]._seq._type != 3 && _backAnimList[i]._seq._type != 4) { //TEMP  +		if (_backAnimList[i].backAnims[activeSubAnim]._state == 0 && _backAnimList[i]._seq._type != 0 && _backAnimList[i]._seq._type != 1 && _backAnimList[i]._seq._type != 3 && _backAnimList[i]._seq._type != 4) { //TEMP   			_backAnimList[i]._seq._counter++; +			/*  			if (_backAnimList[i]._seq._type == 2) {  				if (_backAnimList[i]._seq._currRelative == 0) {  					if (_backAnimList[i]._seq._counter >= _backAnimList[i]._seq._data) { @@ -751,6 +762,68 @@ void PrinceEngine::showBackAnims() {  					}  				}  			} +			*/ +			if (_backAnimList[i]._seq._type == 2) { +				//not_type_1 +				if (_backAnimList[i]._seq._currRelative == 0) { +					//zero +					debug("counter: %d, data: %d", _backAnimList[i]._seq._counter, _backAnimList[i]._seq._data); +					if (_backAnimList[i]._seq._counter >= _backAnimList[i]._seq._data) { +						if (_backAnimList[i]._seq._anims > 2) { +							int rnd = _randomSource.getRandomNumber(_backAnimList[i]._seq._anims - 2); //? +							rnd++; +							//debug("rnd: %d", rnd); +							_backAnimList[i]._seq._currRelative = rnd; +							_backAnimList[i]._seq._current = rnd; // or nr of animation from lst +							activeSubAnim = rnd; +						} +						//only_1_type_2 +						//SetBackAnim +						int start = _backAnimList[i].backAnims[activeSubAnim]._basaData._start; +						if (start != -1) { +							_backAnimList[i].backAnims[activeSubAnim]._frame = start; +							_backAnimList[i].backAnims[activeSubAnim]._showFrame = start; +							_backAnimList[i].backAnims[activeSubAnim]._loopFrame = start; +						} +						int end = _backAnimList[i].backAnims[activeSubAnim]._basaData._end; +						if (end != -1) { +							_backAnimList[i].backAnims[activeSubAnim]._lastFrame = end; +						} +						_backAnimList[i]._seq._counter = 0; +						_backAnimList[i].backAnims[activeSubAnim]._state = 0; +						//show_bugger +						if (_backAnimList[i].backAnims[activeSubAnim]._frame < _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() - 1) { +							_backAnimList[i].backAnims[activeSubAnim]._frame++; +						} +						//not_end +					} +				} else { +					/* +					_backAnimList[i]._seq._currRelative = 0; +					_backAnimList[i]._seq._current = 0; // or nr of animation from lst +					activeSubAnim = 0; +					//only_1_type_1 +					//SetBackAnim +					int start = _backAnimList[i].backAnims[activeSubAnim]._basaData._start; +					if (start != -1) { +						_backAnimList[i].backAnims[activeSubAnim]._frame = start; +						_backAnimList[i].backAnims[activeSubAnim]._showFrame = start; +						_backAnimList[i].backAnims[activeSubAnim]._loopFrame = start; +					} +					int end = _backAnimList[i].backAnims[activeSubAnim]._basaData._end; +					if (end != -1) { +						_backAnimList[i].backAnims[activeSubAnim]._lastFrame = end; +					} +					_backAnimList[i]._seq._counter = 0; +					_backAnimList[i].backAnims[activeSubAnim]._state = 0; +					//show_bugger +					if (_backAnimList[i].backAnims[activeSubAnim]._frame < _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() - 1) { +						_backAnimList[i].backAnims[activeSubAnim]._frame++; +					} +					//not_end +					*/ +				} +			}  			//not_type_2_1:  			if (_backAnimList[i]._seq._type == 3) { @@ -778,13 +851,14 @@ void PrinceEngine::showBackAnims() {  			}  			//not_type_3_1:  			//show_bugger +			debug("lastFrame: %d", _backAnimList[i].backAnims[activeSubAnim]._lastFrame);  			if (_backAnimList[i].backAnims[activeSubAnim]._frame == _backAnimList[i].backAnims[activeSubAnim]._lastFrame - 1) { // TEST  				//loop_back_anim  				_backAnimList[i].backAnims[activeSubAnim]._frame = _backAnimList[i].backAnims[activeSubAnim]._loopFrame;  				//change_back_anim  				if (_backAnimList[i]._seq._type == 0) {  					//show_bugger -					if (_backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() > 1) { +					if (_backAnimList[i].backAnims[activeSubAnim]._frame < _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() - 1) {  						_backAnimList[i].backAnims[activeSubAnim]._frame++;  					}  					//not_end @@ -792,7 +866,7 @@ void PrinceEngine::showBackAnims() {  					//repeat_rnd  					if (_backAnimList[i]._seq._anims <= 1) {  						//show_bugger -						if (_backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() > 1) { +						if (_backAnimList[i].backAnims[activeSubAnim]._frame < _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() - 1) {  							_backAnimList[i].backAnims[activeSubAnim]._frame++;  						}  						//not_end @@ -820,52 +894,44 @@ void PrinceEngine::showBackAnims() {  						_backAnimList[i]._seq._counter = 0;  						_backAnimList[i].backAnims[activeSubAnim]._state = 0;  						//show_bugger -						if (_backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() > 1) { +						if (_backAnimList[i].backAnims[activeSubAnim]._frame < _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() - 1) {  							_backAnimList[i].backAnims[activeSubAnim]._frame++;  						}  						//not_end  					}  				} else if (_backAnimList[i]._seq._type == 2) { -					//not_type_1 -					if (_backAnimList[i]._seq._currRelative == 0) { -						//zero -						if (_backAnimList[i]._seq._counter < _backAnimList[i]._seq._data) { -							//show_bugger -							_backAnimList[i].backAnims[activeSubAnim]._frame++; -							//not_end -						} else { -							if (_backAnimList[i]._seq._anims > 2) { //?? -								int rnd = _randomSource.getRandomNumber(_backAnimList[i]._seq._anims - 2); //? -								rnd++; -								//debug("rnd: %d", rnd); -								_backAnimList[i]._seq._currRelative = rnd; -								_backAnimList[i]._seq._current = rnd; // or nr of animation from lst -								activeSubAnim = rnd; -							} -							//only_1_type_2 -						} -					} else { +					if (_backAnimList[i]._seq._currRelative != 0) {  						_backAnimList[i]._seq._currRelative = 0;  						_backAnimList[i]._seq._current = 0; // or nr of animation from lst  						activeSubAnim = 0;  						//only_1_type_1 -					} -					//SetBackAnim -					int start = _backAnimList[i].backAnims[activeSubAnim]._basaData._start; -					if (start != -1) { -						_backAnimList[i].backAnims[activeSubAnim]._frame = start; -						_backAnimList[i].backAnims[activeSubAnim]._showFrame = start; -						_backAnimList[i].backAnims[activeSubAnim]._loopFrame = start; -					} -					int end = _backAnimList[i].backAnims[activeSubAnim]._basaData._end; -					if (end != -1) { -						_backAnimList[i].backAnims[activeSubAnim]._lastFrame = end; -					} -					_backAnimList[i]._seq._counter = 0; -					_backAnimList[i].backAnims[activeSubAnim]._state = 0; -					//show_bugger -					_backAnimList[i].backAnims[activeSubAnim]._frame++; -					//not_end +						//SetBackAnim +						int start = _backAnimList[i].backAnims[activeSubAnim]._basaData._start; +						if (start != -1) { +							_backAnimList[i].backAnims[activeSubAnim]._frame = start; +							_backAnimList[i].backAnims[activeSubAnim]._showFrame = start; +							_backAnimList[i].backAnims[activeSubAnim]._loopFrame = start; +						} +						int end = _backAnimList[i].backAnims[activeSubAnim]._basaData._end; +						if (end != -1) { +							_backAnimList[i].backAnims[activeSubAnim]._lastFrame = end; +						} +						_backAnimList[i]._seq._counter = 0; +						_backAnimList[i].backAnims[activeSubAnim]._state = 0; +						/* +						//show_bugger +						if (_backAnimList[i].backAnims[activeSubAnim]._frame < _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() - 1) { +							_backAnimList[i].backAnims[activeSubAnim]._frame++; +						} +						//not_end +						*/ +					} /*else if (_backAnimList[i]._seq._counter < _backAnimList[i]._seq._data) { +						//show_bugger +						if (_backAnimList[i].backAnims[activeSubAnim]._frame < _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseCount() - 1) { +							_backAnimList[i].backAnims[activeSubAnim]._frame++; +						} +						//not_end +					}*/  				} else if (_backAnimList[i]._seq._type == 3) {  					//not_type_2  					_backAnimList[i]._seq._currRelative = 0; @@ -895,6 +961,9 @@ void PrinceEngine::showBackAnims() {  			//debug("frameCount: %d", frameCount);  			//debug("phaseCount: %d", phaseCount);  			int phase = _backAnimList[i].backAnims[activeSubAnim]._showFrame; +			if (phase < 0) { +				debug("phase < 0"); +			}  			if (phase >= phaseCount) {  				debug("p >= pC: i-%d, activ-%d, phase-%d, phaseC-%d", i, activeSubAnim, phase, phaseCount);  				debug("type: %d", _backAnimList[i]._seq._type); @@ -908,17 +977,39 @@ void PrinceEngine::showBackAnims() {  				debug("pFrameIndex2: i-%d, activ-%d, phaseFrInd-%d, frameC-%d", i, activeSubAnim, phaseFrameIndex, frameCount);  				debug("type: %d", _backAnimList[i]._seq._type);  			} -			Graphics::Surface *backAnimSurface = _backAnimList[i].backAnims[activeSubAnim]._animData->getFrame(phaseFrameIndex); //still out of bounds +  			int x = _backAnimList[i].backAnims[activeSubAnim]._x + _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseOffsetX(phase);  			int y = _backAnimList[i].backAnims[activeSubAnim]._y + _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseOffsetY(phase); -			//debug("x: %d", x); -			//debug("picWindowX: %d", _picWindowX); -			//if (x >= _picWindowX) { //  || x - _picWindowX + _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseOffsetX(frame) >= 0 ?? -				showSprite(backAnimSurface, x, y); -			//} -			backAnimSurface->free(); -			delete backAnimSurface; +			if (x != 0 || y != 0 || phaseCount != 1 || frameCount != 1) { // fix for room no. 5 - animation 8 (propably unnecessary anim) +				Graphics::Surface *backAnimSurface = _backAnimList[i].backAnims[activeSubAnim]._animData->getFrame(phaseFrameIndex, i, phase); //still out of bounds + +				//debug("x: %d", x); +				//debug("picWindowX: %d", _picWindowX); +				//if (x >= _picWindowX) { //  || x - _picWindowX + _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseOffsetX(frame) >= 0 ?? +					showSprite(backAnimSurface, x, y); +				//} +				backAnimSurface->free(); +				delete backAnimSurface; + +				//if (_backAnimList[i].backAnims[activeSubAnim]._lastFrame == 1) { +					debug("nr: %d, phase: %d, frame: %d", i, phase, phaseFrameIndex); +					debug("phaseCount: %d, frameCount: %d, lastFrame: %d", phaseCount, frameCount, _backAnimList[i].backAnims[activeSubAnim]._lastFrame); +					//debug("x: %d", _backAnimList[i].backAnims[activeSubAnim]._x); +					//debug("y: %d", _backAnimList[i].backAnims[activeSubAnim]._y); +					//debug("offX: %d", _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseOffsetX(phase)); +					//debug("offX: %d", _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseOffsetY(phase)); +					//debug("x: %d, y: %d", x, y); +				//} + +				if (_backAnimList[i].backAnims[activeSubAnim]._x == 0 && _backAnimList[i].backAnims[activeSubAnim]._y == 0) { +					debug("x = 0, y = 0"); +				} + +				if (phaseCount == 1 && frameCount == 1) { +					debug("pC = 1, fC = 1"); +				} +			}  			//ShowFrameCodeShadow  		}  	} diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index d87cd8b9e2..7806bf04bb 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -222,8 +222,12 @@ void Script::installSingleBackAnim(Common::Array<BackgroundAnim> &_backanimList,  			newAnim._basaData._num = READ_UINT16(&_data[animOffset + 28 + i * 8]);  			newAnim._basaData._start = READ_UINT16(&_data[animOffset + 28 + i * 8 + 2]);  			newAnim._basaData._end = READ_UINT16(&_data[animOffset + 28 + i * 8 + 4]); -			debug("start1: %d", newAnim._basaData._start); -			debug("end1: %d", newAnim._basaData._end); +			if (newAnim._basaData._start != -1) { +				debug("start1: %d", newAnim._basaData._start); +			} +			if (newAnim._basaData._end != -1) { +				debug("end1: %d", newAnim._basaData._end); +			}  			int animNumber = newAnim._basaData._num;  			const Common::String animName = Common::String::format("AN%02d", animNumber);  			const Common::String shadowName = Common::String::format("AN%02dS", animNumber); @@ -267,34 +271,34 @@ void Script::installSingleBackAnim(Common::Array<BackgroundAnim> &_backanimList,  		newBackgroundAnim._seq._type = READ_UINT32(&_data[animOffset]);  		debug("type: %d", newBackgroundAnim._seq._type);  		newBackgroundAnim._seq._data = READ_UINT32(&_data[animOffset + 4]); -		debug("data: %d", newBackgroundAnim._seq._data); +		//debug("data: %d", newBackgroundAnim._seq._data);  		newBackgroundAnim._seq._anims = READ_UINT32(&_data[animOffset + 8]);  		anims = newBackgroundAnim._seq._anims;  		debug("anims: %d", newBackgroundAnim._seq._anims);  		//newBackgroundAnim._seq._current = READ_UINT32(&_data[animOffset + 12]);  		newBackgroundAnim._seq._current = 0; // nr on list like now or should it be fileNr of anim - check it -		debug("current: %d", newBackgroundAnim._seq._current); +		//debug("current: %d", newBackgroundAnim._seq._current);  		//newBackgroundAnim._seq._counter = READ_UINT32(&_data[animOffset + 16]);  		newBackgroundAnim._seq._counter = 0; -		debug("counter: %d", newBackgroundAnim._seq._counter); +		//debug("counter: %d", newBackgroundAnim._seq._counter);  		//newBackgroundAnim._seq._currRelative = READ_UINT32(&_data[animOffset + 20]);  		newBackgroundAnim._seq._currRelative = 0; -		debug("currRelative: %d", newBackgroundAnim._seq._currRelative); +		//debug("currRelative: %d", newBackgroundAnim._seq._currRelative);  		newBackgroundAnim._seq._data2 = READ_UINT32(&_data[animOffset + 24]); -		debug("data2: %d", newBackgroundAnim._seq._data2); +		//debug("data2: %d", newBackgroundAnim._seq._data2);  		int start = newBackgroundAnim.backAnims[0]._basaData._start; // BASA_Start of first frame -		debug("start2: %d", start);  		int end = newBackgroundAnim.backAnims[0]._basaData._end; //BASA_End of first frame -		debug("end2: %d", end);  		if (start != -1) { +			debug("start2: %d", start);  			newBackgroundAnim.backAnims[0]._frame = start;  			newBackgroundAnim.backAnims[0]._showFrame = start;  			newBackgroundAnim.backAnims[0]._loopFrame = start;  		}  		if (end != -1) { +			debug("end2: %d", end);  			newBackgroundAnim.backAnims[0]._lastFrame = end;  		} | 
