Wanderbar SNES and NES Overview

22 Comments

In 2017 I took a Super NES emulator and a web browser and glued them together. This lets a Super NES game talk to the browser and lets the browser talk to the game. I named my new browser-emulator creation the “Wanderbar”. In 2018, I did the same thing, but with an NES emulator.

I originally made these programs for my own personal use, but they generated such positive buzz that I’m sharing them for anyone to use for free, along with 11 plugins I’ve written.


Quick Links

What Can Wanderbars Do?

Since I’m a translator and a linguistics guy, I primarily use the Wanderbars for comparing game translations and for language-related stuff.

Everything in the sidebar is ordinary HTML, which makes it easy to work with and opens up all sorts of possibilities. This example shows how I used the Wanderbar to compare five versions of Final Fantasy VI at once

But the Wanderbars aren’t limited to any one thing – the only limitation is your creativity. Some simple ideas off the top of my head include:

  • Automatically display enemy stats & descriptions – handy for streamers and Let’s Players
  • Hook into a screen reader to have game text read out loud – helpful for the reading impaired or language students learning pronunciation
  • Fancy scoreboards that update in real-time – perfect for streaming games and cool stream layouts
  • Display walkthrough info or custom commentary as you go through a game, kind of like that old Pop-Up Video show
  • Play specific pre-recorded audio files whenever certain text appears in the game, maybe like how museum recordings work or maybe as a community radio play sort of thing
  • Alter game data live via text input forms – maybe write new game text on the fly or translate game text live and in-context
  • Have a game celebrate with custom graphics and sounds whenever you beat a level
  • Easier-to-produce fan translations
  • Automatic speedrun splits & data display

Basically, if a web page can do it, the Wanderbars can probably do it too. HTML5, fancy CSS animation/transitions, Javascript libraries, external APIs, local storage, and so on.

If you’re interested in making your own plugins, see the dev board here.

Download

I currently have two Wanderbar emulator setups available: one for Super NES games and one for NES games. Both programs are designed to run on most modern Windows versions. You can get the latest versions and the source code here:

Keep in mind I designed these programs for my own personal use, so I can’t guarantee they’ll work for you. They’re also not 100% user friendly.

NOTE: To switch plugins, simply edit the “setup.txt” file to point to the new one you want.

Important Notes

  • I can’t guarantee that these programs will run on your system or that they’ll run smoothly. I unfortunately don’t have the time or skill to troubleshoot such things.
  • I’m not a very skilled programmer, so I don’t have the ability or knowledge to make a Mac version, but maybe a better programmer can use the source code to make Mac versions
  • For the NES Wanderbar, the sidebar might stick on a blank white page the very first time you run it. I’m not sure why this is, but if you close the program and re-run it, it should work after that.
  • One beta tester told me that their anti-virus software gave a warning when trying to run these programs.

    The Wanderbars are basically a combination of Awesomium (the browser part, based off of Chrome/Chromium), LuaBridge (allows for custom, game-specific plugins), and Snes9X/FCEUX (the actual emulators), all glued together with a tiny bit of my own code. From what I can tell, the Awesomium part sometimes trips up anti-virus software.

Plugins

I mostly use the Wanderbars for language-related purposes, so most of the plugins below are used for comparing English game scripts with their Japanese counterparts. All of these plugins come included with the Wanderbar programs here and don’t need to be downloaded individually.


Super Mario RPG (Super NES)

Designed for: North American ROM, v1.0

This was my very first plugin and has the most polish by far. I used it in 2017 to compare the English translation of Super Mario RPG with the original Japanese script live on stream.

I remember spending a month or two on this plugin, so it’s got lots of bells and whistles. As I recall, the only text that I never got around to was the level up text. Also, if you un-comment some of the code in the plugin, it’ll automatically take screenshots like the ones above every time new text appears on the screen.


Final Fantasy VI (Super NES)

Designed for: North American ROM, v1.1

I created this plugin for my recent Final Fantasy VI translation comparison. It displays the original Japanese script, the Game Boy Advance translation, a fan translation, and a Google translation of each line as you play the English Super NES version.

If you change some of the settings in the plugin script, it’ll automatically take screenshots whenever new text appears on the screen. You can also set it to rename and archive your save files each time you save the game. There’s even an option to keep track of how many lines you’ve seen out of the entire script.

This plugin was amazingly helpful and led to a super-interesting series of streams and articles. Playing each version one by one would’ve taken so much longer and it would’ve been much harder to compare them all side by side.


Super Mario Collection (Super Famicom)

Designed for: Japanese “Super Mario Collection” Super Famicom ROM, v1.0

This plugin is for the Japanese version of Super Mario All-Stars. I used the game as a testing ground for a lot of different things:

  • Automatic death counter for each game
  • If the designated Twitch account gains new followers while you’re playing, you’ll gain that many extra lives in the game
  • If you die playing the “Lost Levels” game, the game will slightly corrupt more and more each time, causing all kinds of interesting and funny glitches
  • A small animation will play each time you gain a new life while playing the games
  • Whenever you get a star while playing, a goofy star animation will display on the sidebar

As you can see, the Wanderbars aren’t just for displaying scripts and dictionary entries – they can be used for almost anything you can think of. This plugin was also a big testing ground for hooking the Wanderbar into external APIs and for having the browser part talk back to the game. Usually it’s the game talking to the browser.


Designed for: North American ROM, v1.0

This is a basic script text displayer – whenever a line of text appears in the English game, the corresponding Japanese line appears too. It includes the hover dictionary.

This plugin is actually based on an older, similar project that made a lot of headlines at the time. This version is far superior and far more reliable.


Breath of Fire II (Super NES)

Designed for: North American ROM, v1.0

This plugin displays the Japanese script in the sidebar whenever new English lines get displayed. I discovered that by sheer luck, the plugin worked automatically with a lot of other non-script text too, without any extra effort on my part. So a lot of menu text and battle text is also supported too.

Similar to the Link to the Past plugin, this plugin was converted from an older project. I developed the older project while doing a translation comparison stream of Breath of Fire II, but it was really buggy. This new plugin form is much more reliable and much more stable.


Final Fantasy IV (Super NES)

Designed for: North American “Final Fantasy II” Super NES ROM, v1.0

This is another simple Japanese script displayer with hover dictionary functionality. I also added a test feature: whenever you’re near a location on the world map, the name of that area will be displayed on the sidebar. And in the cases of major locations, I added some official details listed in Japanese materials, including kingdom crests.

Final Fantasy IV is one of my favorite games, so I hope to do more weird Wanderbar scripts for it someday. The extra map stuff I added to this script was just a fun little test to see how easy it would be to add functionality like it. It turns out it was pretty simple.


Super Mario World (Super NES)

Designed for: North American ROM, v1.0

I used Super Mario World for a lot of basic tests. This plugin does nothing script-related. Instead, it keeps track of weird stats, changes things in the game when certain conditions are met, and so on.

For example, every time Yoshi gulps five things, all enemies on the screen transform into random crazy things, and random items get added to your item box – sometimes stuff you can’t normally get.

Basically, if you’re interested in playing around with the Wanderbar and want to try making some simple plugins of your own, this is a good plugin to use as an early reference. My more complex plugins are worth looking at too when you’d like to write cleaner-looking plugin code that also runs faster.


Final Fantasy VI T-Edition (Super Famicom)

Designed for: Japanese Final Fantasy VI ROM patched with T-Edition v2.9.0

If you’ve never heard of it before, Final Fantasy VI T-Edition is a massive Japanese ROM hack of Final Fantasy VI. I wrote up this summary of the hack back in 2014, but it’s changed even more and gotten even bigger in the years since.

The problem is that it’s all in Japanese, and the hacks are so complicated that Final Fantasy VI hacking experts have had difficulty translating it for years. But as we’ve seen, the Wanderbar can display alternate script text just fine as ordinary HTML, which means it’d be a lot easier to simply translate all the text and have the Wanderbar display it instead of the game itself.

I started early work on a test version – I basically looked at which Japanese lines got changed, and whenever a line didn’t get changed, I have it display the equivalent line from the Super NES translation. In the end, there are still 1000 or 2000 lines of text that need to be translated, but I don’t have the time for it, unfortunately. But they’re just sitting there in the HTML, ready for someone to translate.

I’ve already translated all of the new enemy names, item names, spell names, and all that. The plugin isn’t nearly as thorough as the Final Fantasy VI translation comparison plugin, but a lot of the same plugin code could probably be ported over with only minimal work.

Anyway, this is basically a proof-of-concept that the Wanderbar can also be used for game translations. …I really should’ve used a simpler, smaller game to demonstrate that fact, though.


The Legend of Zelda (NES)

Designed for: NTSC PRG0 ROM (SHA-1 A12D74C73A0481599A5D832361D168F4737BBCF6)

This is a simple Japanese script displayer with the hover dictionary functionality included. I’ve also included entries on how the Japanese text would normally be written if the text wasn’t limited to katakana only. In addition, I’ve included some tiny language notes about things when applicable.

I haven’t tested this all the way to the end of the game, but my assumption is that the ending text won’t be displayed in the sidebar. Adding support for it would probably be trivial, but there’s not much to it anyway.


Ninja Gaiden II (NES)

Designed for: NTSC ROM

I originally developed an NES version of the Wanderbar so I could play Ninja Gaiden II for my annual “Ninja Gaiden Super Bowl” stream event. As such, this plugin is designed as a game overlay that can be used by OBS or other streaming software. The plugin basically does these things:

  • Automatic death counter and progress tracker
  • Every time you die, enemies on the screen will taunt you or insult you with dumb quotes
  • Bosses have a short little intro animation when you encounter them

I also programmed in stuff that would show what items are hidden in each candle/bug/whatever, but it turned out to be too inefficient for streaming. I think the code is still in the plugin, just left unused.


Final Fantasy (NES)

Designed for: NTSC ROM

This is another Japanese script displayer with hover dictionary functionality included. It only supports main script text at the moment.

I used this game as another NES Wanderbar test, but I bet it’d be pretty easy to get it to display menu text and battle text too.

Development Details & History

Years ago I asked some “what if” questions and wound up making some experimental programs that would read emulators’ memory in real time. My experiments worked pretty well, so I wrote an article about it here and even shared one of the tools here.

Even though my experimental programs worked, they had many drawbacks. The next logical step was to modify emulators themselves rather than peek at the emulators as they run. But I’ve never, ever had a good experience trying to compile open source code, especially when Windows is involved. Still, I tried it with SNES9x, and after a week of headaches and nearly giving up, I managed to get things working on my setup.

The next step was to create the sidebar window that the emulator could display stuff in. I should mention again that I’m not a particularly skilled programmer and that I absolutely hate programming anything Windows-related. But I kept at it, and soon I had a simple sidebar system hooked up to the emulator.

The sidebar could only work with Tecmo’s Secret of the Stars, an old JRPG with a questionable translation. Again, the Windows programming issue popped up – I could finally display some text in the sidebar, but I had to do every single thing manually. I can’t convey how nightmarish this was, but I pretty much gave up again at this point. The program was set up specifically for Secret of the Stars too, so it looked like each game down the line would need to have its own separate sidebar program that would need to be compiled. A huge annoyance.

About two months later, I was curious about how OBS was able to do its HTML browser plugin. This led me to Chromium. Chromium was way too complicated for me, but then I found a wrapper called Awesomium. It took a while but I got it up and working… and suddenly I didn’t have to worry about text formatting or anything else anymore. All that could be easily handled via HTML and CSS.

It was exciting to see Secret of the Stars finally working with my new browser-based sidebar

An unintentional side bonus was that now the sidebar could also use complex scripting via Javascript, external APIs, and more. A whole new world opened up! Realizing this, I went and found a Lua library that would let me hook the emulator, the sidebar, and custom external plugins all together. I finally had the Wanderbar! Although I called it my “sidebar thingie” for a year because I had no idea what to call it. I eventually randomly named it after my cat Wander, who in turn was named after the main character in Shadow of the Colossus.

It’s true that the Wanderbar is just a glorified Lua add-on/text-hooker/whatever else. I’m sure many programmers have already thought, “WTF why didn’t he just use blopbloop zoopbats or zimabima hophooks to do all this?” but again, I’m not a skilled or knowledgeable programmer. I either looked for existing solutions, wasn’t satisfied with existing solutions, couldn’t get existing solutions to do what I wanted, or had no idea certain solutions existed. My solution is precisely what I needed for my own purposes and I know how it works inside and out.

Still, I’m secretly hoping that a more skilled programmer will use this same concept but do it better and possibly with even more emulators.

Have Fun!

Again, I originally designed these programs for my own personal use, but it’s my hope that sharing it with the public will benefit others in all sorts of ways.

For now, I’m glad my crazy hobby project has managed to make it this far, and I hope you’ll find it fun or useful in some way.


To download the Wanderbar programs or source code, see here. You can also browse the Wanderbar dev forum here.

22 Comments
  1. This is awesome. I’m interested in some of the things you already have plugins for (BoFII, for example), and I wanted something like this years and years ago for side-by-side translation/etc. work on Mother 2 (both since I’d heard that the translation wasn’t entirely accurate – and that that inaccuracy had been partly intentional, to cover up the fact of there having been a previous game – and as a way to practice my own Japanese skills), but could never figure out where to get started.

    Setting up a plugin to work with the latter is likely to be nontrivial, given the extent to which its script uses “formatting codes” which appear to be full-fledged function calls which simply return the required text (and/or do other things), but it looks like this already handles literally everything else I’d found daunting about that project.

    I have no idea when I’ll find the time and the project capacity to get back to that, but this will be an amazing resource!

    (…assuming I can get it to work on Linux. I might wind up needing a project to port the source across, first – unless I can get it to work seamlessly in Wine.)

    Reply
    1. Yeah, I really wish I could’ve provided an EarthBound script comparison plugin, but its text system is definitely a big mess that I didn’t want to tackle at the time. It’s not an impossible task but it’d require a lot of EarthBound hacking knowledge. I feel like Mr. Tenda over on the PK Hack boards could probably figure out a good way to handle the text though.

      I’m curious to see if these programs run on Wine, so let me know. I wouldn’t even know how to begin porting all this stuff to a different OS so if you do manage it, let me know that too!

      Reply
      1. At least with Wine 3.16 (as available in Debian testing in the wine-development package), which is apparently from mid-September, it dies on startup with an “unhandled page fault at read access to 0x00000000”, i.e. a null pointer exception. I have the resulting backtrace, but I doubt it would do you much good, since the program apparently works fine on Windows.

        If I launch awesomium_process.exe directly, rather than snes9x-wanderbar.exe, I get a near-immediate silent exit rather than a crash – so it looks as if the problem isn’t in that section of things, at least.

        I have other things to work on, but I’ll keep this on the back burner, and if-and-when I get any meaningful progress on it I’ll plan to let you know!

        Reply
        1. It turns out that apparently that was due to a bug in the Debian-packaged version of that specific version of Wine. With wine-dvelopment updated to version 3.18.2 (the latest as I type this), there’s no crash, and emulation appears to work at-least-mostly fine.

          (I say “at least mostly” because when I load up Super Mario RPG it runs, and when I press the mapped Start to bypass the automatic intro it brings up the title screen, but then it seemed to hang there – no animation or sound – and no further mapped button presses seemed to do anything. I’m probably just missing something about the particular emulator involved, though, since I haven’t used part of that emulator line in quite a few years.)

          So it seems as if it should be usable via Wine. I don’t have the spare capacity for the projects I want to work on with it at the moment, but this is definitely going on my list!

          Reply
          1. When it hangs, does the game stop too? If so, then that’s probably normal – it has to load a REALLY big HTML file so even on actual Windows systems it’s normal everything to completely stop for a while there until it loads. I imagine on a slow PC or on an emulated system it might take even longer, so it’s possible it still works.

            You might want to try the other plugins too, as they don’t do anything nearly as intensive.

            Reply
            1. Yeah – the “it” I was referring to was the game; the program’s UI (menus, et cetera) seems to keep working just as before.

              Good to know that a hang at that point may be expected (although I wouldn’t have called 813K “REALLY big”, at least not when compared against the FF6 multi-translation’s 2.1MB). I’ll revisit the matter at a later point, probably with a different plugin, and make sure that’s all it was.

              Reply
              1. Ah, good point. I think it’s actually the size and depth of the DOM tree that makes the SMRPG loading take so long. Even on my personal setup it can take from almost 0 seconds to 10 seconds to load. I haven’t had that same loading time problem with any of the other plugins I’ve written.

                Reply
  2. First of all, I love the name. Great pun. It’s named after your cat of course but given the language-spanning world-map-exploring RPGs it’s primarily used for, it’s too good.

    I have to ask, though — is the Secret of the Stars plugin not worthy of release?

    Reply
    1. I had done the Secret of the Stars stuff before I created the plugin system, so there isn’t an actual plugin for it now. But a big problem I discovered with the game was that it doesn’t have an ordinary text system, it’s instead more like one giant custom programming language with text strings strewn randomly around. It’s basically a lot like EarthBound in that regard.

      I’d really like to do a translation comparison Wanderbar for it someday, since it seemed like an interesting RPG in some respects. Plus its translation has some amusing quotes. The new plugin system would definitely make it easier than before, but that “text” system spooked me enough to stay away from it for over a year ๐Ÿ˜›

      Reply
  3. If you’re looking to improve it, it might be worth putting it up on GitHub to get pull requests

    Reply
    1. I considered it, but I’m not very experienced when it comes to sharing code – I already worry that I messed something up as it is. I also don’t really want to be a constant steward of the program, so I don’t mind if someone takes the code and runs with it.

      Reply
      1. There’s another benefit of publishing it yourself to GitHub even if you don’t plan to maintain it/accept pull requests. If you publish it, that makes it a lot easier for others to fork it into their own account, but it also allows anyone else to see all the forks of the original code.

        If you’re not interested in doing this, I’d be happy to publish it on GitHub for you, but it would be nice to include a link to my version (or whoever does this first) on your page so there’s an “official” starting point at least. Otherwise a few of us interested folks might publish it independently but there won’t be anything on GitHub to help people see all the copies that exist and how they are related to each other.

        Does that make sense? If you aren’t interested in having a GitHub presence, would you mind linking to a repository that I publish from your page here?

        Reply
        1. I just realized that you created a dev forum, missed that when I first read the post. Maybe should move this discussion over there ๐Ÿ™‚

          Reply
      2. If I were you, I’d put it on GitHub anyway and disallow pull requests. Then, people can just fork it while still being able to trace it back to you as the original more easily. Just make sure to include a readme.md. ๐Ÿ˜‰

        Reply
  4. This actually makes me wonder if there would be an ‘official’ (that is, directly supported by developers and publishers) version of this someday…

    Reply
  5. When I click on the link for the NES source code ZIP file, I got a “File not found” error. (The other links worked correctly, though.)

    Reply
    1. +1 also getting file not found for the NES source

      Reply
    2. Oops, thanks. I’ve fixed the link, I forgot a letter in the file name.

      Reply
  6. For whatever reason, when I load a BoF2 English (U) ROM, it opens the sidebar for Super Mario RPG…

    You mention on the site that you based it on the North American 1.0 release, but as far as I can tell there is only Breath of Fire II (U).smc. Is this a bug, or is there a different ROM I should be using?

    Reply
    1. Oh, whenever you want to switch plugins, you need to edit “setup.txt” to point to the script that you want to load.

      I’m not an expert on ROM versions and stuff so I just listed the version number that appears when you look at the info in the emulator’s info area. If there’s only one BoF2 ROM then any one should be fine.

      Reply
      1. Well, for the US there is the retail and prototype ROMs, as well as there is a PAL version.

        Reply
  7. Interesting.

    I wonder about Rockman & Forte, Rockman 7, and Rockman X1-3 able to translate in English?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *