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
|
|
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...
- 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.
- In the root of your flash card, make a directory named id1
- If you're using the shareware version, copy pak0.pak from that
archive into the id1 directory that you just created
- If you're using a commerical version, copy pak0.pak AND
pak1.pak into that directory
- 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.
- Visit Chishm's DLDI page (above) and download the DLDI driver
file which corresponds to your NDS booting method.
- Download the QuakeDS binary package above, and extract the NDS
file into the root of your flash card
- 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
- 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
- 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:
- touching the screen changes the camera view - sensitivity and
mouse invert can be chosen from the config menu too
- using the D-pad emulates the WSAD control method, so use up and
down to move forward and backward, left and right to strafe left and
right
- START is bound to escape, so this will bring up/hide the menu
- SELECT is bound to enter, so can be used to select entries in the
menu...and also jump
- X/Y are weapon cycle up/down
- L is fire
- R is jump
The config menu also contains DS specific options:
- switch screens - for if you'd like to have the 3D view on the
bottom screen
- antialias - turns line antialiasing on and off - not too
noticable...
- wireframe overlay - for if you'd like to see brush models drawn
with a wireframe overlay
- fog - this turns fogging on and off; there is a light fog when
above ground, a thick fog when below water
There are more options available in the config file:
- ds_screen_clears (0/1) - if you're trying to get some mod/total
conversion to work and you'd like to see the warning/error messages,
but they're cleared too quickly, set this cvar to zero
- ds_fog_red/green/blue (0..255) - this will change the fogging
colour
- ds_alias_imposter (0/1) - if zero, then the model will only be
rendered once its texture has been loaded (models may disappear for a
second when gibbed); if one, a white texture will be shown on the model
whilst the correct texture is loading
- ds_brush_imposter (0/1) - if zero, brush models (eg the world,
health packs) will only be drawn once the texture has loaded, else it
will be drawn a shade of grey
- ds_draw_imposter (0/1) - if zero, gui elements (eg ammo counts,
the menus) will only be drawn once the texture has loaded, else it will
be drawn white
- ds_turb_transparency (0..31) - this is used to make 'turb' brush
models
transparent - you should only use this with VIS'ed maps, or with the
r_novis hack (not recommended). Disable the effect by setting this to
31.
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:
- You can use the r_novis variable: set it to one, rather than the
default zero. This will disable all visibility checking in the
renderer, and everything will
be rendered - this will probably cripple the perofmrnace of your DS and
you'll most likely get graphical errors as it greatly exceeds the DS'
per-frame polygon limit. This is the easiest way, but is not
recommended.
- The second way is to reVIS or get VIS'ed maps (or their patches).
You can either do this yourself or get patches to adjust your pak
files. I haven't tested this yet, but it ought to 'just work'! This is
definately the recommended way 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