Using SNES offset change per column horizontally

Note how it says that each column can be controlled separately and can be scrolled horizontally in 8 pixel increments. . . .

Now, I’ve seen this SNES feature used in maybe two games just to do a quirky transition effect, but surely there’s something else that can be done there, possibly something around using it to fake some kind of rudimentary scrolling parallax using a single layer with certain columns that update each frame and move left or right 8 pixels at a time. Something like that can be seen in the rough and ready example of scrolling faux foreground pillars in the clip below, which would primarily work with a single background layer using high and low tile priorities so parts appear behind and in front of the player. And this also leaves the other layer that can still do its own row/line/column scrolling that I’ve used part of here for the lava in my example. It could/would even have a nice every-8px-column-shifted wave applied in reality too, just like in that one level in Yoshi’s Island, which can only be done this way in SNES modes with just two background layers:

And the thing here is that this kind of approach wouldn’t require a bunch of extra tiles in VRAM or dynamically streaming in new tiles to fake the foreground parallax scrolling pillars effect using animated tiles, nor would it require using up a bunch of sprites that would greatly impact on the sprites per scanline limit if it were faked via sprites, and the main faux scrolling pillars effect wouldn’t even take up part of the second background layer either, which is how you’d typically do this kind of thing. Also, the columns are down to every 8px wide on both layers, which allows for the curves on any vertical wavy effects and such to be relatively smooth too, just like on the lava in that Yoshi’s Island example above.

As per usual, if you are genuinely interested in possibly doing something with these features on SNES, you’ll need to use some creative thinking to consider how else this kind of thing might be applied and the many various ways the feature could be used, even for effects that are ultimately nothing like my example, but I think that’s a good starting example to show it has possible actual uses in-game and maybe some potential there that has basically been completely ignored until now that I’m aware of.

Edit: And, just to show how quickly and easily you can think beyond my original very specific and very rough example, I’ve attached another totally random and similarly rough variation on the idea where you’d additionally use HDMA to start and stop the horizontal column scrolling effect on the layer part-way down the screen. The priorities are also slightly different here too, with the background wall, bus, and floor on low and the columns on high. And the lava section of the second background layer would still be on low to appear in front of the wall, bus, and floor area but behind the pillar area of the first background layer:

Also, just to cover one point a little further, note how it says that each column can be controlled separately and can be scrolled horizontally in 8 pixel increments. So, if I’m getting that correctly, that should mean you could move individual columns to totally different columned positions on the screen from where you might move some other columns, which I can only imagine what might be possible there with some out-the-box thinking.

Both my examples above are basically shifting all the moving columns the same amount horizontally as each other each time they move, but really, that’s just me thinking inside the box. I’m sure someone with really creative talent could think of ways to move multiple different columns to multiple different column positions across the screen at different intervals for some very cool effects, and even more so when combined with HDMA for splitting up the columns down the screen so some parts of a columns move/jump horizontally while others do not, plus that along with adding in the second layer and so on too.

So, again, for anyone authentically thinking about this stuff on SNES, there’s lots of options there to get creative.

I’ll leave my examples at that for now and let those people genuinely interested in working on SNES and thinking about doing interesting things with it imagine what else might be possible. 🙂

Edit 2: Actually, now that I think about it, combining my two previous test examples should work perfectly fine too:

Ignoring the lava, that’s a single background layer and Luigi (every single other sprite is still free and available). And, like I said, that lava could/would have a lovely undulating wave effect applied and could even fully raise all the way to the top of the screen and down again if I wanted. It could also have a semi-transparent effect too if I liked. In fact, I might just go add that for the hell of it–even though this is patently all slapped together placeholder and literally just here to show some potential uses and not a real game at all. I’ll move Luigi to the correct layer/priority too, which means he’d be in front of the bus but behind the lava and pillars.

Edit: Here ya go (the lava still doesn’t undulate, simply because I’d literally need to create and scroll 32 individual columns manually in some convoluted way just to be able to replicate the way the effect looks on SNES with the understanding I have of GM8.1 right now, but I would absolutely do this in a real game to fully take advantage of the lovely every-8-pixel column scrolling of Mode 2):

In case you’re wondering, the top of the lava layer would be opaque initially, and I’d be using HDMA to turn on the addition plus halving colour math for the layer after the first handful of lines there. That’s how I’d do that. Not entirely sure how it would look with the start of the opaque section not undulating, but I can work with that–not that any of this is even a real game, so none of it is set in stone even remotely. LOL

If you can find any other examples of SNES games using Mode 2’s horizontal column scrolling feature like this, please feel free to post them in a comment below.

Leave a comment