After reading the interesting discussions on new MSX graphics cards I'm wondering if we ever truly reached the limits of the old ones. I have the feeling that with outstanding coding more could be achieved than we've seen yet. Some particular areas of interest:
1) Smooth scrolling on MSX1 screen modes. The 8px block scroll has become the trademark of MSX (both 1 and 2) just like colour clash has for the Spectrum. But did it have to be that way? We saw with games like Pippols (or, more recently, Malaika) that within certain boundaries we *can* have smooth scroll on MSX1. Unfortunately the range of games using this is extremely small and both of these games are quite slow platformers without much action. Doesn't the MSX deserve more creations à la Mario, Vampire Killer, Nemesis but then with smooth scroll? (Where horizontal scrollers can have modernistic background patterns such as SM and vertical scrollers more detailed patterns such as most of the Nemesis series). Or even multidirectional ones where the tiles can be redefined on-the-fly in both directions (albeit not simultaneously).
2) Smooth scrolling on screen 5. This is such a shame, because the MSX2 really offers the basics for smooth scrolling. We're however limited to some smooth vertical scrollers (Zanac-Ex, Aleste) and I know only two horizontal ones (SM in screen 4 and Psycho World). From some discussions I've read about the technology behind smooth horizontal screen 5 scroll the basics seem to be this:
- Alternate between two visible pages;
- Block-copy the whole page 16 px;
- Fill the gaps.
You'll *just* have enough time to get these block copies done with 1px subscrolls through the VDP registers to get a boring slow scroller (50px per second).
So what about an alternative approach? As Cas Cremers wrote on his blog on the Coredump development, you can gain a tremendous speed boost by not copying everything but only the parts that change. Hypothetical model:
- Design a level with quite some repetition in the horizontal direction every 32px;
- Store the level maps not as complete maps, but as one initial full screen and then only copy instructions for the areas that change relative to the screen 2 pages ago. The changes are *not* calculated by the CPU but preprocessed and stored in a compact form which should save both VDP cycles and memory for storing the map.
Wouldn't it be technically possible to have 2 or 3-speed screen 5 scrollers to get some more action that way? Or even omnidirectional scrolling as vertical scroll is much less VDP intensive?
3) Parallax scrolling. See e.g. the C64 example of Flimbo's quest (http://www.youtube.com/watch?v=AtdUBPYVKmk). Made with a foreground tileset that is scrolled through the hardware scroll and background tiles that counter-scroll at half speed by dynamic tile changes. This is hardly possible on MSX1 because of lack of hardware scroll and colour clash, but on MSX2 we should be able to combine hardware scroll and multiple tilesets, provided we use an 8px matrix to prevent colour clash. Does anybody know good examples of such a technique on MSX? (Now don't say Moon Patrol :P )
4) Coloured sprites. One hell of a problem in programming for MSX1 as you have both the 4 sprite limit and monochrome sprites. From the Commodore scene however it seems that changing visual properties on individual scanlines is quite a common technique over there to overcome graphical limitations. Would it be possible on MSX1 to create sprites with separate colours on each line by creating an interrupt on the first (or any specific) scanline and use timed code to redefine properties just on time? Or aren't sprite properties overwritable halfway a sprite on MSX?
Just some hypothetical thoughts on how we could put energy in making better creations with the hardware we have. But I'm hardly an expert so please comment on the feasibility and limits of these approaches. Or of course any other improvements that you think MSX 1 or 2 could still see with their old VDP's.