WJYkK wrote:E: would it be possible to create a "background layer" through mirroring or is using sprites the only choice?
I'm not sure I understand what you're asking. Do you want to simulate two independently scrolling planes, is that it? If so, mirroring doesn't have much to do with it.
There are 2 common ways to simulate (yes, it's always fake because the NES has only 1 background plane and there is no way around it) multiple scrolling planes. One is to modify the horizontal scroll during rendering to divide the screen in stripes that can scroll independently. This is often referred to as "parallax". The disadvantage of this method is that one planes can never overlap, so this technique is very limited. Also, you have to use something to detect the exact time to change the scroll, such as sprite 0 hits, scanline counters, timed code, or a combination of those.
The other method is to use a repetitive background and dynamically modify the tiles used to draw those parts, so that they appear to be scrolling differently from the foreground. The disadvantage is that you can't do this for detailed backgrounds and it if you use CHR-RAM it will take a lot of VBlank time to modify the tiles (I've only seen games with CHR-ROM using this trick, because they can easily bankswitch the needed tiles).
Here is a video
with several games that use one technique or the other, some even use both (Sword Master). These are pretty tough tricks to pull off without mappers, but it's possible. But before trying you should study what these games are doing.
E2: hmm, I remember seeing a few months (years?) ago a good scrolling document on NESDev, but I can't seem to find it anymore. Got any suggestions?
As far as I know, there is no document describing tricks like the ones I mentioned above, I've only seen very simple and direct documents describing what the PPU registers related to scrolling do. Tricks are usually things you have to figure out for yourself, by looking at how the commercial games do it.
What the technical documents describe is nothing amazing, because scrolling is a pretty simple thing actually. It's basically just you telling the PPU from where to start rendering every frame (using register $2005
), or several times per frame. If you need to change the vertical scroll mid-screen you have to exploit some obscure PPU details explained in this document