DaphneGoals: Difference between revisions
Line 23: | Line 23: | ||
=== If It Can Be Pre-Calculated, Do It === | === 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. | 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. | ||
==== Example ==== | |||
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 store captured laserdisc video in YUV format to avoid this expensive conversion. | |||
==== Example ==== | |||
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 === | === Minimize Tech Support === |
Revision as of 15:42, 26 October 2008
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:
- Keep It Interesting and Fun
- Maintain Accurate Presentation and Good Performance
- If It Can Be Done Statically, Do It
- Make It Easy to use
- 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 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.
Example
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 store captured laserdisc video in YUV format to avoid this expensive conversion.
Example
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.