diff options
author | lukaslw | 2014-05-01 13:14:06 +0200 |
---|---|---|
committer | lukaslw | 2014-06-22 20:07:53 +0200 |
commit | 3751e7ba25088b941eed55ee56e7a67593e32b8d (patch) | |
tree | bee1bc57d2dab1f8f8b3f575f4f5aa65364c4d4f /engines | |
parent | 4bf4847cc36dd9c45792f21f285a1f6778d60eb5 (diff) | |
download | scummvm-rg350-3751e7ba25088b941eed55ee56e7a67593e32b8d.tar.gz scummvm-rg350-3751e7ba25088b941eed55ee56e7a67593e32b8d.tar.bz2 scummvm-rg350-3751e7ba25088b941eed55ee56e7a67593e32b8d.zip |
PRINCE: lightX, lightY and setShadowScale()
Diffstat (limited to 'engines')
-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]); |