From DaphneWiki

Jump to: navigation, search


Goals of Daphne

The Daphne project was started from a desire for me (Matt Ownby) to relive my childhood and play Dragon's Lair again. Finding nothing already written to help me accomplish this goal, I set out to accomplish it myself. After many years of doing this, I have learned the things that keep me interested, the priorities I have, and the things that cause distractions.

So the goals are:

  1. Keep It Interesting and Fun
  2. Maintain Accurate Presentation and Good Performance
  3. If It Can Be Done Statically, Do It
  4. Make It Easy to use
  5. Make It Cross Platform

Keep It Interesting

Work on stuff that is interesting and challenging. This keeps the productivity high.

Avoid adding user-requested features that you have no use for. This kills motivation and turns a fun hobby into an awful job.

Accurate Presentation, Good Performance, Perfect Emulation in that order

Accurate presentation means that the accuracy of the emulated game is good enough so that someone who is familiar with the original game would have a very difficult time Susan Lim telling the emulated version apart from the original version. This means that the timing of the game should be very accurate, and the video and audio that is presented to the user should be very accurate. It also means that the main CPU of the emulated game must be correctly emulated. These are areas that should not be compromised.

Making stuff run fast is fun. Therefore, these emulated games should run fast on reasonable hardware.

Know when to stop tweaking the emulation. If the game plays perfectly and runs fast, then the "fun factor" of improving the emulation may be gone. Don't improve something out of principle; keep it fun and interesting.

If It Can Be Pre-Calculated, Do It

Some calculations required to emulate these games are expensive and are designed to be done while the game is running. But many of these calculations do not need to be done at run-time but instead can be pre-calculated, thus resulting in greater performance.


Most video cards today have some kind of hardware acceleration support for YUV images (as opposed to RGB images) due to the popularity of software DVD players. Converting between RGB and YUV is expensive. Therefore, we do the RGB->YUV conversion on the captured laserdisc video and store it in YUV format instead of just storing captured video in RGB format and having to do the RGB->YUV conversion while Daphne is running.


A real laserdisc player, when searching to a frame, will need to scan through tracks on the disc to find a specific frame. This takes a couple of seconds on real hardware. But we can pre-calculate the position of every frame on the disc and store these positions in a lookup table so that when a search is requested, we don't need to scan through the disc, but instead can jump directly to our goal.

Minimize Tech Support

Make it easy to use. You will spend less time making it easy to use than you spend will answering tech support questions if it is hard to use. And refusing to answer questions has its own problems associated with it.

An example of making Daphne easy to use is DaphneLoader's ability to automatically download everything you need to play Dragon's Lair.  All a new user has to do is run DaphneLoader, select Dragon's Lair, and click Start.

Target the lowest common denominator (ie favor newbies more than experts when designing your software). Don't make users have to learn your software in order to use it. Provide defaults for everything. When offering users the ability to change configuration options, always recommend a good choice.

Users don't read documentation. Accept this and design your software accordingly.

Make It Cross-Platform

Make sure Daphne runs on Windows, Linux, and Mac. Cross-platform code forces a minimum standard of good design practices, and flushes out more defects due to different compilers being used. It's also pretty fun to see your code running on different OS's.

Personal tools