diff options
| author | lukaslw | 2014-07-23 20:41:17 +0200 | 
|---|---|---|
| committer | lukaslw | 2014-07-23 20:41:17 +0200 | 
| commit | 933b6b7997824676208404f82d7f1d82a1dbe4b1 (patch) | |
| tree | aa2a85188af7d0234e27049f3d50129713f816dc | |
| parent | bcba6f552778f4cb132a09c57286071655056511 (diff) | |
| download | scummvm-rg350-933b6b7997824676208404f82d7f1d82a1dbe4b1.tar.gz scummvm-rg350-933b6b7997824676208404f82d7f1d82a1dbe4b1.tar.bz2 scummvm-rg350-933b6b7997824676208404f82d7f1d82a1dbe4b1.zip  | |
PRINCE: Spec hero animation - getSurface(), countDrawPosition(), showHero() update
| -rw-r--r-- | engines/prince/hero.cpp | 97 | 
1 files changed, 56 insertions, 41 deletions
diff --git a/engines/prince/hero.cpp b/engines/prince/hero.cpp index afcaa551dc..9df795e69c 100644 --- a/engines/prince/hero.cpp +++ b/engines/prince/hero.cpp @@ -84,9 +84,16 @@ 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); +	Animation *heroAnim = nullptr; +	if (_specAnim != nullptr) { +		heroAnim = _specAnim; +	} else { +		heroAnim = _moveSet[_moveSetType]; +	} + +	if (heroAnim != nullptr) { +		int16 phaseFrameIndex = heroAnim->getPhaseFrameIndex(_phase); +		Graphics::Surface *heroFrame = heroAnim->getFrame(phaseFrameIndex);  		return heroFrame;  	}  	return NULL; @@ -205,42 +212,49 @@ Graphics::Surface *Hero::zoomSprite(Graphics::Surface *heroFrame) {  }  void Hero::countDrawPosition() { -	int16 tempMiddleY; -	int16 baseX = _moveSet[_moveSetType]->getBaseX(); -	int16 baseY = _moveSet[_moveSetType]->getBaseY(); -	// any chance? -	if (baseX == 320) { -		tempMiddleY = _middleY - (baseY - 240); +	Animation *heroAnim = nullptr; +	if (_specAnim != nullptr) { +		heroAnim = _specAnim;  	} else { -		tempMiddleY = _middleY; -	} -	int phaseFrameIndex = _moveSet[_moveSetType]->getPhaseFrameIndex(_phase); -	_frameXSize = _moveSet[_moveSetType]->getFrameWidth(phaseFrameIndex); -	_frameYSize = _moveSet[_moveSetType]->getFrameHeight(phaseFrameIndex); -	_scaledFrameXSize = getScaledValue(_frameXSize); -	_scaledFrameYSize = getScaledValue(_frameYSize); - -	// any use of this? -	/* -	if (!_moveSet[_moveSetType]->testId()) { -		int diffX = _moveSet[_moveSetType]->getIdXDiff(); -		int diffY = _moveSet[_moveSetType]->getIdYDiff(); +		heroAnim = _moveSet[_moveSetType];  	} -	*/ +	if (heroAnim != nullptr) { +		int16 tempMiddleY; +		int16 baseX = heroAnim->getBaseX(); +		int16 baseY = heroAnim->getBaseY(); +		// any chance? +		if (baseX == 320) { +			tempMiddleY = _middleY - (baseY - 240); +		} else { +			tempMiddleY = _middleY; +		} +		int phaseFrameIndex = heroAnim->getPhaseFrameIndex(_phase); +		_frameXSize = heroAnim->getFrameWidth(phaseFrameIndex); +		_frameYSize = heroAnim->getFrameHeight(phaseFrameIndex); +		_scaledFrameXSize = getScaledValue(_frameXSize); +		_scaledFrameYSize = getScaledValue(_frameYSize); + +		// any use of this? +		if (!heroAnim->testId()) { +			error("countDrawPosition - !heroAnim->testId()"); +			//int diffX = heroAnim->getIdXDiff(); +			//int diffY = heroAnim->getIdYDiff(); +		} -	if (_zoomFactor != 0) { -		//notfullSize -		_drawX = _middleX - _scaledFrameXSize / 2; -		_drawY = tempMiddleY + 1 - _scaledFrameYSize; -		_vm->checkMasks(_drawX, _drawY - 1, _scaledFrameXSize, _scaledFrameYSize, _middleY); -	} else { -		//fullSize -		_drawX = _middleX - _frameXSize / 2; -		_drawY = tempMiddleY + 1 - _frameYSize; -		_vm->checkMasks(_drawX, _drawY - 1, _frameXSize, _frameYSize, _middleY); -	} +		if (_zoomFactor != 0) { +			//notfullSize +			_drawX = _middleX - _scaledFrameXSize / 2; +			_drawY = tempMiddleY + 1 - _scaledFrameYSize; +			_vm->checkMasks(_drawX, _drawY - 1, _scaledFrameXSize, _scaledFrameYSize, _middleY); +		} else { +			//fullSize +			_drawX = _middleX - _frameXSize / 2; +			_drawY = tempMiddleY + 1 - _frameYSize; +			_vm->checkMasks(_drawX, _drawY - 1, _frameXSize, _frameYSize, _middleY); +		} -	_drawZ = tempMiddleY; +		_drawZ = tempMiddleY; +	}  }  void Hero::plotPoint(int x, int y) { @@ -655,7 +669,6 @@ void Hero::showHero() {  			_boredomTime = 0;  		} -		// TODO - change in countDrawPosition()  		if (_state == SPEC) {  			if (_specAnim != nullptr) {  				if (_phase < _specAnim->getPhaseCount() - 1) { @@ -759,11 +772,11 @@ void Hero::showHero() {  			}  		} -		// TODO - change in countDrawPosition()  		if (_state == TRAN) {  			if (_moveSet[_turnAnim] != nullptr) {  				// only in bear form -				if (_phase < _moveSet[_turnAnim]->getPhaseCount() - 1) { +				_moveSetType = _turnAnim; +				if (_phase < _moveSet[_moveSetType]->getPhaseCount() - 1) {  					_phase += 2;  				} else {  					_state = STAY; @@ -775,11 +788,11 @@ void Hero::showHero() {  			}  		} -		// TODO - change in countDrawPosition()  		if (_state == MVAN) {  			if (_moveSet[_turnAnim] != nullptr) {  				// only in bear form -				if (_phase < _moveSet[_turnAnim]->getPhaseCount() - 1) { +				_moveSetType = _turnAnim; +				if (_phase < _moveSet[_moveSetType]->getPhaseCount() - 1) {  					_phase += 2;  				} else {  					_state = MOVE; @@ -819,10 +832,12 @@ void Hero::showHero() {  								_state = MVAN;  								if (_moveSet[_turnAnim] != nullptr) {  									// only in bear form -									if (_phase < _moveSet[_turnAnim]->getPhaseCount() - 1) { +									_moveSetType = _turnAnim; +									if (_phase < _moveSet[_moveSetType]->getPhaseCount() - 1) {  										_phase += 2;  										break;  									} else { +										_turnAnim = 0;  										_state = MOVE;  										continue;  									}  | 
