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.
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, see the dev board here.
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.
- 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.
The script has a nice little animated start-up screen that displays until the title screen goes away
Whenever an English line gets loaded in the game, the same Japanese line gets displayed on the sidebar - there's even an automatic hover dictionary feature
This setup is perfect for comparing translations, studying Japanese, and studying game localization
Enemy stats, descriptions, and info get displayed live on the sidebar during battle - the amount of info can be toggled too
Battle dialogue and pretty much every piece of text in battle gets displayed in Japanese - even menu text gets highlighted as you move the cursor around
Main menu text is translated, nicely formatted, and can be hovered over for dictionary help
Even rare, weirdly formatted text is handled similarly in the sidebar
Fans and students can discover text changes in the game in a hands-on way
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.
Every time a line from the main script appears in the Super NES game, the same line from the Japanese script + three other translations appears in the sidebar
Study all your favorite lines, see how they compare in Japanese, and see how multiple translators have handled them over the years
A lot of main menu text is also supported
Battle dialogue and battle text is all supported too
Extra-long text automatically gets scrollbars in the sidebar when necessary
This plugin turns Final Fantasy VI into a treasure trove of info for fans, language students, and translation students alike
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
I added an automatic death counter, and then I made it so that for each new follower a specified Twitch channel gets, you'll get that many extra lives added
For fun, I made it so that if you die in the "Lost Levels" game, the game will start to slowly corrupt and get glitchy
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.
The sidebar displays the Japanese text whenever English text appears
The game's text is pretty short and simple, so it might be a nice way to learn some vocab and Japanese language stuff
Link's face is sadly not a part of standard text formats so I had to rely on something else instead
Now you can learn all about the Triforces in Japanese for yourself
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.
The Japanese script is displayed in the sidebar whenever English text is displayed in the game - even color formatting is preserved
And, of course, the hover-over dictionary is included
By sheer programming luck, a bunch of battle text is supported too
Even a lot of main menu text is supported
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.
Japanese script text appears whenever English text appears
Location info will pop up in the sidebar as you travel around the world - this example includes details and a royal crest from official Japanese sources
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.
The Wanderbar can easily be used to keep track of certain numbers, stats, or variables as they change in real time
I also designed the plugin so that every five Yoshi gulps you do, weird stuff will happen
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.
An example of new text with a translation in the sidebar
All the item names, enemy names, etc. have already been handled, but there's still a lot of new script text that needs translating
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.
The sidebar displays the original Japanese text and how it would be written in standard Japanese
There are also a few extra language notes for some of the lines
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
A timer, an automatic death counter, and a system that lets enemies taunt you when you die
Boss encounters now include a simple little animation overlay
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.
The basic Japanese text displayer in action
WTF you're invisible
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.
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.
My old emulator RAM watcher displaying a Japanese script
An even older emulator RAM watcher displaying Final Fantasy VI T-Edition enemy info and name translations
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.
In my initial version, all text on the sidebar was basically displayed like if you used the Pen tool in an image editor - not very efficient, not selectable, and not very easy to auto-format
By this early point I had my sidebar just put a newline in every # of characters, but that's very limiting and also doesn't fix the problem of when text goes beyond the bottom of the bar
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.
Wander and Zuul. Maybe I should've called it the Zuulbar instead
Wander watching a speedrun on Twitch
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. You can also browse the Wanderbar dev forum here.