diff options
-rw-r--r-- | scumm/gfx.cpp | 17 | ||||
-rw-r--r-- | scumm/gfx.h | 2 | ||||
-rw-r--r-- | scumm/object.cpp | 10 | ||||
-rw-r--r-- | scumm/saveload.cpp | 6 | ||||
-rw-r--r-- | scumm/scumm.h | 2 |
5 files changed, 28 insertions, 9 deletions
diff --git a/scumm/gfx.cpp b/scumm/gfx.cpp index 56f5ef26ce..3fef4a947b 100644 --- a/scumm/gfx.cpp +++ b/scumm/gfx.cpp @@ -430,8 +430,12 @@ void Scumm::initBGBuffers(int height) size = itemsize * gdi._numZBuffer; memset(createResource(rtBuffer, 9, size), 0, size); - for (i = 0; i < 4; i++) - gdi._imgBufOffs[i] = i * itemsize; + for (i = 0; i < (int)ARRAYSIZE(gdi._imgBufOffs); i++) { + if (i < gdi._numZBuffer) + gdi._imgBufOffs[i] = i * itemsize; + else + gdi._imgBufOffs[i] = (gdi._numZBuffer - 1) * itemsize; + } } void Scumm::setPaletteFromPtr(byte *ptr) @@ -1854,8 +1858,13 @@ void Scumm::updateDirtyRect(int virt, int left, int right, int top, int bottom, lp = (left >> 3) + _screenStartStrip; if (lp < 0) lp = 0; - if (rp >= 240) - rp = 240; + if (_features & GF_AFTER_V7) { + if (rp > 409) + rp = 409; + } else { + if (rp >= 200) + rp = 200; + } if (lp <= rp) { num = rp - lp + 1; sp = &gfxUsageBits[lp]; diff --git a/scumm/gfx.h b/scumm/gfx.h index d1df0deaa4..eca0c543f4 100644 --- a/scumm/gfx.h +++ b/scumm/gfx.h @@ -116,7 +116,7 @@ struct Gdi { uint _readOffs; int _numZBuffer; - int _imgBufOffs[4]; + int _imgBufOffs[5]; byte _disable_zbuffer; int32 _numStrips; diff --git a/scumm/object.cpp b/scumm/object.cpp index cf67337bd7..64a89c8ebd 100644 --- a/scumm/object.cpp +++ b/scumm/object.cpp @@ -1433,9 +1433,13 @@ void Scumm::removeBlastObject(BlastObject *eo) if (left_strip < 0) left_strip = 0; - if (right_strip >= 409) - right_strip = 409; - + if (_features & GF_AFTER_V7) { + if (right_strip > 409) + right_strip = 409; + } else { + if (right_strip >= 200) + right_strip = 200; + } for (i = left_strip; i <= right_strip; i++) gdi.resetBackground(top, bottom, i); diff --git a/scumm/saveload.cpp b/scumm/saveload.cpp index e9d5080206..f8a5d031b1 100644 --- a/scumm/saveload.cpp +++ b/scumm/saveload.cpp @@ -410,6 +410,8 @@ void Scumm::saveOrLoad(Serializer *s) // MKLINE(Scumm, _palManipEnd, sleByte), // MKLINE(Scumm, _palManipCounter, sleUint16), + // MKARRAY(Scumm, gfxUsageBits[0], sleUint32, 410), + // replace below: MKARRAY(Scumm, gfxUsageBits[0], sleUint32, 200), MKLINE(Scumm, gdi._transparency, sleByte), MKARRAY(Scumm, _currentPalette[0], sleByte, 768), @@ -421,6 +423,7 @@ void Scumm::saveOrLoad(Serializer *s) MKLINE(Scumm, _egoPositioned, sleByte), + // FIXME: Should be 5, not 4 : MKARRAY(Scumm, gdi._imgBufOffs[0], sleUint16, 4), MKLINE(Scumm, gdi._numZBuffer, sleByte), @@ -521,6 +524,8 @@ void Scumm::saveOrLoad(Serializer *s) // MKLINE(Scumm, _palManipEnd, sleByte), // MKLINE(Scumm, _palManipCounter, sleUint16), + // MKARRAY(Scumm, gfxUsageBits[0], sleUint32, 410), + // replace below: MKARRAY(Scumm, gfxUsageBits[0], sleUint32, 200), MKLINE(Scumm, gdi._transparency, sleByte), MKARRAY(Scumm, _currentPalette[0], sleByte, 768), @@ -532,6 +537,7 @@ void Scumm::saveOrLoad(Serializer *s) MKLINE(Scumm, _egoPositioned, sleByte), + // FIXME: Should be 5, not 4 : MKARRAY(Scumm, gdi._imgBufOffs[0], sleUint16, 4), MKLINE(Scumm, gdi._numZBuffer, sleByte), diff --git a/scumm/scumm.h b/scumm/scumm.h index 797390d497..2c934640cb 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -840,7 +840,7 @@ public: uint16 _palManipCounter; byte *_palManipPalette; byte *_palManipIntermediatePal; - uint32 gfxUsageBits[409]; + uint32 gfxUsageBits[410]; byte *_shadowPalette; int _shadowPaletteSize; byte _currentPalette[3 * 256]; |