aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/cryo/eden.cpp82
-rw-r--r--engines/cryo/eden.h3
-rw-r--r--engines/cryo/graphics.cpp14
3 files changed, 11 insertions, 88 deletions
diff --git a/engines/cryo/eden.cpp b/engines/cryo/eden.cpp
index 0d4cb7478a..2e3d44fd2c 100644
--- a/engines/cryo/eden.cpp
+++ b/engines/cryo/eden.cpp
@@ -1115,84 +1115,6 @@ void EdenGame::readPalette(byte *ptr) {
}
}
-// Original name: spritesurbulle
-void EdenGame::spriteOnSubtitle(int16 index, int16 x, int16 y) {
- byte *pix = _bankData;
- byte *scr = _subtitlesViewBuf + x + y * _subtitlesXWidth;
- if ((_curBankNum != 117) && (READ_LE_UINT16(pix) > 2))
- readPalette(pix + 2);
-
- pix += READ_LE_UINT16(pix);
- pix += READ_LE_UINT16(pix + index * 2);
- // int16 height:9
- // int16 pad:6;
- // int16 flag:1;
- byte h0 = *pix++;
- byte h1 = *pix++;
- int16 w = ((h1 & 1) << 8) | h0;
- int16 h = *pix++;
- byte mode = *pix++;
- if (mode != 0xFF && mode != 0xFE)
- return;
- if (h1 & 0x80) {
- // compressed
- for (; h-- > 0;) {
- for (int16 ww = w; ww > 0;) {
- byte c = *pix++;
- if (c >= 0x80) {
- if (c == 0x80) {
- byte fill = *pix++;
- if (fill == 0) {
- scr += 128 + 1;
- ww -= 128 + 1;
- } else {
- byte runVal;
- *scr++ = fill; //TODO: wha?
- *scr++ = fill;
- ww -= 128 + 1;
- for (runVal = 127; runVal--;)
- *scr++ = fill;
- }
- } else {
- byte fill = *pix++;
- byte runVal = 255 - c + 2;
- ww -= runVal;
- if (fill == 0)
- scr += runVal;
- else {
- for (; runVal--;)
- *scr++ = fill;
- }
- }
- } else {
- byte runVal = c + 1;
- ww -= runVal;
- for (; runVal--;) {
- byte p = *pix++;
- if (p == 0)
- scr++;
- else
- *scr++ = p;
- }
- }
- }
- scr += _subtitlesXWidth - w;
- }
- } else {
- // uncompressed
- for (; h--;) {
- for (int16 ww = w; ww--;) {
- byte p = *pix++;
- if (p == 0)
- scr++;
- else
- *scr++ = p;
- }
- scr += _subtitlesXWidth - w;
- }
- }
-}
-
// Original name: sauvefondbouche
void EdenGame::saveMouthBackground() {
rect_src.left = _curCharacterRect->left;
@@ -2484,8 +2406,8 @@ void EdenGame::my_bulle() {
byte x = *icons++;
byte y = *icons++;
byte s = *icons++;
- spriteOnSubtitle(52, x + _subtitlesXCenter, y - 1);
- spriteOnSubtitle(s + 9, x + _subtitlesXCenter + 1, y);
+ drawSprite(52, x + _subtitlesXCenter, y - 1, false, true);
+ drawSprite(s + 9, x + _subtitlesXCenter + 1, y, false, true);
}
}
diff --git a/engines/cryo/eden.h b/engines/cryo/eden.h
index 3e838a622e..c8743caf43 100644
--- a/engines/cryo/eden.h
+++ b/engines/cryo/eden.h
@@ -121,12 +121,11 @@ private:
void useBank(int16 bank);
void sundcurs(int16 x, int16 y);
void rundcurs();
- void drawSprite(int16 index, int16 x, int16 y, bool withBlack = false);
+ void drawSprite(int16 index, int16 x, int16 y, bool withBlack = false, bool onSubtitle = false);
void getglow(int16 x, int16 y, int16 w, int16 h);
void unglow();
void glow(int16 index);
void readPalette(byte *ptr);
- void spriteOnSubtitle(int16 index, int16 x, int16 y);
void hideBars();
void showBars();
void saveMouthBackground();
diff --git a/engines/cryo/graphics.cpp b/engines/cryo/graphics.cpp
index 29ebffc7a6..bfbce13949 100644
--- a/engines/cryo/graphics.cpp
+++ b/engines/cryo/graphics.cpp
@@ -30,10 +30,12 @@
namespace Cryo {
// Original name: noclipax
-void EdenGame::drawSprite(int16 index, int16 x, int16 y, bool withBlack) {
+void EdenGame::drawSprite(int16 index, int16 x, int16 y, bool withBlack, bool onSubtitle) {
+ uint16 width = (!onSubtitle) ? 640 : _subtitlesXWidth;
byte *pix = _bankData;
- byte *scr = _mainViewBuf + x + y * 640;
- if (_curBankNum != 117 && (!_noPalette || withBlack)) {
+ byte *buf = (!onSubtitle) ? _mainViewBuf : _subtitlesViewBuf;
+ byte *scr = buf + x + y * width;
+ if (_curBankNum != 117 && (!_noPalette || withBlack || onSubtitle)) {
if (READ_LE_UINT16(pix) > 2)
readPalette(pix + 2);
}
@@ -49,7 +51,7 @@ void EdenGame::drawSprite(int16 index, int16 x, int16 y, bool withBlack) {
byte mode = *pix++;
if (mode != 0xFF && mode != 0xFE)
return;
- if (y + h > 200)
+ if (y + h > 200 && !onSubtitle)
h -= (y + h - 200);
if (h1 & 0x80) {
// compressed
@@ -95,7 +97,7 @@ void EdenGame::drawSprite(int16 index, int16 x, int16 y, bool withBlack) {
}
}
}
- scr += 640 - w;
+ scr += width - w;
}
}
else {
@@ -108,7 +110,7 @@ void EdenGame::drawSprite(int16 index, int16 x, int16 y, bool withBlack) {
else
*scr++ = p;
}
- scr += 640 - w;
+ scr += width - w;
}
}
}