Heh, byuu's suggestion for the SNES version was to have the L, R, X, and A buttons rotate the entire grid on three axes using Mode 7, so that it took advantage of some SNES features smile

Anyone tried version 9 and have comments about the new palette and memory features? smile

I just got the SNES version supporting all the features of version 9, including configuration and battery saving. blargg_litewall-9-snes.zip

EDIT: ... OK, shapes and background color change implemented in SNES version as well, so I think it now has all the features as the NES version.

Another significant update:

blargg_litewall-9

Adds much better palette control and tempo light pulse control, and a four-slot memory feature that stores a pattern and parameters for quick recall later. Please read at least the new tutorial section, as it walks you through the features in a way that clearly shows what each feature does. It can be hard to see their effects if you just try them at random.

I haven't cleaned up all the new code yet, so there may be some minor bugs. I just wanted to get something released, as it was getting too long since the last update.

Wow, these palette changes inspired by Neil's version are coming out really cool. I'm seeing the value of having several parameters you can adjust. Messing with the three rates on the spiral makes some really cool combinations. This really leaves room for individual styles using this, rather than everyone's VJing looking the same. The next update will have these, along with expanded documentation so you can better understand how the patterns work and how to tweak them.

@ui, this is about the maximum number of lights you can get, due to technical limitations.

Yeah, don't get your hopes up about a cheap devcart that can run anything. It would likely ONLY be able to run special small programs made for it.

New shapes and slightly smoother animation. Hold B and press Select to toggle which of the four the next B+U/D/L/R will be from. For example, to get the SMB brick after beginning, hold B and press Select, then Up (while still holding B).

blargg_litewall-8.zip

EDIT: just to be clear, that's four separate screenshots, not a single one. Though it might be neat to make a kaleidoscope pattern...

The SNES version is intended to run exactly the same. I tried to match the palette to the NES version, though it came out slightly different. It's the same code as the NES version, save for the lowest level part that handles the lights on screen. I simply ported that to the SNES. The rest of the code doesn't even know that it's running on a SNES. Porting other NES demos might be more difficult, if they make use of NES stuff all over the place. This just happened to be really well-separated.

I don't plan on making the SNES version take advantage of anything SNES-specific besides maybe the extra controller buttons. As we discussed before, this really isn't impressive on the SNES, given its technical abilities. It had absolutely no trouble, and I didn't even need to do any carefully-timed code. The main idea is just in case you don't have a NES and PowerPak (or equivalent), but do have a SNES and programmable cartridge.

BTW, there is a way to make a really cheap ($40 at most) programmable cart for the NES/SNES that can only run special progrrams made for it; I've sent a message to someone here who might be able to help build them.

Rounded squares, I like that. I was thinking of also adding an optional dissolve between shapes. I just haven't figured out a decent algorithm to do that. For double-tap, I want to avoid having the first shape show first. I could have it wait a half-second after you press B+direction, so that it can tell whether it's a single or double-tap, but then you can't do single taps in time with the music. Maybe you could tap B, then hold it, and access the second four.

Similar to the above button interpretation, I was considering making presses of Start, Select, B, and A alone be configurable to do anything. Currently they don't do anything if you don't press them in combination with anything. We could even use A+B as modifiers, for even more. Perhaps A+B+U/D/L/R/Select/Start could all be configurable too. If the SNES version proves useful as an alternate version to some people, that of course has four extra buttons as well.

I also really like Neil's palette selection. I'm thinking I could have something like that selectable by Select+L/R (currently that just adjusts the background color when inversion is enabled).

I want to add lots more patterns, so many that you HAVE to pare them down in the config screen. This way you will choose the ones you like best, and customize your presentation more. I don't have to be as picky with them, so you'd get more to choose from. A lot of my patterns use tables, rather than code, so they're very easy to make.

I needed some variety, so I made a rough port to the SNES. No config screen, but otherwise seems faithful. Should work in an emulator like bsnes.
blargg_litewall-7-snes.zip

neilbaldwin, please don't bow out. At this point, I am going to give you the basic engine and let you continue developing patterns. My idea is that you write them for the core engine, but not using my whole framework, so that you aren't limited to what it can do. I figure that using the core engine will allow me to port your work over to the framework easily enough. This way you can be much more flexible, yet still collaborate. Please do pass along your code, so I can get a better idea of your style and cater what I send to that. Anyway, I'm going to put together that and at least let you give it a try, no obligation. I'm hoping this is just the beginning pattern-wise. Now that the framework is really featured, we can add many more patterns and transitions, and shapes.

arfink, yeah, I changed it to MMC1, but, it will work fine with UNROM like before. I merely did this because many emulators and perhaps the PowerPak won't enable SRAM and won't battery-back it if it's UNROM. My devcart is only UNROM, and it works fine there. I specifically ensured it would work with UNROM because someone mentioned making it into a physical cart, and I wanted to be sure that wouldn't be hampered. If you lack battery-backed RAM, then it will of course start with the default pattern setup. You can hold any button and press reset to configure it. Pressing reset does NOT reset the pattern setup, so you can always adjust the setup with reset at any time.

Regarding the tempo tap feature. I've gotten it to sync really well with music. I've found that the best way to use it is to tap out the first 8 or so beats of music (more don't help), then say ten or so seconds later, tap a couple of beats (but not more than 4). Then ten or so seconds later, a couple more. After about a minute of this, it stays synced quite well without any help. The idea is to just tap a couple of fine-tune beats every once in a while, when you have a free moment. The way the algorithm works, it remembers the first beat of the 8-beat initial taps, and remembers how many beats there have been since then, so that it can divide the total time by the number of beats (which will be over a hundred after a minute), giving a very accurate internal BPM. If it's ever not getting the beat, or the tempo changed, you can always just start over and tap out 8 or so beats again to start with a fresh internal BPM. I'm pleased with how robust this algorithm has worked out in testing.

Also, it might not be evident, but the second configuration screen allows the list of patterns to be contracted in case you don't want some patterns to ever show, or expanded in case you want a pattern more than once in the sequence, or want it to be more likely to be selected by the random pattern function (A + Select).

Major update:

blargg_litewall-7.zip

Description of Litewall Controls

The more I see neilbaldwin's new ideas, the more I think maybe we should keep our programs separate and merely share ideas (and perhaps some code, as I'm not sure how he's implemented some things like the snakes heh). We're each very familiar with our own code, and it differs, so that each offers different technical possibilities. It might help if we used my low-level engine for both, though, that way the effects would be easier to port to my framework.

BTW, to satisfy those who prefer an 8x8 grid, I'm thinking I can just have an option to black out the left and right columns. This would make it easy to handle 10x8 and 8x8 with virtually no extra coding hassle, and allow it to be changed via the controller.

Have you run it with music for over a minute? I had to do quite a bit to get even a simple tempo to stay in sync.

Koatl wrote:

I'm under the persuasion that feels limitation necessitates creativity. I'd like to see this pushed as far as it can possibly go on the NES.

Totally agree. That's why I've been reluctant for some of the changes to even the NES version, like having morphing shapes. The basic concept of a low-resolution grid of colors is a nice limitation. Doing all sorts of effects with the shapes themselves kind of breaks that. I'm thinking a few simple changes (square, circle, whatever) can have a good impact if done sparingly in a performance.

Doing lots of work on the framework, in preparation for configuration and getting closer to merging in neilbaldwin's patterns. Tempo tap is working really well. I didn't think I'd be able to get it this clean and stable. This will be totally optional; you will be able to adjust the rate manually as well.

I was going to say "not a chance", but now that I think about it, it wouldn't be so hard to implement the engine on the SNES, with an almost identical visual appearance. All the high-level pattern code would just work.

How many would benefit from being able to run this on a SNES? I suppose one immediate benefit is having more buttons on the controller. A drawback is that it's not pushing the SNES at all; piece of cake for it. It wouldn't be as interesting, and not as retro. Anyone else have an opinion or desire for a SNES version? Not just as a curiosity, but that would actually help them practically, over the current NES version.

Yeah, I was experimenting with CHR RAM for that purpose. Too much of a sidetrack right now.

I fixed an occasional glitch in the upper-left corner (in overscan area): blargg_litewall-6.zip

Tempo tap algorithm working pretty well now; preparing to integrate into main code...