Here's how resolution settings work in Castle Of Illusion, and why getting the game to run at any resolution may be a breeze or a nightmare.
In-game resolution setting is a list of "display modes" that combine width, height and refresh rate. This list of modes seems to be exposed by the monitor driver, not the graphics card or the system, so there is no easy, foolproof way to fiddle with it (that I could find).
Display settings are stored in the registry: HKCU\Software\SSA\COI ScreenResIndex (decimal, 0-29)
The game detects the 30 first modes supported by your display starting from 800x600 and assigns a 'ScreenResIndex' number to it. Display modes ouside of that range will not be available in-game. Now on any given display, several low resolutions usually support two or more refresh rates - each will count as one item on the list. Even worse, each width-by-height combination counts as a pair in the ScreenResIndex scale. For instance if the first items in your in-game list are:
800x600@60Hz 1024x768@60Hz 1024x768@75Hz
It means that out of the 30 ScreenResIndex values available to the game, 4 are already spent (not 3).
So depending entirely on your display's capabilities, your native resolution may or may not be available to the game ! A higher or lower native resolution is not even indicative of what the game can ultimately use...
On my Surround system, the max res I can pick is 1920x1200 (1920x1200@60Hz is #29, 1920x1200@59Hz is #30 in the list). On my 29" monitor (2650x1080), the in-game list has so many "useless" display modes that the max res is 1920x1080@60Hz (only because it is mode #30 i.e ScreenResIndex 29). On my older 30" panel however, only 60Hz resolutions are exposed. So the in-game list of display modes includes 2560x1600, no problem !
Things I tried that did not help: - create custom resolutions through the registry (like 1280x540). New res's work in windows, but the in-game list is unchanged. - prune the registry of "useless" resolutions stored by the graphics driver. All I could do was remove old monitor data and custom res's, not default display modes. - forcerefreshrate and framelimiter settings (in pcrun.cfg) have no effect on detected display modes, either. I suppose EDID or registry tweaks could work around the problem by hiding or deleting "useless" display modes, thus shrinking the ScreenResIndex list enough for it to include any native resolution. It seems overly complicated, though (read: way out of my league).
So there you go, the game's arbitrary "lemme count to 30 from 800x600" formula may effectively ruin support for many users, even though for all we know, the graphics engine itself supports any and all resolutions...
|