Welcome the ZANAC Randomizer Beta! When I was a kid, ZANAC was always one of my favorite NES games. It introduced me to the shootemup genre.
To this day, it's fun to sit down and play a half hour or so. Even though it runs on the humble NES, it's written rather cleverly so that the
gameplay almost never slows down despite chaotic action on screen, and it features a primitive auto-scaling difficulty feature that makes it a
slightly different game each time.
I really enjoy the trend of randomizers applied to legacy games. To me, they're chances to experience the classic gameplay of each game
that's burned into my memory with all new scenarios. I thought, were there any old games that I'd like to re-experience that I could write
a randomizer for? I thought back to ZANAC, that simple little shootemup. I spent some time doing research online, reading about the NES programming
model and luckily stumbled upon some ZANAC techincal specs that, though incomplete, gave me just enough to start digging. It was a challenging
and fascinating task of reverse engineering. Before too long, I had many of the game's data structures mapped out and I could start poking around
changing things. After a little bit of programming elbow grease, I had a configurable, extendable base and that was the birth of the ZANAC Randomizer.
This randomizer can make the following modifications to the base game:
Shuffle level order
Shuffle background music
Randomly generate levels
Because the randomizer is in a beta state, it can be used to generate functional ROM images randomized with the available options, but you may rarely
see glitches, game crashes, or unbootable ("brick") ROMs. If you have any issues (including a "white screen of death" when you randomize),
please let me know so I can try to track the problems down. In the majority of cases, just generating a new ROM should get you playing.
If you have comments, questions, or suggestions, send them to me at firstname.lastname@example.org and I'll check them out. I
cannot guarantee a timetable or schedule for any feature implementation as this is a side project and progress is entirely dictated by the availability
of free time.
Destroy the System!
Added modern vulcan rule change
Added a new potential sprite for the ZANAC: the player ship from the NES port of Galaga
Made ROM defragmentation a little more aggressive, hopefully buying more usable space for level generation
Fixed a bug that was causing ROM space to be allocated twice, which may have been contributing to game crashes
Upgraded ROM memory allocation to sometimes try to shove things into bank 7 since it is always addressable, before using the precious space in other banks
Added some new custom, homemade graphics, including a few completely new fortresses, one variation on an existing fortress, and some new background features.
Fixed a bug in decoding very sparse macros that was causing a fortress (transposed Area 10 fortress 2) to render completely wrong
Added this Updates tab
Added screenshot viewer
Broke out options for palette shuffling
Added option to include Area 10 alternate music. It was always in the backend but now the UI exposes it!
You'll need to upload your base ZANAC ROM before randomizing. The randomimzation is applied to the exact file you upload and sent back to you.
Upload just the ROM itself, not a ZIPed or packaged version. Only a valid ZANAC base ROM will work; the ZANAC randomizer does not currently support
rerandomizing, nor can it randomize already hacked ROMs.
Configure which aspects of the game you want to randomize or adjust. By default, ROMS will always contain:
A tag on the title screen indicating the seed
A patch to fix the ARER typo and a small cleanup on the BONUS popup
A patch to prevent super guns from going away just beacuse you picked up a powerchip if you did not have maxed out guns already
The default high score is overwritten with the author's personal best
A potentially shuffled graphic set for the main menu
The GAME OVER message is replaced with a random snarky quip
The seed initializes the randomization so that for a given option set, changing the seed will result in a completely different ROM output. For the same options, the same seed will always produce
the same ROM image. You don't have to enter anything here; if you leave it blank, a seed is randomly assigned. You'll also get a random seed if you enter zero here. This is a "feature" that I
hope to fix at some point.
Shuffle area order
This option will randomize the order of the levels, with two caveats. The data structures inside ZANAC group the areas into three "blocks" which are Areas 1-4, Areas 5-8, and Areas 9-12. The
order of the areas inside each block will be randomized, but the blocks will still play out in order. In other words, if you enable this option, you will play through Areas 1 through 4 in some
random order, then Areas 5 through 8 in some random order, and finally Areas 9 through 12 in random order. The second caveat is that Area 12 will always be Area 12, because of special data
stored there that tells the game engine that you're at the final boss. Background music is not affected by this option.
Shuffle area background music
This option will shuffle the background music for the levels. It simply shuffles the order of the music, so you will still each song the same number of times, just on different areas. If you are
also shuffling area ordering, that does not affect this. In other words, if Area 2 is shuffled to be the first Area, you are not necessarily going to hear the original Area 2 music for the first
Area.In keeping with the Randomizer's mindset that "Area 12 is special," Area 12's cool finale music remains with Area 12.
Include alternate Area 10 music in the mix
Sprites (Note that if you key off of the color of enemies (like whether a Logo is blue or yellow) you'll need to learn the new colors as you're playing!)
Fortress core interiors (Changes the color sequence of opened cores)
Shuffle ZANAC sprites
This option will shuffle the graphics used for the ZANAC fighter. A well-known trick in ZANAC is to hold A, B, and select when you hit start to begin, and you'll get an alternate ZANAC graphic.
If this option is enabled, the "base" ZANAC and "alternate" ZANAC sprites are randomized to be different graphics, including some visitors from other games. You are guaranteed to get two
different sprites for the base and alternate. I'd like to add more choices in the future.
Starting lives: (255 or less)
Apply ZANAC Neo weapon rules: In ZANAC, if you pick up a different special weapon than the one you currently have, your weapon power level is reset to the base and you need to build it up again. In ZANAC NEO, switching
special weapons keeps your power level the same. Use this option if you'd like to apply that rule to ZANAC. This has a fun effect of totally changing your strategy, because if you know multiple
copies of the same special weapon are coming up soon, even if you don't care for it too much, you can use it to increase your overall weapon power and switch back to something better later. Finally
there is a reason to pick up those multiple weapons 2s at the beginning of the game!
Enable modern vulcan cannon: ZANAC's default gun is pretty weak. If you miss the first blue lander, without resorting to turbo on your controller, you will have
very little firepower to play with. This change removes the single-bullet level of the gun and increases the rate of fire and bullet speed of the gun at all levels. A fully powered up triple
gun in this mode is quite a deterrent, much like the standard vulcan cannon found in more modern shootemups. To balance out this greatly increased offensive power, the rate-of-fire upgrades
afforded by blue landers is removed, as are superguns. This changes the game significantly. If you are a purist, you will probably not like it. If you would like to mix it up a bit,
give it a shot. (Pun may or may not be intentional.)
Generate new levels
This option will cause the randomizer to generate 12 brand new ZANAC levels, so that it's like a a completely new game. This function is still in development so please note these
Levels are a little over two minutes in length. I'm trying to figure out the optimum length, which is a balancing act between producing an entertaining play experience
and fitting all of the data into the tight amount of memory available in the ROM.
There is currently only one fortress fight per level, at the end. Most of the original boss fortresses are used (and can appear in very different places and might be repeated,)
there are a few "remixes" to watch out for, and you may even see a custom one or two. SOMETIMES the Area 11 boss dies too quickly. The final boss sequence remains unchanged for now.
There are some graphical glitches on some levels or in some places, I know. Sometimes fortresses appear in the wrong place (like an asteroid fortress on top of a space panel)
and sometimes there are color artifacts.
Every level MAY have a miniboss fight, and they are not necessarily the same minibosses you fought in the original levels!
Areas 2 and 4, 5 and 7, and 9 and 10 can be very similar to one another because of how the randomize generates levels thematically. Area 5, for instance, will now have space
tunnels (or "solid space panels" as I refer to them internally) and Area 7 can have small asteroid segments. Subtheming is something I'd like to do at some point so that these
level pairs which are normally similar are not overwhelmingly similar in a generated ROM.
The randomizer sometimes generates some pretty nefarious levels!
I am aware of these issues and I am working to fix them, but I am excited enough about the current state to share this functionality online.