[ scummvm-Patches-3123863 ] Wii port +humogonous games +missing cursor

SourceForge.net noreply at sourceforge.net
Tue Nov 30 22:13:28 CET 2010


Patches item #3123863, was opened at 2010-11-30 23:13
Message generated for change (Tracker Item Submitted) made by obcd
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=418822&aid=3123863&group_id=37116

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: obcd (obcd)
Assigned to: Nobody/Anonymous (nobody)
Summary: Wii port +humogonous games +missing cursor

Initial Comment:
1. Problem description:

Some Humogonous scumm games don't show the ingame cursor on the wii port of scummvm. 
This happens with the stable 1.2.0 build and also with the svn builds.

2. Cause of problem:

The Wii port has the separate cursor palette enabled. 
The _cursorPalette is used as a buffer. 
When the system switches to the _texMouse.palette (setCursorPalette) and the _cursorPaletteDisabled == true,
than the _texMouse.palette is copied to the _cursorPalette.
The disableCursorPalette function copies the _cursorPalette back to to the _texMouse.palette when the cursor 
palette is disabled.

I did some loggings of the functions and there appearance during the startup of a humogonous game:

=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2010.11.26 10:28:09 =~=~=~=~=~=~=~=~=~=~=~=
startup as 'scummvm_stripped.dol'
chdir to default
initSize 320*200*8 (000 -> 000 match: 1)
window caption: ScummVM 1.3.0svn (Nov 26 2010 10:26:51)
switching to palette based cursor
setCursorPalette with _cusorPaletteDisabled = TRUE
disabling cursor palette
User picked target 'PuttTime-nl-1' (gameid 'putttime')...
  Looking for a plugin supporting this gameid... SCUMM Engine [all games]
  Starting 'Putt-Putt Travels Through Time'
disabling cursor palette
window caption: Putt-Putt Travels Through Time (Dutch)
switchVideoMode 0
initSize 640*480*8 (000 -> 000 match: 1)
enabling cursor palette
setCursorPalette with _cusorPaletteDisabled = FALSE
disabling cursor palette
Set palette
disabling cursor palette
Set palette
Set palette
disabling cursor palette
Set palette
Set palette
disabling cursor palette
Set palette
Set palette
Set palette
Set palette
Set palette
Set palette
Set palette
Set palette
Set palette
Set palette
disabling cursor palette
disabling cursor palette
...


As you can see, the cursor palette is enabled before the actual colors are set with the setCursorPalette.
Due to that issue, the _cursorPalette isn't updated in the SetCursorPalette function.

3. My solution:

The _cursorPalette is suposed to have the same entries as the normal in game palette.(In a different format)
So, I changed the SetPalette function a little:



osystem_gfx.cpp:


void OSystem_Wii::setPalette(const byte *colors, uint start, uint num) {
#ifdef USE_RGB_COLOR
	assert(_pfGame.bytesPerPixel == 1);
#endif

	const byte *s = colors;
	u16 *d = _texGame.palette;

	for (uint i = 0; i < num; ++i) {
		d[start + i] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(s[0], s[1], s[2]);
		s += 4;
	}

	gfx_tex_flush_palette(&_texGame);

	// Obcd
	/* this background cursor palette should always be equal to the game screen palette */
	s = colors;
	d = _cursorPalette;
	for (uint i = 0; i < num; ++i) {
		d[start + i] = Graphics::ARGBToColor<Graphics::ColorMasks<3444> >(0xff, s[0], s[1], s[2]);
		s += 4;
	}
	if (_cursorPaletteDisabled) //There should be a direct reflection to the current showed cursor 
	{
		assert(_texMouse.palette);
		u16*f = _cursorPalette;
		d = _texMouse.palette;
		memcpy(d + start, f + start, num * 2);
		_cursorPaletteDirty = true;
	}
/*

	if (_cursorPaletteDisabled) {
		assert(_texMouse.palette);

		s = colors;
		d = _texMouse.palette;

		for (uint i = 0; i < num; ++i) {
			d[start + i] = Graphics::ARGBToColor<Graphics::ColorMasks<3444> >(0xff, s[0], s[1], s[2]);
			s += 4;
		}

		_cursorPaletteDirty = true;
	}
*/
}
 
It seemed like the most logical place to do things....

regards.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=418822&aid=3123863&group_id=37116




More information about the Scummvm-tracker mailing list