diff options
| -rw-r--r-- | engines/scumm/cursor.cpp | 61 | 
1 files changed, 37 insertions, 24 deletions
diff --git a/engines/scumm/cursor.cpp b/engines/scumm/cursor.cpp index a998402474..98e7b81369 100644 --- a/engines/scumm/cursor.cpp +++ b/engines/scumm/cursor.cpp @@ -45,7 +45,7 @@ static const byte default_v1_cursor_colors[4] = {  };  static const uint16 default_pce_cursor_colors[4] = { -	0x01FF, 0x016D, 0x0000, 0x0092 +	0x01FF, 0x01FF, 0x016D, 0x0092  };  static const byte default_cursor_colors[4] = { @@ -356,33 +356,46 @@ void ScummEngine_v5::redefineBuiltinCursorFromChar(int index, int chr) {  //	const int oldID = _charset->getCurID(); -	if (_game.version == 3) { -		_charset->setCurID(0); -	} else if (_game.version >= 4) { -		_charset->setCurID(1); -	} +	uint16 *ptr = _cursorImages[index]; +	int h; -	Graphics::Surface s; -	byte buf[16*17]; -	memset(buf, 123, 16*17); -	s.pixels = buf; -	s.w = _charset->getCharWidth(chr); -	s.h = _charset->getFontHeight(); -	s.pitch = s.w; -	// s.h = 17 for FM-TOWNS Loom Japanese. Fixes bug #1166917 -	assert(s.w <= 16 && s.h <= 17); -	s.bytesPerPixel = 1; +	if (index == 1 && _game.platform == Common::kPlatformPCEngine) { +		uint16 cursorPCE[] = { +			0x8000, 0xC000, 0xE000, 0xF000, 0xF800, 0xFC00, 0xFE00, 0xFF00, +			0xF180, 0xF800, 0x8C00, 0x0C00, 0x0600, 0x0600, 0x0300 +		}; -	_charset->drawChar(chr, s, 0, 0); +		for (h = 0; h < ARRAYSIZE(cursorPCE); h++) { +			*ptr++ = cursorPCE[h]; +		} +	} else { +		if (_game.version == 3) { +			_charset->setCurID(0); +		} else if (_game.version >= 4) { +			_charset->setCurID(1); +		} -	uint16 *ptr = _cursorImages[index]; -	memset(ptr, 0, 17 * sizeof(uint16)); -	for (int h = 0; h < s.h; h++) { -		for (int w = 0; w < s.w; w++) { -			if (buf[s.pitch * h + w] != 123) -				*ptr |= 1 << (15 - w); +		Graphics::Surface s; +		byte buf[16*17]; +		memset(buf, 123, 16*17); +		s.pixels = buf; +		s.w = _charset->getCharWidth(chr); +		s.h = _charset->getFontHeight(); +		s.pitch = s.w; +		// s.h = 17 for FM-TOWNS Loom Japanese. Fixes bug #1166917 +		assert(s.w <= 16 && s.h <= 17); +		s.bytesPerPixel = 1; + +		_charset->drawChar(chr, s, 0, 0); + +		memset(ptr, 0, 17 * sizeof(uint16)); +		for (h = 0; h < s.h; h++) { +			for (int w = 0; w < s.w; w++) { +				if (buf[s.pitch * h + w] != 123) +					*ptr |= 1 << (15 - w); +			} +			ptr++;  		} -		ptr++;  	}  //	_charset->setCurID(oldID);  | 
