diff options
| -rw-r--r-- | engines/prince/hero.cpp | 14 | ||||
| -rw-r--r-- | engines/prince/hero.h | 6 | ||||
| -rw-r--r-- | engines/prince/prince.cpp | 6 | ||||
| -rw-r--r-- | engines/prince/script.cpp | 2 | ||||
| -rw-r--r-- | engines/prince/script.h | 4 | 
5 files changed, 31 insertions, 1 deletions
| diff --git a/engines/prince/hero.cpp b/engines/prince/hero.cpp index 2ef16cc617..b4c1f8304b 100644 --- a/engines/prince/hero.cpp +++ b/engines/prince/hero.cpp @@ -34,6 +34,7 @@ Hero::Hero() : _number(0), _visible(false), _state(MOVE), _middleX(0), _middleY(  	, _boreNum(1), _currHeight(0), _moveDelay(0), _shadMinus(1), _moveSetType(0)  	, _lastDirection(DOWN), _destDirection(DOWN), _talkTime(0), _boredomTime(0), _phase(0)  	, _specAnim(0), _drawX(0), _drawY(0), _randomSource("prince"), _zoomFactor(0), _scaleValue(0) +	, _shadZoomFactor(0), _shadScaleValue(0)  {  	_zoomBitmap = new Animation();  	_shadowBitmap = new Animation(); @@ -277,6 +278,19 @@ void Hero::selectZoom() {  	setScale(zoomBitmapValue);  } +void Hero::setShadowScale(int32 shadowScale) { +	shadowScale = 100 - shadowScale; +	if (shadowScale == 0) { +		_shadZoomFactor = 0; +		_shadScaleValue = 10000; +	} else { +		_shadZoomFactor = shadowScale; +		_shadScaleValue = 10000 / _shadZoomFactor; +	} +	debug("_shadZoomFactor: %d", _shadZoomFactor); +	debug("_shadScaleValue: %d", _shadScaleValue); +} +  void Hero::specialAnim() {  } diff --git a/engines/prince/hero.h b/engines/prince/hero.h index 3d09f8a965..36856ea921 100644 --- a/engines/prince/hero.h +++ b/engines/prince/hero.h @@ -108,6 +108,7 @@ public:  	void checkNak();  	Graphics::Surface *zoomSprite(Graphics::Surface *heroFrame);  	void showHeroAnimFrame(); +	void setShadowScale(int32 shadowScale);  	void specialAnim();  	void getState(); @@ -124,6 +125,11 @@ public:  	int16 _moveSetType;  	int8 _zoomFactor;  	int16 _scaleValue; +	int16 _lightX; // for hero's shadow +	int16 _lightY; +	int32 _shadZoomFactor; +	int32 _shadScaleValue; +  	// Coords array of coordinates  	// DirTab array of directions diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index 37581318e5..61d1ce5ef5 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -288,6 +288,12 @@ bool PrinceEngine::loadLocation(uint16 locationNr) {  		Resource::loadResource(_mainHero->_shadowBitmap, "shadow2", false);  	} +	_mainHero->_lightX = _script->getLightX(_locationNr); +	_mainHero->_lightY = _script->getLightY(_locationNr); +	debug("lightX: %d", _mainHero->_lightX); +	debug("lightY: %d", _mainHero->_lightX); +	_mainHero->setShadowScale(_script->getShadowScale(_locationNr)); +  	_mobList.clear();  	Resource::loadResource(_mobList, "mob.lst", false); diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index 84ae64791e..264d5bbae2 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -132,7 +132,7 @@ bool Script::loadFromStream(Common::SeekableReadStream &stream) {  		return false;  	stream.read(_data, _dataSize); - +	  	Common::MemoryReadStream scriptDataStream(_data, _dataSize);  	scriptDataStream.seek(getRoomTableOffset()+64);  	debug("room table offset %d", scriptDataStream.pos()); diff --git a/engines/prince/script.h b/engines/prince/script.h index d51e01b559..2a3bb64245 100644 --- a/engines/prince/script.h +++ b/engines/prince/script.h @@ -42,6 +42,7 @@ namespace Detail {  	template <> inline uint8 LittleEndianReader<uint8>(void *data) { return *(uint8*)(data); }  	template <> inline uint16 LittleEndianReader<uint16>(void *data) { return READ_LE_UINT16(data); }  	template <> inline uint32 LittleEndianReader<uint32>(void *data) { return READ_LE_UINT32(data); } +	template <> inline int8 LittleEndianReader<int8>(void *data) { return *(int8*)(data); }  }  class Room { @@ -89,6 +90,9 @@ public:  	// Some magic numbers for now, data stored in header  	uint32 getRoomTableOffset() { return read<uint32>(0); }  	uint32 getStartGameOffset() { return read<uint32>(4); } +	int8 getLightX(int locationNr) { return read<int8>(4*15 + locationNr*8); } +	int8 getLightY(int locationNr) { return read<int8>(4*15 + locationNr*8 + 2); } +	uint16 getShadowScale(int locationNr) { return read<uint16>(4*15 + locationNr*8 + 4); }  	const char *getString(uint32 offset) {  		return (const char *)(&_data[offset]); | 
