r9436 - in packages/trunk/gravitywars/debian: . patches

Barry deFreese bdefreese at alioth.debian.org
Mon Apr 6 18:16:21 UTC 2009


Author: bdefreese
Date: 2009-04-06 18:16:21 +0000 (Mon, 06 Apr 2009)
New Revision: 9436

Added:
   packages/trunk/gravitywars/debian/patches/020_sdl_joystick.diff
Modified:
   packages/trunk/gravitywars/debian/changelog
   packages/trunk/gravitywars/debian/control
   packages/trunk/gravitywars/debian/copyright
   packages/trunk/gravitywars/debian/patches/series
   packages/trunk/gravitywars/debian/rules
Log:
  * Add myself to uploaders.
  * 020_sdl_joystick.diff - Add joystick support. (Closes: #508933).
    + Thanks to Titon Barua for the patch.
  * Version link to GPL license in copyright.
  * Add appropriate copyright holder to debian/copyright.
  * Remove quilt .pc dir on clean.
  * Bump Standards Version to 3.8.1. (No changes needed).
Refresh changelog.


Modified: packages/trunk/gravitywars/debian/changelog
===================================================================
--- packages/trunk/gravitywars/debian/changelog	2009-04-06 17:23:29 UTC (rev 9435)
+++ packages/trunk/gravitywars/debian/changelog	2009-04-06 18:16:21 UTC (rev 9436)
@@ -1,14 +1,21 @@
-gravitywars (1.102-32) UNRELEASED; urgency=low
+gravitywars (1.102-32) unstable; urgency=low
 
   [ Barry deFreese ]
+  * Add myself to uploaders.
   * Add desktop file (Closes: #452576)
   * debian/rules - Remove -s option from install (Closes: #437080)
   * Don't ignore make clean errors
+  * 020_sdl_joystick.diff - Add joystick support. (Closes: #508933).
+    + Thanks to Titon Barua for the patch.
+  * Version link to GPL license in copyright.
+  * Add appropriate copyright holder to debian/copyright.
+  * Remove quilt .pc dir on clean.
+  * Bump Standards Version to 3.8.1. (No changes needed).
 
   [ Ansgar Burchardt ]
   * debian/control: Change XS-Vcs-* to Vcs-*
 
- -- Ansgar Burchardt <ansgar at 43-1.org>  Fri, 29 Feb 2008 03:08:34 +0100
+ -- Barry deFreese <bdefreese at debian.org>  Mon, 06 Apr 2009 14:01:48 -0400
 
 gravitywars (1.102-31) unstable; urgency=low
 

Modified: packages/trunk/gravitywars/debian/control
===================================================================
--- packages/trunk/gravitywars/debian/control	2009-04-06 17:23:29 UTC (rev 9435)
+++ packages/trunk/gravitywars/debian/control	2009-04-06 18:16:21 UTC (rev 9436)
@@ -2,8 +2,8 @@
 Section: games
 Priority: optional
 Maintainer: Debian Games Team <pkg-games-devel at lists.alioth.debian.org>
-Uploaders: Sam Hocevar (Debian packages) <sam+deb at zoy.org>
-Standards-Version: 3.7.2
+Uploaders: Sam Hocevar (Debian packages) <sam+deb at zoy.org>, Barry deFreese <bdefreese at debian.org>
+Standards-Version: 3.8.1
 Build-Depends: debhelper (>= 5.0), quilt, libsdl1.2-dev (>= 1.2.5-8)
 Vcs-Svn: svn://svn.debian.org/pkg-games/packages/trunk/gravitywars
 Vcs-Browser: http://svn.debian.org/wsvn/pkg-games/packages/trunk/gravitywars/

Modified: packages/trunk/gravitywars/debian/copyright
===================================================================
--- packages/trunk/gravitywars/debian/copyright	2009-04-06 17:23:29 UTC (rev 9435)
+++ packages/trunk/gravitywars/debian/copyright	2009-04-06 18:16:21 UTC (rev 9436)
@@ -7,6 +7,8 @@
 
 Upstream Author: Sami Niemi <sami at niemi.com> 
 
+Copyright: Copyright (C) 1995, 1996 Sami Niemi <sami at niemi.com>
+
 Edward Betts <edward at debian.org> Fri, 11 Aug 2000 01:00:00 +0100
 
 I had an email discussion with the author about licensing. I asked for the
@@ -15,4 +17,4 @@
 to say that the licence had changed, but I said that an email was sufficient.
 
 On Debian GNU/Linux systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL'.
+Public License can be found in `/usr/share/common-licenses/GPL-2'.

Added: packages/trunk/gravitywars/debian/patches/020_sdl_joystick.diff
===================================================================
--- packages/trunk/gravitywars/debian/patches/020_sdl_joystick.diff	                        (rev 0)
+++ packages/trunk/gravitywars/debian/patches/020_sdl_joystick.diff	2009-04-06 18:16:21 UTC (rev 9436)
@@ -0,0 +1,757 @@
+/*
+ * Objective: This patch implements simple joystick support
+ * Program: gravitywars
+ * Author : Titon Barua (titanix)
+ * patch_version: 0.2
+ * email: titanix88 at gmail.com
+ * source_package_to_apply_patch: 1.102-31ubuntu1
+ * Date : 17-12-2008
+ * License: This code is released under GNU GPL v2 or higher
+ */
+
+
+Index: gw3/GravityWars101.c
+===================================================================
+--- gw3.orig/GravityWars101.c	2008-12-16 20:11:30.000000000 +0600
++++ gw3/GravityWars101.c	2008-12-16 20:11:30.000000000 +0600
+@@ -44,10 +44,76 @@
+ #include <unistd.h>
+ #include "includes.h"
+ #include "memory.h"
+- 
++
++#if defined (USE_SDL) && defined (USE_JOYSTICK)
++#include <stdlib.h>
++#include <errno.h>
++extern SDL_Joystick * joy;
++extern int JOY_INDEX;
++extern int JOY_XAXIS;
++extern int JOY_YAXIS;
++extern int JOY_BUTTON_UP;
++extern int JOY_BUTTON_SHOOT;
++extern int JOY_BUTTON_TOGGLE_FULLSCREEN;
++extern int JOY_BUTTON_ESCAPE;
++extern Sint16 JOY_XAXIS_CENTER;
++extern Sint16 JOY_XAXIS_MINIMUM;
++extern Sint16 JOY_XAXIS_MAXIMUM;
++extern Sint16 JOY_XAXIS_NULLZONE;
++extern Sint16 JOY_YAXIS_CENTER;
++extern Sint16 JOY_YAXIS_MINIMUM;
++extern Sint16 JOY_YAXIS_MAXIMUM;
++extern Sint16 JOY_YAXIS_NULLZONE;
++
++int get_int_env_var (char * env_name,int * i)
++{
++	char * env_val = NULL;
++	int tmp = 0;
++
++	if ((env_val = getenv (env_name)) != NULL) {
++#ifdef DEBUG
++		printf ("env_var : %s=%s\n", env_name, env_val);
++#endif
++		errno = 0;
++		tmp = (int) strtol (env_val, NULL, 10);
++		if (!errno) {
++			*i = tmp;
++			return 0;
++		} else {
++			return (1);
++		}
++	}
++	return (2);
++}
++
++int get_Sint16_env_var (char * env_name,Sint16 * i)
++{
++	char * env_val = NULL;
++	Sint16 tmp = 0;
++
++	if ((env_val = getenv (env_name)) != NULL) {
++#ifdef DEBUG
++		printf ("env_var : %s=%s\n", env_name, env_val);
++#endif
++		errno = 0;
++		tmp = (Sint16) strtol (env_val, NULL, 10);
++		if (!errno) {
++			*i = tmp;
++			return (0);
++		} else {
++			return (1);
++		}
++	}
++	return (2);
++}
++#endif
++
+ /*--------------------------------------------------------------------- main */
+ int main(int n_args, char *arg[]) {
+-  
++#if defined (USE_SDL) && defined (USE_JOYSTICK)
++	int c, index, calibrate_joystick = 0;
++	opterr = 0;
++#endif
+ 
+   int n,ch,x,y;
+   
+@@ -67,6 +133,20 @@
+   if (readlink(arg[0],buf,128)==-1) 
+     strcpy(buf,arg[0]);
+ 
++#if defined (USE_SDL) && defined (USE_JOYSTICK)
++	while ((c = getopt (n_args, arg, "j")) != -1) {
++		switch (c) {
++			case 'j':
++				calibrate_joystick = 1;
++				break;
++			case '?':
++				fprintf (stderr, "Unknown option. Use '-j' to configure joystick.\n\n");
++				break;
++			default:
++				break;
++		}
++	}
++#endif
+ /*  
+   n=strlen(buf);
+   while(n>=0)                       
+@@ -85,11 +165,20 @@
+ 	strcpy(gamename,"/usr/share/games/gravitywars/");
+ 	gamenamelen=strlen(gamename);
+ 
++#if defined (USE_SDL) && (USE_JOYSTICK)
++	if (optind < n_args) {
++#else
+   if (n_args>1) {
++#endif
+     n=0;
+     do {
+       n++;
++#if defined (USE_SDL) && (USE_JOYSTICK)
++    } while ( (strncmp(arg[optind],codes[n],6)) && (n<99));
++#else
+     } while ( (strncmp(arg[1],codes[n],6)) && (n<99));
++#endif
++
+     if (n!=99) {
+       levelnum=n+1;
+ #ifndef USE_SDL
+@@ -98,7 +187,11 @@
+ #endif
+     } else {
+ #ifdef USE_SDL
++#ifndef USE_JOYSTICK
+       printf("\nUsage: %s [code-to-a-given-level]\n"
++#else
++      printf("\nUsage: %s [-j] [code-to-a-given-level]\n"
++#endif
+ 	     "(Sure you've got the right code?)\n\n",arg[0]);
+       exit(0);
+ #else
+@@ -130,6 +223,38 @@
+   initScreen();
+ 
+   keyboard_init();
++
++#ifdef USE_SDL
++#ifdef USE_JOYSTICK
++	if (calibrate_joystick == 1)
++		set_joystick ();
++	else
++		if (load_joystick_settings () == 0)
++			printf ("Joystick configuration loaded from file.\n");
++		else
++			printf ("Can not load joystick configuration file. Using defaults.\n");
++/*Parsing environment variables*/
++	get_int_env_var ("GW_JOY_INDEX", &JOY_INDEX);
++	get_int_env_var ("GW_JOY_XAXIS", &JOY_XAXIS);
++	get_int_env_var ("GW_JOY_YAXIS", &JOY_YAXIS);
++	get_int_env_var ("GW_JOY_BUTTON_UP", &JOY_BUTTON_UP);
++	get_int_env_var ("GW_JOY_BUTTON_SHOOT", &JOY_BUTTON_SHOOT);
++	get_int_env_var ("GW_JOY_BUTTON_TOGGLE_FULLSCREEN", &JOY_BUTTON_TOGGLE_FULLSCREEN);
++	get_int_env_var ("GW_JOY_BUTTON_ESCAPE", &JOY_BUTTON_ESCAPE);
++
++	get_Sint16_env_var ("GW_JOY_XAXIS_CENTER", &JOY_XAXIS_CENTER);
++	get_Sint16_env_var ("GW_JOY_XAXIS_MINIMUM", &JOY_XAXIS_MINIMUM);
++	get_Sint16_env_var ("GW_JOY_XAXIS_MAXIMUM", &JOY_XAXIS_MAXIMUM);
++	get_Sint16_env_var ("GW_JOY_XAXIS_NULLZONE", &JOY_XAXIS_NULLZONE);
++	get_Sint16_env_var ("GW_JOY_YAXIS_CENTER", &JOY_YAXIS_CENTER);
++	get_Sint16_env_var ("GW_JOY_YAXIS_MINIMUM", &JOY_YAXIS_MINIMUM);
++	get_Sint16_env_var ("GW_JOY_YAXIS_MAXIMUM", &JOY_YAXIS_MAXIMUM);
++	get_Sint16_env_var ("GW_JOY_YAXIS_NULLZONE", &JOY_YAXIS_NULLZONE);
++
++	joystick_init ();
++#endif
++#endif
++
+   mouse_init("/dev/mouse", MOUSE_MICROSOFT, MOUSE_DEFAULTSAMPLERATE);
+   scans=keyboard_getstate();
+ 
+@@ -284,6 +409,13 @@
+   mouse_close();
+   keyboard_close();
+ 
++#ifdef USE_SDL
++#ifdef USE_JOYSTICK
++	if (joy != NULL)
++		joystick_close ();
++#endif
++#endif
++
+   vga_setmode(TEXT);
+   printf("\n");
+   exit(0);
+Index: gw3/Makefile
+===================================================================
+--- gw3.orig/Makefile	2008-12-16 20:11:30.000000000 +0600
++++ gw3/Makefile	2008-12-16 20:11:30.000000000 +0600
+@@ -3,11 +3,13 @@
+ #
+ 
+ USE_SDL=1
++USE_JOYSTICK=1
++DEBUG=1
+ 
+ BINDIR=/usr/local/bin
+ 
+ ifeq (1,$(USE_SDL))
+-CFLAGS= -g -O2 -Wall -DUSE_SDL `sdl-config --cflags`
++CFLAGS= -g -Wall -DUSE_SDL -DUSE_JOYSTICK `sdl-config --cflags`
+ LIBS= -lm `sdl-config --libs`
+ else
+ CFLAGS= -O2 -Wall
+Index: gw3/vgastubs.c
+===================================================================
+--- gw3.orig/vgastubs.c	2008-12-16 20:11:30.000000000 +0600
++++ gw3/vgastubs.c	2008-12-16 20:20:00.000000000 +0600
+@@ -10,7 +10,9 @@
+ #ifdef USE_SDL
+ #include "vgastubs.h"
+ 
++/*
+ #include <SDL.h>
++*/
+ 
+ /* VGA */
+ 
+@@ -21,8 +23,319 @@
+ SDL_Surface *bg;
+ SDL_Rect score_rect, level_rect, game_rect;
+ 
++#ifdef USE_JOYSTICK
++SDL_Joystick * joy = NULL;
++
++int JOY_INDEX = 0;
++int JOY_XAXIS = 0;
++int JOY_YAXIS = 1;
++int JOY_BUTTON_UP = 0;
++int JOY_BUTTON_SHOOT = 1;
++int JOY_BUTTON_TOGGLE_FULLSCREEN = 2;
++int JOY_BUTTON_ESCAPE = 2;
++
++Sint16 JOY_XAXIS_CENTER = 0;
++Sint16 JOY_XAXIS_MINIMUM = -32767;
++Sint16 JOY_XAXIS_MAXIMUM = 32767;
++Sint16 JOY_XAXIS_NULLZONE = 1024;
++
++Sint16 JOY_YAXIS_CENTER = 0;
++Sint16 JOY_YAXIS_MINIMUM = -32767;
++Sint16 JOY_YAXIS_MAXIMUM = 32767;
++Sint16 JOY_YAXIS_NULLZONE = 1024;
++
++int save_joystick_settings (void) {
++	/*Just a dirty hack to save the joystick settings*/
++	FILE * joyset = NULL;
++	char * home = NULL;
++	char   fpath[1000];
++
++	if ((home = getenv ("HOME")) == NULL)
++		return (2);
++	strcpy (fpath, home);
++	joyset = fopen (strcat (fpath, "/.gravitywars-joystick-settings"), "w");
++
++	if (joyset != NULL) {
++		if (fprintf (
++			joyset,
++			"%d %d %d %d %d %d %d %hd %hd %hd %hd %hd %hd %hd %hd\n",
++			JOY_INDEX,
++			JOY_XAXIS,
++			JOY_YAXIS,
++			JOY_BUTTON_UP,
++			JOY_BUTTON_SHOOT,
++			JOY_BUTTON_TOGGLE_FULLSCREEN,
++			JOY_BUTTON_ESCAPE,
++			JOY_XAXIS_CENTER,
++			JOY_XAXIS_MINIMUM,
++			JOY_XAXIS_MAXIMUM,
++			JOY_XAXIS_NULLZONE,
++			JOY_YAXIS_CENTER,
++			JOY_YAXIS_MINIMUM,
++			JOY_YAXIS_MAXIMUM,
++			JOY_YAXIS_NULLZONE
++			) >= 0) {
++			fclose (joyset);
++			return (0);
++		} else {
++			fclose (joyset);
++			return (1);
++		}
++	} else {
++		return (2);
++	}
++}
++
++int load_joystick_settings (void) {
++	FILE * joyset = NULL;
++	char * lineptr = NULL;
++	size_t n = 0;
++	char * home = NULL;
++	char   fpath[1000];
++
++	if ((home = getenv ("HOME")) == NULL)
++		return (2);
++	strcpy (fpath, home);
++	joyset = fopen (strcat (fpath, "/.gravitywars-joystick-settings"), "r");
++
++	if (joyset != NULL) {
++		if (getline (&lineptr, &n, joyset) == -1)
++			return 1;
++		if (
++			sscanf (
++			lineptr,
++			"%d %d %d %d %d %d %d %hd %hd %hd %hd %hd %hd %hd %hd",
++			&JOY_INDEX,
++			&JOY_XAXIS,
++			&JOY_YAXIS,
++			&JOY_BUTTON_UP,
++			&JOY_BUTTON_SHOOT,
++			&JOY_BUTTON_TOGGLE_FULLSCREEN,
++			&JOY_BUTTON_ESCAPE,
++			&JOY_XAXIS_CENTER,
++			&JOY_XAXIS_MINIMUM,
++			&JOY_XAXIS_MAXIMUM,
++			&JOY_XAXIS_NULLZONE,
++			&JOY_YAXIS_CENTER,
++			&JOY_YAXIS_MINIMUM,
++			&JOY_YAXIS_MAXIMUM,
++			&JOY_YAXIS_NULLZONE
++		) == 15) {
++			fclose (joyset);
++			return 0;
++		} else {
++			fclose (joyset);
++			return 2;
++		}
++	} else {
++	return 3;
++	}
++}
++
++void set_joystick (void)
++{
++	SDL_Joystick ** joyar = NULL;
++	SDL_Event e;
++	int i, axis_set, axis_ref, axis_ref_set, axis_max, axis_min, num_of_joystick;
++
++	SDL_JoystickEventState (SDL_ENABLE);
++	num_of_joystick = SDL_NumJoysticks();
++
++	if (num_of_joystick > 0) {
++		printf ("Found %d joystick.\n", num_of_joystick);
++
++		joyar = (SDL_Joystick **) malloc (sizeof (SDL_Joystick *) * num_of_joystick);
++		if (joyar != NULL) {
++			for (i = 0; i < num_of_joystick; i++) {
++				if (!SDL_JoystickOpened(i))
++					joyar[i] = SDL_JoystickOpen(i);
++			}
++
++		} else {
++			SDL_Quit ();
++			exit (1);
++		}
++
++/*Select the joystick*/
++		printf ("Press any button or move the axis on the joystick you want to configure...\n");
++
++/* Emptying the event queue. My joystick throws
++ * some false event right after it is opened.*/
++		while (SDL_PollEvent(&e));
++
++		while (1) {
++			if (SDL_WaitEvent (&e)){
++				if (e.type == SDL_JOYAXISMOTION) {
++					JOY_INDEX = e.jaxis.which;
++					break;
++				} else if (e.type == SDL_JOYBUTTONDOWN) {
++					JOY_INDEX = e.jbutton.which;
++					break;
++				}
++			}
++		}
++		printf ("Joystick with index %d selected.\n", JOY_INDEX);
++
++/* Closing other opened (if any) joystick. */
++		for (i = 0; i < num_of_joystick; i++) {
++			if (i != JOY_INDEX) {
++				if (SDL_JoystickOpened(i))
++					SDL_JoystickClose (joyar[i]);
++			}
++		}
++
++		printf ("Move x-axis to full left and right. Then press a button...\n");
++
++		axis_set = 0;
++		axis_ref_set = 0;
++
++		while (SDL_PollEvent(&e));
++		while (1) {
++			if (SDL_WaitEvent (&e) == 1) {
++				if (e.type == SDL_JOYAXISMOTION) {
++					if (axis_set == 0) {
++						JOY_XAXIS = e.jaxis.axis;
++						axis_set = 1;
++					}
++					if (axis_set == 1) {
++						if (e.jaxis.axis == JOY_XAXIS) {
++							if (axis_ref_set == 0) {
++								axis_ref = e.jaxis.value;
++								axis_max = axis_ref;
++								axis_min = axis_ref;
++								axis_ref_set = 1;
++							} else {
++								if (e.jaxis.value > axis_max)
++									axis_max = e.jaxis.value;
++								else if (e.jaxis.value < axis_min)
++									axis_min = e.jaxis.value;
++							}
++						}
++					}
++				} else if (e.type == SDL_JOYBUTTONDOWN) {
++					if (axis_set == 1) {
++						if (axis_ref_set == 1) {
++							if (axis_min != axis_max) {
++								JOY_XAXIS_MAXIMUM = axis_max;
++								JOY_XAXIS_MINIMUM = axis_min;
++								JOY_XAXIS_CENTER = axis_min + (axis_max - axis_min)/2;
++								JOY_XAXIS_NULLZONE = (axis_max - axis_min)/(20); /*10% of difference max and center*/
++								break;
++							}
++						}
++					}
++				}
++			}
++		}
++
++		printf ("Selected axis %d as x-axis.\n", JOY_XAXIS);
++		printf ("Move y-axis to full up and down. Then press a button...\n");
++
++		axis_set = 0;
++		axis_ref_set = 0;
++
++		while (SDL_PollEvent(&e));
++		while (1) {
++			if (SDL_WaitEvent (&e) == 1) {
++				if (e.type == SDL_JOYAXISMOTION) {
++					if (e.jaxis.axis != JOY_XAXIS) {
++						if (axis_set == 0) {
++							JOY_YAXIS = e.jaxis.axis;
++							axis_set = 1;
++						}
++						if (axis_set == 1) {
++							if (e.jaxis.axis ==  JOY_YAXIS) {
++								if (axis_ref_set == 0) {
++									axis_ref = e.jaxis.value;
++									axis_max = axis_ref;
++									axis_min = axis_ref;
++									axis_ref_set = 1;
++								} else {
++									if (e.jaxis.value > axis_max)
++										axis_max = e.jaxis.value;
++									else if (e.jaxis.value < axis_min)
++										axis_min = e.jaxis.value;
++								}
++							}
++						}
++					}
++				} else if (e.type == SDL_JOYBUTTONDOWN) {
++					if (axis_set == 1) {
++						if (axis_ref_set == 1) {
++							if (axis_min != axis_max) {
++								JOY_YAXIS_MAXIMUM = axis_max;
++								JOY_YAXIS_MINIMUM = axis_min;
++								JOY_YAXIS_CENTER = axis_min + (axis_max - axis_min)/2;
++								JOY_YAXIS_NULLZONE = (axis_max - axis_min)/(20); /*10% of difference max and center*/
++								break;
++							}
++						}
++					}
++				}
++			}
++		}
++
++		printf ("Selected axis %d as y-yxis.\n", JOY_YAXIS);
++
++		printf ("Press the button for action:\"up\"...\n");
++		while (SDL_PollEvent(&e));
++		while (1) {
++			SDL_WaitEvent (&e);
++			if (e.type == SDL_JOYBUTTONDOWN) {
++				JOY_BUTTON_UP = e.jbutton.button;
++				break;
++			}
++		}
++		printf ("\"up\":%d\n", JOY_BUTTON_UP);
++
++		printf ("Press the button for action:\"shoot\"...\n");
++		while (SDL_PollEvent(&e));
++		while (1) {
++			SDL_WaitEvent (&e);
++			if (e.type == SDL_JOYBUTTONDOWN) {
++				JOY_BUTTON_SHOOT = e.jbutton.button;
++				break;
++			}
++		}
++		printf ("\"shoot\":%d\n", JOY_BUTTON_SHOOT);
++		printf ("Press the button for action:\"toggle fullscreen\"...\n");
++		while (SDL_PollEvent(&e));
++		while (1) {
++			SDL_WaitEvent (&e);
++			if (e.type == SDL_JOYBUTTONDOWN) {
++				JOY_BUTTON_TOGGLE_FULLSCREEN = e.jbutton.button;
++				break;
++			}
++		}
++		printf ("\"toggle fullscreen\":%d\n", JOY_BUTTON_TOGGLE_FULLSCREEN);
++		printf ("Press the button for action:\"escape\"...\n");
++		while (SDL_PollEvent(&e));
++		while (1) {
++			SDL_WaitEvent (&e);
++			if (e.type == SDL_JOYBUTTONDOWN) {
++				JOY_BUTTON_ESCAPE = e.jbutton.button;
++				break;
++			}
++		}
++		printf ("\"escape\":%d\n", JOY_BUTTON_ESCAPE);
++		SDL_JoystickClose (joyar[JOY_INDEX]);
++		free (joyar);
++		if (save_joystick_settings ())
++			printf ("Error saving joystick settings.\n");
++		else
++			printf ("Joystick configuration saved.\n");
++	}	else {
++		printf ("No joystick found.\n");
++	}
++}
++#endif
++
+ int vga_init(void) {
++#ifdef USE_JOYSTICK
++  if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE|SDL_INIT_JOYSTICK) < 0)
++#else
+   if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE) < 0)
++#endif
+     return -1;
+ 
+   atexit(SDL_Quit);
+@@ -196,6 +509,9 @@
+   mod = SDL_GetModState();
+   scans[SCANCODE_LEFTCONTROL] = mod & KMOD_LCTRL;
+   scans[SCANCODE_RIGHTCONTROL] = mod & KMOD_RCTRL;
++#ifdef USE_JOYSTICK
++	scans[SCANCODE_LEFTCONTROL] = SDL_JoystickGetButton (joy, JOY_BUTTON_SHOOT);
++#endif
+ 
+   while(SDL_PollEvent(&e)) {
+     if(e.type == SDL_KEYDOWN) {
+@@ -241,9 +557,115 @@
+           break;
+       }
+     }
++#ifdef USE_JOYSTICK
++/*Joystick*/
++			else if (joy != NULL) {
++				if (e.type == SDL_JOYAXISMOTION) {
++#ifdef DEBUG
++				puts ("Joystick axis motion detected.");
++#endif
++					if (e.jaxis.which == JOY_INDEX) {
++						if (e.jaxis.axis == JOY_XAXIS) {
++#ifdef DEBUG
++							printf ("Axis : X, Value : %i\n", e.jaxis.value);
++#endif
++							if ((JOY_XAXIS_MINIMUM <= e.jaxis.value) &&
++								(e.jaxis.value < JOY_XAXIS_CENTER - JOY_XAXIS_NULLZONE)) {
++								scans[SCANCODE_CURSORBLOCKLEFT] = 1;
++								scans[SCANCODE_CURSORBLOCKRIGHT] = 0;
++								updated = 1;
++							} else if ((JOY_XAXIS_CENTER + JOY_XAXIS_NULLZONE < e.jaxis.value) &&
++								(e.jaxis.value <= JOY_XAXIS_MAXIMUM)) {
++								scans[SCANCODE_CURSORBLOCKRIGHT] = 1;
++								scans[SCANCODE_CURSORBLOCKLEFT] = 0;
++								updated = 1;
++							} else {
++								scans[SCANCODE_CURSORBLOCKRIGHT] = 0;
++								scans[SCANCODE_CURSORBLOCKLEFT] = 0;
++							}
++						} else if (e.jaxis.axis == JOY_YAXIS) {
++#ifdef DEBUG
++						printf ("Axis : Y, Value : %d\n", e.jaxis.value);
++#endif
++						if ((JOY_YAXIS_MINIMUM <= e.jaxis.value) &&
++							(e.jaxis.value < JOY_YAXIS_CENTER - JOY_YAXIS_NULLZONE)) {
++							scans[SCANCODE_CURSORBLOCKUP] = 1;
++							updated = 1;
++						} else if ((JOY_YAXIS_CENTER + JOY_YAXIS_NULLZONE < e.jaxis.value) &&
++							(e.jaxis.value <= JOY_YAXIS_MAXIMUM)) {
++							scans[SCANCODE_CURSORBLOCKUP] = 1;
++							updated = 1;
++						} else {
++							scans[SCANCODE_CURSORBLOCKUP] = 0;
++						}
++					}
++ 				}
++			} else if (e.type == SDL_JOYBUTTONDOWN) {
++				if (e.jbutton.which == JOY_INDEX) {
++					if (e.jbutton.button == JOY_BUTTON_UP) {
++						scans[SCANCODE_CURSORBLOCKUP] = 1;
++						updated = 1;
++/*
++					} else if (e.jbutton.button == JOY_BUTTON_SHOOT) {
++						scans[SCANCODE_LEFTCONTROL] = 1;
++						scans[SCANCODE_RIGHTCONTROL] = 1;
++						updated = 1;
++*/
++					} else if (e.jbutton.button == JOY_BUTTON_ESCAPE) {
++						scans[SCANCODE_ESCAPE] = 1;
++						updated = 1;
++					} else if (e.jbutton.button == JOY_BUTTON_TOGGLE_FULLSCREEN) {
++   	    		SDL_WM_ToggleFullScreen(screen);
++					}
++				}
++			} else if (e.type == SDL_JOYBUTTONUP) {
++				if (e.jbutton.which == JOY_INDEX) {
++					if (e.jbutton.button == JOY_BUTTON_UP) {
++						scans[SCANCODE_CURSORBLOCKUP] = 0;
++/*
++					} else if (e.jbutton.button == JOY_BUTTON_SHOOT) {
++						scans[SCANCODE_LEFTCONTROL] = 0;
++						scans[SCANCODE_RIGHTCONTROL] = 0;
++*/
++					} else if (e.jbutton.button == JOY_BUTTON_ESCAPE) {
++						scans[SCANCODE_ESCAPE] = 0;
++					}
++				}
++			}
++		}
++#endif
+   }
+-
+   return updated;
+ }
+ 
++#ifdef USE_JOYSTICK
++int joystick_init (void) {
++	SDL_JoystickEventState (SDL_ENABLE);
++	if (SDL_NumJoysticks () >= JOY_INDEX) {
++		joy = SDL_JoystickOpen (JOY_INDEX);
++
++		if (joy == NULL) {
++#ifdef DEBUG
++			printf ("Failed to open joystick.\n");
++#endif
++			return (1);
++		}
++		else
++			return (0);
++	}
++	else {
++#ifdef DEBUG
++		printf ("Joystick not found.\n");
++#endif
++		return (2);
++	}
++}
++
++void joystick_close (void) {
++	if (SDL_JoystickOpened (JOY_INDEX)) {
++		SDL_JoystickClose (joy);
++	}
++}
++#endif
++
+ #endif /* USE_SDL */
+Index: gw3/vgastubs.h
+===================================================================
+--- gw3.orig/vgastubs.h	2008-12-16 20:11:30.000000000 +0600
++++ gw3/vgastubs.h	2008-12-16 20:11:30.000000000 +0600
+@@ -18,6 +18,8 @@
+ #define SCANCODE_CURSORBLOCKRIGHT 4
+ #define SCANCODE_CURSORBLOCKUP 5
+ 
++#include <SDL.h>
++
+ typedef void vga_modeinfo;
+ 
+ int vga_init(void);
+@@ -39,3 +41,11 @@
+ void keyboard_close(void);
+ char *keyboard_getstate(void);
+ int keyboard_update(void);
++
++#ifdef USE_JOYSTICK
++int joystick_init (void);
++void joystick_close (void);
++void set_joystick (void);
++int load_joystick_settings (void);
++int save_joystick_settings (void);
++#endif
+Index: gw3/README.joystick
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ gw3/README.joystick	2008-12-16 20:11:30.000000000 +0600
+@@ -0,0 +1,44 @@
++ ****************
++ * INTRODUCTION *
++ ****************
++   The joystick support is implemented using SDL. The command line option '-j' will
++prompt you (of course in command line :) with joystick configuration. Do exactly as
++you are asked. The configuration will be saved in a file ".gravitywars-joystick-settings"
++in your home directory. From next time, configurations will be loaded from the file.
++By default, there is no file, and default joystick values (embeded in program code)
++are used. You must use '-j' atleast once for the configuration file to be created.
++
++   There are also some environment variables which can be used to manually setup your
++joystick. They are parsed after the configuration file, so they overshadow the confi-
++guration file, but are not saved when program exits.
++
++ *************************
++ * ENVIRONMENT VARIABLES *
++ *************************
++ GW_JOY_INDEX
++ GW_JOY_XAXIS
++ GW_JOY_YAXIS
++ GW_JOY_BUTTON_UP
++ GW_JOY_BUTTON_SHOOT
++ GW_JOY_BUTTON_TOGGLE_FULLSCREEN
++ GW_JOY_BUTTON_ESCAPE
++ GW_JOY_XAXIS_CENTER
++ GW_JOY_XAXIS_MINIMUM
++ GW_JOY_XAXIS_MAXIMUM
++ GW_JOY_XAXIS_NULLZONE
++ GW_JOY_YAXIS_CENTER
++ GW_JOY_YAXIS_MINIMUM
++ GW_JOY_YAXIS_MAXIMUM
++ GW_JOY_YAXIS_NULLZONE
++
++ ********
++ * BUGS *
++ ********
++   If you unplug the joystick, or somehow disable joystick event during joystick conf-
++iguration, the program will stuck there. 'killall -HUP gravitywars' will do the job though.
++
++ **********
++ * AUTHOR *
++ **********
++ Titon Barua / titanix
++ titanix88 at gmail.com
+

Modified: packages/trunk/gravitywars/debian/patches/series
===================================================================
--- packages/trunk/gravitywars/debian/patches/series	2009-04-06 17:23:29 UTC (rev 9435)
+++ packages/trunk/gravitywars/debian/patches/series	2009-04-06 18:16:21 UTC (rev 9436)
@@ -6,3 +6,4 @@
 010_highscores.diff
 010_reduce_verbosity.diff
 010_sdl_port.diff
+020_sdl_joystick.diff

Modified: packages/trunk/gravitywars/debian/rules
===================================================================
--- packages/trunk/gravitywars/debian/rules	2009-04-06 17:23:29 UTC (rev 9435)
+++ packages/trunk/gravitywars/debian/rules	2009-04-06 18:16:21 UTC (rev 9436)
@@ -13,6 +13,9 @@
 	rm -f build-stamp
 	[ ! -f Makefile ] || $(MAKE) clean
 	QUILT_PATCHES=debian/patches quilt pop -a -R || test $$? = 2
+
+	rm -rf .pc
+
 	dh_clean
 
 install: build




More information about the Pkg-games-commits mailing list