aboutsummaryrefslogtreecommitdiff
path: root/engines/supernova/graphics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/supernova/graphics.cpp')
-rw-r--r--engines/supernova/graphics.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/engines/supernova/graphics.cpp b/engines/supernova/graphics.cpp
index e2467d1c3c..5913553633 100644
--- a/engines/supernova/graphics.cpp
+++ b/engines/supernova/graphics.cpp
@@ -11,7 +11,8 @@ namespace Supernova {
MSNImageDecoder::MSNImageDecoder()
: _surface(NULL)
- , _palette(NULL) {
+ , _palette(NULL)
+ , _encodedImage(NULL) {
}
MSNImageDecoder::~MSNImageDecoder() {
@@ -72,6 +73,7 @@ bool MSNImageDecoder::loadStream(Common::SeekableReadStream &stream) {
}
byte zwCodes[256];
+ Common::fill(zwCodes, zwCodes + 256, 0);
byte numRepeat = stream.readByte();
byte numZw = stream.readByte();
stream.read(zwCodes, numZw);
@@ -88,7 +90,7 @@ bool MSNImageDecoder::loadStream(Common::SeekableReadStream &stream) {
_encodedImage[i++] = value;
}
} else if (input < numZw) {
- input = zwCodes[input];
+ input = zwCodes[input - numRepeat];
--input;
_encodedImage[i++] = input;
_encodedImage[i++] = input;
@@ -157,6 +159,10 @@ void MSNImageDecoder::destroy() {
_surface->free();
_surface = NULL;
}
+ if (_encodedImage) {
+ delete[] _encodedImage;
+ _encodedImage = NULL;
+ }
}
}