diff mbox

add kobodeluxe

Message ID CANR+FbvbJG6csn0Lbs1wnNwtPydPty6i5yvW1g0iKsViTC612g@mail.gmail.com
State New
Headers show

Commit Message

Stephen Webber Oct. 16, 2016, 8:47 p.m. UTC

Comments

Christopher Allan Webber Oct. 16, 2016, 11:22 p.m. UTC | #1
I know Stephen, so I helped him put together this package, which is his
first.  It's a long time favorite free software game.

There were a lot of patches to Kobo Deluxe in Debian; we kept finding
that it wouldn't build without one or another of them, and we read the
summary of all of them and decided they were all probably worth
including.

I think the package looks fine, but probably someone else should look it
over.  If someone can give it an ACK, I'd love to merge it (or you can)!

 - Chris
Kei Yamashita Oct. 17, 2016, 2:06 a.m. UTC | #2
Christopher Allan Webber <cwebber@dustycloud.org> writes:

> I know Stephen, so I helped him put together this package, which is his
> first.  It's a long time favorite free software game.
>
> There were a lot of patches to Kobo Deluxe in Debian; we kept finding
> that it wouldn't build without one or another of them, and we read the
> summary of all of them and decided they were all probably worth
> including.
>
> I think the package looks fine, but probably someone else should look it
> over.  If someone can give it an ACK, I'd love to merge it (or you can)!
>
>  - Chris

I love this game! It's a solid patch except for two things:

I can't make a permanent user profile. This is a somewhat popular
problem for games to have.

When I applied the patch, git complained about trailing whitespace; a
trivial fix.
Stephen Webber Oct. 17, 2016, 2:19 a.m. UTC | #3
As for the permanent user profile, one of the debian patches I applied
changed the functionality for security reason. I'm not certain I have the
expertise to make a correcting decision at this time, especially that is in
line with guix conventions about state.

I'll remember the feedback on patch name convention in the future. Thank
you for your review!


On Sun, Oct 16, 2016 at 9:06 PM, Kei Kebreau <kei@openmailbox.org> wrote:

> Christopher Allan Webber <cwebber@dustycloud.org> writes:
>
> > I know Stephen, so I helped him put together this package, which is his
> > first.  It's a long time favorite free software game.
> >
> > There were a lot of patches to Kobo Deluxe in Debian; we kept finding
> > that it wouldn't build without one or another of them, and we read the
> > summary of all of them and decided they were all probably worth
> > including.
> >
> > I think the package looks fine, but probably someone else should look it
> > over.  If someone can give it an ACK, I'd love to merge it (or you can)!
> >
> >  - Chris
>
> I love this game! It's a solid patch except for two things:
>
> I can't make a permanent user profile. This is a somewhat popular
> problem for games to have.
>
> When I applied the patch, git complained about trailing whitespace; a
> trivial fix.
>
diff mbox

Patch

From c8b122d8c7cf7a574bbbac66963ac355c64effc5 Mon Sep 17 00:00:00 2001
From: Stephen Webber <webber.sl@gmail.com>
Date: Sun, 16 Oct 2016 15:04:35 -0500
Subject: [PATCH] gnu: Add kobodeluxe.

* gnu/packages/games.scm (kobodeluxe): New variable.
* gnu/packages/patches/kobodeluxe_paths.patch: New file.
* gnu/packages/patches/kobodeluxe-spelling.patch: New file.
* gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch: New file.
* gnu/packages/patches/kobodeluxe_const_charp_conversion.patch: New file.
* gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch: New file.
* gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch: New file.
* gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
---
 gnu/local.mk                                       |  7 +++
 gnu/packages/games.scm                             | 34 +++++++++++
 .../kobodeluxe-midicon-segmentation-fault.patch    | 24 ++++++++
 gnu/packages/patches/kobodeluxe-spelling.patch     | 25 ++++++++
 .../kobodeluxe_const_charp_conversion.patch        | 17 ++++++
 .../patches/kobodeluxe_enemies-pipe-decl.patch     | 67 ++++++++++++++++++++++
 .../kobodeluxe_graphics_window-signed-char.patch   | 38 ++++++++++++
 .../kobodeluxe_manpage-minus-not-hyphen.patch      | 15 +++++
 gnu/packages/patches/kobodeluxe_paths.patch        | 40 +++++++++++++
 9 files changed, 267 insertions(+)
 create mode 100644 gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
 create mode 100644 gnu/packages/patches/kobodeluxe-spelling.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_const_charp_conversion.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_paths.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 19dd9ae..ccdca77 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -621,6 +621,13 @@  dist_patch_DATA =						\
   %D%/packages/patches/jq-CVE-2015-8863.patch			\
   %D%/packages/patches/khmer-use-libraries.patch                \
   %D%/packages/patches/kmod-module-directory.patch		\
+  %D%/packages/patches/kobodeluxe_paths.patch
+  %D%/packages/patches/kobodeluxe-spelling.patch
+  %D%/packages/patches/kobodeluxe_enemies-pipe-decl.patch
+  %D%/packages/patches/kobodeluxe_const_charp_conversion.patch
+  %D%/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
+  %D%/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
+  %D%/packages/patches/kobodeluxe_graphics_window-signed-char.patch
   %D%/packages/patches/laby-make-install.patch			\
   %D%/packages/patches/ldc-disable-tests.patch			\
   %D%/packages/patches/lftp-dont-save-unknown-host-fingerprint.patch \
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 2bb53e0..3fed38c 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -23,6 +23,7 @@ 
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2994,3 +2995,36 @@  symbols, the game needs graphics to render the non-euclidean world.")
                    license:public-domain ; src/direntx.*
                    license:zlib          ; src/savepng.*
                    license:gpl2+))))     ; remaining files
+
+(define-public kobodeluxe
+  (package
+    (name "kobodeluxe")
+    (version "0.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://olofson.net/kobodl/download/KoboDeluxe-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "0b2wvdpnmaibsy419c16dfwj5kvd3pccby2aaqvm964x74592yqg"))
+              (patches (search-patches
+                        "kobodeluxe_const_charp_conversion.patch"
+                        "kobodeluxe_enemies-pipe-decl.patch"
+                        "kobodeluxe_graphics_window-signed-char.patch"
+                        "kobodeluxe_manpage-minus-not-hyphen.patch"
+                        "kobodeluxe-midicon-segmentation-fault.patch"
+                        "kobodeluxe_paths.patch"
+                        "kobodeluxe-spelling.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags
+       (list (string-append "CPPFLAGS=-I"
+                            (assoc-ref %build-inputs "sdl-union")
+                            "/include/SDL"))))
+    (inputs `(("sdl-union" ,(sdl-union (list sdl sdl-image)))))
+    (synopsis "Shooter with space station destruction")
+    (description
+     "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo for Un*x
+systems with X11.")
+    (home-page "http://olofson.net/kobodl/")
+    (license license:gpl2+)))
diff --git a/gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch b/gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
new file mode 100644
index 0000000..65ce259
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
@@ -0,0 +1,24 @@ 
+From: Emile CARRY <emile.carry@sequanux.org>
+Date: Wed, 6 Apr 2016 00:27:17 +0200
+Subject: midicon segmentation fault
+
+Debian-Bug: https://bugs.debian.org/819897
+Forwarded: no
+---
+ sound/a_midicon.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/a_midicon.c b/sound/a_midicon.c
+index 57de3cf..ded2988 100644
+--- a/sound/a_midicon.c
++++ b/sound/a_midicon.c
+@@ -120,8 +120,8 @@ static inline void __press(unsigned ch, unsigned key)
+ {
+ 	m[ch].next[key] = -1;
+ 	m[ch].prev[key] = m[ch].last;
+-	m[ch].next[m[ch].last] = (char)key;
+ 	m[ch].last = (char)key;
++	m[ch].next[m[ch].last] = (char)key;
+ }
+ 
+ 
diff --git a/gnu/packages/patches/kobodeluxe-spelling.patch b/gnu/packages/patches/kobodeluxe-spelling.patch
new file mode 100644
index 0000000..21259cc
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe-spelling.patch
@@ -0,0 +1,25 @@ 
+Description: two spelling fixes
+Author: Damyan Ivanov <dmn@debian.org>
+
+--- a/graphics/sofont.cpp
++++ b/graphics/sofont.cpp
+@@ -255,7 +255,7 @@ bool SoFont::load(SDL_Surface * FontSurf
+ 
+ 	if(!FontSurface)
+ 	{
+-		log_printf(ELOG, "SoFont recieved a NULL SDL_Surface\n");
++		log_printf(ELOG, "SoFont received a NULL SDL_Surface\n");
+ 		return false;
+ 	}
+ 	if(picture)
+--- a/prefs.cpp
++++ b/prefs.cpp
+@@ -161,7 +161,7 @@ void prefs_t::postload()
+ 
+ 	if((o_wait_msec != 30) && !cmd_cheat)
+ 	{
+-		log_printf(ELOG, "'wait' is only avaliable in cheat mode!\n");
++		log_printf(ELOG, "'wait' is only available in cheat mode!\n");
+ 		o_wait_msec = 30;
+ 	}
+ 
diff --git a/gnu/packages/patches/kobodeluxe_const_charp_conversion.patch b/gnu/packages/patches/kobodeluxe_const_charp_conversion.patch
new file mode 100644
index 0000000..a14ed4b
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_const_charp_conversion.patch
@@ -0,0 +1,17 @@ 
+Description: Avoid compilation error with gcc-4.4.
+ "const char* -> char*" conversion is fatal in that version
+Origin: vendor, https://bugs.launchpad.net/ubuntu/+source/kobodeluxe/+bug/461373
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/kobodeluxe/+bug/461373
+Bug-Debian: http://bugs.debian.org/552548
+Forwarded: http://www.freelists.org/post/olofsonprojects/kobodlpatch-compile-error-in-windowcpp-with-g44
+--- a/graphics/window.cpp
++++ b/graphics/window.cpp
+@@ -398,7 +398,7 @@ void window_t::center_token_fxp(int _x, 
+ 		 */
+ 		if(token)
+ 		{
+-			char *tok = strchr(txt, token);
++			const char *tok = strchr(txt, token);
+ 			if(tok)
+ 				tokpos = tok-txt;
+ 			else
diff --git a/gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch b/gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch
new file mode 100644
index 0000000..9510ed4
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch
@@ -0,0 +1,67 @@ 
+# Authhor: Damyan Ivanov <dmn@debian.org>
+# Description: rename pipe2 symbol to pipe2_kbdl to avoid clashes with the one
+#              declared in system unistd.h
+# Debian-Bug: 527705
+# Upstream-Report: http://www.freelists.org/post/olofsonprojects/kobodeluxe-failing-to-build-in-Debian-enemiesh75-error-const-enemy-kind-pipe2-redeclared-as-different-kind-of-symbol
+--- a/enemies.h
++++ b/enemies.h
+@@ -72,7 +72,7 @@ extern const enemy_kind bombdeto;
+ extern const enemy_kind cannon;
+ extern const enemy_kind pipe1;
+ extern const enemy_kind core;
+-extern const enemy_kind pipe2;
++extern const enemy_kind pipe2_kbdl;
+ extern const enemy_kind rock;
+ extern const enemy_kind ring;
+ extern const enemy_kind enemy_m1;
+@@ -430,7 +430,7 @@ inline int _enemy::realize()
+ 
+ inline int _enemy::is_pipe()
+ {
+-	return ((_state != notuse) && ((ek == &pipe1) || (ek == &pipe2)));
++	return ((_state != notuse) && ((ek == &pipe1) || (ek == &pipe2_kbdl)));
+ }
+ 
+ 
+--- a/enemy.cpp
++++ b/enemy.cpp
+@@ -755,10 +755,10 @@ void _enemy::move_core()
+ 
+ void _enemy::kill_core()
+ {
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
++	enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
++	enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
++	enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
++	enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
+ 	enemies.make(&explosion4, CS2PIXEL(x), CS2PIXEL(y));
+ 	sound.g_base_core_explo(x, y);
+ 	release();
+@@ -978,19 +978,19 @@ void _enemy::move_pipe2()
+ 	}
+ 	p ^= a;
+ 	if(p & U_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
++		enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
+ 	if(p & R_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
++		enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
+ 	if(p & D_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
++		enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
+ 	if(p & L_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
++		enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
+ 	manage.add_score(10);
+ 	release();
+ }
+ 
+ 
+-const enemy_kind pipe2 = {
++const enemy_kind pipe2_kbdl = {
+ 	0,
+ 	&_enemy::make_pipe2,
+ 	&_enemy::move_pipe2,
diff --git a/gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch b/gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch
new file mode 100644
index 0000000..b258b62
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch
@@ -0,0 +1,38 @@ 
+# This was created in responce to Debian bug #163979
+# Thing is, if you want to compant "-1" with a char value,
+# you better make that char signed
+--- kobodeluxe-0.5.1.orig/graphics/window.cpp
++++ kobodeluxe-0.5.1/graphics/window.cpp
+@@ -331,7 +331,7 @@
+ }
+ 
+ 
+-void window_t::center_token(int _x, int _y, const char *txt, char token)
++void window_t::center_token(int _x, int _y, const char *txt, signed char token)
+ {
+ 	center_token_fxp(PIXEL2CS(_x), PIXEL2CS(_y), txt, token);
+ }
+@@ -374,7 +374,7 @@
+ }
+ 
+ 
+-void window_t::center_token_fxp(int _x, int _y, const char *txt, char token)
++void window_t::center_token_fxp(int _x, int _y, const char *txt, signed char token)
+ {
+ 	_x = CS2PIXEL((_x * xs + 128) >> 8);
+ 	_y = CS2PIXEL((_y * ys + 128) >> 8);
+--- kobodeluxe-0.5.1.orig/graphics/window.h
++++ kobodeluxe-0.5.1/graphics/window.h
+@@ -265,10 +265,10 @@
+ 	void font(int fnt);
+ 	void string(int _x, int _y, const char *txt);
+ 	void center(int _y, const char *txt);
+-	void center_token(int _x, int _y, const char *txt, char token = 0);
++	void center_token(int _x, int _y, const char *txt, signed char token = 0);
+ 	void string_fxp(int _x, int _y, const char *txt);
+ 	void center_fxp(int _y, const char *txt);
+-	void center_token_fxp(int _x, int _y, const char *txt, char token = 0);
++	void center_token_fxp(int _x, int _y, const char *txt, signed char token = 0);
+ 	int textwidth(const char *txt, int min = 0, int max = 255);
+ 	int textwidth_fxp(const char *txt, int min = 0, int max = 255);
+ 	int fontheight();
diff --git a/gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch b/gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
new file mode 100644
index 0000000..34cab90
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
@@ -0,0 +1,15 @@ 
+# Author: Damyan Ivanov <dmn@debian.org>
+# Description: convert a hyphen in kobodl manpage to a minus, which is what is
+#              inttented here
+# Upstream-Report: http://www.freelists.org/post/olofsonprojects/patch-manpage-uses-hyphen-instead-of-a-minus-sign
+--- a/kobodl.6
++++ b/kobodl.6
+@@ -176,7 +176,7 @@ Video Mode. Default: 17200.
+ Enable Vertical Sync. Default: On.
+ .TP
+ .B \-videopages
+-Number of Video Pages. Default: -1.
++Number of Video Pages. Default: \-1.
+ .TP
+ .B \-scalemode
+ Scaling Filter Mode. Default: 1.
diff --git a/gnu/packages/patches/kobodeluxe_paths.patch b/gnu/packages/patches/kobodeluxe_paths.patch
new file mode 100644
index 0000000..b54ab52
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_paths.patch
@@ -0,0 +1,40 @@ 
+# Disable reading of configs, graphics, and data from the current directory.
+# So it's safe to run kobodeluxe from anywhere w/o worry about an attacker
+# feeding it bad data.
+--- kobodeluxe-0.5.1.orig/kobo.cpp
++++ kobodeluxe-0.5.1/kobo.cpp
+@@ -141,21 +141,21 @@
+ 	 * Graphics data
+ 	 */
+ 	/* Current dir; from within the build tree */
+-	fmap->addpath("GFX", "./data/gfx");
++	//fmap->addpath("GFX", "./data/gfx");
+ 	/* Real data dir */
+ 	fmap->addpath("GFX", "DATA>>gfx");
+ 	/* Current dir */
+-	fmap->addpath("GFX", "./gfx");
++	//fmap->addpath("GFX", "./gfx");
+ 
+ 	/*
+ 	 * Sound data
+ 	 */
+ 	/* Current dir; from within the build tree */
+-	fmap->addpath("SFX", "./data/sfx");
++	//fmap->addpath("SFX", "./data/sfx");
+ 	/* Real data dir */
+ 	fmap->addpath("SFX", "DATA>>sfx");
+ 	/* Current dir */
+-	fmap->addpath("SFX", "./sfx");
++	//fmap->addpath("SFX", "./sfx");
+ 
+ 	/*
+ 	 * Score files (user and global)
+@@ -173,7 +173,7 @@
+ 	/* System local */
+ 	fmap->addpath("CONFIG", SYSCONF_DIR);
+ 	/* In current dir (last resort) */
+-	fmap->addpath("CONFIG", "./");
++	//fmap->addpath("CONFIG", "./");
+ }
+ 
+ 
-- 
2.1.4