diff options
-rw-r--r-- | scumm/actor.cpp | 12 | ||||
-rw-r--r-- | scumm/akos.cpp | 4 | ||||
-rw-r--r-- | scumm/script_v6.cpp | 2 |
3 files changed, 13 insertions, 5 deletions
diff --git a/scumm/actor.cpp b/scumm/actor.cpp index 9a4708ab60..94713d09a9 100644 --- a/scumm/actor.cpp +++ b/scumm/actor.cpp @@ -1029,14 +1029,20 @@ void Actor::drawActorCostume() { ar.setPalette(palette); ar.setFacing(this); - ar._dirty_id = number; - ar._draw_top = top = 0x7fffffff; ar._draw_bottom = bottom = 0; + ar._dirty_id = number; + if (ar.drawCostume(cost)) { - // FIXME: this breaks talking in The Dig. But why? + // FIXME: this breaks talking in The Dig because the actor + // is redrawn too often, thus breaking the waitForActor opcode. // Note that I originally added this to correct some redraw issues. + // A "better" implementation would work like the corresponding code + // for "old" costumes, that is, only trigger a redraw if the actor + // is partially hidden / offscreen... but I am not sure the original + // actually does this, so before we spend time on implementing this, + // we should first figure out what the original code does here... //needBgReset = true; //needRedraw = true; } diff --git a/scumm/akos.cpp b/scumm/akos.cpp index 2535d3dafb..dc4b421fb0 100644 --- a/scumm/akos.cpp +++ b/scumm/akos.cpp @@ -1106,7 +1106,7 @@ void AkosRenderer::akos16DecodeLine(byte *buf, int32 numbytes, int32 dir) { } else { AKOS16_FILL_BITS() akos16.color = ((byte)akos16.bits) & akos16.mask; - AKOS16_EAT_BITS(akos16.shift) + AKOS16_EAT_BITS(akos16.shift) AKOS16_FILL_BITS() } } else { @@ -1235,7 +1235,7 @@ void AkosRenderer::codec16() { */ // Modified by ludde - if (clip_left < 0) { + if (clip_left < 0) { skip_x = -clip_left; clip_left = 0; } diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp index 009415172c..378ba4e96e 100644 --- a/scumm/script_v6.cpp +++ b/scumm/script_v6.cpp @@ -2949,6 +2949,8 @@ void Scumm_v6::o6_unknownE1() { } // FIXME: something is wrong, it take wrong position or wrong buffer check + // Fingolfin says: the vs->tdirty[0] makes no sense to me at all, what is this + // supposed to do ?!? int offset = (y - vs->topline) * _realWidth + x + vs->tdirty[0]; byte area = *(getResourceAddress(rtBuffer, vs->number + 1) + offset); |