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. In 2019, I did it again with a Game Boy/GBC/GBA 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.
Since I’m a translator and a linguistics guy, I primarily use the Wanderbars for comparing game translations and for language-related stuff.
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
If you’re interested in making your own plugins, some of the default plugins should provide all the info you need. I might set up a wiki or something someday that explains everything in detail, but there’s not much to it really.
I currently have three Wanderbar emulator setups available: one for Super NES games, one for NES games, and one for Game Boy/Game Boy Color/Game Boy Advance. All three 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.
- 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Designed for: North American ROM
I developed this plugin for my Seiken Densetsu/Final Fantasy Adventure translation comparison, but it does more than just the usual side-by-side script thing. It also provides lots of supplemental information about the game, most of which has never been seen outside of Japan.
Designed for: European ROM
The Japanese GBA version of this game underwent a lot of text changes, which makes it significantly different from the original Super Famicom version. Similarly, the English GBA translation is quite different from the original Super NES translation. So I created this plugin to compare all four versions at once!
This plugin does a number of different things:
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’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.
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. If you do make any plugins of your own, let me know on Twitter!