Import games/gnukem, an open source retro-style 2D scrolling platform

shooter game.
Big-endian fixes from Raphael Graf.
macppc testing and ok cwen@

Dave Gnukem is an open source retro-style 2D scrolling platform shooter,
inspired by and similar to Duke Nukem 1 (a famous original 1991 game
that launched the Duke Nukem series). It features an integrated level
editor. (Please note this is not a 'clone' or a 're-make'; it is
probably most akin to a parody.)
This commit is contained in:
bcallah 2019-05-04 02:00:17 +00:00
parent cc35291cec
commit 900b7ca2e3
11 changed files with 319 additions and 0 deletions

38
games/gnukem/Makefile Normal file
View File

@ -0,0 +1,38 @@
# $OpenBSD: Makefile,v 1.1.1.1 2019/05/04 02:00:17 bcallah Exp $
COMMENT = open source retro-style 2D scrolling platform shooter game
DISTNAME = gnukem-1.0
CATEGORIES = games x11
HOMEPAGE = https://djoffe.com/gnukem/
MAINTAINER = Brian Callahan <bcallah@openbsd.org>
# Dual licensed: MIT or GPLv2 only
PERMIT_PACKAGE_CDROM = Yes
WANTLIB += ${COMPILER_LIBCXX} SDL SDL_mixer c m
# Upstream data fetching is ugh...
MASTER_SITES = https://mirrors.nycbug.org/pub/distfiles/
LIB_DEPENDS = devel/sdl-mixer
USE_GMAKE = Yes
ALL_TARGET = default
MAKE_FLAGS = CC="${CC}" CPP="${CXX}" \
CXXFLAGS="${CXXFLAGS}"
NO_TEST = Yes
# No install routine
do-install:
${INSTALL_DATA_DIR} ${PREFIX}/share/gnukem/data
cd ${WRKSRC}/data && find * -type d -exec ${INSTALL_DATA_DIR} \
"${PREFIX}/share/gnukem/data/{}" \;
cd ${WRKSRC}/data && find * -type f -exec ${INSTALL_DATA} \
"{}" "${PREFIX}/share/gnukem/data/{}" \;
echo "#!/bin/sh\ncd ${TRUEPREFIX}/share/gnukem && ./davegnukem \"\$$@\"" >> ${WRKSRC}/gnukem.sh
${INSTALL_PROGRAM} ${WRKSRC}/davegnukem ${PREFIX}/share/gnukem
${INSTALL_SCRIPT} ${WRKSRC}/gnukem.sh ${PREFIX}/bin/davegnukem
.include <bsd.port.mk>

2
games/gnukem/distinfo Normal file
View File

@ -0,0 +1,2 @@
SHA256 (gnukem-1.0.tar.gz) = KOX8oFvgtUKGmrP9x8J2dNr9VvfPFmzFp+2dFDxMDKs=
SIZE (gnukem-1.0.tar.gz) = 20553539

View File

@ -0,0 +1,32 @@
$OpenBSD: patch-Makefile,v 1.1.1.1 2019/05/04 02:00:17 bcallah Exp $
Fix up Makefile.
Index: Makefile
--- Makefile.orig
+++ Makefile
@@ -8,8 +8,8 @@
# 2017-07-29: Remove obsolete standalone-editor-related stuff, and add new thing_monsters.o
#
-CPP = g++
-CC = gcc
+CPP ?= g++
+CC ?= gcc
# dj2016-10 Add L -I/usr/local/include/SDL in process of getting this working on Mac OS X - not sure if this is 'bad' to just have both /usr/include and /usr/local/include??
@@ -21,11 +21,11 @@ INCLUDEDIRS= -I/usr/include/SDL -I/usr/local/include/S
# If you don't -DDATA_DIR to a valid dir, then data files will be assumed
# to be in current directory
#CCFLAGS = -Wall -I/usr/local/include -DHAVE_SOUND -DDEBUG -O -m486
-CCFLAGS = -Wall -Wno-switch -DDEBUG $(INCLUDEDIRS)
+CCFLAGS = ${CXXFLAGS} -Wall -Wno-switch -I${LOCALBASE}/include/SDL
#Release version:
#CCFLAGS = -O -Wall -I/usr/local/include -DHAVE_SOUND $(INCLUDEDIRS)
-LIBS = -lSDL -lSDLmain -lSDL_mixer -lpthread
+LIBS = -L${LOCALBASE}/lib -lSDL -lSDLmain -lSDL_mixer -lpthread
BIN = davegnukem

View File

@ -0,0 +1,16 @@
$OpenBSD: patch-src_datadir_h,v 1.1.1.1 2019/05/04 02:00:17 bcallah Exp $
Only define DATA_DIR if you haven't already.
Index: src/datadir.h
--- src/datadir.h.orig
+++ src/datadir.h
@@ -10,6 +10,8 @@ Copyright (C) 1999-2018 David Joffe
#define _DATADIR_H_
//! Data directory [dj2017-08 should this move to config.h?]
+#ifndef DATA_DIR
#define DATA_DIR "data/"
+#endif
#endif

View File

@ -0,0 +1,57 @@
$OpenBSD: patch-src_djimage_cpp,v 1.1.1.1 2019/05/04 02:00:17 bcallah Exp $
Fix big endian issue
Index: src/djimage.cpp
--- src/djimage.cpp.orig
+++ src/djimage.cpp
@@ -264,8 +264,13 @@ int djImage::LoadTGA( const char * szFilename )
for ( unsigned int j=0; j<nWidth; j++ )
{
// reverse endianness from file
+ #if SDL_BYTEORDER==SDL_BIG_ENDIAN
+ m_pData[iOffset+j*2+1] = pBuf[j*2+1];
+ m_pData[iOffset+j*2+0] = pBuf[j*2+0];
+ #else
m_pData[iOffset+j*2+0] = pBuf[j*2+1];
m_pData[iOffset+j*2+1] = pBuf[j*2+0];
+ #endif
}
}
djDELV(pBuf);
@@ -285,10 +290,17 @@ int djImage::LoadTGA( const char * szFilename )
for ( unsigned int j=0; j<nWidth; j++ )
{
// A,B,G,R
+ #if SDL_BYTEORDER==SDL_BIG_ENDIAN
+ m_pData[iOffset + j*4+3] = pBuf[j*3+0];
+ m_pData[iOffset + j*4+2] = pBuf[j*3+1];
+ m_pData[iOffset + j*4+1] = pBuf[j*3+2];
+ m_pData[iOffset + j*4+0] = 0xFF;
+ #else
m_pData[iOffset + j*4+0] = pBuf[j*3+0];
m_pData[iOffset + j*4+1] = pBuf[j*3+1];
m_pData[iOffset + j*4+2] = pBuf[j*3+2];
m_pData[iOffset + j*4+3] = 0xFF;
+ #endif
}
}
djDELV(pBuf);
@@ -314,10 +326,17 @@ int djImage::LoadTGA( const char * szFilename )
// FIXME: Interesting "problem" .. it seems the VNC server
// inverts the ordering of some of this stuff! So while doing
// the remote thing I had everything confused!
+ #if SDL_BYTEORDER==SDL_BIG_ENDIAN
+ m_pData[iOffset + j*4+3] = pBuf[j*4+0];
+ m_pData[iOffset + j*4+2] = pBuf[j*4+1];
+ m_pData[iOffset + j*4+1] = pBuf[j*4+2];
+ m_pData[iOffset + j*4+0] = pBuf[j*4+3];
+ #else
m_pData[iOffset + j*4+0] = pBuf[j*4+0];
m_pData[iOffset + j*4+1] = pBuf[j*4+1];
m_pData[iOffset + j*4+2] = pBuf[j*4+2];
m_pData[iOffset + j*4+3] = pBuf[j*4+3];
+ #endif
}
// memcpy(m_pData+(bFlipY?(nHeight-i-1):i)*Pitch(), pBuf, nWidth*4);
}

View File

@ -0,0 +1,16 @@
$OpenBSD: patch-src_game_cpp,v 1.1.1.1 2019/05/04 02:00:17 bcallah Exp $
This needs to be unsigned since we're dealing with numbers >127.
Index: src/game.cpp
--- src/game.cpp.orig
+++ src/game.cpp
@@ -2014,7 +2014,7 @@ bool HeroIsHurting()
void DrawHealth()
{
// Build a string representing health bars (which are in the 8x8 font)
- char szHealth[MAX_HEALTH+1]={0};
+ unsigned char szHealth[MAX_HEALTH+1]={0};
for ( unsigned int i=0; i<MAX_HEALTH; ++i )
{
// 170 = health; 169 = not health

View File

@ -0,0 +1,23 @@
OpenBSD$
Revert commit/a94bae1f70b9110431f8a21f0118141c25a343d8
Index: src/sdl/djgraph.cpp
--- src/sdl/djgraph.cpp.orig
+++ src/sdl/djgraph.cpp
@@ -600,15 +600,10 @@ bool djCreateImageHWSurface( djImage* pImage/*, djVisu
pImage->Height(),
32,
pImage->Pitch(),
- // R,G,B,A masks (dj2018-03 specify different masks here on PPC etc. - see https://github.com/davidjoffe/dave_gnukem/issues/100 - thanks to @BeWorld2018 for report and patch suggestion)
- #if SDL_BYTEORDER==SDL_BIG_ENDIAN
- 0x0000FF00, 0X00FF0000, 0xFF000000, 0x000000FF
- #else
0xFF0000,
0xFF00,
0xFF,
0xFF000000
- #endif
);
g_SurfaceMap[ pImage ] = pSurfaceFoo;

View File

@ -0,0 +1,14 @@
$OpenBSD: patch-src_sdl_djsound_cpp,v 1.1.1.1 2019/05/04 02:00:17 bcallah Exp $
Index: src/sdl/djsound.cpp
--- src/sdl/djsound.cpp.orig
+++ src/sdl/djsound.cpp
@@ -13,7 +13,7 @@ Copyright (C) 1999-2018 David Joffe and Kent Mein
#include <SDL_mixer.h>
#endif
-#ifdef __APPLE__
+#ifdef __OpenBSD__
#include <stdlib.h>//Fixing malloc.h 'not found' error compiling on Mac [dj2016-10]
#else
#include <malloc.h>

View File

@ -0,0 +1,14 @@
$OpenBSD: patch-src_sys_defs_h,v 1.1.1.1 2019/05/04 02:00:17 bcallah Exp $
Index: src/sys_defs.h
--- src/sys_defs.h.orig
+++ src/sys_defs.h
@@ -21,7 +21,7 @@ extern "C"
#include <stdarg.h>
#include <stddef.h>
#include <string.h>
-#ifdef __APPLE__
+#ifdef __OpenBSD__
#include <stdlib.h>//Fixing malloc.h 'not found' error compiling on Mac [dj2016-10]
#else
#include <malloc.h>

5
games/gnukem/pkg/DESCR Normal file
View File

@ -0,0 +1,5 @@
Dave Gnukem is an open source retro-style 2D scrolling platform shooter,
inspired by and similar to Duke Nukem 1 (a famous original 1991 game
that launched the Duke Nukem series). It features an integrated level
editor. (Please note this is not a 'clone' or a 're-make'; it is
probably most akin to a parody.)

102
games/gnukem/pkg/PLIST Normal file
View File

@ -0,0 +1,102 @@
@comment $OpenBSD: PLIST,v 1.1.1.1 2019/05/04 02:00:17 bcallah Exp $
bin/davegnukem
share/gnukem/
share/gnukem/data/
share/gnukem/data/credits.tga
share/gnukem/data/default.gam
share/gnukem/data/editor/
share/gnukem/data/editor/macros.txt
share/gnukem/data/emh/
share/gnukem/data/emh/nextm1.lev
share/gnukem/data/emh/nextm2.lev
share/gnukem/data/font.tga
share/gnukem/data/fonts/
share/gnukem/data/fonts/simple_6x8.tga
share/gnukem/data/fonts/simple_6x8_shadow.tga
share/gnukem/data/gameskin.tga
share/gnukem/data/hiscores.tga
share/gnukem/data/icon/
share/gnukem/data/icon.bmp
share/gnukem/data/icon/application_icon.ico
share/gnukem/data/levels/
share/gnukem/data/levels/bg1.tga
share/gnukem/data/levels/bg2.tga
share/gnukem/data/levels/citybackdrop.tga
share/gnukem/data/levels/d_lev1.lev
share/gnukem/data/levels/dj0.lev
share/gnukem/data/levels/example.lev
share/gnukem/data/levels/foo.lev
share/gnukem/data/levels/kevin.lev
share/gnukem/data/levels/level1.lev
share/gnukem/data/levels/level2.lev
share/gnukem/data/levels/level3.lev
share/gnukem/data/levels/sjm001.lev
share/gnukem/data/levels/sjm2.lev
share/gnukem/data/levels/template.lev
share/gnukem/data/main.tga
share/gnukem/data/menucharbackground.tga
share/gnukem/data/missions.txt
share/gnukem/data/music/
share/gnukem/data/music/eric_matyas/
share/gnukem/data/music/eric_matyas/8-Bit-Mayhem.ogg
share/gnukem/data/music/eric_matyas/Dystopic-Mayhem.ogg
share/gnukem/data/music/eric_matyas/Escape_Looping.ogg
share/gnukem/data/music/eric_matyas/Funky-Gameplay_Looping.ogg
share/gnukem/data/music/eric_matyas/Insane-Gameplay_Looping.ogg
share/gnukem/data/music/eric_matyas/Mad-Scientist_Looping.ogg
share/gnukem/data/music/eric_matyas/Monkey-Drama.ogg
share/gnukem/data/music/eric_matyas/Monster-Street-Fighters.ogg
share/gnukem/data/music/eric_matyas/Monsters-in-Bell-Bottoms_Looping.ogg
share/gnukem/data/music/eric_matyas/Retro-Frantic_V001_Looping.ogg
share/gnukem/data/music/eric_matyas/Techno-Caper.ogg
share/gnukem/data/music/eric_matyas/Techno-Gameplay_Looping.ogg
share/gnukem/data/music/eric_matyas/The-Darkness-Below_Looping.ogg
share/gnukem/data/sample.gam
share/gnukem/data/shadows.tga
share/gnukem/data/simplefont.tga
share/gnukem/data/sounds/
share/gnukem/data/sounds/cardflip.wav
share/gnukem/data/sounds/exit.ogg
share/gnukem/data/sounds/explode.wav
share/gnukem/data/sounds/jump.wav
share/gnukem/data/sounds/jump_landing.wav
share/gnukem/data/sounds/key_pickup.wav
share/gnukem/data/sounds/laser.wav
share/gnukem/data/sounds/laser2.wav
share/gnukem/data/sounds/lightmag.wav
share/gnukem/data/sounds/pickup.wav
share/gnukem/data/sounds/sfx_weapon_singleshot7.wav
share/gnukem/data/sounds/shoot_cg1_modified.wav
share/gnukem/data/sounds/soft_explode.wav
share/gnukem/data/sounds/wooeep.wav
share/gnukem/data/sprites/
share/gnukem/data/sprites/def0spr.dat
share/gnukem/data/sprites/def1spr.dat
share/gnukem/data/sprites/def2spr.dat
share/gnukem/data/sprites/def3spr.dat
share/gnukem/data/sprites/def4spr.dat
share/gnukem/data/sprites/def5spr.dat
share/gnukem/data/sprites/def6spr.dat
share/gnukem/data/sprites/def7spr.dat
share/gnukem/data/sprites/sprites00.tga
share/gnukem/data/sprites/sprites01.tga
share/gnukem/data/sprites/sprites02.tga
share/gnukem/data/sprites/sprites03.tga
share/gnukem/data/sprites/sprites04.tga
share/gnukem/data/sprites/sprites05.tga
share/gnukem/data/sprites/sprites06.tga
share/gnukem/data/sprites/sprites07.tga
share/gnukem/data/sprites/sprites16.tga
share/gnukem/data/sprites/sprites16_metadata.dat
share/gnukem/data/tog/
share/gnukem/data/tog/tog-bg-black.tga
share/gnukem/data/tog/tog-lev_0.lev
share/gnukem/data/tog/tog-lev_1.lev
share/gnukem/data/tog/tog-lev_2.lev
share/gnukem/data/tog/tog-lev_3.lev
share/gnukem/data/tog/tog-spr_16.bmp
share/gnukem/data/tog/tog-spr_16.dat
share/gnukem/data/tog/tog-spr_16.tga
share/gnukem/data/tog/tog.gam
share/gnukem/data/tog/zz-empty.lev
@bin share/gnukem/davegnukem