summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Tupone <tupone@gentoo.org>2006-03-14 19:22:42 +0000
committerAlfredo Tupone <tupone@gentoo.org>2006-03-14 19:22:42 +0000
commit50468dd15ccbae75e8f4a5b1e469cebc1235e924 (patch)
treea66ebfc6c245206a895e3dc22982590c88fd95f5 /games-arcade
parentDisabled the rediffed patch, it's broken. Put an ewarn there instead. (diff)
downloadgentoo-2-50468dd15ccbae75e8f4a5b1e469cebc1235e924.tar.gz
gentoo-2-50468dd15ccbae75e8f4a5b1e469cebc1235e924.tar.bz2
gentoo-2-50468dd15ccbae75e8f4a5b1e469cebc1235e924.zip
Fixing bug #115351 (insane speed on linux 2.6)
(Portage version: 2.1_pre5-r4)
Diffstat (limited to 'games-arcade')
-rw-r--r--games-arcade/xboing/ChangeLog8
-rw-r--r--games-arcade/xboing/Manifest15
-rw-r--r--games-arcade/xboing/files/01_all_insaneSpeed.patch470
-rw-r--r--games-arcade/xboing/files/digest-xboing-2.4-r26
-rw-r--r--games-arcade/xboing/xboing-2.4-r2.ebuild56
5 files changed, 551 insertions, 4 deletions
diff --git a/games-arcade/xboing/ChangeLog b/games-arcade/xboing/ChangeLog
index 0230867830cd..aba7faa2430e 100644
--- a/games-arcade/xboing/ChangeLog
+++ b/games-arcade/xboing/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for games-arcade/xboing
# Copyright 1999-2006 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/games-arcade/xboing/ChangeLog,v 1.8 2006/01/29 00:00:27 joshuabaergen Exp $
+# $Header: /var/cvsroot/gentoo-x86/games-arcade/xboing/ChangeLog,v 1.9 2006/03/14 19:22:42 tupone Exp $
+
+*xboing-2.4-r2 (14 Mar 2006)
+
+ 14 Mar 2006; <Tupone@gentoo.org> +files/01_all_insaneSpeed.patch,
+ +xboing-2.4-r2.ebuild:
+ Fixing Bug #115351 (insane speed on linux 2.6). Thanks to bakker Bart
28 Jan 2006; Joshua Baergen <joshuabaergen@gentoo.org>
xboing-2.4-r1.ebuild:
diff --git a/games-arcade/xboing/Manifest b/games-arcade/xboing/Manifest
index 09d81ebcd9a0..9835b771b246 100644
--- a/games-arcade/xboing/Manifest
+++ b/games-arcade/xboing/Manifest
@@ -1,12 +1,21 @@
-MD5 8bb363e497cd705806a82ef015dfe626 ChangeLog 984
-RMD160 5d5f8d2b636b17813b751c427c622fa4d94bec21 ChangeLog 984
-SHA256 5c47848e6a293f5f1a29fb958643b82d2edf60b652cf5bdf2ae3871fa3448809 ChangeLog 984
+MD5 f8dcb18693c3d914b4950312a547cb26 ChangeLog 1180
+RMD160 f51f24b6cd8dc19e746ca12a1b00feab6c62a9ed ChangeLog 1180
+SHA256 cfa137391b8daf6ebedf6849ad41dfca6af1c2923ccc45595d64a631c1006a5c ChangeLog 1180
+MD5 35113230bee9c55b340e5bb701938d77 files/01_all_insaneSpeed.patch 11554
+RMD160 863965cbcf364124ae206d7d8e2cdcf7e5dd75c9 files/01_all_insaneSpeed.patch 11554
+SHA256 c1061e87471290d862817474f560943a8794f062938af916c7d61f6ab1ba956f files/01_all_insaneSpeed.patch 11554
MD5 1624963aea6e3f0dfabfb6d9a447c942 files/digest-xboing-2.4-r1 131
RMD160 7d405b5057bd5b36c75df3ec1c67db11c5077457 files/digest-xboing-2.4-r1 131
SHA256 d0b017284fb2b067f1745f8b39ef39090cba8f5c9d2f91b1fddc59b811752b08 files/digest-xboing-2.4-r1 131
+MD5 8ef4dccbe0be4466ce9e425c0240802b files/digest-xboing-2.4-r2 485
+RMD160 216bb007322dd5c87e66edf69fc345b0540613d0 files/digest-xboing-2.4-r2 485
+SHA256 1c2f047ddb7abc448cfc111e2782e77194eeec60b89e3ae97be25cc7ba301778 files/digest-xboing-2.4-r2 485
MD5 f17b9b8fa07a38914fe1c03268f51678 metadata.xml 158
RMD160 cbd9984bb6b426c8c9cee5022fe0a26261612fea metadata.xml 158
SHA256 1423a4fdd4a79b1728a2056d9e300f7e1074253095d82726218d9e9b953888a3 metadata.xml 158
MD5 ef87481a559ce7ab5a0572010b9ed54f xboing-2.4-r1.ebuild 1276
RMD160 5dad9cb579011248b301840002b061c0537ca8f0 xboing-2.4-r1.ebuild 1276
SHA256 c121656a230ea57b0df047f86329534a76632992ce401387dc16cb94b2634f9b xboing-2.4-r1.ebuild 1276
+MD5 2f192d390379caa9548d1ff7ad4b01c5 xboing-2.4-r2.ebuild 1322
+RMD160 eea46f7fa37c8df5b02ff8e0cfdc10737c5d6706 xboing-2.4-r2.ebuild 1322
+SHA256 809ff61111afde901335204befdb7d716685f06b5e33bb9807f460518e3bdc85 xboing-2.4-r2.ebuild 1322
diff --git a/games-arcade/xboing/files/01_all_insaneSpeed.patch b/games-arcade/xboing/files/01_all_insaneSpeed.patch
new file mode 100644
index 000000000000..e5d28d8740b8
--- /dev/null
+++ b/games-arcade/xboing/files/01_all_insaneSpeed.patch
@@ -0,0 +1,470 @@
+diff -u --recursive xboing/bonus.c xbpatch/bonus.c
+--- xboing/bonus.c Fri Nov 22 01:28:46 1996
++++ xbpatch/bonus.c Tue Jan 14 18:48:28 1997
+@@ -311,7 +311,7 @@
+ XFlush(display);
+
+ SetBonusWait(BONUS_SCORE, frame + 5);
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ DEBUG("set bonus mode to BONUS_SCORE.")
+ }
+@@ -326,7 +326,7 @@
+ {
+ DEBUG("in function DoScore() in bonus.c")
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Nice message rewarding you for your efforts */
+ strcpy(string, "Congratulations on finishing this level.");
+@@ -336,7 +336,7 @@
+
+ ypos += (35 + GAP);
+ SetBonusWait(BONUS_BONUS, frame + LINE_DELAY);
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+ DEBUG("set bonus mode to BONUS_BONUS.")
+ }
+
+@@ -363,7 +363,7 @@
+ DrawShadowCentredText(display, window, textFont,
+ string, ypos, blue, TOTAL_WIDTH);
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Now skip to the next sequence */
+ SetBonusWait(BONUS_LEVEL, frame + LINE_DELAY);
+@@ -387,7 +387,7 @@
+ DrawShadowCentredText(display, window, textFont,
+ string, ypos, blue, TOTAL_WIDTH);
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Now skip to the next sequence */
+ SetBonusWait(BONUS_LEVEL, frame + LINE_DELAY);
+@@ -411,7 +411,7 @@
+ bonusScore += ComputeScore(SUPER_BONUS_SCORE);
+ DisplayScore(display, scoreWindow, bonusScore);
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Now skip to the next sequence */
+ SetBonusWait(BONUS_LEVEL, frame + LINE_DELAY);
+@@ -454,7 +454,7 @@
+ ypos += (int) (textFont->ascent + GAP * 1.5);
+ firstTime = True;
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+ }
+ }
+
+@@ -468,7 +468,7 @@
+ {
+ int secs, theLevel;
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Get the number of seconds left on the clock */
+ secs = GetLevelTimeBonus();
+@@ -533,7 +533,7 @@
+ /* Play the sound for the super bonus */
+ if (noSound == False) playSoundFile("Doh3", 80);
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Get ready for the next sequence */
+ SetBonusWait(BONUS_TIME, frame + LINE_DELAY);
+@@ -569,7 +569,7 @@
+ SetBonusWait(BONUS_TIME, frame + LINE_DELAY);
+ ypos += (textFont->ascent + GAP/2);
+ firstTime = True;
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+ }
+ }
+
+@@ -583,7 +583,7 @@
+ {
+ int secs = 0;
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Get the number of seconds left on the clock */
+ secs = GetLevelTimeBonus();
+@@ -627,7 +627,7 @@
+ int myrank = 0;
+ char str[5];
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Obtain current ranking for this score */
+ myrank = GetHighScoreRanking(score);
+@@ -680,7 +680,7 @@
+ {
+ DEBUG("DoEndText in bonus screen.")
+
+- SetGameSpeed(SLOW_SPEED);
++ SetGameSpeed(MEDIUM_SPEED);
+
+ /* Finishing sentence - so you know what level to do */
+ sprintf(string, "Prepare for level %ld", level+1);
+diff -u --recursive xboing/main.c xbpatch/main.c
+--- xboing/main.c Fri Nov 22 01:28:46 1996
++++ xbpatch/main.c Tue Jan 14 18:32:30 1997
+@@ -156,7 +156,7 @@
+
+ /* Set an entire game speedup or slowdown speed */
+ temp = (speed / (long) userDelay);
+- userDelay = delay;
++ userDelay = delay/2 + 3;
+ speed = (long) (temp * userDelay);
+ speedLevel = 10 - delay;
+ }
+diff -u --recursive xboing/misc.c xbpatch/misc.c
+--- xboing/misc.c Fri Nov 22 01:28:46 1996
++++ xbpatch/misc.c Tue Jan 14 18:54:45 1997
+@@ -89,8 +89,8 @@
+ #ifdef SYSV
+ #ifdef __clipper__
+ struct timeval tv;
+- tv.tv_sec=((usec)/1000);
+- tv.tv_usec=(((usec)%1000)*1000);
++ tv.tv_sec=((usec)/1000000);
++ tv.tv_usec=((usec)%1000000);
+ select(1,NULL,NULL,NULL,&tv);
+ #else
+ poll((struct poll *) 0, (size_t) 0, usec / 1000); /* ms resolution */
+@@ -105,6 +105,68 @@
+ #endif
+
+ #if NeedFunctionPrototypes
++static int kudelay(unsigned long count)
++#else
++static int kudelay(count)
++unsigned long count;
++#endif
++{
++ unsigned int bluff = 1;
++
++ while( count-- != 0 ) /* this can hardly be "optimised out" */
++ bluff = (bluff ^ ((bluff & 1) * 0x6110)) >> 1;
++
++ return( bluff );
++}
++
++#if NeedFunctionPrototypes
++static void kusleep(unsigned long usec)
++#else
++static void kusleep(usec)
++ unsigned long usec;
++#endif
++{
++ static float kuliber_time = 0.0;
++ static float kuliber_count = 0.0;
++ static unsigned long kutimerswap = (1000000 / 15);
++ struct timeval st, et;
++ long gap;
++ unsigned long count;
++
++ if( kuliber_time == 0.0 )
++ {
++ count = 0x1000; /* calibrate delay loop */
++ gettimeofday(&st, NULL);
++
++ while( True )
++ {
++ kudelay( count );
++ count = (count << 1);
++ gettimeofday(&et, NULL);
++ gap = (((et.tv_sec - st.tv_sec) * 1000000) +
++ (et.tv_usec - st.tv_usec) );
++
++ if( gap > 400*1000 )
++ break;
++ }
++
++ kuliber_time = (float)(gap/4);
++ kuliber_count = (float)(((count-1)&~0xFFF)>>2);
++ }
++
++ if( usec > kutimerswap )
++ {
++ kutimerswap = (1000000 / 30);
++ usleep( usec ); /* using usleep() for low resolution only */
++ }
++ else
++ {
++ kutimerswap = (1000000 / 15);
++ kudelay( (unsigned long)(kuliber_count*((float)usec/kuliber_time)) );
++ }
++}
++
++#if NeedFunctionPrototypes
+ void sleepSync(Display *display, unsigned long ms)
+ #else
+ void sleepSync(display, ms)
+@@ -112,27 +174,85 @@
+ unsigned long ms;
+ #endif
+ {
+- struct timeval st, et;
+- long SyncTime;
+- static unsigned long accu;
++ static long Expected_time = 0;
++ static long Ref_sec = 0;
++ static long Ref_usec = 0;
++ static long Sleeping_time = 0;
++ static int PLL_filter = 0;
++ struct timeval st;
++ long elapsed;
++ long dodelay;
++ float x;
+
+- gettimeofday(&st, NULL);
+ XSync(display, False);
+- gettimeofday(&et, NULL);
+
+- SyncTime = (((et.tv_sec - st.tv_sec) * 1000) +
+- ((et.tv_usec - st.tv_usec) / 1000) );
++ gettimeofday(&st, NULL);
++
++ if( Ref_sec == 0 )
++ {
++ Ref_sec = st.tv_sec; /* take the initial reference point */
++ Ref_usec = st.tv_usec;
++ Sleeping_time = ms * 1000;
++ }
++
++ elapsed = (st.tv_sec - Ref_sec) * 1000000 + (st.tv_usec - Ref_usec);
++ dodelay = Sleeping_time;
++
++ if( PLL_filter > 0 && elapsed != 0 ) /* Phase lock loop */
++ {
++ dodelay = Expected_time + Sleeping_time - elapsed;
++
++ if( dodelay < 0 )
++ {
++ dodelay = 0; PLL_filter--;
++ }
++ else
++ if( dodelay > 2*Sleeping_time )
++ {
++ dodelay = 2*Sleeping_time; PLL_filter--;
++ }
++ else
++ PLL_filter = 3;
++
++ if( elapsed > 40*Sleeping_time && Expected_time > 40*Sleeping_time )
++ {
++ elapsed -= 20*Sleeping_time; /* Ref. point shouldn't be far away*/
++ Expected_time -= 20*Sleeping_time;
++ Ref_usec += 20*Sleeping_time;
++ Ref_sec += Ref_usec/1000000; Ref_usec %= 1000000;
++ }
++ }
+
+-/* if ((ms) > ((1000 / 60) + SyncTime))
+- usleep(ms - SyncTime);
+-*/
+- if ((ms + accu) > ((1000 / 30) + SyncTime))
++ if( PLL_filter <= 0 && elapsed > 40000 ) /* Frequency lock loop */
+ {
+- usleep(ms +accu - SyncTime);
+- accu = 0;
++ /* feedback filter */
++ x = 0.5 + 0.5 * (float)Expected_time / (float)elapsed;
++
++ if( x < 0.966 ) /* Acceleration must be strongly limited */
++ x = 0.966;
++
++ if( x > 2.0 )
++ x = 2.0;
++
++ Sleeping_time = (long)((float)Sleeping_time * x);
++
++ if( Sleeping_time < 500 )
++ Sleeping_time = 500;
++
++ if( x > 0.99 && x < 1.01 && Sleeping_time > ms*500 )
++ PLL_filter = -1 - 4*PLL_filter; /* locked - it's time to try PLL */
++ else
++ PLL_filter = 0;
++
++ Ref_sec = st.tv_sec;
++ Ref_usec = st.tv_usec;
++ Expected_time = 0;
++ dodelay = Sleeping_time;
+ }
+- else if (ms > SyncTime)
+- accu += (ms - SyncTime);
++
++ kusleep( dodelay );
++
++ Expected_time += ms * 1000;
+ }
+
+ #if NeedFunctionPrototypes
+diff -u --recursive xboing/presents.c xbpatch/presents.c
+--- xboing/presents.c Fri Nov 22 01:28:46 1996
++++ xbpatch/presents.c Tue Jan 14 18:35:40 1997
+@@ -287,7 +287,7 @@
+ }
+ #endif
+
+- SetPresentWait(PRESENT_TEXT1, frame + 800);
++ SetPresentWait(PRESENT_TEXT1, frame + 200);
+ }
+
+ #if NeedFunctionPrototypes
+@@ -309,7 +309,7 @@
+ RenderShape(display, window, justin, justinM,
+ x, y, 285, 44, True);
+
+- SetPresentWait(PRESENT_TEXT2, frame + 300);
++ SetPresentWait(PRESENT_TEXT2, frame + 100);
+ }
+
+ #if NeedFunctionPrototypes
+@@ -331,7 +331,7 @@
+ RenderShape(display, window, kibell, kibellM,
+ x, y, 260, 40, True);
+
+- SetPresentWait(PRESENT_TEXT3, frame + 500);
++ SetPresentWait(PRESENT_TEXT3, frame + 200);
+ }
+
+ #if NeedFunctionPrototypes
+@@ -355,7 +355,7 @@
+ RenderShape(display, window, presents, presentsM,
+ x, y, 410, 44, True);
+
+- SetPresentWait(PRESENT_TEXT_CLEAR, frame + 750);
++ SetPresentWait(PRESENT_TEXT_CLEAR, frame + 250);
+ }
+
+ #if NeedFunctionPrototypes
+@@ -375,7 +375,7 @@
+
+ FadeAwayArea(display, window, x, y, 410, 44);
+
+- SetPresentWait(PRESENT_LETTERS, frame + 10);
++ SetPresentWait(PRESENT_LETTERS, frame + 5);
+ }
+
+ /* The distances for the gap inbetwen blocks */
+@@ -404,7 +404,7 @@
+ DrawLetter(display, window, i, x, y);
+ x += 10 + dists[i];
+
+- SetPresentWait(PRESENT_LETTERS, frame + 300);
++ SetPresentWait(PRESENT_LETTERS, frame + 100);
+ }
+ else
+ {
+@@ -416,7 +416,7 @@
+ x += dists[3];
+ DrawLetter(display, window, 3, x, y);
+
+- SetPresentWait(PRESENT_SHINE, frame + 200);
++ SetPresentWait(PRESENT_SHINE, frame + 100);
+ }
+
+ i++;
+@@ -463,7 +463,7 @@
+ if (in == 11)
+ {
+ XCopyArea(display, store, window, gc, 0, 0, 20, 20, x, y);
+- SetPresentWait(PRESENT_SPECIAL_TEXT1, frame + 500);
++ SetPresentWait(PRESENT_SPECIAL_TEXT1, frame + 100);
+ }
+ }
+ }
+@@ -499,7 +499,7 @@
+ len = strlen(wisdom);
+ x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) -
+ (XTextWidth(dataFont, wisdom, len) / 2);
+- nextFrame = frame + 10;
++ nextFrame = frame + 5;
+ first = False;
+ }
+
+@@ -508,11 +508,11 @@
+ if (noSound == False) playSoundFile("key", 60);
+ DrawText(display, window, x, y, dataFont, red, wisdom, i);
+
+- nextFrame = frame + 30;
++ nextFrame = frame + 15;
+
+ i++;
+ if (i > len)
+- SetPresentWait(PRESENT_SPECIAL_TEXT2, frame + 700);
++ SetPresentWait(PRESENT_SPECIAL_TEXT2, frame + 150);
+ }
+ }
+
+@@ -542,7 +542,7 @@
+ len = strlen(wisdom2);
+ x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) -
+ (XTextWidth(dataFont, wisdom2, len) / 2);
+- nextFrame = frame + 10;
++ nextFrame = frame + 5;
+ first = False;
+ }
+
+@@ -551,11 +551,11 @@
+ if (noSound == False) playSoundFile("key", 60);
+ DrawText(display, window, x, y, dataFont, red, wisdom2, i);
+
+- nextFrame = frame + 30;
++ nextFrame = frame + 15;
+
+ i++;
+ if (i > len)
+- SetPresentWait(PRESENT_SPECIAL_TEXT3, frame + 700);
++ SetPresentWait(PRESENT_SPECIAL_TEXT3, frame + 150);
+ }
+ }
+
+@@ -584,7 +584,7 @@
+ len = strlen(wisdom3);
+ x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) -
+ (XTextWidth(dataFont, wisdom3, len) / 2);
+- nextFrame = frame + 10;
++ nextFrame = frame + 5;
+ first = False;
+ }
+
+@@ -593,11 +593,11 @@
+ if (noSound == False) playSoundFile("key", 60);
+ DrawText(display, window, x, y, dataFont, red, wisdom3, i);
+
+- nextFrame = frame + 30;
++ nextFrame = frame + 15;
+
+ i++;
+ if (i > len)
+- SetPresentWait(PRESENT_CLEAR, frame + 800);
++ SetPresentWait(PRESENT_CLEAR, frame + 200);
+ }
+ }
+
+@@ -642,7 +642,7 @@
+ yb -= 10;
+
+ if (yt > ((PLAY_HEIGHT + MAIN_HEIGHT) / 2))
+- SetPresentWait(PRESENT_FINISH, frame + 20);
++ SetPresentWait(PRESENT_FINISH, frame + 10);
+
+ nextFrame = frame + 20;
+ }
+
diff --git a/games-arcade/xboing/files/digest-xboing-2.4-r2 b/games-arcade/xboing/files/digest-xboing-2.4-r2
new file mode 100644
index 000000000000..a5551be55758
--- /dev/null
+++ b/games-arcade/xboing/files/digest-xboing-2.4-r2
@@ -0,0 +1,6 @@
+MD5 b0567f3833c7c2152cce8526b06e07cf xboing-2.4-debian.patch.bz2 7740
+RMD160 90ab378da5bf13c2e8c880191d82faec6ec4c66d xboing-2.4-debian.patch.bz2 7740
+SHA256 14461b3684c8a651fb9cff864931f1e56600c373a16b8ea61a98f689173c893e xboing-2.4-debian.patch.bz2 7740
+MD5 d596d29e53cf0deceb18f3b646787709 xboing2.4.tar.gz 588811
+RMD160 3aa027dd7a7abe9b4119362a1c8b5fb968971567 xboing2.4.tar.gz 588811
+SHA256 67019cb8c8a4da0b1177dcc8bed063afe3b8f1853b18345dbc1deaca51d4a29a xboing2.4.tar.gz 588811
diff --git a/games-arcade/xboing/xboing-2.4-r2.ebuild b/games-arcade/xboing/xboing-2.4-r2.ebuild
new file mode 100644
index 000000000000..a1cb8e55b849
--- /dev/null
+++ b/games-arcade/xboing/xboing-2.4-r2.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/games-arcade/xboing/xboing-2.4-r2.ebuild,v 1.1 2006/03/14 19:22:42 tupone Exp $
+
+inherit eutils games
+
+DESCRIPTION="blockout type game where you bounce a proton ball trying to destroy blocks"
+HOMEPAGE="http://www.techrescue.org/xboing/"
+SRC_URI="http://www.techrescue.org/xboing/${PN}${PV}.tar.gz
+ mirror://gentoo/xboing-${PV}-debian.patch.bz2"
+
+LICENSE="xboing"
+SLOT="0"
+KEYWORDS="~ppc ~sparc ~x86"
+IUSE=""
+
+RDEPEND="|| ( x11-libs/libXpm virtual/x11 )"
+DEPEND="${RDEPEND}
+ || ( ( app-text/rman
+ x11-misc/gccmakedep
+ x11-misc/imake )
+ virtual/x11 )"
+
+S=${WORKDIR}/${PN}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+ epatch "${FILESDIR}"/01_all_insaneSpeed.patch \
+ "${WORKDIR}"/xboing-${PV}-debian.patch
+ sed -i '/^#include/s:xpm\.h:X11/xpm.h:' *.c
+}
+
+src_compile() {
+ xmkmf -a || die
+ sed -i \
+ -e "s:GENTOO_VER:${PF/${PN}-/}:" \
+ Imakefile
+ emake \
+ CXXOPTIONS="${CXXFLAGS}" \
+ CDEBUGFLAGS="${CFLAGS}" \
+ XBOING_DIR=${GAMES_DATADIR}/${PN} \
+ || die
+}
+
+src_install() {
+ make \
+ PREFIX=${D} \
+ XBOING_DIR=${GAMES_DATADIR}/${PN} \
+ install \
+ || die
+ newman xboing.man xboing.6
+ dodoc README docs/*.doc
+ prepgamesdirs
+ fperms 660 ${GAMES_STATEDIR}/xboing.score
+}