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.
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.
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.
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.
The Legend of Zelda: A Link to the Past (Super NES)
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.
Final Fantasy Adventure (Game Boy)
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.
The Legend of Zelda: A Link to the Past (Game Boy Advance)
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:
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’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!
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.)
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!
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!
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!
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.
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.
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.
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?
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 😛
If you’re looking to improve it, it might be worth putting it up on GitHub to get pull requests
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.
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?
I just realized that you created a dev forum, missed that when I first read the post. Maybe should move this discussion over there 🙂
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. 😉
This actually makes me wonder if there would be an ‘official’ (that is, directly supported by developers and publishers) version of this someday…
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.)
+1 also getting file not found for the NES source
Oops, thanks. I’ve fixed the link, I forgot a letter in the file name.
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?
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.
Well, for the US there is the retail and prototype ROMs, as well as there is a PAL version.
I wonder about Rockman & Forte, Rockman 7, and Rockman X1-3 able to translate in English?
Found out about this from Tofugu, so I’m afraid I may be a bit in over my head on trying to make this program work.
WIndows Defender tries to prevent me from opening it, but I tell it to Run Anyway and then I get a snes9x-wanderbar.exe – System Error dialog box. Inside “The code execution cannot proceed because d3dx9_42.dll was not found. Reinstalling the program may fix this program.”
Am I supposed to have another program already before trying to run this? I have downloaded and unzipped both the Wanderbar SNES v1.0 and the Wanderbar SNES v1.0 source code files.
I am hoping to try the Final Fantasy V1 Multiple Translations as that is the video game I love above all video games and I bought a Super Famicon and the FF3 cartridge many years ago when studying in Japan and it is still a giant wall of text that makes me give up every time. This program sounds amazing and if someone following this might be able to give me the nudge to figure out how to make this work, I would be over the moon! TIA
Oh, it sounds like you just need to install or update DirectX on your computer: https://www.microsoft.com/en-us/download/details.aspx?id=35 It should hopefully work after that.
A ha! It works now! Thank you so much, Mato!
I’m hoping someone puts this on Mac 🙁
First time poster just wanted to say I’m actually have a blast working with this. Wrote a bit of a script for Kirby Super Star to keep track of the treasures you gather and their value in real time to try to learn the syntax and stuff. It’s nice since HTML is a simple but versatile enough language to work with though had to learn lua from scratch based off the Super Mario World script being unable to find many good reference materials out there for lua. Anyway my question was did you or anyone else have any plans to fork this with VBA as I feel there’s a lot of potential with this and games like Pokemon and Fire Emblem.
Whoa, cool, glad to hear this has been helpful! I’d love to see your script in action, it’s fun seeing how others use this weird chimera monster I glued together.
I’ve actually been working to get the Wanderbar hooked up to a GBA emulator for a few weeks now. I started with mGBA, since it’s the best and latest emulator these days, but the code is pretty modern and advanced for someone behind the times like me. After I hit a wall, I tried hooking the Wanderbar up to VBA-M, but just getting that to compile on Windows was a nightmare for me, so I’ve moved back to mGBA. I’m close to getting it fully working, but I’m stuck on one big snag at the moment and it’ll probably take me weeks/months to figure out how to get around it. But here’s a look at what I got so far:
Oh it’s looking good so far, can’t wait until it’s released! So I’ve been playing around with it more and honestly you weren’t kidding about this thing being useful for ROM hacking. I’ve found it incredibly useful for mapping out pointer tables after working on writing a script for Fire Emblem Genealogy of the Holy War.
Running into snags here and there but overall having a blast working with this. Also the Kirby script is more or less done, it’s pretty crude and pointless but it was mostly just to learn the language.
Thank you for making this! I got it running under Linux using Wine. It works fine after installing some Japanese fonts.
Hey can you elaborate on how exactly you could accomplish that?
I tried nearly everything(in my mind) to fix the missing japanese fonts in the sidebar…
To no avail. I’m near to just giving up. I can start the game no problem and even the hover-translation from raikikun works, but instead of japanese text i only have sqauares…
Would be also nice to have a little bit more documentation on the sidebars. I’m still a beginner in programming and if there is zero docs I cant do much at all. tried to search through all the option-files but didnt find the font-selection for the sidebar… And even if I did it’s much harder to find out how to change the non-english fonts under linux… -.-
Any help here would be much appreciated!
I haven’t run any of this under Wine myself but it definitely feels like a Japanese language support issue with the operating system, like certain settings or fonts that are standard in Windows are missing.
Good job. I was originally looking for an emulator that had high-res sprite replacement because I have a hard time to read kanji in pixelated font. I found yours instead, which is even better. Still I wonder why custom higher resolution sprite replacement isn’t a feature in common snes-emulators. Granted, it’ll mess up palette trickery and care needs to be taken on set matching, but I don’t really see this issue on text-sprites. Anyway, I am posting to let you know I’ve read that line in the readme.
Impressive. Good job.
I wonder if Rockman & Forte SFC works with this translation plugin ? It would be an interesting to know the accurate translation instead of romhacking team version.
I’d like to see a time where it’ll work with PS1 games, just to see how well or how badly some games were translated (*cough* Wild Arms *cough* Tales of Destiny)
How hard is it for someone with no ASM knowledge to get a basic text hooker set up? I can already play a lot of games in Japanese, but a text hooker to be able to copy and paste words I don’t recognize into a dictionary would be really nice.
Every game is programmed completely differently, so almost every game would need to have its text system figured out manually. It’s one of the downsides of early consoles that had no underlying OS, unfortunately.
Now that I’m at the desktop computer again, I’ll try to write again the message that it failed to be posted when I wrote it via phone:
I have few to little knowledge of 65816 ASM, but using the bsnes-plus debugger I managed to catch a few things and create a sidebar with a preliminary text-hook function for the game Madara 2. Here’s the link where you can see what’s done so far, it’s explained in the video description: https://www.youtube.com/watch?v=Cma9Durpk7M&t=9s
It depends on the game, I suppose, but so far I haven’t had much problems finding the routines where the text is printed, etc. Just open the memory viewer in the bsnes-plus debugger, and look for any changes that match what’s happening along with the game’s progression (for instance, a ram value that changes to 01 when the dialog box opens, and to 00 again when it closes, or that changes every time a character is printed, etc.)
I was wondering, since it’s possible to import games from japan or play them from Steam in Japanese and so on,
would such a program work for PS1, Ps2, Steam and so on?
I’ve looked into writing a Wanderbar that can hook into Windows games, but I haven’t done much with it yet.
For PS1, Ps2, etc. it wouldn’t be that different from the NEs/SNES/GB Wanderbars, but emulators for advanced consoles are more complicated to work with and my skills are only mediocre. I do hope to do a PS1 sometime at least though.
how about inverted
for people who learning english
this is a test post (I wrote a really long post but didn’t seem to be sent in the end)