aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorstrangerke2011-02-26 14:06:30 +0100
committerstrangerke2011-02-26 14:06:30 +0100
commit756a343cb85760093d1906cc91644e4d10522382 (patch)
tree478a07975817caecbb0bc2d233ed5b0b0c7ee86b /engines
parentbd191e178733dbf49b5b9b8394b8f0554fc6127b (diff)
downloadscummvm-rg350-756a343cb85760093d1906cc91644e4d10522382.tar.gz
scummvm-rg350-756a343cb85760093d1906cc91644e4d10522382.tar.bz2
scummvm-rg350-756a343cb85760093d1906cc91644e4d10522382.zip
HUGO: Fix graphic glitches in DOS versions
Diffstat (limited to 'engines')
-rw-r--r--engines/hugo/display.cpp54
-rw-r--r--engines/hugo/display.h19
2 files changed, 48 insertions, 25 deletions
diff --git a/engines/hugo/display.cpp b/engines/hugo/display.cpp
index 6c363184f6..42cde6fd70 100644
--- a/engines/hugo/display.cpp
+++ b/engines/hugo/display.cpp
@@ -233,24 +233,6 @@ void Screen::setBackgroundColor(const uint16 color) {
}
/**
- * Return the overlay state (Foreground/Background) of the currently
- * processed object by looking down the current column for an overlay
- * base bit set (in which case the object is foreground).
- */
-overlayState_t Screen::findOvl(seq_t *seq_p, image_pt dst_p, uint16 y) {
- debugC(4, kDebugDisplay, "findOvl()");
-
- for (; y < seq_p->lines; y++) { // Each line in object
- byte ovb = _vm->_object->getBaseBoundary((uint16)(dst_p - _frontBuffer) >> 3); // Ptr into overlay bits
- if (ovb & (0x80 >> ((uint16)(dst_p - _frontBuffer) & 7))) // Overlay bit is set
- return kOvlForeground; // Found a bit - must be foreground
- dst_p += kXPix;
- }
-
- return kOvlBackground; // No bits set, must be background
-}
-
-/**
* Merge an object frame into _frontBuffer at sx, sy and update rectangle list.
* If fore TRUE, force object above any overlay
*/
@@ -740,6 +722,24 @@ void Screen_v1d::loadFontArr(Common::ReadStream &in) {
}
}
+/**
+ * Return the overlay state (Foreground/Background) of the currently
+ * processed object by looking down the current column for an overlay
+ * base byte set (in which case the object is foreground).
+ */
+overlayState_t Screen_v1d::findOvl(seq_t *seq_p, image_pt dst_p, uint16 y) {
+ debugC(4, kDebugDisplay, "findOvl()");
+
+ for (; y < seq_p->lines; y++) { // Each line in object
+ byte ovb = _vm->_object->getBaseBoundary((uint16)(dst_p - _frontBuffer) >> 3); // Ptr into overlay bytes
+ if (ovb) // If any overlay base byte is non-zero then the object is foreground, else back.
+ return kOvlForeground;
+ dst_p += kXPix;
+ }
+
+ return kOvlBackground; // No bits set, must be background
+}
+
Screen_v1w::Screen_v1w(HugoEngine *vm) : Screen(vm) {
}
@@ -790,5 +790,23 @@ void Screen_v1w::loadFontArr(Common::ReadStream &in) {
}
}
+/**
+ * Return the overlay state (Foreground/Background) of the currently
+ * processed object by looking down the current column for an overlay
+ * base bit set (in which case the object is foreground).
+ */
+overlayState_t Screen_v1w::findOvl(seq_t *seq_p, image_pt dst_p, uint16 y) {
+ debugC(4, kDebugDisplay, "findOvl()");
+
+ for (; y < seq_p->lines; y++) { // Each line in object
+ byte ovb = _vm->_object->getBaseBoundary((uint16)(dst_p - _frontBuffer) >> 3); // Ptr into overlay bits
+ if (ovb & (0x80 >> ((uint16)(dst_p - _frontBuffer) & 7))) // Overlay bit is set
+ return kOvlForeground; // Found a bit - must be foreground
+ dst_p += kXPix;
+ }
+
+ return kOvlBackground; // No bits set, must be background
+}
+
} // End of namespace Hugo
diff --git a/engines/hugo/display.h b/engines/hugo/display.h
index f234f76019..91e1752df0 100644
--- a/engines/hugo/display.h
+++ b/engines/hugo/display.h
@@ -101,10 +101,6 @@ protected:
static const byte stdMouseCursorHeight = 20;
static const byte stdMouseCursorWidth = 12;
- inline bool isInX(const int16 x, const rect_t *rect) const;
- inline bool isInY(const int16 y, const rect_t *rect) const;
- inline bool isOverlapping(const rect_t *rectA, const rect_t *rectB) const;
-
bool fontLoadedFl[kNumFonts];
// Fonts used in dib (non-GDI)
@@ -115,6 +111,14 @@ protected:
byte *_mainPalette;
int16 _arrayFontSize[kNumFonts];
+ viewdib_t _frontBuffer;
+
+ inline bool isInX(const int16 x, const rect_t *rect) const;
+ inline bool isInY(const int16 y, const rect_t *rect) const;
+ inline bool isOverlapping(const rect_t *rectA, const rect_t *rectB) const;
+
+ virtual overlayState_t findOvl(seq_t *seq_p, image_pt dst_p, uint16 y) = 0;
+
private:
byte *_curPalette;
byte _iconImage[kInvDx * kInvDy];
@@ -125,9 +129,6 @@ private:
int16 mergeLists(rect_t *list, rect_t *blist, const int16 len, int16 blen);
int16 center(const char *s) const;
- overlayState_t findOvl(seq_t *seq_p, image_pt dst_p, uint16 y);
-
- viewdib_t _frontBuffer;
viewdib_t _backBuffer;
viewdib_t _GUIBuffer; // User interface images
viewdib_t _backBufferBackup; // Backup _backBuffer during inventory
@@ -151,6 +152,8 @@ public:
void loadFont(int16 fontId);
void loadFontArr(Common::ReadStream &in);
+protected:
+ overlayState_t findOvl(seq_t *seq_p, image_pt dst_p, uint16 y);
};
class Screen_v1w : public Screen {
@@ -160,6 +163,8 @@ public:
void loadFont(int16 fontId);
void loadFontArr(Common::ReadStream &in);
+protected:
+ overlayState_t findOvl(seq_t *seq_p, image_pt dst_p, uint16 y);
};
} // End of namespace Hugo