This patch is required to make Colonization and Civilization 2 work. The patch might look funny but I believe there is a bug in Windows GetWindowLong16 that converts invalid offsets into valid ones. Changelog: Convert some invalid offsets in GetWindowLong16 into valid offsets. Index: wine/windows/win.c =================================================================== RCS file: /home/wine/wine/windows/win.c,v retrieving revision 1.176 diff -u -r1.176 win.c --- wine/windows/win.c 2002/01/22 00:50:07 1.176 +++ wine/windows/win.c 2002/02/10 11:53:59 @@ -1873,6 +1873,24 @@ { if (offset > wndPtr->cbWndExtra - sizeof(LONG)) { + /* + * Some programs try to access last element from 16 bit + * code using illegal offset value. Hopefully this is + * what those programs really expect. + */ + if (type == WIN_PROC_16 && + wndPtr->cbWndExtra >= 4 && + offset == wndPtr->cbWndExtra - sizeof(WORD)) + { + INT offset2 = wndPtr->cbWndExtra - sizeof(LONG); + + ERR( "- replaced invalid offset %d with %d\n", + offset, offset2 ); + + retvalue = *(LONG *)(((char *)wndPtr->wExtra) + offset2); + WIN_ReleasePtr( wndPtr ); + return retvalue; + } WARN("Invalid offset %d\n", offset ); WIN_ReleasePtr( wndPtr ); SetLastError( ERROR_INVALID_INDEX ); -- Jukka Heinonen <http://www.iki.fi/jhei/>