Full interview with JMC47 (Dolphin PR writer and Netplay Contributor)

Hello everybody! As we have recently got to April 2021, I had been a bit…overwhelmed between IRL things and being stuck between so many ideas and unfinished attempts, but I finally got back in the mood to work again on Arcadex Machina! While there were some few things I wanted to experiment with (mainly regarding creating video content and maybe writing more but in a freeform kind of way instead of constantly trying to keep a consistently professional format), I’m looking forward to bring more interviews, finishing past articles and also covering some fun games!

Today I’m bringing you a new emulation-related interview; though this one is a bit different than your usual fare. See, JMC47 is one of the countless Dolphin contributors, and specifically had worked on not only the wiki and Progress Reports avaliable on the site, but also was a key developer in the implementation and improvement of Netplay in Dolphin. Thanks to this, it is possible to enjoy several Gamecube and Wii games through netplay (which at long distances, has noticeable framebuffer/input delay but still more stable than certain fighting games netcodes…and at short distances, it is clearly rock solid).

While the delay-based approach might sound outdated/problematic nowadays with the advent of rollback-netcode games (and Slippi, which is a great rollback netcode implementation for Dolphin…albeit exclusively for Super Smash Bros Melee), I can say from my own experience that it can be quite good in consistency (along with Mednafen) as long as the framebuffer is enough for the no distance, as certain few PC fighting games can have delay netcode but that is incredibly more unstable (as in, you’ll get have stupidly choppy gameplay on top of input delay if the distance is too far). Also, I always liked to read the Dolphin PRs, so I was really glad to be able to talk to this dev. Now, without further ado, please enjoy!

This interview was conducted on July 07, 2020 (yes I know it has been months, sorry)

So first of all, thank you so much for this chance! Dolphin as a project has been quite admirable, and very impressive as the only functional GC/Wii emulator at this point; so getting to talk with someone that has been involved to an extent with that is an honor! And I loved reading the Progress Reports as well.

Heh, it’s not a big deal. I don’t mind chatting

For a start, can you give me a brief introduction of yourself (and/or what you do)?

In terms of emulation, I’m mostly a tester and since I write as a hobby, I managed to end up on the Dolphin blog staff after being around the project for a while. I have a background in speedrunning, and one of the things I did as a kid when speedrunning was use emulators for testing since you could do things like savestate and slowdown. It gave me a huge advantage over runners that didn’t know about emulators or refused to use them.

Even before that, I was familiar with Dolphin through running it back in 2004/2005ish at ~2 fps on an AMD Athlon because I was trying to learn more about how certain games were rendering and possibly rip models. Of course I was a stupid teenager with no expertise on how to do that so I didn’t exactly get far.

Being a speedrunner and a glitch hunter actually gave me a lot of advantages for testing in emulation, ecause some things I’d naturally put together in my head as being related were things that other people wouldn’t realize or notice. Deducing ways to reproduce bugs or potential causes is a big thing with actually fixing bugs, even if I had no real idea on the actual cause of the bug or what the emulator was doing.

That’s quite fascinating to know!

My lack of technical prowess is part of what landed me on the blog. I’m actually more toward a user than an emulator developer, so I was kind of the bridge between users and devs. So I’d take dev explanations, they’d break them down a bit, and I’d write it in my own way that I could understand and have them review it until it was actually factually correct. My favorite being the article on Dynamic BATs and Star Wars: The Clone Wars.

Interesting! So you’d say that you got involved in emulation since 2004 with Dolphin? Or did you have any experiences before that?

Just as a user. I played around with N64 emulation, SNES emulation a bit. I wasn’t super familiar with what was going on at that point. I rented a lot of games when I was much younger, and I would forget their names or not know what they were called. When I was older I wanted to play them again but I had no real way of researching them (Trial and error, so to speak). I was a teenager with no buying power πŸ™‚

Around what time do you remember getting started with speedrunning and glitchhunting?

The earliest I can remember speedrunning is probably 2005 – 2006, and my first usage of Dolphin as well as my first “official” speedruns were way back then. I casually used emulators… probably around 2002 – 2003? Dolphin was crazy to me, the idea of emulating a GameCube game already was insane, and that was 2005. However, I wouldn’t formally join any of the emulation communities until 2012/2013, and I wasn’t officially a part of Dolphin until 2014.

Oh, I forgot the part of when I joined Dolphin.

Before I joined Dolphin formally, I was fairly competent with emulators by that point due to my speedrunning. I’d use them a lot and help other speedrunners set it up and even would do things like netplay for fun. So, there’s this game called Super Smash Bros. Melee and I read someone (I think Dan Salvato? He’s actually done a lot of cool stuff since) who had this Melee Online project called SSBMO that was kind of like, reverse engineering Melee. And one of the things they said was that Dolphin was impossible to use for netplay due to latency and desyncs if you had more than a frame of latency.

Screenshot from the June 9, 2013 blogpost from the (defunct) website for the long-cancelled SSBMO/SSBM Online project. The currently known Project Slippi was not affiliated or originated from this project.

But this voice in the Melee community being so wrong and me and my brother being jackasses were like, “Dolphin could totally do this” and my brother was more of a coder than me and we began modding Dolphin a bit to make netplay less demanding. We ran an IRC server and called our project Global Melee, we ran a few tournaments and it was a total shitshow for the most part but it worked. Eventually users from that and other Melee communities made SmashLadder (sometimes known as Anther’s Ladder).

I split off from the Melee community to work more on the emulator itself. Thanks to all of my work in netplay, I had a fairly good understanding of how certain parts of Dolphin worked.

So eventually you ended up as a contributor in Dolphin development itself?

Yeah, at first I mostly used to just report bugs. But then MayImilae and I, who was a friend of mine and someone who already worked on Dolphin’s Wiki, came up with a proposal for the Dolphin Blog and progress reports (I still have the original proposal).

The idea was a biweekly/monthly/bi-monthly writeup that would discuss new changes, funny bugs, and other cool tidbits. It was partially sparked by the fact that a lot of the changes developers were making to Dolphin were really unpopular at the time (Removing Asynchronous Audio being a big one). By actually telling users why we were doing things, it helped them understand why these changes were good for the project and cut down on the massive backlash.

You can actually go back to the 3.0, 3.5, 4.0 days and see how rough it got: Dolphin was trying to make the transition from a really hacky, fast emulator to a more accurate performance oriented emulator. But that meant losing performance in some areas for a more accurate emulation core. That doesn’t mean Dolphin is perfect, it’s actually very bad in some areas, but by making the emulator more maintainable and removing a lot of complexity and dead features, it allowed development to have a much longer lifespan.

I definitely noticed how 5.0 stable was such an performance improvement on my current laptop compared to 4.0 and even older builds I tested for curiosity like 3.0, 3.5 and even 2.0.

Editor’s Note: Best to go with latest development Dolphin versions unless you have a potato like the laptop I used before πŸ™‚

But to a user on a 32-bit computer, removing 32-bit is really annoying to them on a surface level. However, having a blog post that says why, and shows both the performance differences and what opportunities dropping 32-bit opens up, softens the blow a bit.

I have seen those things happen (my laptop doesn’t support OpenGL 3.3, so anything that uses exclusively that is out of my range at the moment); though thankfully it does handle DX11 (to an extent; Dolphin still works).

So, once the blog was established, my role solidified a bit. I tested games that were on the bug tracker or interested me, reported bugs, tried to narrow down what was causing them or how to reproduce the bug reliably, and I reported my findings to developers with proper logs and other information that most other users wouldn’t actually do. I have a bunch of tools, like a USB Gecko, that allow me to actually debug on console directly, and a massive library of games partially funded by the emulator that give me easy access to hardware verification.

Many of our reported bugs actually are just game bugs that happen on console, and it’s usually my job to check that out since I have all the tools to transfer savefiles and run the games with my video hooked up directly to my computer.

Interesting! What would you say that was the component that you worked the most on during Dolphin’s development?

Personally, my most tested/worked on component has to be netplay: It’s what brought me into the emulator. I literally put a bounty (and paid it out) on Wii Remote support on netplay!

Hmm, that’s nice!

A lot of it is just bringing things to developers attention, trying to help them see what users think are important. And sometimes users teach me a lot of things that I don’t see anymore because I’m so used to using Dolphin. I found netplay important and was a part of the project, which inspired other devs to maintain and update netplay; even though I’m not a good enough coder to really do much on netplay myself (outside of completely break it that one time my code got merged).

On that matter, I wondered what was your thoughts about projects like the Slippi builds (before and after rollback)? The Faster Melee builds were designed for improving input lag during Melee; but also presumably worked with other games. Meanwhile, Slippi recently got a rollback implementation specifically designed to work with Melee.

Well, Faster Melee is funny. So, the people that work on “Melee” builds as I’ll call them, they know Melee very, very well. They understand Melee better than most emulation devs ever will, and have studied it and toyed with it to a ridiculous degree. However, most of them have no clue how Dolphin works and their builds make me facepalm: They 100% break other games with their changes and should never be used on other games, and do not test their changes across the library as they do not greatly reduce input latency nor do they enhance anything about playing other games.

We have multiple cases where using FM based Slippi builds outright break input in other games, and these breakages will continue to get worse as they do not target nor test other games. Now, it is not their job to test it, nor their target; but it is a tad frustrating when users report bugs from a FM/Slippi build and it turns out something they did broke it and it’s nothing to do with emulation (with a normal build).

In terms of technology though, Slippi itself and Melee Rollback is essentially an emulation miracle and I have no idea how they pulled it off, and the Slippi team are very knowledgeable on Dolphin.

I wonder if you had something else to comment about your work in writing up the Progress Reports in the blog? I guess that by the time you were writing those, you already were part of developing Dolphin itself.

I think that there’s a misconception on the work of the blog. It really is a team effort with multiple writers, people working on images, headers, and people reviewing the actual contents making sure it’s readable and accurate (and yeah, I was already a part of the bug reporting team)

The whole blog itself was lightning in a bottle, just a lot of things and people came together at the right time. Pretty much every emulator out there has copied or iterated on the progress report model, and it’s really cool to see as we know a lot more about how these emulators are made thanks to it.

I do see that your name shows up in most of the PRs along with MayImilae, but I wouldn’t doubt that all the teamwork involved to bring the features showcased there was also poured to have such an insight on all the novelties of the month.

I have moonlighted a bit with the RPCS3 blog one time and the Citra blog a few times, but I never could reproduce what we were doing with the Dolphin blog on the others though; my knowledge of the other emulators wasn’t nearly good enough to be writing on the frontline. I was cocky, thinking I could just jump in and do the same thing that I did in Dolphin on other emulators, but they all have their unique behaviors, quirks, and the libraries themselves were foreign to me.

So, I ended up being very vague in my writing because I really didn’t know much about the emulator nor games to write about them. And, with Citra, the toxic community was a huge turn off. Their userbase was something else.

What can you say about your experience with the whole Dolphin team and meeting the members?

It’s a very strange experience; it’s like being a fly in the wall in a room full of geniuses. Watching someone casually read through PPC ASM and tell me what the game is doing based on a screenshot from the debugger is wild. A lot of the people I’ve seen come and go in the Dolphin community and other emulation communities are really beyond comprehension for me. They’re very cerebral is what I’d say.

I think that’s just coding in general, it really takes something special to be able to do it at a high level, and when you add in the knowledge and expertise to reverse engineer hardware and games, you get some very special people. I don’t even know how to describe it, it’s like another plane of thinking. Some of the conversations I’ve been able to observe are crazy.

I can relate to that, considering everything that Dolphin has brought at this point, and also about how I had got to talk with some other skilled emudevs before; which is the reason why I admire them. And at this point where I haven’t really learned much about programming yet, I’m impressed by your work as well πŸ™‚

I’m not on the same level of any of those people. My code contributions to Dolphin amount to almost nothing; I’m the idiot that fell ass backward into this whole situation.

I think that’s part of what makes Dolphin’s community special and why it was able to have such a long run of active development: It became more than just a team of coders and reverse engineers, as now we have artists, writers, people with management experience and those that can run the infrastructure. Everything just clicked at a crucial moment in the project’s history.

It does sound quite special to see a community so united on their work.

There’s a lot of pressure and expectations in emulation. They started out as these pet projects and have now become a huge part of the gaming community: Being able to play games is an expectation most users have, regardless of their hardware or what game they’re running. There’s a lot of conflict too, with the right way to take an emulator, performance vs accuracy, maintainability vs progress, etc.

I’d say that even if you feel that your contribution is not as “technological wizardry” as the other devs, it still contributing to the cause and of course getting PRs to report with ease the stuff that has been brought so far. Also, the “Performance VS Accuracy” is a quite old issue, ranging from wanting the most close-to-hardware behaviour, to “I wanna run the game”. However, sometimes “I wanna run the game” just doesn’t work because of games that DOES need all the features (good ol’ Factor 5).

I like to say “accuracy first” all the time, but it’s not that simple. With open source emulation especially, once there is a hack, no matter how horrible that hack is or how much it breaks things, it’s out there; and if you don’t implement it, someone else will. So do you compromise the core of your emulator and implement it, or do you risk losing your userbase to a fork? Citra had to deal with that problem quite a bit early on.

Yeah I do remember that talk of a unofficial Citra build that had caught on in popularity. I don’t remember the name but it certainly happened.

The problem was that these forks were making nonsensical changes that either harmed emulation or should have done nothing, fueled by a misinformation campaign; there were even some forks packed with malware.

It’s hard to say really, maybe it was always like this and I just didn’t see it before. But, back when I first joined Dolphin (I think back in 2013), I was so eager to help everyone and I wondered why they were so short/angry with some people; one of the developers told me “If you stay around here, you will get the same way”…and he was right. So maybe it was just always this way and I just saw it differently back then.

That’s indeed something that can cause debate on less informed userbases; would be nice if it could be made clearer for them to understand…more than what it is already.

Speaking of performance stuff, I had mentioned how Dolphin 5.0 Stable was my favorite build on my laptop; I prefer it over the Ishiiruka builds as well because it does feel much more reliable and sometimes the frameskip is useful, though I know it was a hacky solution which is why it got axed.

Editor’s note: Again, please just use the latest dev builds unless you have a potato πŸ™‚

So there’s a myth regarding frameskip and I’m going to tell you about that right now: In most games…it does nothing. In single-core…it does nothing. In dual-core with very specific games…it can do something, but its easier to just say that it does nothing as it also can crash other games. It’s just a disaster, it doesn’t work with the design of the GC/Wii GPU pipeline; you can get the same effect in modern builds in a much safer manner with Emulated CPU Clockrate, or simply underclocking the GPU in single core (though…that requires being in single core).

That reminds me of how PCSX2 frameskip doesn’t become a 100% effective solution for everything. And I can say that the CPU Clockrate indeed worked for me with certain games (like with Super Smash Bros. Melee).

Emulated CPU Clockrate has its limitations – it depends on how the game itself handles lag. Most games will frameskip, but others like Rogue Squadron 2 will just slowdown instead.

I just remembered that the builds used for netplay all the way before FM and Slippi were specifically like, Dolphin 5.0-2XXX or something like that.

One of the biggest changes in performance post 5.0 was recently reverted: The force MMU enable, so performance has more or less returned to where it was in MMU speedhack titles. That waas the biggest performance issue in post 5.0 dev builds (it was a calculated gamble), as we forced MMU on because it’s the accurate option, allows us to test this accurate path more and it shouldn’t impact performance in most games…

However we ran into a problem that meant it did impact performance in select games (games that executed code out of ARAM), and with no way to remedy that, it was finally reverted.

Would you say that people used dev builds of 5.0 for online over Stable 5.0 because of netcode issues with 5.0, or because of netcode/overall improvements in dev-5.0?

The netcode is so much better in newer builds, along with things like automatically syncing saves, syncing netplay sensitive settings, and the much improved Wii Remote support for netplay. I honestly cannot recommend 5.0 at all because it was before Wii IOS emulation was rewritten, and simply using 5.0 means your NAND is in a corrupted state πŸ™‚

It’s nothing serious, but it’s enough that certain channels and online services wouldn’t work, like Dragon Quest X, the Wii Shop…but all of those are gone now.

I wonder what do you think that’s coming in the future for Dolphin?

I don’t know what’s coming in the future, but I think we’ll see more specialized forks for games. I would hope we’d eventually get better emulation of The Rogue Squadron games and GPU timings, but it’s all up in the air. Dolphin has reached that point where it’s good enough for most games, and the games it’s not good enough for isn’t something people can just hack around.

It’s hard to see things changing drastically outside of trying to fix the last few games and maybe new people showing up with their own interests in what they want to fix, as that’s how things have been progressing the last couple of years. Things kind of move with an ebb and flow. Someone shows up and wants to fix this really cool bug. They go down a rabbithole and end up rewriting half of IOS emulation. Someone’s favorite game has audio issues, so they rewrite the entire audio core πŸ˜‰

It’s been going on for many years: Some of the biggest advancements in Dolphin have been sometimes solo/duo projects. Like Ubershaders was primarily developed by two people across several years. When the emulator is really moving, it’s this huge cooperation between tons of people with their own interests and projects.

Its cool to know first-hand from someone that has been there πŸ˜€

…I just recalled how you were often mentioned about testing obscure games and finding bugs in them.

Yeah, I got dragged into a lot of very fun debugging experiences: Figuring out Red Steel on Dolphin was my favorite one (one of them; there were others but I can’t remember).

On that first note about getting involved due to speedrunning, what games got you in speedrunning? I have mostly seen that you got some records on Megaman Legends.

Mega Man Legends didn’t have much of a speedrunning community, so a lot of figuring out how to go fast meant studying the game itself and trying to push it in new ways. Part of that was working with friends, trying to find bugs, trying to push things to their exact limit while trying to understand core mechanics of the game from the surface level.

I think that translated over to Dolphin almost directly. In fact, a lot of speedrunners/TASers are among some of the best reporters because of their knowledge of the games. Who else would report a bug in Twilight Princess where you can clip through a fence on console but not on Dolphin? (And actually have exact reproduction steps so we can test it and figure it out)

Footage of an unrelated Twilight Princess bug/crash demonstrated in Dolphin. This was made to demostrate the proper behaviour (crashing) when attempting this after a certain feature rewrite.

As much as speedrunning and emulation has a sort of tense relationship, with people worried about people on emulators cheating or getting advantages, the fact emulators exist greatly help speedrunning and speedrunning has helped find bugs in emulation.

Going for a very mainstream example that isn’t exactly speedrunning, but is glitch hunting: Parallel Universes exposed a crash that didn’t happen on VC/Project64/Mupen64, but did happen on N64. And thanks to how well known Mario 64 is, it was very easy to find out why. I don’t know if the fix ever got merged due to performance concerns, but the fix is known and it improved N64 emulation slightly in an edge-case.

It is reason you can take your camera out of bounds in VC/emulator and not on console (fwiw), and with Dolphin itself, the same people working on the A button challenge brought to our attention a bug in the VC version of Mario 64 that didn’t happen in Dolphin when emulating the VC version. Thanks to them, we were able to fix a rounding mode so that the bug now correctly happens on Dolphin.

It is interesting how you point out that speedrunners and glitch hunters can also contribute to improving emulation!

Some of the greatest stories are within speedrunning communities; they’re like their own worlds. I reported bugs to PPSSPP about Megaman Legends 2, and they fixed a map bug. (I also accidentally reported some game bugs as emulator bugs because I wasn’t familiar with the PSP)

It’s funny, but sometimes game devs comment on emulation and I know the typical “devs hate emulators” narrative, but all the game devs I’ve managed to hear from have been thrilled to see their games in Dolphin.

Would love to hear more about that πŸ˜€

One comment I remember was about a game dev getting upset; Dolphin has high internal resolution, right? So they were upset that it showed how bad things looked in the distance and how they were taking shortcuts like “Oh god that fence looks like shit on 1080p”, or them telling us where our emulator is fucked up, saying “Hey, that tree is blended wrong”…and they were right about the blending being wrong that time!

There was a screenshot a long time ago of one of Factor 5 devs reacting to Rogue Squadron 3 finally running in Dolphin…and it was a positive reaction!

I’d definitely love to know more about game devs regarding Dolphin, because it must be the first time I hear of something like this.

It’s very rare, as GC/Wii is new enough that we don’t get much.

Now, if you wanna get a real story, and this one I’d love to hear like a huge one, Avalanche Software seems to have code designed to break software in 3 of their games along with a nasty message in one of their GC games. We theorize that they were hanging around the Dolphin IRC channel and designed their anti-piracy based on Dolphin’s shortcomings. Based on our reverse engineering of their games, we assume this to be true but if you could contact someone and actually get them to tell us the real truth behind it that’d be sick.

Cars 2 and Disney Infinity have a suicide pill that is designed to destroy itself in Dolphin; it is something that literally doesn’t affect console. The anti-piracy isn’t meant for console because there’s no way a console could fail the check, even with all kinds of hacks. The only thing it targets is Dolphin and other emulators, there’s no alternative. Several Dolphin devs told me they believe that Avalanche Software had people on Dolphin’s IRC channel listening in and following early development.

Toy Story 3 had MU usage that was designed to break Dolphin, but by 2011/2012 Dolphin had better MMU emulation, so now the games had dcache suicide pills with Dolphin could never emulate. But this weird, outright malicious code cannot run on console because there’s no way for a console not to have dcache. The datacache is part of the CPU and that behavior will never change.

There’s also the story of the time one of the Dolphin devs, wearing a Dolphin shirt, talked to Reggie at E3. He said he disapproved of our methods but appreciated that we were fans.

Outside of anything emulation-related, what are you working on now?

Me personally? I’m dabbling in game dev. Nothing serious, just personal projects with friends. I’ve been trying to design a game since 2005 and failed several times spectacularly lmao

I always wanted to get on in anything game dev because since I loved games so much, but I never got too far with any of the ideas I ever had.

It’s hard, and I have the utmost respect for even the worst shovelware makers because it’s just so hard.

What did you think when I reached out to this interview?

I thought you were a bit crazy for interviewing me instead of the coders πŸ˜‰

My name’s on the blog through so I tend to get a bit more recognition than I deserve.

Do you have any special thanks for someone?

There’d be too many to name! This is probably a sappy special thanks, but in the end I really want to thank Nintendo and their developers for the games they put out during my childhood. As much as people say gaming rots the brain, games like Super Mario 64 and Yoshi’s Island inspired my creativity and got me interested in game development and understanding game design.

The thing that keeps me in emulation is that I know some of these games that aren’t as well known or loved are a cherished part of someone’s history. And if they turn to the emulator to relive their past, I want it to work for them. Not just Nintendo though, but all game developers for creating these worlds. I remember loving Mario 64 so much I’d cut out my own stars and hide them around the house.

Do you have any message to the Dolphin users?

Stop using dualcore >:)

In all seriousness. I guess my message would be that I’m happy to see so many people using and enjoying the emulator, and that we’re going to keep trying to make it better in the future. Emulation is complex and frustrating when it doesn’t work.

Thank you for all this chat my dude πŸ™‚

No problem, was fun going back to the memory lane!

Thank you for checking this out; if you enjoyed this, you may want to check out theΒ other interviews, and stay tuned for some interesting articles upcoming; specially if you are a emulator enthusiast. If you want to see something specific covered here, please let me know on the comments, and support me by spreading the word! You can also support me throughΒ Ko-fi so that I can stay afloat on a boat and don’t fall in a moat (or something like that, have at you)

I also want to thank everybody that has supported me in a way, be it following my wacky sacks misadventures on Twitter, the overwhelmingly good reception to The History of SM64 Modding (I will get back into that soon I promise), all those friends that I’m always wishing to see again, and of course every single person I have talked with so far; I’m always grateful for these opportunities I receive to know more about the stuff I love. And of course, thank you for sharing this love I express with my interviews and articles.

One thing I can definitely promise soon is the full interview with Guy Perfect (which I ended up delaying with due to mental dumpster fire that I was going through in March), but I will be trying to do some more freeform posts as well for both an experiment (about more spontaneous features and jokes) and a way to bring stuff more often to the site. But until then, see you next time!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s