diff -ur ScummVM-cvs20030427/scummvm/scumm/charset.cpp ScummVM-cvs20030427+hack/scummvm/scumm/charset.cpp
old
|
new
|
|
184 | 184 | } |
185 | 185 | |
186 | 186 | void CharsetRendererOld256::printChar(int chr) { |
187 | | // Indy3 / Zak256 |
| 187 | // Indy3 / Zak256 / Loom |
188 | 188 | VirtScreen *vs; |
189 | | byte *char_ptr, *dest_ptr; |
190 | | unsigned int buffer = 0, mask = 0, x = 0, y = 0; |
191 | | unsigned char color; |
192 | | |
| 189 | byte *char_ptr, *dest_ptr, *mask_ptr; |
| 190 | unsigned int buffer = 0, bit = 0, x = 0, y = 0; |
| 191 | bool useMask; |
193 | 192 | int w, h; |
194 | 193 | |
195 | 194 | if (!_dropShadow) { |
… |
… |
|
216 | 215 | |
217 | 216 | char_ptr = _fontPtr + chr * 8; |
218 | 217 | dest_ptr = vs->screenPtr + vs->xstart + (_top - vs->topline) * _vm->_realWidth + _left; |
| 218 | mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + _vm->_screenStartStrip + (_top - vs->topline) * _vm->gdi._numStrips + _left / 8; |
| 219 | useMask = (vs->number == 0 && !_ignoreCharsetMask); |
| 220 | |
219 | 221 | _vm->updateDirtyRect(vs->number, _left, _left + w, _top - vs->topline, _top - vs->topline + h, 0); |
| 222 | if (vs->number == 0) |
| 223 | _hasMask = true; |
220 | 224 | |
221 | 225 | for (y = 0; y < 8; y++) { |
| 226 | byte maskmask = revBitMask[_left & 7]; |
| 227 | int maskpos = 0; |
| 228 | |
222 | 229 | for (x = 0; x < 8; x++) { |
223 | | if ((mask >>= 1) == 0) { |
| 230 | if ((bit >>= 1) == 0) { |
224 | 231 | buffer = *char_ptr++; |
225 | | mask = 0x80; |
| 232 | bit = 0x80; |
226 | 233 | } |
227 | | color = ((buffer & mask) != 0); |
228 | | if (color) { |
| 234 | if (buffer & bit) { |
| 235 | byte *dst = dest_ptr + y * _vm->_realWidth + x; |
| 236 | |
229 | 237 | if (_dropShadow) |
230 | | *(dest_ptr + (y + 1) * _vm->_realWidth + x + 1) = 0; |
231 | | *(dest_ptr + y * _vm->_realWidth + x) = _color; |
| 238 | *(dst + _vm->_realWidth + 1) = 0; |
| 239 | *dst = _color; |
| 240 | |
| 241 | if (useMask) { |
| 242 | mask_ptr[maskpos] |= maskmask; |
| 243 | if (_dropShadow) { |
| 244 | int spos = maskpos + _vm->gdi._numStrips; |
| 245 | byte sbit = maskmask >> 1; |
| 246 | |
| 247 | if (sbit == 0) { |
| 248 | sbit = 0x80; |
| 249 | spos++; |
| 250 | } |
| 251 | mask_ptr[spos] |= sbit; |
| 252 | } |
| 253 | } |
| 254 | } |
| 255 | maskmask >>= 1; |
| 256 | if (maskmask == 0) { |
| 257 | maskmask = 0x80; |
| 258 | maskpos++; |
232 | 259 | } |
233 | 260 | } |
| 261 | mask_ptr += _vm->gdi._numStrips; |
234 | 262 | } |
235 | 263 | |
236 | 264 | // FIXME |