aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/charset.cpp
diff options
context:
space:
mode:
authorTravis Howell2007-02-12 04:18:19 +0000
committerTravis Howell2007-02-12 04:18:19 +0000
commit384fd4b8334d88c828185c309952a046f4625fea (patch)
tree3377ca4900e5698678144999aae85b81b2f91373 /engines/agos/charset.cpp
parent189b4abb33fd13b29f7641c29c9950fe39fcd1fe (diff)
downloadscummvm-rg350-384fd4b8334d88c828185c309952a046f4625fea.tar.gz
scummvm-rg350-384fd4b8334d88c828185c309952a046f4625fea.tar.bz2
scummvm-rg350-384fd4b8334d88c828185c309952a046f4625fea.zip
Add Quietust's patch to fix subtitles glitches in Amiga AGA/CD32 versions of Simon the Sorcerer 1.
svn-id: r25506
Diffstat (limited to 'engines/agos/charset.cpp')
-rw-r--r--engines/agos/charset.cpp63
1 files changed, 29 insertions, 34 deletions
diff --git a/engines/agos/charset.cpp b/engines/agos/charset.cpp
index bba6ade9a5..4b318a3784 100644
--- a/engines/agos/charset.cpp
+++ b/engines/agos/charset.cpp
@@ -305,63 +305,58 @@ void AGOSEngine::renderStringAmiga(uint vga_sprite_id, uint color, uint width, u
dst_org = dst;
int delta = 0;
while ((chr = *txt++) != 0) {
- int tmp = chr;
+ int img_width = 1;
if (chr == 10) {
dst += width * 10;
dst_org = dst;
delta = 0;
- } else if ((tmp -= '!') < 0) {
- delta += 6;
- if (delta > 8) {
- delta -= 8;
- dst_org++;
- }
+ } else if ((signed char)(chr -= '!') < 0) {
+ img_width = 7;
} else {
const byte *img = simon_agaFont + chr * 41;
- int img_width = img[40];
- int mdelta = 8 - delta;
+ img_width = img[40];
byte *cur_dst = dst_org;
for (int row = 0; row < 10; row++) {
int col = color;
for (int plane = 0; plane < 3; plane++) {
chr = img[plane] >> delta;
if (chr) {
- if (col & 1) *(cur_dst + charsize * 0) |= chr;
- if (col & 2) *(cur_dst + charsize * 1) |= chr;
- if (col & 4) *(cur_dst + charsize * 2) |= chr;
- if (col & 8) *(cur_dst + charsize * 3) |= chr;
+ if (col & 1) cur_dst[charsize * 0] |= chr;
+ if (col & 2) cur_dst[charsize * 1] |= chr;
+ if (col & 4) cur_dst[charsize * 2] |= chr;
+ if (col & 8) cur_dst[charsize * 3] |= chr;
}
- chr = img[plane] << mdelta;
- if ((mdelta >= img_width) && (chr)) {
- if (col & 1) *(cur_dst + charsize * 0 + 1) |= chr;
- if (col & 2) *(cur_dst + charsize * 1 + 1) |= chr;
- if (col & 4) *(cur_dst + charsize * 2 + 1) |= chr;
- if (col & 8) *(cur_dst + charsize * 3 + 1) |= chr;
+ chr = img[plane] << (8 - delta);
+ if (((8 - delta) < img_width) && (chr)) {
+ if (col & 1) cur_dst[charsize * 0 + 1] |= chr;
+ if (col & 2) cur_dst[charsize * 1 + 1] |= chr;
+ if (col & 4) cur_dst[charsize * 2 + 1] |= chr;
+ if (col & 8) cur_dst[charsize * 3 + 1] |= chr;
}
col++;
}
chr = img[3] >> delta;
if (chr) {
- *(cur_dst + charsize * 0) |= chr;
- *(cur_dst + charsize * 1) |= chr;
- *(cur_dst + charsize * 2) |= chr;
- *(cur_dst + charsize * 3) |= chr;
+ cur_dst[charsize * 0] |= chr;
+ cur_dst[charsize * 1] |= chr;
+ cur_dst[charsize * 2] |= chr;
+ cur_dst[charsize * 3] |= chr;
}
- chr = img[3] << mdelta;
- if ((mdelta >= img_width) && (chr)) {
- *(cur_dst + charsize * 0 + 1) |= chr;
- *(cur_dst + charsize * 1 + 1) |= chr;
- *(cur_dst + charsize * 2 + 1) |= chr;
- *(cur_dst + charsize * 3 + 1) |= chr;
+ chr = img[3] << (8 - delta);
+ if (((8 - delta) < img_width) && (chr)) {
+ cur_dst[charsize * 0 + 1] |= chr;
+ cur_dst[charsize * 1 + 1] |= chr;
+ cur_dst[charsize * 2 + 1] |= chr;
+ cur_dst[charsize * 3 + 1] |= chr;
}
cur_dst += width;
img += 4;
}
- delta += img_width - 1;
- if (delta > 8) {
- delta -= 8;
- dst_org++;
- }
+ }
+ delta += img_width - 1;
+ if (delta >= 8) {
+ delta -= 8;
+ dst_org++;
}
}
}