davidjoffe / dave_gnukem

Dave Gnukem is a cross-platform 2D scrolling platform shooter inspired by Duke Nukem 1
GNU General Public License v2.0
75 stars 21 forks source link

Dave Gnukem

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

Dave Gnukem Screenshot

Who is to blame for this?

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)

About Duke Nukem 1

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.

Help Wanted: Packages for major Linux distros, e.g. Debian, Ubuntu etc.

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 LiveStreaming Channels

Development live-stream channel(s):

Notes

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

Gameplay Instructions

Try find the exit, while dodging or shooting monsters.

Default Keys:

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.

Storyline/Plot:

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

Features

* "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.

Ports

~> 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'

Awards and Reviews

FAQ (Frequently Asked Questions)

Roadmap

Here's a roadmap

History / Changes

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]

Developer Info / Build Info

Dependencies: LibSDL2, LibSDL-Mixer 2

Windows Build Instructions

Linux Build Instructions

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.)

SDL1.2 or SDL2?

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.

Mac OS X Build Instructions

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).

Windows Installer Build Instructions

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):

Level Editor Instructions

(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).

TODOs (To Sort - many done now):

Sprite TODOs:

Notes

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.)

License and Additional Credits

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.

Additional Development Credits