diff -ur ScummVM-cvs20030426/scummvm/scumm/charset.cpp ScummVM-cvs20030426+hack/scummvm/scumm/charset.cpp
old
|
new
|
|
181 | 181 | unsigned int buffer = 0, mask = 0, x = 0, y = 0; |
182 | 182 | unsigned char color; |
183 | 183 | |
| 184 | // FIXME: When playing with the original interpreter, Much of the |
| 185 | // text in Loom is drawn with a drop-shadow. But is it all of it, or |
| 186 | // just some? It's hard to tell with a black background. |
| 187 | bool drop_shadow = (_vm->_gameId == GID_LOOM); |
| 188 | int w, h; |
| 189 | |
| 190 | if (!drop_shadow) { |
| 191 | w = h = 8; |
| 192 | } else { |
| 193 | w = h = 9; |
| 194 | } |
| 195 | |
184 | 196 | _vm->checkRange(_vm->_maxCharsets - 1, 0, _curId, "Printing with bad charset %d"); |
185 | 197 | |
186 | 198 | if ((vs = _vm->findVirtScreen(_top)) == NULL) |
… |
… |
|
199 | 211 | |
200 | 212 | char_ptr = _fontPtr + chr * 8; |
201 | 213 | dest_ptr = vs->screenPtr + vs->xstart + (_top - vs->topline) * _vm->_realWidth + _left; |
202 | | _vm->updateDirtyRect(vs->number, _left, _left + 8, _top - vs->topline, _top - vs->topline + 8, 0); |
| 214 | _vm->updateDirtyRect(vs->number, _left, _left + w, _top - vs->topline, _top - vs->topline + h, 0); |
203 | 215 | |
204 | 216 | for (y = 0; y < 8; y++) { |
205 | 217 | for (x = 0; x < 8; x++) { |
… |
… |
|
208 | 220 | mask = 0x80; |
209 | 221 | } |
210 | 222 | color = ((buffer & mask) != 0); |
211 | | if (color) |
| 223 | if (color) { |
| 224 | if (drop_shadow) |
| 225 | *(dest_ptr + (y + 1) * _vm->_realWidth + x + 1) = 0; |
212 | 226 | *(dest_ptr + y * _vm->_realWidth + x) = _color; |
| 227 | } |
213 | 228 | } |
214 | 229 | } |
215 | 230 | |
216 | 231 | // FIXME |
| 232 | if (_left < _strLeft) |
| 233 | _strLeft = _left; |
| 234 | |
217 | 235 | _left += getCharWidth(chr); |
218 | 236 | |
219 | | if (_left > _strRight) |
| 237 | if (_left > _strRight) { |
220 | 238 | _strRight = _left; |
| 239 | if (drop_shadow) |
| 240 | _strRight++; |
| 241 | } |
221 | 242 | |
222 | | if (_top + 8 > _strBottom) |
223 | | _strBottom = _top + 8; |
| 243 | if (_top + h > _strBottom) |
| 244 | _strBottom = _top + h; |
224 | 245 | } |
225 | 246 | |
226 | 247 | void CharsetRendererClassic::printChar(int chr) { |
diff -ur ScummVM-cvs20030426/scummvm/scumm/script_v5.cpp ScummVM-cvs20030426+hack/scummvm/scumm/script_v5.cpp
old
|
new
|
|
451 | 451 | break; |
452 | 452 | case 12: /* talk color */ |
453 | 453 | a->talkColor = getVarOrDirectByte(0x80); |
| 454 | if (_features & GF_16COLOR) |
| 455 | a->talkColor &= 0x0f; // FIXME |
454 | 456 | break; |
455 | 457 | case 13: /* name */ |
456 | 458 | loadPtrToResource(rtActorName, a->number, NULL); |
… |
… |
|
2494 | 2496 | // FIXME: Store positions, this is needed for Indy3 (Grail Diary).. |
2495 | 2497 | // I don't believe this is the correct fix, may cause other problems |
2496 | 2498 | // later in the game. |
2497 | | if (_gameId == GID_INDY3_256) { |
| 2499 | // |
| 2500 | // It's also needed for Loom, or the lines Bobbin |
| 2501 | // speaks during the intro are put at position 0,0. |
| 2502 | // In addition, Loom needs to remember the text colour. |
| 2503 | if (_gameId == GID_INDY3_256 || _gameId == GID_LOOM) { |
2498 | 2504 | _string[textSlot].t_xpos = _string[textSlot].xpos; |
2499 | 2505 | _string[textSlot].t_ypos = _string[textSlot].ypos; |
| 2506 | _string[textSlot].t_color = _string[textSlot].color; |
2500 | 2507 | } |
2501 | 2508 | |
2502 | 2509 | _scriptPointer = _messagePtr; |
diff -ur ScummVM-cvs20030426/scummvm/scumm/string.cpp ScummVM-cvs20030426+hack/scummvm/scumm/string.cpp
old
|
new
|
|
188 | 188 | _talkDelay = _defaultTalkDelay; |
189 | 189 | |
190 | 190 | if (!_keepText) { |
191 | | if (_features & GF_AFTER_V3) { |
| 191 | if (_features & GF_AFTER_V3 && _gameId != GID_LOOM) { |
192 | 192 | gdi._mask_left = _string[0].xpos; |
193 | 193 | gdi._mask_top = _string[0].ypos; |
194 | 194 | gdi._mask_bottom = _string[0].ypos + 8; |