For years, the GameCube and Wii emulator Dolphin has been the gold standard of an open source, community-driven game project. It keeps getting faster and more accurate, and its monthly progress reports have inspired other emulator devs to explain some of the serious challenges involved in making console games run on other hardware. And they don't get paid for any of it. But if they did, Dolphin would've cost millions by now.
This week a core group of Dolphin's dev team did a Reddit AMA, answering all kinds of questions about the emulator. One that caught my eye was someone asking what Dolphin might have cost if the developers were being paid for their contributions.
"My guess would be about 10 million USD," answered phire, one of the programmers.
Then developer flacs broke it down:
- Total Physical Source Lines of Code (SLOC) = 267,354
- Development Effort Estimate, Person-Years (Person-Months) = 70.71 (848.50)
- (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
- Schedule Estimate, Years (Months) = 2.70 (32.42)
- (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
- Estimated Average Number of Developers (Effort/Schedule) = 26.17
- Total Estimated Cost to Develop = $ 9,551,743
- (average salary = $56,286/year, overhead = 2.40).
It's a fast and loose estimation. But if anything, that seems like a dramatic underestimate of how much Dolphin would've cost over its lifetime to make if it were a corporate product. Many of its talented programmers could probably earn double that salary in places like Silicon Valley, and the open source project has been around for 11 years, since 2008. That's a whole lot of free work being done to keep the GameCube and Wii alive on modern hardware.
It's a fun AMA, and I learned a few things about Dolphin I didn't already know. Here are some highlights:
JMC4789: Dolphin allows you to bypass certain parts of the rendering pipeline (namely the copy out to XFB) that allows you to get sub CRT input latency in the right situations.
Exclusive Fullscreen, vsync disabled, Immediately Present XFB copies, and Store XFB Copies to Texture Only unchecked provided roughly 1 frame less latency than a CRT T.V when I did testing using Rockband Light sensors on Wii. This is with a conventional, 60 FPS monitor on my computer. I'm sure with a low latency gaming monitor it could probably go even lower
JMC4789: There are a few game specific patches in Dolphin usually for extreme cases of a game doing something we don't ever expect to emulate properly.
The example I know about is a hack to prevent Disney Infinity and Disney's Cars 2 from deleting itself out of emulated memory due to dcache abuse.
phire: I'd really like to see much greater support for modding games.
Currently we can do texture replacement and modding code with cheats.
I'd like to things like see geometry replacement, UV coordinate replacement, complete shader replacement, I'd also like it to be easy to hook and replace game code with a scripting language or even inject completely new draw calls.
Basically, I think doing complete HD re-master mods of emulated games should be easy. Allow moders to replace all the graphics while leaving the underlying gameplay code unaffected.
degasus: I procastinated instead of writing my diploma thesis. So I tried to run dolphin on my laptop with bad performance results. I wanted to debug why it was that slow and instead of complaining, I have started to fix my bottlenecks.
At the dolphin team, I have learned how to write C++, how to use GIT, how to organize a software project. And yes, I use this skills now on a daily base.
delroth: We know for a fact that Nvidia didn't use to use Dolphin as a test for their driver -- for a while they had a blacklist entry in their driver that blocked Dolphin from using the high-performance GPU on Optimus systems, which I learned is because they have another test program internally that happens to be called "dolphin.exe" apparently...
And yeah, we've had this "libdolphin" idea for a while (the first doc I drafted about this was probably more than 5 years ago at this point) to split out the UI from the core. But I've got enough with one full time job, and that second full time job wouldn't pay me nearly as well :)