aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/scicore/decompress1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/scicore/decompress1.cpp')
-rw-r--r--engines/sci/scicore/decompress1.cpp37
1 files changed, 9 insertions, 28 deletions
diff --git a/engines/sci/scicore/decompress1.cpp b/engines/sci/scicore/decompress1.cpp
index fa0e0abdf1..1289edde9c 100644
--- a/engines/sci/scicore/decompress1.cpp
+++ b/engines/sci/scicore/decompress1.cpp
@@ -137,7 +137,7 @@ static int huffman_lookup(struct bit_read_struct *inp, int *tree) {
#define DCL_ASCII_MODE 1
-static int decrypt4_hdyn(byte *dest, int length, struct bit_read_struct *reader) {
+static int unpackDCL_hdyn(byte *dest, int length, struct bit_read_struct *reader) {
int mode, length_param, value, val_length, val_distance;
int write_pos = 0;
@@ -243,7 +243,7 @@ static int decrypt4_hdyn(byte *dest, int length, struct bit_read_struct *reader)
return 0;
}
-int decrypt4(uint8* dest, uint8* src, int length, int complength) {
+int unpackDCL(uint8* dest, uint8* src, int length, int complength) {
struct bit_read_struct reader;
reader.length = complength;
@@ -251,7 +251,7 @@ int decrypt4(uint8* dest, uint8* src, int length, int complength) {
reader.bytepos = 0;
reader.data = src;
- return -decrypt4_hdyn(dest, length, &reader);
+ return -unpackDCL_hdyn(dest, length, &reader);
}
void decryptinit3();
@@ -340,7 +340,7 @@ int decompress1(Resource *result, Common::ReadStream &stream, int sci_version) {
break;
case 1: // LZW
- if (decrypt2(result->data, buffer, result->size, compressedLength)) {
+ if (unpackHuffman(result->data, buffer, result->size, compressedLength)) {
free(result->data);
result->data = 0; // So that we know that it didn't work
result->status = SCI_STATUS_NOMALLOC;
@@ -351,30 +351,7 @@ int decompress1(Resource *result, Common::ReadStream &stream, int sci_version) {
break;
case 2: // ???
- decryptinit3();
- if (decrypt3(result->data, buffer, result->size, compressedLength)) {
- free(result->data);
- result->data = 0; // So that we know that it didn't work
- result->status = SCI_STATUS_NOMALLOC;
- free(buffer);
- return SCI_ERROR_DECOMPRESSION_OVERFLOW;
- }
- result->status = SCI_STATUS_ALLOCATED;
- break;
-
case 3:
- decryptinit3();
- if (decrypt3(result->data, buffer, result->size, compressedLength)) {
- free(result->data);
- result->data = 0; // So that we know that it didn't work
- result->status = SCI_STATUS_NOMALLOC;
- free(buffer);
- return SCI_ERROR_DECOMPRESSION_OVERFLOW;
- }
- result->data = view_reorder(result->data, result->size);
- result->status = SCI_STATUS_ALLOCATED;
- break;
-
case 4:
decryptinit3();
if (decrypt3(result->data, buffer, result->size, compressedLength)) {
@@ -384,7 +361,11 @@ int decompress1(Resource *result, Common::ReadStream &stream, int sci_version) {
free(buffer);
return SCI_ERROR_DECOMPRESSION_OVERFLOW;
}
- result->data = pic_reorder(result->data, result->size);
+
+ if (compressionMethod == 3)
+ result->data = view_reorder(result->data, result->size);
+ if (compressionMethod == 4)
+ result->data = pic_reorder(result->data, result->size);
result->status = SCI_STATUS_ALLOCATED;
break;