aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/gfx/res_view0.cpp56
-rw-r--r--engines/sci/gfx/res_view1.cpp10
2 files changed, 9 insertions, 57 deletions
diff --git a/engines/sci/gfx/res_view0.cpp b/engines/sci/gfx/res_view0.cpp
index efc5cccc95..c2d26fa4e4 100644
--- a/engines/sci/gfx/res_view0.cpp
+++ b/engines/sci/gfx/res_view0.cpp
@@ -116,47 +116,6 @@ gfx_pixmap_t *gfxr_draw_cel0(int id, int loop, int cel, byte *resource, int size
return retval;
}
-static int gfxr_draw_loop0(gfxr_loop_t *dest, int id, int loop, byte *resource, int offset, int size, gfxr_view_t *view, int mirrored) {
- int i;
- int cels_nr = READ_LE_UINT16(resource + offset);
-
- if (READ_LE_UINT16(resource + offset + 2)) {
- GFXWARN("View %02x:(%d): Gray magic %04x in loop, expected white\n", id, loop, READ_LE_UINT16(resource + offset + 2));
- }
-
- if (cels_nr * 2 + 4 + offset > size) {
- GFXERROR("View %02x:(%d): Offset array for %d cels extends beyond resource space\n", id, loop, cels_nr);
- dest->cels_nr = 0; /* Mark as "delete no cels" */
- dest->cels = NULL;
- return 1;
- }
-
- dest->cels = (gfx_pixmap_t**)malloc(sizeof(gfx_pixmap_t *) * cels_nr);
-
- for (i = 0; i < cels_nr; i++) {
- int cel_offset = READ_LE_UINT16(resource + offset + 4 + (i << 1));
- gfx_pixmap_t *cel = NULL;
-
- if (cel_offset >= size) {
- GFXERROR("View %02x:(%d/%d) supposed to be at illegal offset 0x%04x\n", id, loop, i, cel_offset);
- cel = NULL;
- } else
- cel = gfxr_draw_cel0(id, loop, i, resource + cel_offset, size - cel_offset, view, mirrored);
-
-
- if (!cel) {
- dest->cels_nr = i;
- return 1;
- }
-
- dest->cels[i] = cel;
- }
-
- dest->cels_nr = cels_nr;
-
- return 0;
-}
-
#define V0_LOOPS_NR_OFFSET 0
#define V0_FIRST_LOOP_OFFSET 8
#define V0_MIRROR_LIST_OFFSET 2
@@ -200,7 +159,6 @@ gfxr_view_t *gfxr_draw_view0(int id, byte *resource, int size, int palette) {
view->loops = (gfxr_loop_t*)malloc(sizeof(gfxr_loop_t) * ((view->loops_nr) ? view->loops_nr : 1)); /* Alloc 1 if no loop */
for (i = 0; i < view->loops_nr; i++) {
- int error_token = 0;
int loop_offset = READ_LE_UINT16(resource + V0_FIRST_LOOP_OFFSET + (i << 1));
int mirrored = resource[mirror_bytepos] & mirror_bitpos;
@@ -209,16 +167,12 @@ gfxr_view_t *gfxr_draw_view0(int id, byte *resource, int size, int palette) {
mirror_bitpos = 1;
}
- if (loop_offset >= size) {
- GFXERROR("View %04x:(%d) supposed to be at illegal offset 0x%04x\n", id, i, loop_offset);
- error_token = 1;
- }
+ view->loops[i].cels_nr = READ_LE_UINT16(resource + loop_offset);
+ view->loops[i].cels = (gfx_pixmap_t**)calloc(view->loops[i].cels_nr, sizeof(gfx_pixmap_t *));
- if (error_token || gfxr_draw_loop0(view->loops + i, id, i, resource, loop_offset, size, view, mirrored)) {
- // An error occured
- view->loops_nr = i;
- gfxr_free_view(view);
- return NULL;
+ for (int j = 0; j < view->loops[i].cels_nr; j++) {
+ int cel_offset = READ_LE_UINT16(resource + loop_offset + 4 + (j << 1));
+ view->loops[i].cels[j] = gfxr_draw_cel0(id, i, j, resource + cel_offset, size - cel_offset, view, mirrored);
}
}
diff --git a/engines/sci/gfx/res_view1.cpp b/engines/sci/gfx/res_view1.cpp
index 3a624ce688..0dcd75675f 100644
--- a/engines/sci/gfx/res_view1.cpp
+++ b/engines/sci/gfx/res_view1.cpp
@@ -49,11 +49,6 @@ namespace Sci {
#define V2_CELS_NUM 4
#define V2_LOOP_OFFSET 14
-#define NEXT_RUNLENGTH_BYTE(n) \
- if (literal_pos == runlength_pos) \
- literal_pos += n; \
- runlength_pos += n;
-
#define NEXT_LITERAL_BYTE(n) \
if (literal_pos == runlength_pos) \
runlength_pos += n; \
@@ -74,7 +69,10 @@ static int decompress_sci_view(int id, int loop, int cel, byte *resource, byte *
int readbytes = 0;
int color = 0;
- NEXT_RUNLENGTH_BYTE(1);
+ if (literal_pos == runlength_pos)
+ literal_pos += 1;
+
+ runlength_pos += 1;
if (op & V1_RLE) {
bytes = op & 0x3f;