QuakeDS logo
Quake is a registered trademark of id Software
Nintendo DS is a registered trademark of Nintendo

Introduction

This is the home of the homebrew port of Quake - the hit first-person shooter from 1996 - to the Nintendo DS handheld system.

Due to the limitations of the system, this port has taken a whole lot longer than it should have! Here's why:
  • the original game required somewhere between ten and twelve megabytes of RAM, including the loading of the program into memory. The DS has just four megabytes of general-purpose memory - not cool.
  • the original game was software-rendered, something which requires a decent amount of computational power, something the DS doesn't have.
  • the original game required a math co-processor (also known as an FPU). Neither processor in the DS has an FPU so all floating-point operations must be emulated, which is very slow.
But here's why there should be a QuakeDS:
  • the game runs on, like, every other platform in the entire world, right?
  • the DS has hardware which can accelerate 3D graphics
  • the DS has a wireless interface built in - anyone for DS-DS deathmatches?
Quake on the DS

Current Status, as of 29/04/07

This port was started in mid-October 2006. It is not yet finished, however it is nearing completion.

The game

  • the program, working state and game data have been squeezed into the four megabytes of main memory
  • it requires either shareware or commercial pak files, Amiga and PC paks have been successfully used
  • total conversions and mods should work, assuming they respect the tiny memory size (extended RAM to be supported in a couple of weeks)
  • infrastructure-based wifi network gaming is supported (build to be released in a few days, after more testing)
  • ad-hoc DS/DS gaming will be supported at a later date
  • there is now full control configuration
  • game saves now work, although there may be some corruption using certain DLDI drivers
  • there's a crosshair :-)
  • there is a proper timebase, so the speed won't be inconsistent any more!

Graphics

  • the majority of the software renderering has been moved over to using the 3D hardware
  • world textures are display nearly-correctly, there are however non-power-of-two textures still aren't rendered correcly; Alias models are fully textured
  • the game uses faux vertex lighting, derived from the original lightmaps; light animations also work correctly. Full lightmapping may be included at a later date
  • there's no dynamic lighting yet
  • Alias models are not lit
  • sprites and particles are hacked in (as of 17/02/07) and are only partially hardware-accelerated, and have no textures
  • there are sky, water, sludge, lava and teleporter animations (the sky is now rendered mostly-correctly, too)
  • the console now uses the Quake font from the chosen pak files
  • the game uses hardware fogging for a light depth cue above ground, thick fog for below water
  • there's a HUD
  • GUI elements are transparent

Sound

  • sound effects support is about 95% finished, with the whole sound system running on the ARM7
  • the sound system uses proper spatial positioning (it is stereo though...) - plug it into your speakers and subwoofer to hear all the effort I put into this!
  • CD music is currently being investigated
    • the existing solution requires the CD soundtrack to be ripped to your flash card
    • uses an MP3 decoder, running on the second processor
    • ...but the file streaming slows down the primary processor a bit too much

Tech info

  • uses the libfat DLDI interface, so should hopefully work on all supported flash cards
  • built using the latest toolchain, devkitARM r20
  • textures and sounds are loaded from disk on demand - you will notice slow loading if you have certain types of cards, or low quality flash cards
  • sound and texture memory is defragged in the background
  • in-game performance is still not hot, but is being actively worked on - expect to see it run twice as fast in the finished build
  • Alias rendering performance has been improved by 300%, brush model rendering 30%
  • performance is timed using a custom function-instrumenting profiler (a bit like gprof) and another system is used for recording the exact pad and screen input for later replaying
  • the DS is put to sleep when the lid closes (disabled in this build)
  • there is no texturing on brush or Alias models or images loaded from individual files - you must use pak files
current status

current status

current status

Downloads

Prerelease 2

quakeds_290407_pre2.zip
This is the binary for the second prerelease of QuakeDS

This is the binary for the build which supports infrastructure-mode networking (coming soon)

This is the binary for the build which uses the built-in memory found on some flash cards
quakeds_source_290407_pre2.zip
Source for the second prerelease of QuakeDS
config.cfg
The config file that I use to run the game with. A regular PC one will do, but I know that this one works :-)
DOS shareware version
Shareware version of the DOS version of Quake - contains shareware pak files needed to run QuakeDS
Quake source id's page of game source
DLDI for libfat
Chishm's flash card driver page - you need the appropriate file from this page in order to make QuakeDS run

How to play

This mini-guide assumes that you are familar with the process of running homebrew on your Nintendo DS. If you don't know how to run NDS homebrew, look online for the answer...
  1. You need Quake's data files. If you own a copy, that's cool - you'll have full access to the game. If not, then you can download the shareware version of Quake (for DOS) from id's site. This will only allow you to play the levels from the first episode. If you want to play the full game, buy a copy - don't ask me (or others) where you can get these files.
    1. In the root of your flash card, make a directory named id1
    2. If you're using the shareware version, copy pak0.pak from that archive into the id1 directory that you just created
    3. If you're using a commerical version, copy pak0.pak AND pak1.pak into that directory
  2. You need a config file to tell the game how buttons are set up, etc. I know that my config file works, so download that from the link above and save it into the id1 directory.
  3. Visit Chishm's DLDI page (above) and download the DLDI driver file which corresponds to your NDS booting method.
  4. Download the QuakeDS binary package above, and extract the NDS file into the root of your flash card
  5. You now need to patch that program so that it will be able to access the files on your card
    • For example, on my GBA Movie Player (CF) I download the file named 'mpcf.dldi' from Chishm's page.
    • I then run 'dlditool mpcf.dldi k:\QuakeDS.nds' - note K: is the volume where my Compact Flash card is mounted, yours will likely differ
  6. Now do what you've gotta do to make an NDS start on your card
    • For example, on my GBA Movie Player, I need to rename K:\QuakeDS.nds to K:\_boot_mp.nds
  7. Put the card in your booting hardware and turn on your DS!

Options

The game includes full control customisation, accessible from the usual place in the menu. However, the default settings provided from the Quake pak files aren't too enjoyable when using them on the DS, so feel free to use my config file.
Don't forget that after making changes to the settings, you must use the 'SAVE SETTINGS' option to actually save your settings to disk. Quake would normally do this when you quit, but you don't really use the quit option on the DS! I may put in an auto-save option...

Current controls:
The config menu also contains DS specific options:
There are more options available in the config file:

Using mods and total conversions

QuakeDS supports mods and total conversions. However, due to the low amount of free memory available on a stock DS, many of them cannot be run. Remember, QuakeDS has a ~3 megabyte game heap - many TCs (eg Malice) require a 16 meg heap. Be realistic when you're trying to get something to run. However, if you're convinced something should run but it just won't, get in contact with me and I'll try and help you get it running.
 To fully support these TCs, QuakeDS will use the extra memory provided by some flash cards (eg the Supercard, M3, Opera memory expansion) - a build support this will be available within a few weeks. In the meanwhile, you're gonna have to make do with the 3 meg heap!

To use mods/TCs, you need access to the Quake command line. The command line for QuakeDS is available in a file in the root of your flash card named 'qdsopts.txt'. To handle spaces in filenames etc, each option (of argv) must be separated by a newline character (both UNIX and MS-DOS newlines are supported).
So for example, to start the Malice TC with no sound, and no networking, qdsopts.txt would look like this:
-game<newline>
malice<newline>
-nosound<newline>
-notcp<newline>
<end of file>

not like:
-game malice -nosound -notcp<newline>
If you make a mistake and it won't start you'll be able to see the processed command line options printed to the subscreen as the game starts.

Networking

QuakeDS supports infrastructure-mode wifi networking for UDP/IP PC-DS, DS-DS, etc-DS gaming. This means that you need an access point to play.
There is currently no support for ad-hoc DS-DS gaming.

As the DS networking code takes up a large amount of memory, be aware that you are unlikely to be able to play all standard Quake levels in a co-op match. Wait for the combined EXRAM and networking build to play everything smoothly. Also, the server code in QuakeDS is (still!) unoptimised and this will slow down the other client. So if you can, put the server on a computer which has oodles of processing time :-)

To set up wifi play, you need to configure an access point. To do this, fire up a copy of Mario Kart and configure an AP in the first settings slot. You'll have more luck if you manually set IP addresses, rather than let DHCP do it for you. Once you have done this (and have checked that the settings work), fire up the networking build of QDS (will be available in a few days, after further testing). Go to the multiplayer menu and select join game. Then go to 'SEARCH FOR LOCAL GAMES' and choose the relavent server! Note that this requires the server to be on the same subnet as you, and UDP broadcast packets need to be supported by your network. If you'd like to manually enter an IP address, use the OSK to enter the address.

Transparent water

Quake does not natively support transparent stuff due to the way the maps are built. However there have been patches to Quake to allow you to get transparent water (and sludge, teleporters, lava etc) over the years, and I've added support for this to QuakeDS.
Read here if you want details of the regular Quake way, as most of the details apply. http://retroquake.planetquake.gamespy.com/blog/?p=34
To summarise, there seem to be two ways to do it:
Once you've done this, to get Quake to render stuff with transparency, adjust the ds_turb_transparency variable in the range of 0-30. Zero means invisible water, 30 means pretty much opaque. If you set it to 31 you'll disable transparency all together - this is the default.

Legal

I take no credit for the development of Quake, that all goes to the guys at id Software. I also claim no copyright, trademark etc. Again, all work, copyrights, trademarks are owned by them.
I have had no involvement with Nintendo (or their first-party or third-party companies), and I have not used any of their tools, software, documentation or SDK to make this port.
All I've developed is a small patch to make this game run on the Nintendo DS, and I have done so as a (non-profit) hobby over the last few months.

This is absolutely no warranty for QuakeDS, and neither I, the copyright holder, nor Drunken Coders will be liable to you for damages out of the use or inability to use the program.
That said, I know of no code within this program which is able to damage your DS or prevent it from booting!

The EXRAM build of QuakeDS uses Lick's RAM unlocking library. Ta mate!

Thanks

A big thanks go out to everyone who has helped me get the game running! There's too many names to remember (yeah, a cop out!), but a few off the top of my head:

Stay tuned for Quake2DS.

Or just tune in here :-)