Have the VDP limits been reached?

Página 1/18
| 2 | 3 | 4 | 5 | 6

Por Hrothgar

Champion (479)

Imagen del Hrothgar

09-09-2008, 20:02

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.

Login sesión o register para postear comentarios

Por PingPong

Enlighted (4136)

Imagen del PingPong

09-09-2008, 20:38

Hrothgar : (Especially) The msx1 vdp is created with a good mix of *features* that prevent you to make more than exists.

- No-Line int support, so forget raster effects until you use polling (but it's heavy on CPU time) (your (4))
- No scroll support. Ah, ok, i will do dynamic redefinition of tilesets, by blitting to vram...... Umh, no, i cannot do it, due to the limited bandwidth .... + colour clash. Plus screen2 have to move 12KB of VRAM to redefine all the tiles
- Exceptional sprite support. With the !unique! (c) feature of 4 sprites / scanline very often you think about to not use sprites at all. take this example: a C64 zoomed multicolor sprite, if made to look the same on msx1 will take ALL the 4 sprites , (the c64 one is a three color sprite the msx1 is a 2 color sprite however! Tongue)

On msx2 things are a little better, but having good scroll+animations with the limited horsepower of MSX2 VDP it's not possible.
think about it: most flickering sprite routines on msx1 rotate the sprites priority like in a circular list. While this is feasible on msx1 vdp, on msx2 one, it's hard, because of the G R E A T - M U L T I C O L O R support that forces you to rotate not only 128 bytes, but instead 640! GREAT!

Plus the vdp had the big help, that allow to know what sprite of the potentially 28 is not displayed correctly. PRATICALLY USELESS!.

The only decent is the V9958. Having scroll support allow the use of VDP for animation (SW sprites) and scroll support is by hardware. Plus you can use 8 hardware sprites ... (without boring of sprites)

With those all good things where you want to go ?

TongueTongueTongueTongueTongueTongueTongueTongueTongue

Por Maggoo

Paragon (1217)

Imagen del Maggoo

09-09-2008, 20:41

1) Best example of smooth, multidirectional scroll on MSX 1 for me is Theseus, Lotus F3 and MAlaika. The big problem with this, is that it makes the graphics very limited. I'd rather have a game like Montana Joe without scrolling or Nemesis with 8 pixels scrolling and better graphics than 2 color blocks scrolling everywhere. The problem on MSX1 is that you don't only deal with the constraint of no scroll register, but also with the constraint of 2 colors per 8 pix line. If you want to do smooth scroll, you have even more limits in the graphics you make, and there is no way tricks you can use around that. Vertical only scroll is somewhat easier since you dont have the same constraints (as shown in Pippols).

2) Smooth scroll in screen 5 can be done but the speed of your scrolling will be limited to 1 pixel per frame (2 if you somewhat decrease the display area). The best example of this IMO is "Total Parody" by Artrag. There are also some contraints you may have to deal with (sudden change of direction, etc). I would only use that for a game where the scroll path is pre-define, like for a nemesis type shooter. The best on MSX2 is still to use screen 4.

3) Already done in screen 4. Check the Vscreen demo 1.0, it should be available on the MRC for download. The parralax scrolling is working like you describe.

4) Possible but is it really worth it ? It's a real pain to deal with interupts on MSX1 so doing it with sprites might be possible but even more of a hassle. On MSX2 it's possible, I've tried it already (using it to distort sprites at every scan lines). Problem is, updating sprites attributes takes a lot of "out" so there is just so much you can do with it. And it's pointless to use for colors on MSX2 anyway.

Overall, I would say it's always possible to push the enveloppe a little further but I feel like sometime it turns out into being more a "demo" than a real game. Those visual tricks takes the focus from the developper away from the gameplay and design and don't always add much to the game itself.

Por wolf_

Ambassador_ (10109)

Imagen del wolf_

09-09-2008, 20:50

Maggoo, 3) may have been done for individual tiles, but -afaik- not with the level of detail like in that C64 game. In that game one sees two layers. In MSX games with that technique one sees 1 layer with 'rotating' tiles. I mean, they've never fooled me.., while I *did* watch that tube vid a bit like 'wtf?' Tongue

Por ARTRAG

Enlighted (6935)

Imagen del ARTRAG

09-09-2008, 21:11

There was a developing version of total parody with 4 directions scrolling (well this was also in the public promo), parallax and borders.
The parallax was done by rotating "tiles" of a large area representing clouds (IIRC it was 8x4 tiles of 16x16), the tiles were marked as "solid" and "transparent". Solid tiles were copied by byte copy, transparent tiles were copied twice, first as solid for the backgromd and than as transparent for the foreground.
The sole limit was no more than 3 transparent tiles per column (yes, the screen was build column by column in 16 steps).
All the background animations (yes you have animated background, like gears, elevators, etc) have constant frame speed of 1/16 of the scroll rate, also parallax move at that speed.

Actually it can be done...
And so what?
The game engine becomes a pain in the ass, as the time for AI is fractioned in the waiting time of the VDP.
There is no room for some good code...
In the end I concluded that it was a very hard work for getting something that on the msx2+ is practically effortless
and I gave up, giving priority to other projects...

The real improvement I really missed is skipping the copy of the tiles already there....

Por Hrothgar

Champion (479)

Imagen del Hrothgar

09-09-2008, 21:22

Smooth scroll in screen 5 can be done but the speed of your scrolling will be limited to 1 pixel per frame (2 if you somewhat decrease the display area). The best example of this IMO is "Total Parody" by Artrag. There are also some contraints you may have to deal with (sudden change of direction, etc). I would only use that for a game where the scroll path is pre-define, like for a nemesis type shooter.I've seen the "Total Parody" mentioned before, is it available somewhere? About the speed of the scroll: does it copy everything or only parts of the screen? Selective copying is the key part really, shouldn't that allow for much more variation in scroll speed without squeezing the whole screen to 120px? Just think about the amounts of air, bottom or repeated bricks and roofs - these don't have to be copied at all.

As for sudden change of movement: the screen shouldn't have to respond on a pixel-for-pixel basis as the player turns in the exact center of the screen; there can be margins. When considering a 32px wide center zone there should be some space to react to player movement?

3) Already done in screen 4. Check the Vscreen demo 1.0, it should be available on the MRC for download. The parralax scrolling is working like you describe.I'll check, but I guess the similarities are more on a technical level than overall visual resemblance to the game I mentioned Smile

Possible but is it really worth it ? It's a real pain to deal with interupts on MSX1 so doing it with sprites might be possible but even more of a hassle. On MSX2 it's possibleIndeed this trick would only be useful for MSX1. And I understand the technical hurdles, but then again these seem to be taken on some other systems as well. As I've read some C64 games need to operate with their CPU and video chip in 'synched mode' throughout the game, going as far as issuing commands to the VDP on an exact xth clock cycle of a certain scanline to achieve graphical effects. It took that scene eight years to achieve that level of programming to use it for games not demos. I was just hoping something like that could be possible on MSX as well.

As for interrupt trouble: another trick that comes to mind is a cartridge-aided interrupt generator. Wasn't that used for the NES as well? As for complexity it seems a rather limited enhancement but with great possibilities, somewhat like the SCC chip. Just a thought.

Por Hrothgar

Champion (479)

Imagen del Hrothgar

09-09-2008, 21:27

There was a developing version of total parody with 4 directions scrolling (well this was also in the public promo), parallax and borders.
Is there still a link somewhere? It sounds cool, even if it's a proof-of-concept Cool .

Por ARTRAG

Enlighted (6935)

Imagen del ARTRAG

09-09-2008, 22:11

As I told you it does it copy everything, and the screen does not respond on a pixel-for-pixel basis, but you need time to set up the direction change. The game exploits the time the MC moves from one side to the other to set up the change of direction.
About the development version of the copy with parallax I have to see what has survived in my last PC crash, I did it in 2005 using sjasm. I'll put on line what I find.

Por Maggoo

Paragon (1217)

Imagen del Maggoo

09-09-2008, 22:11

Maggoo, 3) may have been done for individual tiles, but -afaik- not with the level of detail like in that C64 game. In that game one sees two layers. In MSX games with that technique one sees 1 layer with 'rotating' tiles. I mean, they've never fooled me.., while I *did* watch that tube vid a bit like 'wtf?' Tongue

Can be done for more than a single tile really. I have used it for blocks of 16x16 (4 tiles) in Vscreen and did tests of 64x64 (64 tiles) and it was working fine. So one could push that much further if needed. It really depends of how many tiles you want to reserve for your background. You dont want to use that many tiles for something that is just a neat visual thing.

Por wolf_

Ambassador_ (10109)

Imagen del wolf_

09-09-2008, 22:28

Yeah sure, but that C64 game was far more than 64 tiles I bet. Did you ever find out what would be the max? (combined with a complete game eh)

Por ARTRAG

Enlighted (6935)

Imagen del ARTRAG

09-09-2008, 23:08

To whom it may concern, here you can find the latest working files of Total Parody as survived to my PC crash:

https://sites.google.com/site/testmsx/working-files-of-total-parody

This is the state of art of 8 direction scrolling in screen 5....
Just the game is a bit missing :-)
Hrothgar, do you want to continue the work ?
maybe skipping the blocks already there, you
can get enough CPU time to add a decent game engine...

Página 1/18
| 2 | 3 | 4 | 5 | 6