Quote:
To be pedantic for those who are unfamiliar, the C64 doesn't have "VRAM", as all graphics data is stored in normal system RAM (the VIC-II can only access one 16KB bank of RAM at a time, however, so I guess one could loosely refer to the current bank of RAM as "VRAM", although it is technically not any such thing)
Maybe you're right, for me any RAM that is reserved for screen usage becomes VRAM, regardless where it is physically (but maybe this is wrong). So whathever memory you use in the C64 to store characters or maps becomes VRAM for me, but this may be wrong. Also the NES is one of the only machines to feature VROM
Quote:
However, such fetches actually make some of the more interesting tricks possible, where one can force the VIC-II to read new color data on every scanline by essentially triggering extra badlines. This can be used in either hires or multicolor, but it makes the three leftmost columns of the bitmap unusable.
This sounds interesting. That's probably why as C64 games have (in general, not always) far less good graphics than NES games, some C64 demoes are absolutely outsanding I wonder how that's even possible. However, in a real in-game situation you'd want to have CPU time for the game engine and not to display prettys graphics. Also, since the C64 is about 45% slower than the NES, it should already be pretty difficult to port and get something that doesn't lag too much (altough I haven't tried).
Quote:
There are other things to note when converting to the C64. Does the game in question use smooth scrolling? If so you must enable the C64's 38 column mode for horizontal scrolling and the 24 row mode for vertical scrolling (or both for 8 way). The C64 can normally scroll the screen 8 pixels on the X and Y axis. The reduced column and row modes allow the character data to move under the border. Once you have scrolled 8 pixels you have to reset the register back to 0 and redraw the screen matrix with everything shifted 1 char over in the direction of the scroll, all before the raster hits the visible area again. There are other ways of doing this but as far as I know only Mayhem in Monsterland has done this outside of a demo.
Yes, I've known that (altough it's good to have a confirmation). The game I plan to port to C64 only scrolls between screen, and the NES version does that 4 pixels at a time (however there is no reason that that C64 version would do the same). I could get away by only shifting the tileset, but without using fine-scroll for that so that it simplifies things. Or I could just turn the screen to black and fade it in with the new screen, without any scrolling. It wouldn't look as good but the gameplay wouldn't be affected in any way.
Quote:
Next are the sprites. My NES know-how pales compared to the people here but am I right in guessing the NES can do at least 16x16 (2x2 chars). Sprites on the C64 are 24x21 (3 chars wide, 2 chars+5 pixels deep). Sprite data is usually kept separate from character data on the C64. Sprites can access data occupied by a character set but sprites on the C64 are read differently than the NES (big assumption here). With all the talk I hear about tiles and tables (I lurk here a lot) I guess the NES tiles are stores in a similar fashion to the 64's character sets but the sprites are told what tiles to use for their definitions, correct? (I guess that from messing with Nesticle's tile editor). C64 sprites are stored in a linear fashion in memory like a bitmap and pointing a sprite to character data would usually result in a garbled mess.
Yes, sprites on the C64 are a big headache for me. I haven't dealed with them yet, but you're limited to only 8 and if you want more you'll have to do some code that changes them midframe. On the NES their graphics are stored exactly the same way as they are for the BG and are either 8x8 or 8x16 pixels. However, we typically use metasprites that are groups of such sprites. On the C64, most metasprites would be only 1 or 2 hardware sprites, and if I port my game on the C64 I'll have to find a way to bankswitch sprites midframe to get more than 8, since I have 8 objects + 8 graphics effects + player (and it's weapon) in memory, that would do up to about 24-30 sprites needed on the screen in worst cases. Also, I use a complex sorting routine on the NES so that sprites on the bottom appear on the top on sprites on the top, which takes a lot of time, and would probably be too much for the C64, and would conflict with the sotring for sprite multiplexing, routines I've seen on the net sort them the other way arround, which is quite a headache !!
Quote:
Other things to note are: Multicolour GFX may have a halved resolution, but scrolling and sprite placement still maintain a 1 pixel granularity. Multicolour sprites all share 2 of their 3 colours but this can be split by raster interrupts. Multicolour character GFX like sprites all share the same 2 colours which again can be split. Multicolour character GFX can only use the first 8 colours of the 64's palette, using the other 8 causes the char to switch back to hires. Allows mixing of multicolour and hires characters on the same screen.
Oh that 2 color sharing seems quite a limitation to me. However most sprites are black outlined, and I could change the other bright color to white, so that all sprites would be "black" + specific color + "white" instead of "black" + "normal specific color" + "light specific color" like they are on the NES. Also, I'm pretty sure it's possible to overlay sprites to get more colors. In fact overlay monochrome sprites may get almost better result than having halved resolution multi-colour sprites in some cases.
About the BG I don't know yet how I'll handle this. Having to choose between resolution and color is a terrible choise.
It's great that you guys from the C64 scenes come here to help and chat. I appreciate this very much. Now I still don't know how to test my programms on my real C64 which is lameful.