OK, so I've been thinking about how to handle the whole theme/skin thing which kind of works in 0.8 but isn't as flexible as it could be. I don't think there's anything particularly ground-breaking here.
The main point we hit on already is that themes can be defined hierarchically. The default theme serves as the basis and can be overridden by each "layer" in the hierarchy. The particular order would need to be configurable and would probably most logically follow the drill-down concept as configured by the user. An example would be default -> system -> genre -> game, where each layer is optional.
The individual elements of a theme are basically some images and the layout of a number of on-screen objects. These objects represent anything but are all based on a fixed set of programmed primitives (image, video, soundtrack, etc.). Some special types may be needed to implement an animated game selector, like a wheel or scrolling set of images. All elements have a position in XYZ space and a rotation in XYZ axis, both of which may be absolute (based on centre of the "world") or possibly relative to a higher level theme. Each may also have a transition effect (possibly separate ones for entry/exit) such as fade, zoom, slide in/out or a combination of these.
The associated files are located through the same hierarchy, so first check at game level, then subsequent layers, down to the default. Each layer can define a specific file or offer a directory to search for matches (like the current locations feature). Higher level themes can alter any objects and/or supplement them with their own. Each object can be animated in a script-like manner (rotate, translate, delay, loop, etc) so by layering up a few objects you could do pretty much anything.
That's basically all I can think of right now. I'm sure more will come up, along with some tasty little gotchas when it comes to the actual implementation. Please feel free to post comments, additions, etc.
Cheers,
Steve