May 17, 2021
Back to the projects page.
Duke3d_w32 is a port of Duke3d to the Win32 platform.

Since 3DRealms released the source code to Duke3d on April 1st I haven't been able to think of much else. It's one of my all time favorite games, and certainly my favorite first person shooter to date. That's why I've decided to work on a Win32 port of the source. The good folks at ported the build engine to Win32 and Linux using the SDL cross-platform library. That makes my job a ton easier. My goals are to keep the game true to the original, and get it working well with Windows.

The official irc channel for this port is: #DukeNukem
or check out the forums: forums
11/15/2008 -8:48am PST

3drealms lower the price of Duke Nukem 3D Atomic Edition to $10.

7/23/2006 -10:22pm PST

Build 20.3 is up.
* Fixed crash with saving games. * Added support for crashdumps. When the game crashes a .dmp file gets created. Email that to me. Post on the forums that you've got a crash dump, and I'll contact you via email for more info.
Build 20.3: Patch

3/14/2006 -2:40pm PST

Build 20.2 is up.
* Performance Improvements...
Build 20.2: Patch

1/24/2006 -11:23am PST

Build 20.1 is up.
* Fixed an issue with -game_dir over running array boundries and causing a crash.
* Fixed Font cut off issue.
* Implemented a.c ASM to C conversions from JFDuke. Ken's code was much cleaner and easier to work with, so better for the project as a whole.

Build 20.1: Patch

1/20/2006 -7:00pm PST

Build 20.0 is up.
I realize it's been a while since the last release. :) I hope to not make that a habit. I'm going to leave the 19.1 and 19.2 links up until I get some feeback on this build. Let me know if I broke anything with this build.
* Mouse jerkiness in windowed mode fixed.
* Game speed now closer to DOS version.
* Added some demo backward compatability code.
* Thanks to Matthieu Klein for the above changes.
* Smooth mouse option removed. Mouse now uses sensitivity from options menu.
console variable "MouseYScale" added to allow for some tweaking to the pitch.
(this is until Y sensitivity is added to the options menu)

Build 20: Binary version
Buld 20: Binary + Source (developer version)

4/03/2005 -11:44am PST

Build 19.2 is up.
I updated the project files to Visual Studio .NET 2003. Along with that I made a few performance enhancments. No actual code has changed since the last version. I switched over from using the ASM code to the converted C code from the Icculus CVS. This works much better with the compiler optimizations. Previously with the .NET compiler, I was forced to disable optimizations, or I would get nasty linkage issues. Now I've cranked up the optimizations to full, and it seems to be quite happy. It's not a great deal faster, but it is faster. Anywho, let me know if it causes any problems. So, if you're interested, grab it here:

4/24/2004 -3:07am PST

Build 19.1 is up.
I fixed a number of small issues.
* Modified optimization compiler flags in VC6 project files.
* Fixed issues with -game_dir option.
* Fixed non-moving flying pig cops.

4/4/2004 -1:40am PST

Addfaz reported that the -game_dir option was broken in build 19. He was correct.
It looks like I broke it. It causes duke3d_w32 to crash when you use that option.
I did some looking into it tonight and it appears that removing the /Oy optimization
in VC6 fixes it. I'm going to look into it more to see why that optimization is causing
a crash. At some point, I should have a patched build up. If this is a big issue for
you, shoot me an email, and I'll try to make that a priority.

4/1/2004 -3:09pm PST

Mark Mcwane has released OGG versions of his Duke3d music tracks.
I recommend that if you download Build 19, go grab Mark's new OGG tracks.

Nice work Mark!

4/1/2004 -12:50am PST

Build 19 Released. This is an official build.

* Added .ogg/.s3m/.mod/.it/.xm/.wav/.mp3 Music playback support
  (mp3 playback is pretty crappy. I blame the smpeg lib)
* Improved performance. (breaks old .dmo files.. enjoy the new ones) 
* Added new 2 player stable networking. (-netmode_stable) 
  (this is additional to the old 8 player net code)
* Included initial version of Setup_w32. (does very little currently)
* "Fixed" blimp crash in multiplayer.
* Fixed a console crash when pressing the down arrow.
* Made a few changes to SDL lib so that the renderer does not need 
  to be set via environment variables.
It's been way too long since the last build. Thanks for your patience.
A few notes.. the performance gains have broken old demo files. So, to
"fix" that, I made 3 new ones to replace the old. Hopefully you'll find them
amusing. There are a few things that I wanted to get in that didn't make it.
One being the in-game usermap browser, and save/load networked game crashes.
I'm sure I'll get them in at some point.

In order to test out the new OGG support I recommend that you download grabbag.ogg
and place it in your "bin" directory. You'll notice a big difference.

I've included the first version of the Setup_w32, my setup.exe replacement app.
Currently, it really doesn't do very much. The source is included, so I'm hoping
some one gets excited and gets to work on it.

Remember.. read the docs.. The networking section of the .chm file was updated to include
information on the new 2 player -netmode_stable option.

At any rate, enjoy and let me know if you have any issues with it.

SDLChanges <- if you're interested.

1/10/2004 -1:06pm PST

Build 18.4 Released. This is a development build.

* Added support for DukesterX's Stun server feature. This is designed to help
  those behind firewalls. You'll need the latest version of DukesterX to take
  advantage of this feature.
Grab it here:

12/2/2003 -10:49pm PST

Build 18.3 Released. This is a development build.

* Added screenshot functionality back in. This had been on the TODO list for a while.
  It now saves out a 24-bit BMP in the game directory. (F12 to take a screenshot)
Grab it here:

11/23/2003 -11:22pm PST

Build 18.2 Released. This is a dev build, meaning I didn't test it as much as I usually do.

* Opening the console now pauses the game for singleplayer games.
* Added -game_dir commandline param for mods/total conversions.
  This attempts to load all resources from the specified game directory.
  It will fallback to the main root dir if missing resources.
  It has been tested with the "Alienz TC" and "Duke LA" Total conversions.
  Saved games are saved to the game_dir.
Example use of each:
  Alienz TC
  duke3d_w32.exe -game_dir mods\alienztc

  Duke L.A.
  duke3d_w32.exe -game_dir mods\dukela /xLAGame.DM /gdla.prg

  To download these or other TCs, check out:

  You simply need to make a directory to stick the TCs files in. I recommend \duke3d_w32\mods\

*NOTE: this release is not intended as an official release. It's simply for the
       amusment of those who wish to be amused. It has not undergone the standard
       brute force testing. So, feel free to check it out, but it may not act as
       expected. If you notice any odd behavior, let me know. If you run into problems
       with this version, you can simply revert to Build 18.1.
Grab it here:

11/20/2003 -11:22pm PST

Build 18.1 Released.
* Joystick buttons and hats are now responsive
* SmoothMouse is fixed for ControllerType 7
That's it...

11/16/2003 -10:31pm PST

Build 18 Released.
* issues with input and routers(NAT)
* integrates all of the previous patches.
* The are several other misc fixes/changes.

Check out the forums for more info. forums
Lemme know if there are any problems with the new version.

9/14/2003 -2:41am PST

Build 17.9.3(patch-only) is up.
* Fixed annoying reverb bug. (This would cause an infinite sound hiccup/studder)
* Added "DebugSound" console variable
Note: You can increase your game sound experience by increasing "NumVoices" in the duke3d.cfg to 16 or 32.
Grab the patch here:

As usual, if you run into any issues lemme know.

9/10/2003 -10:30pm PST

Build 17.9.2(patch-only) is up.
This is a fairly big release as far as stability goes. The sloping walls crash,and the cubic interpolation sound crash have been fixed.
Grab the patch here:

Check out the forums for more info. forums

9/07/2003 -10:00pm PST

Alrighty, I think I've found an alternative method to accomplish what I want. Rather than modify SDL, I can simply force a certain renderer based on what you plan to do, play windowed or fullscreen.The following two batch files will optimize your experience for the desired mode. Place them in your"bin" directory with the duke3d_w32.exe.
RUN-windowed.bat - Uses windows GDI for rendering
RUN-fullscreen.bat - Continues to use Directx

You can still <alt><enter> to switch between fullscreen and windowed mode, but you willrender slower if you do so. So, the lesson is... ignore the SDL.dll stuff. I can't count the number oftimes that fixing an ugly bug boils down to a one line fix. This is no exception.

I should have titled the previous messages with "windowed mode" rendering fixed. :)

News Archive...

All questions/comments can be directed to duke3d_w32 AT
-David Koenig
Just grab the and patch 17.9.3. It has a compiled binary. Follow the readme.txtinstructions for playing.

You need to grab all 3 files from the side bar. They must be unzip to the same directory level.
For Example:
proj/    duke3d_w32/    SDL-1.2.5/    SDL_mixer-1.2.5/ contains all duke3d and build engine source code with VC 6.0 & 7.0 projects. The source is based on the modified source. The archive also contains Win32 binaries.

Nasm is also required to build "a_nasm.asm" You will need to make sure that VC 6.0 or 7.0 can access nasmw.exe

This is all a work in progress and there are bound to be bugs.
Binary only release

Duke3d_w32 Docs(Build 19)

(Developers Only)

Full Bin & Source w/ VC 6.0 & 7.0 projects

SDL 1.2.5 libraries

SDL-Mixer 1.2.5


Duke3d Shareware Episode

3rd Party Tools

DukesterX (Multiplayer Config Tool)
Mark Mcwane's Duke Music
Duke3d Map FAQ