Dave Gnukem is a retro-style 2D scrolling platform shooter similar to, and inspired by, Duke Nukem 1 (~1991). The source code is cross-platform and open source. It runs on Windows, Linux, Mac OS X and more. (The original Duke Nukem 1 had 16-color EGA 320x200 graphics; the aim here is 'similar but different' gameplay and 'look and feel'. It is kind of a parody of the original. Please note it is not a 'clone', and not a 're-make'.)
29 Nov 2022: Version 1.0.3 released: First official stable SDL2-based version, with new 'formally maintained' Debian package files (both SDL2 support and Debian packages done by Matteo Bini), as well as Ubuntu, Raspbian etc.
News Apr 2018: Version 1.0 released. Apr 2019 OpenBSD port. (Apr 2020: Version 1.0.1 released.) (19 Nov 2022: 1.0.2 and 1.0.3 update to SDL2! Also adding OS/2 port)
Release Downloads: https://sourceforge.net/projects/gnukem/
Direct Download Link: https://sourceforge.net/projects/gnukem/files/latest/download?source=files
Source code repository: https://github.com/davidjoffe/dave_gnukem
Repository for datasrc: https://github.com/davidjoffe/gnukem_datasrc
Repository for 'data' subfolder: https://github.com/davidjoffe/gnukem_data
Project page: https://djoffe.com/gnukem/
Mini Demo Video: https://youtu.be/Hi7WYnOA_fo
Created by: David Joffe https://djoffe.com/ / https://www.liveedu.tv/david_joffe/ / https://minds.com/David_Joffe
The project was originally created and maintained by David Joffe (~1994 to 2004, and Oct 2016 to present). It was maintained by EMH (Evil Mr Henry http://www.emhsoft.com/) from 2004 to 2008. Additional contributions by: T.O.G, Vytautas Shaltenis, Kent Mein, Steve Merrifield, Felix Richter, Kevin Joffe. See also 'Additional Credits' below.
As of 8 Oct 2016, this project is under 'properly' active development again, and on 3 Apr 2018, 'version 1.0' has been released. (Note - this game wasn't 'retro genre' when I started it - it just took so long to complete that it's now 'de facto' "retro"! - David)
Duke Nukem 1 was a famous original 16-color 320x200 'classic' game released by Apogee Software in 1991 that launched the Duke Nukem series: https://goo.gl/yP4PbS The original Duke Nukem 1 was created by Todd Replogle (co-creator of the Duke Nukem series), John Carmack (of id Software), Scott Miller (founder of 3D Realms), Allen H. Blum III, George Broussard, and Jim Norwood.
It would be really great if someone could create packages for all major Linux distros (perhaps dual packages, i.e. one for data, one for binary? as licenses differ a bit .. or just one?)
Dave Gnukem added to the Arch Linux AUR (Arch User Repository) 🙂 (Added May 2020 by https://github.com/caltlgin)
Spotted: openSUSE Leap packages :) (seemingly by Martin Hauke)
Development live-stream channel(s):
Note the aim of Dave Gnukem is not to be a 'clone', nor to try match DN1 gameplay precisely - the goal is to be 'similar but different', sort of a parody though not terribly funny. It's not the purpose or intention of this project to produce a 'clone', nor is it the intention to try load actual original level or sprite data into this 'engine'. The included levels have been created from scratch by users. The included sprites (apart from a few small exceptions mentioned at the bottom of this README) have been drawn by hand from scratch. The game is sort of a hat tip to the original. - David Joffe
Try find the exit, while dodging or shooting monsters.
Left/Right: Move left/right
Ctrl: Jump
Alt: Shoot
Up Arrow: Action key (for e.g. opening doors, using teleporters or lifts, activating the exit, etc.)
Escape: In-game menu
7/6: Increase/decrease volume
Insert: Toggle sounds on/off
Shift+F6/F7: Dec/Inc speed (framerate)
Shift+F8/F9: Toggle map and sprite auto-shadows on/off, respectively
F10 Save screenshot
To open doors, find the correct color key, and press the action key on the 'lock' nearby the door(s).
Power boots allow you to jump higher. The special molecule pickup gives you full health.
The year is $CURRENTYEAR+8. An evil genius, Dr Proetton, has been hired by the CIA to infect the world's computers with a virus called SystemD, crippling them. Only you can stop him. You must find the floppy disk with the Devuan Antivirus on it, and install it on the main computer, which is hidden in Vault7.
Any resemblance to actual persons or entities is purely coincidental
TL;DR Shoot anything that moves
* "Evil SuperTux": Kindly note that no disrespect is intended here toward SuperTux: In this game the SuperTux's have only turned evil due to being infected by the SystemD virus. Save the world by finding the Devuan Antivirus, and they'll be cured.
~> pkgman install libsdl2_devel
~> pkgman install sdl_mixer_devel
Then follow the same instructions as for Linux, e.g. git clone the src, cd into src folder, git clone the gnukem_data into 'data' folder, and 'make'
Q: 'The scrolling is choppy' or 'framerate low'?
A: The code can handle smoother scrolling and faster frame rates by tweaking settings and gameplay code, but is deliberately soft-limited to 18 frames per second (and the scrolling behaviour intended to mimic the original) because the original DN1 behaved close to this, and the point is to offer a nostalgic similar retro 'look and feel' (and thus also frame rate and scrolling behaviour) of the original Duke Nukem 1, which was designed to run on the much slower computers of that era (I used to play DN1 on an 80286 with 16-color EGA graphics in the '90s, and if you've ever had to code for EGA you'd also understand - dj) - so that anyone who also played the original should experience some nostalgic familiarity.
Q: Why is the game resolution 320x200?
A: The original Duke Nukem 1 had 320x200 16-color EGA-mode graphics ("Enhanced Graphics Adapter", an early video standard that supported 16 colors; many games of the time used 320x200). Since this game is intended as a sort of 'retro parody' it deliberately uses the same original resolution (and frame rate) in order to offer some retro nostalgic recognition and familiarity in look and feel and gameplay, especially for those who played the original. (David Joffe note: The first computer I did 'serious' programming on was an 80286 with EGA display adapter in the 1990s, and I spent quite a lot of time playing the original Duke Nukem 1 - I loved the game - and around ~1994 I started working on a very early x86 assembly language DOS/EGA version of what went on to become Dave Gnukem when in ~1995 I started this C++ version. So this wasn't a retro game when I started it - it just took so long to complete it that by the time version 1 was completed, I noticed everyone was calling it a "retro game", so it's now de facto "retro". I felt during development that if one deviates from 320x200 it feels much less like a 'retro parody of Duke Nukem 1'.) The game source code can support higher resolutions - these are controlled by config options - so the 'engine' could be used to make higher-resolution games, and with higher frame rates and smoother scrolling (with some tweaking).
Q: What does the "Don't quit" menu option do?
A: It does just what it says, it doesn't quit the game
Q: Why does it say "Ordering info" in the menu?
A: A small parody and retro recognition item, because the original shareware Duke Nukem 1 had that in the menu - but since this is open source, we add a "not" right after that is also very 1990s
Recent:
2022/11/29 - Version 1.0.3 First official stable SDL2-based version, with new formally maintained Debian package files
2022/11/19 - Version 1.0.3-dev
~2022 - Work on Debian support and Debian packaging - user contributions by Matteo Bini, https://github.com/enigma9o7, https://github.com/bgermann, Craig Langman
Matteo Bini implemented SDL2 support (including also contributions for Debian support) https://github.com/davidjoffe/dave_gnukem/pull/135/commits/0f0022b9921982062eb7a93d2aef9a90459f3d33
2022/11/19 - Version 1.0.2 Final SDL1-based release, about to switch to SDL2
2021 - User work for Bodhi Linux port: https://bodhilinux.boards.net/thread/892/packaged-dave-gnukem-silly-retro
2020/04/25 - Version 1.0.1
2018/04/03 - Version 1.0
2018/03/31 - Version 0.96
2018/03/11 - Version 0.91
2017/08/12 - Version 0.81 [Linux/Mac source release, Windows source and binary]:
2017/08/05 - Version 0.72 [Linux/Mac source release, Windows source and binary]:
2017/06/22 - Version 0.71 [Linux/Mac source, binary Windows only]:
2017/06/22 - Version 0.70 [Linux/Mac source, binary Windows only]
2016/10/29 - Version 0.66 [Linux/Mac source, binary Windows only]
2016/10/22 - Version 0.63 / 0.64 / 0.65
2016/10/16 - Version 0.62
2016/10/10 - Version 0.61
2016/10/09 - Version 0.6 (0.60)
1994 - 2016 - See HISTORY.txt for 1994 - 2016 history
1994/02/22 [david]
Dependencies: LibSDL2, LibSDL-Mixer 2
Either download the source code archive, or get the latest source code with git. Make sure the 'data' subfolder is also present.
The latest source code and data archives can be downloaded here (these should generally be stable and the best option to download):
https://github.com/davidjoffe/dave_gnukem/archive/master.zip https://github.com/davidjoffe/gnukem_data/archive/master.zip (after extracting, rename this folder to just 'data' as that's what the game looks for)
GETTING THE LATEST SOURCE AND DATA FOLDER USING GIT:
To get the latest source with git, you need two repos, the source code, and the data, which must be exactly cloned into 'data' under the main folder:
$ git clone https://github.com/davidjoffe/dave_gnukem.git gnukem
$ cd gnukem
$ git clone https://github.com/davidjoffe/gnukem_data.git data
$ cd ..
BUILDING:
Type 'make' (BSD variants: Try 'make -f Makefile.bsd' rather.)
Run with ./davegnukem if it built correctly (NB, it must find the 'data' folder)
NB: FIRST INSTALL DEPENDENCIES:
How to install dependencies on Debian, Ubuntu etc.:
$ sudo apt-get install libsdl2-dev
$ sudo apt-get install libsdl2-mixer-dev
(NOTE: If you don't have libsdl-mixer1.2 for whatever reason and you just want to get it compiling without sound, you can add -DNOSOUND to the CCFLAGS in the Makefile, and remove -lSDL_mixer from the Makefile LIBS setting.)
On 19 November 2022 we made an official change from LibSDL1.2 (now very old) to LibSDL2 (thanks to Matteo Bini for that).
https://github.com/davidjoffe/dave_gnukem/releases/tag/1.0.2 (final official SDL1-based source code - if an old downstream port needs to be on SDL1 for some reason we suggest using that 1.0.2 release)
So for builds prior to this, the dependencies would be e.g. along the lines "sudo apt-get install libsdl1.2-dev" and "libsdl-mixer1.2-dev".
Henceforth, it should be e.g.: libsdl2-dev, libsdl2-mixer-dev
SDL2 brings various potential advantages.
Same as Linux - type 'make'. Run with ./davegnukem if it built correctly (and data subfolder present)
Installing Dependencies:
If using macports, you should be able to just do:
% sudo port install libsdl2
% sudo port install libsdl2_mixer
Then as with Linux, type 'make' and run with "./davegnukem" if it built correctly (and data subfolder present)
(Alternatively, you could install LibSDL2 and LibSDL-Mixer2 by downloading the source code and doing 'make' and 'make install' (as root) for each of these first).
To build a Windows installer, use Inno Setup 5.
Note: As of Apr 2020 it is still recommended to use the older 'version 5' of Inno Setup (and not versions 6 or higher) as Inno Setup version 6 appears to have dropped support for Windows XP, which we still support (this also indirectly allows ReactOS support)
The basic process of building a Windows installer is as follows (this process is still a little crude/unrefined and may require a bit of hackery if you're trying to do this):
(New 1 Jul 2017) Level Editor how-to video: https://youtu.be/xiznDqg2BHg
Note there is currently no 'undo', so be careful. If happy with a set of work, save your changes.
NB: All in-game cheat/debugging keys (eg level up) must first be turned on by pressing Ctrl+Shift+G
Game Cheats Useful for Testing:
Note that for active animated objects that consist in the spriteset of multiple sprites (e.g. each conveyor belt piece has 4 sprites, for its animation), you must place the first of the four in the map for the object to work correctly.
Keep in mind that once the hero has the powerboots, he'll be able to jump higher. So there is a sort of logical progression if you place powerboots in a level, i.e. they should be placed once per 'mission' (i.e. set of levels), and levels prior to that should assume the default lower jump height, levels after that point might possibly assume the higher jump height.
To add a new 'mission' (i.e. set of levels), edit the missions.txt file and add a new line containing the name of your .gam file, e.g. "mygame/mygame.gam" (without quotes). (You should try keep all files associated with a particular game/mission in its own subfolder.) To add/remove levels for that game/mission, edit the .gam file (see the included .gam files to see the format).
Localization (in progress)
Videos?
Check through code for possible buffer over-runs?
'Texture Manager':
Explosion sound doesn't always play (fixed 2016-10-22 but fix could use more testing, cf. channel -1 story)
DEV
[med] Level Editor is hogging CPU [check sprite editor, does it also?]
Check for all possible hardcoded keys that may be interfering with redefined keys (e.g. Ctrl, H, backspace+G etc.)
Some better graphics
Signed executables in binary release?
[check] Dying seems to reset score to 0 - is that right? Cf. DN1 behavior
Is the -640 flag now basically obsolete? Remove? Or change to do something else useful? E.g. to make window maximum size e.g. same as monitor could be useful for level editing.
The name is a pun on 'Duke Nukem' and 'Gnu' as a sort of 'hat-tip'/reference to the open source license/model.
The game took forever to complete to mimic the Duke Nukem Forever model of taking forever to be released.
The underlying 'engine' supports high frame rates and smooth scrolling etc.; the reason the frame rate is artificially capped to 18fps is that the earliest versions (~1994/1995-ish) were written for 16-bit 8086/80286, which used hardware timer interrupts that ran at around 18Hz. (Though it's possible to uncap the frame-rate, the CThing's are unfortunately currently hardcoded for 18Hz, so they just run silly-fast if one uncaps the frame rate ... if writing a new game or a 'version 2' it should be easy to use a higher frame rate and write new CThing's movement code to be based on time-passed-since-last-frame or some-such. Likewise the blocky viewport scrolling itself should be easy to replace with smooth viewport-scrolling.)
The source code itself (and most of the data/sprites) for Dave Gnukem are dual-licensed under MIT license or GPL.
With respect to particular data items, the following license conditions apply:
Apart from the abovementioned, all other data included with 'version 1' is dual-licensed under MIT license or GPL.
Additional game data credits: Apart from the abovementioned, most the sprites were done by David Joffe (with some major contributions by Evil Mr Henry http://www.emhsoft.com/ including the main character sprites). Steve Merrifield made major level editing contributions. Apologies if anyone left out.
~2022 Matteo Bini entirely developed and contributed updates of the code from SDL1 to SDL2 (~2022 merging in progress) https://github.com/davidjoffe/dave_gnukem/pull/135
~2021/2022/2023- Valuable contributions for Debian, Ubuntu etc. support (work in progress, see https://github.com/davidjoffe/dave_gnukem/pull/131 discussion) - amongst others: Matteo Bini https://github.com/enigma9o7 https://github.com/bgermann Craig Langman