aboutsummaryrefslogtreecommitdiff
path: root/engines/prince/prince.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/prince/prince.cpp')
-rw-r--r--engines/prince/prince.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp
index f987ff222f..98f9689b9a 100644
--- a/engines/prince/prince.cpp
+++ b/engines/prince/prince.cpp
@@ -294,10 +294,7 @@ bool PrinceEngine::loadLocation(uint16 locationNr) {
_mainHero->_zoomBitmap->clear();
Resource::loadResource(_mainHero->_zoomBitmap, "zoom", false);
- _mainHero->_shadowBitmap->clear();
- if (Resource::loadResource(_mainHero->_shadowBitmap, "shadow", false) == false) {
- Resource::loadResource(_mainHero->_shadowBitmap, "shadow2", false);
- }
+ loadShadow(_mainHero->_shadowBitmap, _mainHero->kShadowBitmapSize, "shadow", "shadow2");
_picWindowX = 0;
@@ -471,6 +468,31 @@ bool PrinceEngine::loadAnim(uint16 animNr, bool loop) {
return true;
}
+bool PrinceEngine::loadShadow(byte *shadowBitmap, uint32 dataSize, const char *resourceName1, const char *resourceName2) {
+
+ Common::SeekableReadStream *stream = SearchMan.createReadStreamForMember(resourceName1);
+ if (!stream) {
+ return false;
+ }
+
+ if (stream->read(shadowBitmap, dataSize) != dataSize) {
+ free(shadowBitmap);
+ return false;
+ }
+
+ stream = SearchMan.createReadStreamForMember(resourceName2);
+ if (!stream) {
+ return false;
+ }
+
+ byte *shadowBitmap2 = shadowBitmap + dataSize;
+ if (stream->read(shadowBitmap2, dataSize) != dataSize) {
+ free(shadowBitmap);
+ return false;
+ }
+ return true;
+}
+
void PrinceEngine::scrollCameraLeft(int16 delta) {
if (_newCameraX > 0) {
if (_newCameraX < delta)