Jump to content
IGNORED

Soft sprites (isometric) on 9918A/MSX1


Asmusr

Recommended Posts

A marvelously complicated game... I'm impressed that it doesn't just have a 2D isometric perspective, but 3D objects and gravity as well!

 

This is very possible, if you're not worried about colors. Bit-mapping the objects over each other and under each other is very doable.

 

The only thing I can see that's complicated is how you're determining transparency in places... Each of the moving characters inner black lines are overlapping/underlapping as expected, but that would mean you'd have to map things using 2 bits per pixel, not one. (So you'd have a "transparent" pixel in addition to two color pixels.)

 

Damn I'd be keen to see the source code on this one and how they designed it...

Link to comment
Share on other sites

The only thing I can see that's complicated is how you're determining transparency in places... Each of the moving characters inner black lines are overlapping/underlapping as expected, but that would mean you'd have to map things using 2 bits per pixel, not one. (So you'd have a "transparent" pixel in addition to two color pixels.)

 

You would have a mask indicating which pixels to clear in addition to a pattern telling which pixels to set.

 

The issue for me is if whether it would be possible to send all the data required to update the VDP from the TI in a reasonable time. They must have had a really clever algorithm for determining if an area is 'dirty' and has to be repainted.

Link to comment
Share on other sites

Or they kept a buffer in CPU RAM and just output all of it in one stream. I notice on screens with more than two moving objects it slows WAY down but you don't see any rips or tears.

 

This is doable on the TI, if expensive in memory... the color swaps upon moving from one room to another would also be a pain...

Link to comment
Share on other sites

Best to read thru this page:

 

http://www.icemark.com/dataformats/knightlore/

 

Grab the disassembly and work thru it.

 

Note the above is regard to Spectrum release of Knight Lore which was what the MSX was ported from and is similar in design, you can see in the page linked above how simple the graphics are really when it is broken down.

Edited by Gary from OPA
  • Like 1
Link to comment
Share on other sites

That's a very nice resource. Strange I didn't find it while I was re-making Sabre Wulf.

 

[Edit: but undocumented Z80 code is not that useful to me. Still, I could have saved many days of work if I had known this guy had extracted all the Sabre Wulf graphics. He's also explaining the data format for Jet Set Willy. It's tempting to try to do a TI version. :)]

  • Like 1
Link to comment
Share on other sites

Made a little demo of isometric graphics on the TI:

 

 

The interesting part is that the hardware sprite seems to be moving behind parts of the character/bitmap layer. The only way to do this, of course, is to change the sprite pattern according to the surroundings.

 

It still has a few glitches that mainly have to do with treating the sprite as if it did not take up any space. And you can't move upstairs yet...

isometric.a99

ISOMETRIC.dsk

  • Like 15
Link to comment
Share on other sites

Slightly off topic here but the thing about the MSX version that impressed me the most was the incredibly accurate reproduction of the Spectrum sound effects, the ZX has notoriously bad sound quality but some of the spot FX contained within certain games were actually quite good-Knightlore being a prime example.

Link to comment
Share on other sites

The interesting part is that the hardware sprite seems to be moving behind parts of the character/bitmap layer. The only way to do this, of course, is to change the sprite pattern according to the surroundings.

I think you could also use a transparent "colored" sprite to on top of the foreground tiles to mask the player sprite. One or two mask sprites would probably be all you need, and of course they would have to dynamically move around with the player

 

Very nice demo though, I really like the black and white play field with a colored player.

 

It seems like you manage to come up with a way to do on the 9918A everything I added enhancements for on the F18A.

Link to comment
Share on other sites

It seems like you manage to come up with a way to do on the 9918A everything I added enhancements for on the F18A.

 

And with all due respect for your works on the F18A, somehow achieving those things on that bare video processor which we believed to be just not good enough is a really tempting challenge, and also a bit embarrasing. There is *so* much potential behind, and all we did was to put some auto-moving sprites on the screen.

 

Wasn't there a famous quote like "We choose to use the 9918A to get all these fine graphics and do the other things, not because they are easy but because they are hard"? ;)

Link to comment
Share on other sites

I think you could also use a transparent "colored" sprite to on top of the foreground tiles to mask the player sprite. One or two mask sprites would probably be all you need, and of course they would have to dynamically move around with the player.

Sadly transparent sprites are just invisible, they do not mask other sprites

Link to comment
Share on other sites

Ah, that's right. Well, I suppose you could mask with a pair of sprites then, one with the fg pattern and one with the bg pattern of the tiles that need to cover the player sprite. I'm not sure at what point this becomes more of a pain than dynamically redefining the player sprite though.

Link to comment
Share on other sites

Ah, that's right. Well, I suppose you could mask with a pair of sprites then, one with the fg pattern and one with the bg pattern of the tiles that need to cover the player sprite. I'm not sure at what point this becomes more of a pain than dynamically redefining the player sprite though.

 

The difficulty is about the same but if you use other sprites as masks you might end up having too many sprites on a line.

 

The way I'm doing this is to draw the masks for the blocks that could potentially occlude the player sprite in an off-screen buffer. I then use the combined mask to remove (SZC) the invisible parts of the sprite pattern as I transfer it to the VDP every frame. It's pretty slow (takes longer than a VDP frame for just one sprite), and I don't think you could use this method for Knight Lore, but for something like Spindizzy it should be fine.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...