--- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper-data.install +++ torus-trooper-0.22.dfsg1/debian/torus-trooper-data.install @@ -0,0 +1,3 @@ +images usr/share/games/torus-trooper/ +sounds usr/share/games/torus-trooper/ +barrage usr/share/games/torus-trooper/ --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper.desktop +++ torus-trooper-0.22.dfsg1/debian/torus-trooper.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=Torus Trooper +GenericName= +Comment=Kenta Cho's Torus Trooper +Icon=torus-trooper +Exec=torus-trooper +Terminal=false +Categories=Game;ArcadeGame; --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper-pure.manpages +++ torus-trooper-0.22.dfsg1/debian/torus-trooper-pure.manpages @@ -0,0 +1 @@ +debian/torus-trooper-pure.6 --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper.manpages +++ torus-trooper-0.22.dfsg1/debian/torus-trooper.manpages @@ -0,0 +1 @@ +debian/torus-trooper.6 --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper.install +++ torus-trooper-0.22.dfsg1/debian/torus-trooper.install @@ -0,0 +1,3 @@ +torus-trooper usr/games/ +debian/torus-trooper.xpm usr/share/pixmaps/ +debian/torus-trooper.desktop usr/share/applications/ --- torus-trooper-0.22.dfsg1.orig/debian/watch +++ torus-trooper-0.22.dfsg1/debian/watch @@ -0,0 +1,4 @@ +version=3 + +opts="uversionmangle=s/_/\./,dversionmangle=s/[+.]dfsg(.?\d+)?$//" \ +http://www.asahi-net.or.jp/~cs8k-cyu/windows/tt_e.html tt([\d_]+)\.zip --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper-pure.install +++ torus-trooper-0.22.dfsg1/debian/torus-trooper-pure.install @@ -0,0 +1,3 @@ +torus-trooper-pure usr/games/ +debian/torus-trooper-pure.xpm usr/share/pixmaps/ +debian/torus-trooper-pure.desktop usr/share/applications/ --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper-pure.xpm +++ torus-trooper-0.22.dfsg1/debian/torus-trooper-pure.xpm @@ -0,0 +1,155 @@ +/* XPM */ +static char *dummy[]={ +"32 32 120 2", +"Qt c None", +".H c #020202", +".# c #030303", +".q c #080808", +".a c #101010", +".Y c #111111", +"#V c #161616", +".p c #191919", +".b c #1f1f1f", +"#y c #212121", +".r c #242424", +".8 c #272727", +".o c #292929", +"#F c #2a2a2a", +".c c #2e2e2e", +".6 c #363636", +".2 c #373737", +"#r c #393939", +"#c c #3b3b3b", +".n c #3c3c3c", +".Q c #3d3d3d", +".R c #3e3e3e", +".S c #3f3f3f", +".T c #404040", +"#i c #414141", +"#j c #424242", +".P c #434343", +".5 c #444444", +".d c #454545", +".s c #464646", +"#e c #484848", +".4 c #494949", +".3 c #4a4a4a", +".U c #4b4b4b", +"#d c #4c4c4c", +".7 c #505050", +"#C c #515151", +".m c #585858", +".e c #595959", +"#u c #5d5d5d", +"#l c #5e5e5e", +".Z c #606060", +"#m c #636363", +".O c #646464", +"#P c #666666", +"#Q c #686868", +".l c #6a6a6a", +"#R c #6b6b6b", +".f c #6c6c6c", +".t c #6e6e6e", +"#o c #6f6f6f", +".G c #707070", +"#b c #727272", +".k c #757575", +".g c #767676", +".j c #777777", +".V c #787878", +"#G c #797979", +"#W c #7a7a7a", +"#n c #7b7b7b", +".i c #7c7c7c", +".h c #7d7d7d", +"#1 c #7f7f7f", +"#s c #808080", +"#O c #828282", +"#E c #838383", +"#S c #848484", +"#x c #878787", +"#B c #8a8a8a", +".u c #8b8b8b", +".9 c #8c8c8c", +"#0 c #8d8d8d", +"#D c #8f8f8f", +".N c #909090", +"#f c #939393", +".F c #979797", +"#a c #989898", +"#U c #9b9b9b", +".I c #9d9d9d", +"#t c #9e9e9e", +"#p c #9f9f9f", +"#N c #a0a0a0", +"#h c #a2a2a2", +"#X c #a4a4a4", +"#A c #a5a5a5", +"#k c #a6a6a6", +".v c #a7a7a7", +".1 c #a8a8a8", +".W c #a9a9a9", +"#H c #ababab", +".J c #acacac", +".0 c #afafaf", +"#K c #b1b1b1", +".B c #b5b5b5", +".M c #b6b6b6", +"#Z c #b7b7b7", +"## c #b8b8b8", +"#Y c #bababa", +".w c #bbbbbb", +".C c #bdbdbd", +".A c #bebebe", +"#M c #bfbfbf", +".K c #c0c0c0", +"#v c #c1c1c1", +"#J c #c5c5c5", +".X c #c7c7c7", +".L c #cacaca", +"#I c #cbcbcb", +".z c #cccccc", +".D c #cecece", +"#. c #cfcfcf", +".E c #d0d0d0", +".x c #d4d4d4", +"#T c #d5d5d5", +".y c #d7d7d7", +"#L c #dadada", +"#z c #dcdcdc", +"#g c #dddddd", +"#w c #e1e1e1", +"#q c #ffffff", +"QtQtQtQtQtQtQtQtQtQtQtQt.#.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.qQtQt", +"QtQtQtQtQtQtQtQt.#.r.s.t.u.v.w.x.y.y.z.A.B.B.C.A.D.y.y.E.B.F.G.n", +"QtQtQtQtQt.H.c.f.I.J.K.L.M.N.O.P.Q.Q.R.S.T.T.S.S.R.Q.n.U.V.W.X.w", +"QtQtQt.Y.Z.0.A.0.1.g.U.2.n.T.s.3.U.U.U.U.U.U.U.U.U.U.U.4.5.Q.6.7", +"Qt.8.9#.###a#b.P#c.P.4.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#d#e", +"#f#g#h.G.m#i#j.3.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +"#k#l#d.5#e.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".d.4.3.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#m#n#n#n#n#n#o#n#n#n#n#n#o.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#p#q#q#q#q#q#q#q#q#q#q#q#..U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.U.U#d", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.U#d.S", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.3#r#s", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#t#e.s#u#v.D", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.4.P.4#l#k#w#x#y", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.s.Q.4#o#a#z#A.2QtQt", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#e.S.n#l#B.1.E.v#jQtQtQtQt", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.4.5.Q.2#C#D.B.K.M#E#FQtQtQtQtQtQt", +".n.T.P.s#e.4.4#e#e#e.s.P#i.R.R#C#G#H#I#J#K.9.U.aQtQtQtQtQtQtQtQt", +"#L#M#N#O#P#l.Z#Q#Q#R#S.I.M#T#L.D.B#U.G.R#VQtQtQtQtQtQtQtQtQtQtQt", +".m#W.u#X#Y.K.K#Y#Y#Z#h#0#1#Q#j#y#V.qQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; --- torus-trooper-0.22.dfsg1.orig/debian/changelog +++ torus-trooper-0.22.dfsg1/debian/changelog @@ -0,0 +1,70 @@ +torus-trooper (0.22.dfsg1-5build1) karmic; urgency=low + + * No-change rebuild for libbulletml0d1 -> libbulletml0d2 transition. + + -- Steve Kowalik Thu, 16 Jul 2009 14:41:05 +1000 + +torus-trooper (0.22.dfsg1-5) unstable; urgency=low + + * Hardcoded the order in which object files are passed to the linker, + avoiding the "circular initialization dependency" error. (Closes: #521387) + + -- Peter De Wachter Sun, 29 Mar 2009 18:44:16 +0200 + +torus-trooper (0.22.dfsg1-4) unstable; urgency=low + + [ Sylvain Beucler] + * Fix D syntax error in optional torus-trooper-pure.patch + + [ Peter De Wachter ] + * Build a torus-trooper-pure package for the Torus Trooper Pure variant + of this game. + - Removed README.Debian which explained how to patch and rebuild manually. + - fixes.patch: added a Makefile for torus-trooper-pure. + - dotfile.patch: use a different dotfile for torus-trooper-pure. + - Wrote a manpage. + * Changes to keep lintian happy: + - Added a description to all patches. + - Use fancy ツゥ symbols in debian/copyright. + * Bumped to Standards Version 3.8.1. + - Implemented patch target for debian/rules. + - Fixed 'noopt' build option. + + -- Peter De Wachter Tue, 17 Mar 2009 08:00:55 +0100 + +torus-trooper (0.22.dfsg1-3) unstable; urgency=low + + [ Miriam Ruiz ] + * Removed Homepage from long description. + * Replaced XS-DM-Upload-Allowed by DM-Upload-Allowed in debian/control. + + [ Barry deFreese ] + * Remove deprecated encoding tag from desktop file + * Fix icon name in desktop file (Closes: #459275) + + -- Peter De Wachter Thu, 12 Jun 2008 23:13:29 +0200 + +torus-trooper (0.22.dfsg1-2) unstable; urgency=low + + [ Barry deFreese ] + * Add watch file + * Add Homepage field in control + * Remove XS- from VCS fields in control + + [ Peter De Wachter ] + * Save high score when quitting via escape (Closes: #444372) + * Make level selection more intuitive (Closes: #444948) + * Fixed link command, patch from Arthur Loiret. (Closes: #458279, #458642) + * Fixed segfault when SDL init fails. + + [ Miriam Ruiz ] + * Added XS-DM-Upload-Allowed tag to control to allow uploads from Debian + Maintainers. + + -- Miriam Ruiz Thu, 03 Jan 2008 12:12:59 +0000 + +torus-trooper (0.22.dfsg1-1) unstable; urgency=low + + * Initial release (Closes: #439684) + + -- Miriam Ruiz Sat, 25 Aug 2007 19:58:40 +0000 --- torus-trooper-0.22.dfsg1.orig/debian/control +++ torus-trooper-0.22.dfsg1/debian/control @@ -0,0 +1,46 @@ +Source: torus-trooper +Section: games +Priority: extra +Maintainer: Debian Games Team +Uploaders: Miriam Ruiz , Peter De Wachter +Build-Depends: debhelper (>= 5), quilt, gdc, + libglu1-mesa-dev | libglu-dev, libgl1-mesa-dev | libgl-dev, + libsdl1.2-dev, libsdl-mixer1.2-dev, libbulletml-dev +Standards-Version: 3.8.1 +Homepage: http://www.asahi-net.or.jp/~cs8k-cyu/windows/tt_e.html +Vcs-Svn: svn://svn.debian.org/svn/pkg-games/packages/trunk/torus-trooper/ +Vcs-Browser: http://svn.debian.org/wsvn/pkg-games/packages/trunk/torus-trooper/?op=log +DM-Upload-Allowed: yes + +Package: torus-trooper +Architecture: any +Depends: torus-trooper-data (= ${source:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: speeding ship sailing through barrage + Torus Trooper is a fast-paced abstract scrolling shooter game. It + features 3D graphics and a style similar to that of games such as + Tempest. + . + Torus Trooper is another gem among many by Kenta Cho. + +Package: torus-trooper-pure +Architecture: any +Depends: torus-trooper-data (= ${source:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: variant of torus-trooper + Torus Trooper Pure is a fast-paced abstract scrolling shooter game. + It features 3D graphics and a style similar to that of games such as + Tempest. + . + Torus Trooper Pure is a variant of Torus Trooper. Compared to the + original, it manages to make the gameplay feel even faster. + +Package: torus-trooper-data +Architecture: all +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: torus-trooper +Description: speeding ship sailing through barrage - game data + Torus Trooper is a fast-paced abstract scrolling shooter game. It + features 3D graphics and a style similar to that of games such as + Tempest. + . + This package includes the architecture-independent data for Kenta Cho's game + Torus Trooper. --- torus-trooper-0.22.dfsg1.orig/debian/copyright +++ torus-trooper-0.22.dfsg1/debian/copyright @@ -0,0 +1,67 @@ +This package was debianized by Miriam Ruiz on +Sat, 25 Aug 2007 19:58:40 +0000. + +It was downloaded from http://www.asahi-net.or.jp/~cs8k-cyu/windows/tt_e.html + +Upstream Author: + + Kenta Cho + +Copyright: + + Copyright 2004 Kenta Cho + + import/SDL* : Copyright ツゥ 1997, 1998, 1999, 2000, 2001 Sam Lantinga + + debian/patches/torus-trooper-pure.patch: + Copyright ツゥ 2006, HIZ + Obtained from: http://www.mb.ccnw.ne.jp/hiz/game/tt/index_en.html + Released under the same license as the original game. + +License: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +import/SDL*: + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU Lesser General +Public License can be found in `/usr/share/common-licenses/LGPL'. + + +The Debian packaging is ツゥ 2007, Miriam Ruiz and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper.xpm +++ torus-trooper-0.22.dfsg1/debian/torus-trooper.xpm @@ -0,0 +1,155 @@ +/* XPM */ +static char *dummy[]={ +"32 32 120 2", +"Qt c None", +".H c #020202", +".# c #030303", +".q c #080808", +".a c #101010", +".Y c #111111", +"#V c #161616", +".p c #191919", +".b c #1f1f1f", +"#y c #212121", +".r c #242424", +".8 c #272727", +".o c #292929", +"#F c #2a2a2a", +".c c #2e2e2e", +".6 c #363636", +".2 c #373737", +"#r c #393939", +"#c c #3b3b3b", +".n c #3c3c3c", +".Q c #3d3d3d", +".R c #3e3e3e", +".S c #3f3f3f", +".T c #404040", +"#i c #414141", +"#j c #424242", +".P c #434343", +".5 c #444444", +".d c #454545", +".s c #464646", +"#e c #484848", +".4 c #494949", +".3 c #4a4a4a", +".U c #4b4b4b", +"#d c #4c4c4c", +".7 c #505050", +"#C c #515151", +".m c #585858", +".e c #595959", +"#u c #5d5d5d", +"#l c #5e5e5e", +".Z c #606060", +"#m c #636363", +".O c #646464", +"#P c #666666", +"#Q c #686868", +".l c #6a6a6a", +"#R c #6b6b6b", +".f c #6c6c6c", +".t c #6e6e6e", +"#o c #6f6f6f", +".G c #707070", +"#b c #727272", +".k c #757575", +".g c #767676", +".j c #777777", +".V c #787878", +"#G c #797979", +"#W c #7a7a7a", +"#n c #7b7b7b", +".i c #7c7c7c", +".h c #7d7d7d", +"#1 c #7f7f7f", +"#s c #808080", +"#O c #828282", +"#E c #838383", +"#S c #848484", +"#x c #878787", +"#B c #8a8a8a", +".u c #8b8b8b", +".9 c #8c8c8c", +"#0 c #8d8d8d", +"#D c #8f8f8f", +".N c #909090", +"#f c #939393", +".F c #979797", +"#a c #989898", +"#U c #9b9b9b", +".I c #9d9d9d", +"#t c #9e9e9e", +"#p c #9f9f9f", +"#N c #a0a0a0", +"#h c #a2a2a2", +"#X c #a4a4a4", +"#A c #a5a5a5", +"#k c #a6a6a6", +".v c #a7a7a7", +".1 c #a8a8a8", +".W c #a9a9a9", +"#H c #ababab", +".J c #acacac", +".0 c #afafaf", +"#K c #b1b1b1", +".B c #b5b5b5", +".M c #b6b6b6", +"#Z c #b7b7b7", +"## c #b8b8b8", +"#Y c #bababa", +".w c #bbbbbb", +".C c #bdbdbd", +".A c #bebebe", +"#M c #bfbfbf", +".K c #c0c0c0", +"#v c #c1c1c1", +"#J c #c5c5c5", +".X c #c7c7c7", +".L c #cacaca", +"#I c #cbcbcb", +".z c #cccccc", +".D c #cecece", +"#. c #cfcfcf", +".E c #d0d0d0", +".x c #d4d4d4", +"#T c #d5d5d5", +".y c #d7d7d7", +"#L c #dadada", +"#z c #dcdcdc", +"#g c #dddddd", +"#w c #e1e1e1", +"#q c #ffffff", +"QtQtQtQtQtQtQtQtQtQtQtQt.#.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.qQtQt", +"QtQtQtQtQtQtQtQt.#.r.s.t.u.v.w.x.y.y.z.A.B.B.C.A.D.y.y.E.B.F.G.n", +"QtQtQtQtQt.H.c.f.I.J.K.L.M.N.O.P.Q.Q.R.S.T.T.S.S.R.Q.n.U.V.W.X.w", +"QtQtQt.Y.Z.0.A.0.1.g.U.2.n.T.s.3.U.U.U.U.U.U.U.U.U.U.U.4.5.Q.6.7", +"Qt.8.9#.###a#b.P#c.P.4.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#d#e", +"#f#g#h.G.m#i#j.3.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +"#k#l#d.5#e.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".d.4.3.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#m#n#n#n#n#n#o#n#n#n#n#n#o.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#p#q#q#q#q#q#q#q#q#q#q#q#..U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.U.U.U", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.U.U#d", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.U#d.S", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#p.U.U.3#r#s", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#n#q#p.U.U.U#n#q#t#e.s#u#v.D", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.4.P.4#l#k#w#x#y", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.s.Q.4#o#a#z#A.2QtQt", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U#e.S.n#l#B.1.E.v#jQtQtQtQt", +".U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.4.5.Q.2#C#D.B.K.M#E#FQtQtQtQtQtQt", +".n.T.P.s#e.4.4#e#e#e.s.P#i.R.R#C#G#H#I#J#K.9.U.aQtQtQtQtQtQtQtQt", +"#L#M#N#O#P#l.Z#Q#Q#R#S.I.M#T#L.D.B#U.G.R#VQtQtQtQtQtQtQtQtQtQtQt", +".m#W.u#X#Y.K.K#Y#Y#Z#h#0#1#Q#j#y#V.qQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper-pure.desktop +++ torus-trooper-0.22.dfsg1/debian/torus-trooper-pure.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=Torus Trooper Pure +GenericName= +Comment=HIZ's version of Torus Trooper +Icon=torus-trooper-pure +Exec=torus-trooper-pure +Terminal=false +Categories=Game;ArcadeGame; --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper.menu +++ torus-trooper-0.22.dfsg1/debian/torus-trooper.menu @@ -0,0 +1,3 @@ +?package(torus-trooper):needs="X11" section="Games/Action"\ + title="Torus Trooper" command="/usr/games/torus-trooper" \ + icon="/usr/share/pixmaps/torus-trooper.xpm" --- torus-trooper-0.22.dfsg1.orig/debian/compat +++ torus-trooper-0.22.dfsg1/debian/compat @@ -0,0 +1 @@ +5 --- torus-trooper-0.22.dfsg1.orig/debian/rules +++ torus-trooper-0.22.dfsg1/debian/rules @@ -0,0 +1,81 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +DFLAGS = -g +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + DFLAGS += -fdebug +else + DFLAGS += -O2 -frelease +endif + +patch: patch-stamp +patch-stamp: + dh_testdir + $(MAKE) -f /usr/share/quilt/quilt.make patch + cp -a src src-hiz + cd src-hiz && patch -p2 < ../debian/patches/torus-trooper-pure.patch + touch $@ + +build: build-stamp +build-stamp: patch-stamp + dh_testdir + $(MAKE) DFLAGS="$(DFLAGS)" + $(MAKE) DFLAGS="$(DFLAGS)" -fMakefile.pure + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp patch-stamp + rm -rf src-hiz + rm -f torus-trooper torus-trooper-pure + rm -f `find . -name "*.o"` + $(MAKE) -f /usr/share/quilt/quilt.make unpatch + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + +# Build architecture-independent files here. +binary-indep: build install + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_install + dh_installmenu + dh_installman + dh_desktop + dh_link + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +get-orig-source: + dh_testdir + dh_testroot + wget http://www.asahi-net.or.jp/~cs8k-cyu/windows/tt0_22.zip + unzip tt0_22.zip + rm tt/*.dll + rm tt/*.exe + rm tt/lib/*.lib + rm tt/resource/*.RES + tar cvfz ../tt_0.22.dfsg1.orig.tar.gz tt + rm -rf tt0_22.zip tt + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install patch get-orig-source --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper-pure.menu +++ torus-trooper-0.22.dfsg1/debian/torus-trooper-pure.menu @@ -0,0 +1,4 @@ +?package(torus-trooper-pure):needs="X11" section="Games/Action"\ + title="Torus Trooper Pure" command="/usr/games/torus-trooper-pure" \ + icon="/usr/share/pixmaps/torus-trooper-pure.xpm" + --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper.6 +++ torus-trooper-0.22.dfsg1/debian/torus-trooper.6 @@ -0,0 +1,108 @@ +.\" (c) 2007 Miriam Ruiz +.\" (c) 2004 Kenta Cho +.\" +.\" This document is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This package is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this package; if not, write to the Free Software +.\" Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +.TH "Torus Trooper" "6" "" "" "" +.SH "NAME" +torus\-trooper \- speeding ship sailing through barrage +.SH "DESCRIPTION" +Speed! More speed! + +Torus Trooper is a fast\-paced abstract scrolling shooter game. It features 3D graphics and a style similar to that of games such as Tempest. +.SH "OPTIONS" +These options are available: +.TP +\fB\-brightness n\fR +Set the brightness of the screen.(n = 0 \- 100, default = 100) +.TP +\fB\-luminosity n\fR +Set the luminous intensity.(n = 0 \- 100, default = 0) +.TP +\fB\-res x y\fR +Set the screen resolution to (x, y). +.TP +\fB\-nosound\fR +Stop the sound. +.TP +\fB\-window\fR +Launch the game in a window. +.TP +\fB\-fullscreen\fR +Launch the game in fullscreen mode. +.TP +\fB\-reverse\fR +Reverse a shot key and a charge shot key. +.SH "USAGE" +How to operate: +.TP +\fBMovement\fR +Arrow / Num / [WASD] / Joystick + +Hold an up key to increase speed. + +.TP +\fBShot\fR +[Z][L\-Ctrl][.] / Trigger 1, 4, 5, 8 + +Hold a shot key to open automatic fire. + +.TP +\fBCharge shot\fR +[X][L\-Alt][L\-Shift][/] / Trigger 2, 3, 6, 7 + +Hold a charge shot key to charge energy. + \- A charge shot is released when you release a key. + \- A charge shot penetrates enemies and wipes out bullets. + \- A score multiplier is increased according to a number of destroying enemies and bullets. + \- A charge shot acts as a regenerative break. + +.TP +\fBPause\fR +[P] +.P + +How to play: + +At the title screen, select a grade(Normal, Hard, Extreme) and a starting level. Press a shot button to start a game. Press an escape key to quit a game. + +Drive a ship forward and destroy enemies. When time runs out, game is over. + +Remaining time is displayed at the left up corner. + +Remaining time varies according to events: +.TP +\fBShip was destroyed(\-15 sec.)\fR + +You ship is destroyed when it is hit by a bullet. + +.TP +\fBBonus time(+15 sec.)\fR + +You can earn bonus time when you reach a certain score. +The point you have to get is displayed at the right up corner. + +.TP +\fBDestroy the boss(+30 or 45 sec.)\fR + +The boss enemies appear when you destroy or overtake a certain number(displayed at the left down corner) of enemies, and you can earn bonus time by destroying them. + +.TP +\fBReplay mode\fR + +At the title screen, press a charge shot key to see a replay of your last game. Press a left/right key to change a view and an up/down key to change displayed/undisplayed of a status display. +.SH "SEE ALSO" +You can find more about the game on its homepage: http://www.asahi\-net.or.jp/~cs8k\-cyu/windows/tt_e.html +.SH "AUTHOR" +This game has been written by Kenta Cho --- torus-trooper-0.22.dfsg1.orig/debian/torus-trooper-pure.6 +++ torus-trooper-0.22.dfsg1/debian/torus-trooper-pure.6 @@ -0,0 +1,89 @@ +.\" (c) 2007 Miriam Ruiz +.\" (c) 2004 Kenta Cho +.\" +.\" This document is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This package is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this package; if not, write to the Free Software +.\" Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +.TH "Torus Trooper Pure" "6" "" "" "" +.SH "NAME" +torus\-trooper\-pure \- speeding ship sailing through barrage +.SH "DESCRIPTION" +Speed! More speed! + +Torus Trooper Pure is a fast\-paced abstract scrolling shooter game. +It features 3D graphics and a style similar to that of games such as Tempest. +.SH "OPTIONS" +These options are available: +.TP +\fB\-brightness n\fR +Set the brightness of the screen.(n = 0 \- 100, default = 100) +.TP +\fB\-luminosity n\fR +Set the luminous intensity.(n = 0 \- 100, default = 0) +.TP +\fB\-res x y\fR +Set the screen resolution to (x, y). +.TP +\fB\-nosound\fR +Stop the sound. +.TP +\fB\-window\fR +Launch the game in a window. +.TP +\fB\-fullscreen\fR +Launch the game in fullscreen mode. +.TP +\fB\-reverse\fR +Reverse a shot key and a charge shot key. +.SH "USAGE" +How to operate: +.TP +\fBMovement\fR +Left/Right arrows / [4]/[6] / [A]/[D] / Joystick + +.TP +\fBFire\fR +[Z][L\-Ctrl][.] / Trigger 1, 4, 5, 8 + +.TP +\fBPause\fR +[P] +.P + +How to play: + +At the title screen, select a grade(Normal, Hard, Extreme) and a starting level. +Press a fire button to start a game. +Press the escape key to quit a game. + +Press a fire button to open automatic fire. +The more enemies you destroy, the faster you go. +If your ship is hit by enemy fire, it will slow down. + +Release the fire button to start charging for a large blast. +While your ship is charging, enemy fire won't slow it down as much. + +When you destroy or overtake a certain number of enemies (displayed in the lower left corner), a boss enemy will apear. +Destroy it to earn more time. +Your remaining time is displayed at the top left corner. +When the time runs out, the game is over. + +Replay mode: + +At the title screen, press [X] to see a replay of your last game. +Press a left/right key to change a view and an up/down key to change displayed/undisplayed of a status display. + +.SH "SEE ALSO" +You can find more about the game on its homepage: http://www.asahi\-net.or.jp/~cs8k\-cyu/windows/tt_e.html +.SH "AUTHOR" +This game has been written by Kenta Cho --- torus-trooper-0.22.dfsg1.orig/debian/docs +++ torus-trooper-0.22.dfsg1/debian/docs @@ -0,0 +1,2 @@ +readme_e.txt +readme.txt --- torus-trooper-0.22.dfsg1.orig/debian/patches/gdc-0.24-semantics-for-version.patch +++ torus-trooper-0.22.dfsg1/debian/patches/gdc-0.24-semantics-for-version.patch @@ -0,0 +1,36 @@ +# Copyright (C) 2007 Peter De Wachter +# Distributed under the same license as the game. See debian/copyright. + +Index: torus-trooper-0.22.dfsg1/import/opengl.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/import/opengl.d 2007-08-29 21:05:54.000000000 +0200 ++++ torus-trooper-0.22.dfsg1/import/opengl.d 2007-08-29 21:06:08.000000000 +0200 +@@ -1,10 +1,4 @@ +-version (Win32) { +- private import std.c.windows.windows; +- extern(Windows): +-} +-version (linux) { +- extern(C): +-} ++extern(C): + + alias uint GLenum; + alias ubyte GLboolean; +Index: torus-trooper-0.22.dfsg1/import/openglu.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/import/openglu.d 2007-08-29 21:37:37.000000000 +0200 ++++ torus-trooper-0.22.dfsg1/import/openglu.d 2007-08-29 21:37:43.000000000 +0200 +@@ -1,11 +1,6 @@ + import opengl; + +-version (Win32) { +- extern(Windows): +-} +-version (linux) { +- extern(C): +-} ++extern(C): + + GLubyte* gluErrorString ( + GLenum errCode); --- torus-trooper-0.22.dfsg1.orig/debian/patches/avoid-segfault-when-sdl-fails.patch +++ torus-trooper-0.22.dfsg1/debian/patches/avoid-segfault-when-sdl-fails.patch @@ -0,0 +1,16 @@ +# Copyright (C) 2007 Peter De Wachter +# Distributed under the same license as the game. See debian/copyright. + +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/gamemanager.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/gamemanager.d 2007-12-31 21:02:05.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/gamemanager.d 2007-12-31 21:02:39.000000000 +0100 +@@ -149,7 +149,7 @@ + } + + public void saveErrorReplay() { +- if (state == inGameState) ++ if (state !is null && state == inGameState) + inGameState.saveReplay("error.rpl"); + } + --- torus-trooper-0.22.dfsg1.orig/debian/patches/series +++ torus-trooper-0.22.dfsg1/debian/patches/series @@ -0,0 +1,10 @@ +#note: torus-trooper-pure.patch is not managed with quilt +fixes.patch +directories.patch +windowed.patch +dotfile.patch +gdc-0.24-semantics-for-version.patch +window-resizing.patch +save-score-444372.patch +level-select-444948.patch +avoid-segfault-when-sdl-fails.patch --- torus-trooper-0.22.dfsg1.orig/debian/patches/directories.patch +++ torus-trooper-0.22.dfsg1/debian/patches/directories.patch @@ -0,0 +1,51 @@ +# Copyright (C) 2007 Miriam Ruiz +# Distributed under the same license as the game. See debian/copyright. + +Index: torus-trooper_0.22.dfsg1/src/abagames/tt/barrage.d +=================================================================== +--- torus-trooper_0.22.dfsg1.orig/src/abagames/tt/barrage.d 2007-08-29 18:58:00.000000000 +0200 ++++ torus-trooper_0.22.dfsg1/src/abagames/tt/barrage.d 2007-08-29 19:06:28.000000000 +0200 +@@ -93,7 +93,7 @@ + public class BarrageManager { + private: + static BulletMLParserTinyXML *parser[char[]][char[]]; +- static const char[] BARRAGE_DIR_NAME = "barrage"; ++ static const char[] BARRAGE_DIR_NAME = "/usr/share/games/torus-trooper/barrage"; + + public static void load() { + char[][] dirs = listdir(BARRAGE_DIR_NAME); +Index: torus-trooper_0.22.dfsg1/src/abagames/util/sdl/sound.d +=================================================================== +--- torus-trooper_0.22.dfsg1.orig/src/abagames/util/sdl/sound.d 2004-11-10 23:45:22.000000000 +0100 ++++ torus-trooper_0.22.dfsg1/src/abagames/util/sdl/sound.d 2007-08-29 19:06:28.000000000 +0200 +@@ -67,7 +67,7 @@ + public class Music: Sound { + public: + static int fadeOutSpeed = 1280; +- static char[] dir = "sounds/musics"; ++ static char[] dir = "/usr/share/games/torus-trooper/sounds/musics"; + private: + Mix_Music* music; + +@@ -131,7 +131,7 @@ + + public class Chunk: Sound { + public: +- static char[] dir = "sounds/chunks"; ++ static char[] dir = "/usr/share/games/torus-trooper/sounds/chunks"; + private: + Mix_Chunk* chunk; + int chunkChannel; +Index: torus-trooper_0.22.dfsg1/src/abagames/util/sdl/texture.d +=================================================================== +--- torus-trooper_0.22.dfsg1.orig/src/abagames/util/sdl/texture.d 2004-11-10 23:45:22.000000000 +0100 ++++ torus-trooper_0.22.dfsg1/src/abagames/util/sdl/texture.d 2007-08-29 19:06:28.000000000 +0200 +@@ -15,7 +15,7 @@ + */ + public class Texture { + public: +- static char[] imagesDir = "images/"; ++ static char[] imagesDir = "/usr/share/games/torus-trooper/images/"; + private: + GLuint num; + --- torus-trooper-0.22.dfsg1.orig/debian/patches/torus-trooper-pure.patch +++ torus-trooper-0.22.dfsg1/debian/patches/torus-trooper-pure.patch @@ -0,0 +1,990 @@ +# Torus Trooper Pure ver0.2 +# +# Torus Trooperを蒸発させて粉末を集めてみた。 +# ゼヒゼゼヒオタメオタメシクダサイ。 + +# http://www.mb.ccnw.ne.jp/hiz/game/tt/index_en.html + +# 1. The more enemies you destroy, the faster you go. +# 2. If the ship hit by bullet, it will be slower. +# 3. Release button, then the ship starts charging. +# 4. While the ship is charging, it will not be slower so much even if it hit by bullet. +# 5. Bonus time depends on score and penalty time are missing. + +# ○簡単な説明 +# 敵を破壊すればする程、加速していきます。 +# 被弾してもペナルティ無し。でも大幅に減速してしまいます。 +# 危ないと思ったらショットを止めて。被弾による減速を抑えます。 +# ブレーキなんてあるわけない。とにかく加速、カ速、カソク。 +# 点は飾り。とにかく速くボスまで辿り着いて壊す。それだけ。 +# +# +# ○ 操作方法 +# +# - 自機の移動 矢印キー, テンキー, [WASD] / ジョイステック +# +# 左右移動のみを行ないます。上下方向は無意味。自機は常に加速します。 +# +# - ショット [Z][左Ctrl][.] / トリガ1, 4, 5, 8 +# +# 押しっぱなしで連射されます。 +# +# - チャージショット +# +# ショットキーを放すとエネルギーが貯まります。 +# ある程度貯めてからショットキーを押すと発射されます。 +# チャージショットは敵を貫通し、敵弾を消し去ります。 +# スコア倍率は破壊した敵および敵弾の数に応じて上昇します。 +# チャージショットを貯めている最中は敵弾をガードし、速度の減少を抑えます。 +# ただし自機の判定は広くなります。 +# +# ○ タイムの増減 +# +# 自機破壊による減少及び得点によるボーナスタイムはありません。 +# 出来る限り速くボスに辿り着き、撃破するのみです。 +# +# - ボス破壊(+10または20秒) +# +# ○ 追加仕様 +# +# 敵を破壊するとクリスタル(青い板状のもの)が出現し、自動で自機に回収されます。 +# クリスタルを回収すると即座にスピードが上がります。 +# 特にボスを破壊すると大量のクリスタルが出現し、大きく速度が上がります。逃さないように。 +# +# ○メールアドレス +# +# 改造版に対する意見・要望・苦情などはhiz_oka@yahoo.co.jpまで宜しくお願いします。 +# +# ○お詫び *解決しました +# +# Extremeは速度が速すぎるためか性能の低いグラフィックボードではエラーが出る事があるようです・・・ +# 頻繁にエラーが出る場合はオプションで解像度を下げて試して見てください。 +# また、もし性能の高いグラフィックボードでもエラーが出るようでしたら教えて下さい。 +# +# ・解像度の下げ方 +# メモ帳を開き、”tt -res 320 240”と入力し、tt.exeのあるディレクトリにtt.batという名前で保存して下さい。 +# 起動時にはこのtt.batをダブルクリックすれば解像度を下げて起動できます。 +# +# 注: +# ”tt -res 320 240”の二つの数字は任意です。一つ目の数字が横、二つ目の数字が縦の解像度を表します。初期値は640 480です。 +# +# +# ○謝辞 +# +# ビルドの方法はotoyan氏のエントリを参考にさせて頂きました。 +# http://d.hatena.ne.jp/oto-yan/20060412 +# クリスタル用classの作成の際、ABA氏のGunroar ver 0.15を参考にさせて頂きました。 +# http://www.asahi-net.or.jp/~cs8k-cyu/windows/gr.html +# +# あと、D言語初心者なのに挫折しなかったのはABA氏の分かりやすく汎用性に富んだソースのお陰です。本当にありがとうございました。 +# +# ○更新履歴 +# 2006年4月25日 Torus Trooper Pure ver0.2公開 +# -バグフィックス。加速のバランス調整。溜め時の判定を大きく。 +# 2006年4月24日 Torus Trooper Pure ver0.11公開 +# -スキップする最大フレーム数を5から10へ。 +# 2006年4月24日 Torus Trooper Pure ver0.1公開 + +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/barrage.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/barrage.d 2005-01-01 22:40:28.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/barrage.d 2008-09-29 19:46:20.000000000 +0200 +@@ -32,6 +32,7 @@ + + public static this() { + rand = new Rand; ++ if(rand is null){} + } + + public static void setRandSeed(long seed) { +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/crystal.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/crystal.d 2008-09-29 19:43:13.000000000 +0200 +@@ -0,0 +1,112 @@ ++/* ++ * $Id: crystal.d,v 1.2 2005/07/17 11:02:45 kenta Exp $ ++ * ++ * Copyright 2005 Kenta Cho. Some rights reserved. ++ */ ++ module abagames.tt.crystal; ++ ++ private import std.math; ++private import opengl; ++private import abagames.util.actor; ++private import abagames.util.vector; ++private import abagames.tt.shape; ++private import abagames.tt.ship; ++private import abagames.tt.screen; ++private import abagames.tt.tunnel; ++private import abagames.tt.floatletter; ++ ++public class Crystal:Actor{ ++ private: ++ static const int COUNT=30; ++ static const int PULLIN_COUNT = cast(int) (COUNT * 0.8f); ++ Ship ship; ++ Tunnel tunnel; ++ FloatLetterPool floatLetters; ++ Vector pos; ++ Vector vel; ++ int cnt; ++ float deg; ++ ResizableDrawable shape; ++ ++ public static void init() { ++ ++ } ++ ++ public static void close() { ++ } ++ ++ public this() { ++ pos = new Vector; ++ vel = new Vector; ++ } ++ ++ public override void init(Object[] args) { ++ tunnel=cast(Tunnel)args[0]; ++ ship = cast(Ship) args[1]; ++ floatLetters=cast(FloatLetterPool)args[2]; ++ } ++ ++ public void set(Vector p,float deg) { ++ pos.x = p.x; ++ pos.y = p.y; ++ cnt = COUNT; ++ vel.x = 0; ++ vel.y = 0.1f; ++ this.deg=deg; ++ exists(true); ++ } ++ ++ public override void move() { ++ cnt--; ++ ++ float dist = pos.dist(ship.pos); ++ if (dist < 0.02f) ++ dist = 0.02f; ++ if (cnt < PULLIN_COUNT) { ++ Vector tpos=ship.getTargetPos(); ++ vel.x=(tpos.x - pos.x) * 0.15f; ++ vel.y=(tpos.y - pos.y ) * 0.15f; ++ if (cnt < 0 || dist < 2) { ++ exists(false); ++ ship.addSpeed(); ++ FloatLetter fl = floatLetters.getInstance(); ++ if(fl)fl.set("SPEED UP!", new Vector(tpos.x+0.8,tpos.y-3.5f), 0.2f * tpos.y,13,0.5f,0.7f,1.0f); ++ ++ return; ++ } ++ } ++ vel *= 0.95f; ++ pos += vel; ++ } ++ ++public override void draw() { ++ Vector3 sp = tunnel.getPos(pos); ++ float size=3.0; ++ glPushMatrix(); ++ glTranslatef(sp.x, sp.y, sp.z); ++ glRotatef(deg, 0, 0, 1); ++ float width,height; ++ width=height=size; ++ glBegin(GL_LINE_LOOP); ++ Screen.setColor(0.2, 0.5, 1, 0.5); ++ glVertex3f(width, 0, height); ++ glVertex3f(-width, 0, height); ++ glVertex3f(-width, 0, -height); ++ glVertex3f(width, 0, -height); ++ glEnd(); ++ glBegin(GL_TRIANGLE_FAN); ++ Screen.setColor(0.2, 0.5, 1, 0.2); ++ glVertex3f(width, 0, height); ++ glVertex3f(-width, 0, height); ++ glVertex3f(-width, 0, -height); ++ glVertex3f(width, 0, -height); ++ glEnd(); ++ glPopMatrix(); ++ } ++} ++ ++public class CrystalPool: ActorPool!(Crystal) { ++ public this(int n, Object[] args) { ++ super(n, args); ++ } ++} +\ No newline at end of file +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/enemy.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/enemy.d 2005-01-09 13:50:00.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/enemy.d 2008-09-29 19:43:13.000000000 +0200 +@@ -23,6 +23,7 @@ + private import abagames.tt.particle; + private import abagames.tt.shot; + private import abagames.tt.soundmanager; ++private import abagames.tt.crystal; + + /** + * Enemy ships. +@@ -36,6 +37,7 @@ + BulletActorPool bullets; + Ship ship; + ParticlePool particles; ++ CrystalPool crystals; + ShipSpec spec; + Vector pos; + Vector ppos; // Position of the previous frame. +@@ -70,6 +72,7 @@ + bullets = cast(BulletActorPool) args[1]; + ship = cast(Ship) args[2]; + particles = cast(ParticlePool) args[3]; ++ crystals = cast(CrystalPool)args[4]; + pos = new Vector; + ppos = new Vector; + flipMv = new Vector; +@@ -125,9 +128,9 @@ + speed += (1.5f - speed) * 0.15f; + } + if (spec.hasLimitY) +- spec.setSpeed(speed, ship.speed); ++ spec.setSpeed(speed, ship.speed*0.8f); + else if (pos.y > 5 && pos.y < Ship.IN_SIGHT_DEPTH_DEFAULT * 2) +- spec.setSpeed(speed, ship.speed); ++ spec.setSpeed(speed, ship.speed*0.6f); + else + spec.setSpeed(speed); + float my = speed - ship.speed; +@@ -137,7 +140,7 @@ + if (!passed) + if (spec.hasLimitY) + spec.handleLimitY(pos.y, limitY); +- ++ + float ld, rd; + bool steer = false; + if (spec.getRangeOfMovement(ld, rd, pos, tunnel)) { +@@ -191,8 +194,8 @@ + float oy = ppos.y; + float od = atan2(ox, oy); + flipMvCnt = 48; +- flipMv.x = sin(od) * ship.speed * 0.4; +- flipMv.y = cos(od) * ship.speed * 7; ++ //flipMv.x = sin(od) * ship.speed * 0.4; ++ //flipMv.y = cos(od) * ship.speed * 7; + } + } + Slice sl = tunnel.getSlice(pos.y); +@@ -255,6 +258,7 @@ + Enemy en = passedEnemies.getInstance(); + if (en) + en.set(spec, pos.x, pos.y, null, true, baseBank); ++ + } + remove(); + } +@@ -325,6 +329,22 @@ + } + spec.shape.addFragments(pos, particles); + ship.rankUp(spec.isBoss); ++ ++ if(firstShield==1){ ++ Crystal crystal=crystals.getInstance(); ++ if(crystal)crystal.set(pos,d1); ++ }else if (firstShield < 20) { ++ for(double rad=0.0;rad<2.0*PI;rad+=2.0*PI/firstShield){ ++ Crystal crystal=crystals.getInstance(); ++ if(crystal)crystal.set(new Vector(pos.x+1.0*cos(rad),pos.y+1.0*sin(rad)),d1); ++ } ++ }else{ ++ for(double rad=0.0;rad<2.0*PI;rad+=2.0*PI/(firstShield*3.0)){ ++ Crystal crystal=crystals.getInstance(); ++ if(crystal)crystal.set(new Vector(pos.x+1.0*cos(rad),pos.y+1.0*sin(rad)),d1); ++ } ++ } ++ + if (firstShield == 1) { + SoundManager.playSe("small_dest.wav"); + } else if (firstShield < 20) { +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/floatletter.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/floatletter.d 2005-01-01 22:40:28.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/floatletter.d 2008-09-29 19:43:13.000000000 +0200 +@@ -25,8 +25,10 @@ + float mx, my; + float d; + float size; ++ float r,g,b; + char[] msg; + int cnt; ++ int firstcnt; + float alpha; + + public static this() { +@@ -42,7 +44,7 @@ + pos = new Vector3; + } + +- public void set(char[] m, Vector p, float s, int c = 120) { ++ public void set(char[] m, Vector p, float s, int c = 120,float r=1.0f,float g=1.0f,float b=1.0f) { + pos.x = p.x; + pos.y = p.y; + pos.z = 1; +@@ -50,8 +52,11 @@ + my = -rand.nextFloat(0.2) + 0.2f; + d = p.x; + size = s; ++ this.r=r; ++ this.g=g; ++ this.b=b; + msg = m; +- cnt = c; ++ firstcnt=cnt = c; + alpha = 0.8f; + exists = true; + } +@@ -64,16 +69,16 @@ + if (cnt < 0) + exists = false; + if (alpha >= 0.03f) +- alpha -= 0.03f; ++ alpha -= 0.03f*90.0f/firstcnt; + } + + public override void draw() { + glPushMatrix(); + Vector3 sp = tunnel.getPos(pos); + glTranslatef(0, 0, sp.z); +- Screen.setColor(1, 1, 1, 1); ++ Screen.setColor(r, g, b, 1); + Letter.drawString(msg, sp.x, sp.y, size, Letter.Direction.TO_RIGHT, 2, false, d * 180 / PI); +- Screen.setColor(1, 1, 1, alpha); ++ Screen.setColor(r, g, b, alpha); + Letter.drawString(msg, sp.x, sp.y, size, Letter.Direction.TO_RIGHT, 3, false, d * 180 / PI); + glPopMatrix(); + } +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/gamemanager.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/gamemanager.d 2005-01-09 13:50:00.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/gamemanager.d 2008-09-29 19:44:30.000000000 +0200 +@@ -23,6 +23,7 @@ + private import abagames.tt.bulletactor; + private import abagames.tt.bulletactorpool; + private import abagames.tt.barrage; ++private import abagames.tt.crystal; + private import abagames.tt.enemy; + private import abagames.tt.stagemanager; + private import abagames.tt.shape; +@@ -46,6 +47,7 @@ + Ship ship; + ShotPool shots; + BulletActorPool bullets; ++ CrystalPool crystals; + EnemyPool enemies; + ParticlePool particles; + FloatLetterPool floatLetters; +@@ -77,7 +79,12 @@ + bargs ~= tunnel; + bargs ~= ship; + bullets = new BulletActorPool(512, bargs); +- Object[] pargs; ++ Object[] cargs; ++ cargs ~=tunnel; ++ cargs ~=ship; ++ cargs ~=floatLetters; ++ crystals = new CrystalPool(128,cargs); ++ Object[] pargs; + pargs ~= tunnel; + pargs ~= ship; + particles = new ParticlePool(1024, pargs); +@@ -86,6 +93,7 @@ + eargs ~= bullets; + eargs ~= ship; + eargs ~= particles; ++ eargs ~= crystals; + enemies = new EnemyPool(64, eargs); + passedEnemies = new EnemyPool(64, eargs); + enemies.setPassedEnemies(passedEnemies); +@@ -104,10 +112,10 @@ + titleManager = new TitleManager(prefManager, pad, ship, this); + rand = new Rand; + +- inGameState = new InGameState(tunnel, ship, shots, bullets, enemies, ++ inGameState = new InGameState(tunnel, ship, shots, bullets, crystals,enemies, + particles, floatLetters, stageManager, + pad, prefManager, this); +- titleState = new TitleState(tunnel, ship, shots, bullets, enemies, ++ titleState = new TitleState(tunnel, ship, shots, bullets, crystals,enemies, + particles, floatLetters, stageManager, + pad, titleManager, passedEnemies, inGameState); + inGameState.seed = rand.nextInt32(); +@@ -219,6 +227,7 @@ + Tunnel tunnel; + Ship ship; + ShotPool shots; ++ CrystalPool crystals; + BulletActorPool bullets; + EnemyPool enemies; + ParticlePool particles; +@@ -228,7 +237,7 @@ + int _grade; + long _seed; + +- public this(Tunnel tunnel, Ship ship, ShotPool shots, BulletActorPool bullets, ++ public this(Tunnel tunnel, Ship ship, ShotPool shots, BulletActorPool bullets,CrystalPool crystals, + EnemyPool enemies, ParticlePool particles, FloatLetterPool floatLetters, + StageManager stageManager) { + this.tunnel = tunnel; +@@ -239,6 +248,7 @@ + this.particles = particles; + this.floatLetters = floatLetters; + this.stageManager = stageManager; ++ this.crystals=crystals; + } + + public abstract void start(); +@@ -265,17 +275,17 @@ + private: + static const int DEFAULT_EXTEND_SCORE = 100000; + static const int MAX_EXTEND_SCORE = 500000; +- static const int DEFAULT_TIME = 120000; +- static const int MAX_TIME = 120000; +- static const int SHIP_DESTROYED_PENALTY_TIME = -15000; +- static const char[] SHIP_DESTROYED_PENALTY_TIME_MSG = "-15 SEC."; +- static const int EXTEND_TIME = 15000; +- static const char[] EXTEND_TIME_MSG = "+15 SEC."; +- static const int NEXT_ZONE_ADDITION_TIME = 30000; +- static const char[] NEXT_ZONE_ADDITION_TIME_MSG = "+30 SEC."; +- static const int NEXT_LEVEL_ADDITION_TIME = 45000; +- static const char[] NEXT_LEVEL_ADDITION_TIME_MSG = "+45 SEC."; +- static const int BEEP_START_TIME = 15000; ++ static const int DEFAULT_TIME = 45000; ++ static const int MAX_TIME = 60000; ++ static const int SHIP_DESTROYED_PENALTY_TIME = 0;//-15000; ++ static const char[] SHIP_DESTROYED_PENALTY_TIME_MSG = "";//"-15 SEC."; ++ static const int EXTEND_TIME = 0;//15000; ++ static const char[] EXTEND_TIME_MSG = "";//"+15 SEC."; ++ static const int NEXT_ZONE_ADDITION_TIME = 10000; ++ static const char[] NEXT_ZONE_ADDITION_TIME_MSG = "+10 SEC."; ++ static const int NEXT_LEVEL_ADDITION_TIME = 20000; ++ static const char[] NEXT_LEVEL_ADDITION_TIME_MSG = "+20 SEC."; ++ static const int BEEP_START_TIME = 10000; + Pad pad; + PrefManager prefManager; + GameManager gameManager; +@@ -292,11 +302,11 @@ + bool pausePressed; + ReplayData _replayData; + +- public this(Tunnel tunnel, Ship ship, ShotPool shots, BulletActorPool bullets, ++ public this(Tunnel tunnel, Ship ship, ShotPool shots, BulletActorPool bullets,CrystalPool crystals, + EnemyPool enemies, ParticlePool particles, FloatLetterPool floatLetters, + StageManager stageManager, + Pad pad, PrefManager prefManager, GameManager gameManager) { +- super(tunnel, ship, shots, bullets, enemies, particles, floatLetters, stageManager); ++ super(tunnel, ship, shots, bullets,crystals, enemies, particles, floatLetters, stageManager); + this.pad = pad; + this.prefManager = prefManager; + this.gameManager = gameManager; +@@ -307,6 +317,7 @@ + Ship.replayMode = false; + shots.clear(); + bullets.clear(); ++ crystals.clear(); + enemies.clear(); + particles.clear(); + floatLetters.clear(); +@@ -384,6 +395,7 @@ + } + ship.move(); + stageManager.move(); ++ crystals.move(); + enemies.move(); + shots.move(); + bullets.move(); +@@ -432,6 +444,7 @@ + tunnel.draw(); + glDisable(GL_CULL_FACE); + particles.draw(); ++ crystals.draw(); + enemies.draw(); + ship.draw(); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +@@ -494,7 +507,7 @@ + + private void extendShip() { + changeTime(EXTEND_TIME, EXTEND_TIME_MSG); +- SoundManager.playSe("extend.wav"); ++ //SoundManager.playSe("extend.wav"); + } + + private void changeTime(int ct, char[] msg) { +@@ -535,14 +548,14 @@ + ReplayData replayData; + int gameOverCnt; + +- public this(Tunnel tunnel, Ship ship, ShotPool shots, BulletActorPool bullets, ++ public this(Tunnel tunnel, Ship ship, ShotPool shots, BulletActorPool bullets,CrystalPool crystals, + EnemyPool enemies, ParticlePool particles, FloatLetterPool floatLetters, + StageManager stageManager, + Pad pad, + TitleManager titleManager, + EnemyPool passedEnemies, + InGameState inGameState) { +- super(tunnel, ship, shots, bullets, enemies, particles, floatLetters, stageManager); ++ super(tunnel, ship, shots, bullets,crystals, enemies, particles, floatLetters, stageManager); + this.pad = pad; + this.titleManager = titleManager; + this.passedEnemies = passedEnemies; +@@ -569,6 +582,7 @@ + private void clearAll() { + shots.clear(); + bullets.clear(); ++ crystals.clear(); + enemies.clear(); + particles.clear(); + floatLetters.clear(); +@@ -614,6 +628,7 @@ + shots.move(); + bullets.move(); + particles.move(); ++ crystals.move(); + floatLetters.move(); + passedEnemies.move(); + inGameState.decrementTime(); +@@ -636,6 +651,7 @@ + tunnel.drawBackward(); + glDisable(GL_CULL_FACE); + particles.draw(); ++ crystals.draw(); + enemies.draw(); + passedEnemies.draw(); + ship.draw(); +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/ship.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/ship.d 2005-01-09 13:50:00.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/ship.d 2008-09-29 19:43:13.000000000 +0200 +@@ -44,6 +44,7 @@ + static const int RESTART_CNT = 268; + static const int INVINCIBLE_CNT = 228; + static const float HIT_WIDTH = 0.00025; ++ static const float SHIELD_WIDTH=0.004; + static const float EYE_HEIGHT = 0.8f; + static const float LOOKAT_HEIGHT = 0.9f; + Rand rand; +@@ -65,9 +66,12 @@ + // Speed and max bank angle change according to the game's grade. + static const float[] SPEED_DEFAULT = [0.4, 0.6, 0.8]; + static const float[] SPEED_MAX = [0.8, 1.2, 1.6]; +- static const float[] ACCEL_RATIO = [0.002, 0.003, 0.004]; ++ static const float[] SPEED_LIMIT = [2.4,3.6,4.8]; ++ static const float[] ACCEL_RATIO = [0.0015, 0.002, 0.003]; ++ static const float[] CRYSTAL_RATIO = [0.003, 0.004, 0.006]; + float targetSpeed; + float _speed; ++ bool incspeed; + float _inSightDepth; // A visual range in which enemies can fire bullets. + + static const float[] BANK_MAX_DEFAULT = [0.8, 1.0, 1.2]; +@@ -129,7 +133,7 @@ + public void setShots(ShotPool shots) { + this.shots = shots; + } +- ++ + public void setGameState(InGameState gameState) { + this.gameState = gameState; + } +@@ -143,6 +147,7 @@ + _eyePos.x = _eyePos.y = 0; + bank = 0; + _speed = 0; ++ incspeed=false; + d1 = d2 = 0; + cnt = -INVINCIBLE_CNT; + fireShotCnt = sideFireShotCnt = 0; +@@ -152,6 +157,7 @@ + nextStarAppDist = 0; + lap = 1; + isGameOver = false; ++ targetSpeed = 0; + restart(); + if (replayMode) + camera.start(); +@@ -159,8 +165,8 @@ + } + + public void restart() { +- targetSpeed = 0; + fireCnt = 0; ++ incspeed=false; + sideFireCnt = 99999; + if (chargingShot) { + chargingShot.remove(); +@@ -207,19 +213,21 @@ + clearVisibleBullets(); + } + float as = targetSpeed; +- if (btn & Pad.Button.B) { ++ /*if (btn & Pad.Button.B) { + as *= 0.5f; +- } else { ++ } else {*/ + float acc = regenerativeCharge * 0.1f; + _speed += acc; + as += acc; + regenerativeCharge -= acc; +- } ++ //} + if (_speed < as) { + _speed += (as - _speed) * 0.015f; +- } else { +- if (btn & Pad.Button.B) ++ } ++ else { ++ /*if (btn & Pad.Button.B) + regenerativeCharge -= (as - _speed) * 0.05f; ++ */ + _speed += (as - _speed) * 0.05f; + } + _pos.y += _speed; +@@ -227,6 +235,7 @@ + int tmv = cast(int) tunnelOfs; + tunnel.goToNextSlice(tmv); + addScore(tmv); ++ addScore(cast(int)((speed/SPEED_MAX[grade])*30.0f)); + tunnelOfs = _pos.y - cast(int) _pos.y; + if (pos.y >= tunnel.getTorusLength()) { + pos.y -= tunnel.getTorusLength(); +@@ -240,24 +249,28 @@ + pos3.x = sp.x; + pos3.y = sp.y; + pos3.z = sp.z; +- ++ float bankspeed; ++ if(btn & Pad.Button.A)bankspeed=0.15f; ++ else bankspeed=0.08f; + if (dir & Pad.Dir.RIGHT) +- bank += (-bankMax - bank) * 0.1f; ++ bank += (-bankMax - bank) * bankspeed; + if (dir & Pad.Dir.LEFT) +- bank += (bankMax - bank) * 0.1f; ++ bank += (bankMax - bank) * bankspeed; + bool overAccel = false; +- if (dir & Pad.Dir.UP) { ++ //if (dir & Pad.Dir.UP) { + if (_relPos.y < RELPOS_MAX_Y) { + _relPos.y += RELPOS_Y_MOVE; + } else { +- targetSpeed += ACCEL_RATIO[grade]; +- if (!(btn & Pad.Button.B) && !_inBossMode && !_isBossModeEnd) ++ targetSpeed += ACCEL_RATIO[grade]; ++ ++ //if (!(btn & Pad.Button.B) /*&& !_inBossMode && !_isBossModeEnd*/) + overAccel = true; + } +- } +- if (dir & Pad.Dir.DOWN && _relPos.y > 0) ++ //} ++ /*if (dir & Pad.Dir.DOWN && _relPos.y > 0) + _relPos.y -= RELPOS_Y_MOVE; +- float acc = _relPos.y * (SPEED_MAX[grade] - SPEED_DEFAULT[grade]) / RELPOS_MAX_Y + ++ */ ++ acc = _relPos.y * (SPEED_MAX[grade] - SPEED_DEFAULT[grade]) / RELPOS_MAX_Y + + SPEED_DEFAULT[grade]; + if (overAccel) + targetSpeed += (acc - targetSpeed) * 0.001f; +@@ -266,8 +279,11 @@ + else + targetSpeed += (acc - targetSpeed) * 0.03f; + _inSightDepth = IN_SIGHT_DEPTH_DEFAULT * (1 + _relPos.y / RELPOS_MAX_Y); ++ + if (_speed > SPEED_MAX[grade]) + _inSightDepth += IN_SIGHT_DEPTH_DEFAULT * (_speed - SPEED_MAX[grade]) / SPEED_MAX[grade] * 3.0f; ++ if (_speed > SPEED_LIMIT[grade]) ++ _speed+=(SPEED_LIMIT[grade]-_speed)*0.01f; + bank *= 0.9f; + _pos.x += bank * 0.08f * (SliceState.DEFAULT_RAD / tunnel.getRadius(_relPos.y)); + if (_pos.x < 0) +@@ -293,7 +309,7 @@ + bm = 1; + else if (bm < -1) + bm = -1; +- _speed *= (1 - fabs(bm)); ++ _speed *= (1 - fabs(bm)*0.03f); + bank += bm; + float lo = fabs(pos.x - sl.getLeftEdgeDeg()); + if (lo > PI) +@@ -309,18 +325,15 @@ + } + d1 += (sl.d1 - d1) * 0.05; + d2 += (sl.d2 - d2) * 0.05; +- +- if (btn & Pad.Button.B) { +- if (!chargingShot) { +- chargingShot = shots.getInstanceForced(); +- chargingShot.set(true); +- } +- } else { +- if (chargingShot) { ++ ++ ++ ++ ++ if (btn & Pad.Button.A) { ++ if (chargingShot) { + chargingShot.release(); + chargingShot = null; +- } +- if (btn & Pad.Button.A) { ++ } + if (fireCnt <= 0) { + fireCnt = FIRE_INTERVAL; + Shot shot = shots.getInstance(); +@@ -356,7 +369,9 @@ + sideFireShotCnt++; + } + } +- } ++ }else if (!chargingShot) { ++ chargingShot = shots.getInstanceForced(); ++ chargingShot.set(true); + } + if (fireCnt > 0) + fireCnt--; +@@ -475,6 +490,7 @@ + if (cnt <= 0) + return false; + float bmvx, bmvy, inaa; ++ int btn = pad.getButtonState(); + bmvx = pp.x; + bmvy = pp.y; + bmvx -= p.x; +@@ -497,15 +513,36 @@ + inab = bmvx * sofsx + bmvy * sofsy; + if (inab >= 0 && inab <= inaa) { + hd = sofsx * sofsx + sofsy * sofsy - inab * inab / inaa; +- if (hd >= 0 && hd <= HIT_WIDTH) { +- destroyed(); +- return true; ++ if(btn&&Pad.Button.A){ ++ if (hd >= 0 && hd <= HIT_WIDTH ){ ++ ++ destroyed(); ++ return true; ++ } ++ }else{ ++ if (hd >= 0 && hd <= SHIELD_WIDTH ){ ++ ++ guard(); ++ return true; ++ } + } + } + } + return false; + } +- ++ private void guard(){ ++ if (cnt <= 0) ++ return; ++ for (int i = 0; i < 64; i++) { ++ Particle pt = particles.getInstanceForced(); ++ pt.set(relPos, 1, rand.nextSignedFloat(PI / 8), ++ rand.nextSignedFloat(2.5), 0.5 + rand.nextFloat(1), ++ 1, 0.2 + rand.nextFloat(0.8), 0.2, 32); ++ } ++ incspeed=false; ++ targetSpeed*=0.9; ++ setScreenShake(16, 0.01f); ++ } + private void destroyed() { + if (cnt <= 0) + return; +@@ -515,6 +552,8 @@ + rand.nextSignedFloat(2.5), 0.5 + rand.nextFloat(1), + 1, 0.2 + rand.nextFloat(0.8), 0.2, 32); + } ++ incspeed=false; ++ targetSpeed*=0.6f; + gameState.shipDestroyed(); + SoundManager.playSe("myship_dest.wav"); + setScreenShake(32, 0.05f); +@@ -534,12 +573,15 @@ + return; + if (_inBossMode) { + bossAppNum--; +- if (bossAppNum <= 0) { +- rank++; ++ if (bossAppNum <= 0) { ++ ++ //rank++; ++ + gameState.gotoNextZone(); + _inBossMode = false; + _isBossModeEnd = true; + bossAppRank = 9999999; ++ + return; + } + } +@@ -575,6 +617,11 @@ + public void addScore(int sc) { + gameState.addScore(sc); + } ++ public void addSpeed(){ ++ targetSpeed+=CRYSTAL_RATIO[grade]; ++ _speed+=CRYSTAL_RATIO[grade]; ++ incspeed=true; ++ } + + public void clearVisibleBullets() { + gameState.clearVisibleBullets(); +@@ -593,12 +640,12 @@ + } + + public void drawFront() { +- Letter.drawNum(cast(int) (speed * 2500), 490, 420, 20); ++ Letter.drawNum(cast(int) (speed* 2500), 490, 420, 20); + Letter.drawString("KM/H", 540, 445, 12); + Letter.drawNum(rank, 150, 432, 16); + Letter.drawString("/", 185, 448, 10); + Letter.drawNum(zoneEndRank - rank, 250, 448, 10); +- /*Letter.drawString("LAP", 20, 388, 8, Letter.Direction.TO_RIGHT, 1); ++ /* Letter.drawString("LAP", 20, 388, 8, Letter.Direction.TO_RIGHT, 1); + Letter.drawNum(lap, 120, 388, 8); + Letter.drawString(".", 130, 386, 8); + Letter.drawNum(cast(int) (pos.y * 1000000 / tunnel.getTorusLength()), 230, 388, 8, +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/shot.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/shot.d 2005-01-02 15:49:32.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/shot.d 2008-09-29 19:43:13.000000000 +0200 +@@ -28,12 +28,12 @@ + private: + static const float SPEED = 0.75; + static const float RANGE_MIN = 2; +- static const float SIZE_MIN = 0.1; ++ static const float SIZE_MIN = 1.0; + static const int MAX_CHARGE = 90; + static const float SIZE_RATIO = 0.15; + static const float RANGE_RATIO = 0.5; + static const float CHARGE_RELEASE_RATIO = 0.25; +- static const int MAX_MULTIPLIER = 100; ++ static const int MAX_MULTIPLIER = 50; + static ShotShape shotShape, chargeShotShape; + static Rand rand; + Tunnel tunnel; +@@ -134,7 +134,7 @@ + chargeCnt++; + trgSize = (SIZE_MIN + chargeCnt * SIZE_RATIO) * 0.33f; + } +- if ((chargeSeCnt % 52) == 0) ++ if ((chargeSeCnt % 21) == 0) + SoundManager.playSe("charge.wav"); + chargeSeCnt++; + } else { +@@ -179,7 +179,7 @@ + else if (sc >= 2000) + size = 0.7; + size *= (1 + multiplier * 0.01f); +- fl.set("X" ~ std.string.toString(multiplier), pos, size * pos.y, ++ if(fl)fl.set("X" ~ std.string.toString(multiplier), pos, size * pos.y, + cast(int) (30 + multiplier * 0.3f)); + } + if (chargeShot) { +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/stagemanager.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/stagemanager.d 2005-01-09 13:50:00.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/stagemanager.d 2008-09-29 19:43:13.000000000 +0200 +@@ -516,8 +516,8 @@ + public void handleLimitY(inout float y, inout float limitY) { + if (y > limitY) + y += (limitY - y) * 0.05f; +- else +- limitY += (y - limitY) * 0.05f; ++ //else ++ //limitY += (y - limitY) * 0.05f; + limitY -= 0.01f; + } + +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/tunnel.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/tunnel.d 2005-01-02 15:49:32.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/tunnel.d 2008-09-29 19:43:13.000000000 +0200 +@@ -846,7 +846,7 @@ + } + + public void changeWidth(Rand rand) { +- _courseWidth = rand.nextInt(_pointNum / 4) + _pointNum * 0.36f; ++ _courseWidth = rand.nextInt(_pointNum / 4) + _pointNum * 0.4f; + } + + public void changeWidthToFull() { +@@ -858,7 +858,7 @@ + } + + public void changeToEasyCurve(Rand rand) { +- _mp = rand.nextFloat(0.05) + 0.04; ++ _mp = rand.nextFloat(0.02) + 0.01;//_mp = rand.nextFloat(0.05) + 0.04; + if (rand.nextInt(2) == 0) + _mp = -_mp; + } +@@ -868,7 +868,7 @@ + } + + public void changeToTightCurve(Rand rand, int dir) { +- _mp = (rand.nextFloat(0.04) + 0.1) * dir; ++ _mp = (rand.nextFloat(0.02) + 0.04) * dir;//_mp = (rand.nextFloat(0.04) + 0.1) * dir; + } + + public void blend(SliceState s1, SliceState s2, float ratio) { +Index: torus-trooper-0.22.dfsg1/src/abagames/util/sdl/mainloop.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/util/sdl/mainloop.d 2004-11-10 23:45:22.000000000 +0100 ++++ torus-trooper-0.22.dfsg1/src/abagames/util/sdl/mainloop.d 2008-09-29 19:43:13.000000000 +0200 +@@ -23,7 +23,7 @@ + const int INTERVAL_BASE = 16; + int interval = INTERVAL_BASE; + int accframe = 0; +- int maxSkipFrame = 5; ++ int maxSkipFrame = 10; + SDL_Event event; + private: + Screen screen; +@@ -88,21 +88,21 @@ + nowTick = SDL_GetTicks(); + frame = cast(int) (nowTick-prvTickCount) / interval; + if (frame <= 0) { +- frame = 1; +- SDL_Delay(prvTickCount+interval-nowTick); +- if (accframe) { +- prvTickCount = SDL_GetTicks(); +- } else { +- prvTickCount += interval; +- } +- } else if (frame > maxSkipFrame) { +- frame = maxSkipFrame; +- prvTickCount = nowTick; +- } else { +- prvTickCount += frame * interval; +- } +- for (i = 0; i < frame; i++) { +- gameManager.move(); ++ frame = 1; ++ SDL_Delay(prvTickCount+interval-nowTick); ++ if (accframe) { ++ prvTickCount = SDL_GetTicks(); ++ } else { ++ prvTickCount += interval; ++ } ++ } else if (frame > maxSkipFrame) { ++ frame = maxSkipFrame; ++ prvTickCount = nowTick; ++ } else { ++ prvTickCount += frame * interval; ++ } ++ for (i = 0; i < frame; i++) { ++ gameManager.move(); + } + screen.clear(); + gameManager.draw(); --- torus-trooper-0.22.dfsg1.orig/debian/patches/dotfile.patch +++ torus-trooper-0.22.dfsg1/debian/patches/dotfile.patch @@ -0,0 +1,88 @@ +# Copyright (C) 2007 Peter De Wachter +# Distributed under the same license as the game. See debian/copyright. + +--- a/src/abagames/tt/prefmanager.d ++++ b/src/abagames/tt/prefmanager.d +@@ -6,6 +6,9 @@ + module abagames.tt.prefmanager; + + private import std.stream; ++private import std.string; ++private import std.file; ++private import std.c.stdlib; + private import abagames.util.prefmanager; + private import abagames.tt.ship; + +@@ -22,11 +25,27 @@ + _prefData = new PrefData; + } + ++ public static char[] pref_dir() { ++ char * home = getenv("HOME"); ++ if (home is null) ++ throw new Error("HOME environment variable is not defined"); ++ version (pure) { ++ char[] dir = std.string.toString(home) ~ "/.torus-trooper-pure"; ++ } else { ++ char[] dir = std.string.toString(home) ~ "/.torus-trooper"; ++ } ++ try { ++ mkdir(dir); ++ } catch (FileException e) { ++ } ++ return dir; ++ } ++ + public void load() { + auto File fd = new File; + try { + int ver; +- fd.open(PREF_FILE); ++ fd.open(pref_dir() ~ "/" ~ PREF_FILE); + fd.read(ver); + if (ver != VERSION_NUM) + throw new Error("Wrong version num"); +@@ -41,7 +60,7 @@ + + public void save() { + auto File fd = new File; +- fd.create(PREF_FILE); ++ fd.create(pref_dir() ~ "/" ~ PREF_FILE); + fd.write(VERSION_NUM); + _prefData.save(fd); + fd.close(); +--- a/src/abagames/tt/replay.d ++++ b/src/abagames/tt/replay.d +@@ -7,13 +7,13 @@ + + private import std.stream; + private import abagames.util.sdl.recordablepad; ++private import abagames.tt.prefmanager; + + /** + * Manage a replay data. + */ + public class ReplayData { + public: +- static const char[] dir = "replay"; + static const int VERSION_NUM = 20; + PadRecord padRecord; + float level; +@@ -23,7 +23,7 @@ + + public void save(char[] fileName) { + auto File fd = new File; +- fd.create(dir ~ "/" ~ fileName); ++ fd.create(PrefManager.pref_dir() ~ "/" ~ fileName); + fd.write(VERSION_NUM); + fd.write(level); + fd.write(grade); +@@ -34,7 +34,7 @@ + + public void load(char[] fileName) { + auto File fd = new File; +- fd.open(dir ~ "/" ~ fileName); ++ fd.open(PrefManager.pref_dir() ~ "/" ~ fileName); + int ver; + fd.read(ver); + if (ver != VERSION_NUM) --- torus-trooper-0.22.dfsg1.orig/debian/patches/window-resizing.patch +++ torus-trooper-0.22.dfsg1/debian/patches/window-resizing.patch @@ -0,0 +1,37 @@ +# Copyright (C) 2007 Peter De Wachter +# Distributed under the same license as the game. See debian/copyright. + +Index: torus-trooper-0.22.dfsg1/src/abagames/util/sdl/screen3d.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/util/sdl/screen3d.d 2007-09-02 20:25:30.000000000 +0200 ++++ torus-trooper-0.22.dfsg1/src/abagames/util/sdl/screen3d.d 2007-09-02 20:26:08.000000000 +0200 +@@ -23,7 +23,9 @@ + static bool windowMode = true; + static float nearPlane = 0.1; + static float farPlane = 1000; ++ + private: ++ static Uint32 videoFlags; + + protected abstract void init(); + protected abstract void close(); +@@ -35,7 +37,6 @@ + "Unable to initialize SDL: " ~ std.string.toString(SDL_GetError())); + } + // Create an OpenGL screen. +- Uint32 videoFlags; + if (windowMode) { + videoFlags = SDL_OPENGL | SDL_RESIZABLE; + } else { +@@ -55,6 +56,11 @@ + // Reset viewport when the screen is resized. + + public void screenResized() { ++ if (SDL_SetVideoMode(width, height, 0, videoFlags) == null) { ++ throw new Exception ++ ("Unable to resize SDL screen: " ~ std.string.toString(SDL_GetError())); ++ } ++ + glViewport(0, 0, width, height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); --- torus-trooper-0.22.dfsg1.orig/debian/patches/fixes.patch +++ torus-trooper-0.22.dfsg1/debian/patches/fixes.patch @@ -0,0 +1,325 @@ +# Copyright (C) 2007 Marcel Unbehaun +# Distributed under the same license as the game. See debian/copyright. + +--- a/import/SDL.d ++++ b/import/SDL.d +@@ -20,18 +20,28 @@ + slouken@devolution.com + */ + +-import SDL_types; +-import SDL_getenv; +-import SDL_error; +-import SDL_rwops; +-import SDL_timer; +-import SDL_audio; +-import SDL_cdrom; +-import SDL_joystick; +-import SDL_events; +-import SDL_video; +-import SDL_byteorder; +-import SDL_Version; ++public import SDL_Keysym; ++public import SDL_Version; ++public import SDL_active; ++public import SDL_audio; ++public import SDL_byteorder; ++public import SDL_cdrom; ++public import SDL_copying; ++public import SDL_endian; ++public import SDL_error; ++public import SDL_events; ++public import SDL_getenv; ++public import SDL_joystick; ++public import SDL_keyboard; ++public import SDL_mouse; ++public import SDL_mutex; ++public import SDL_quit; ++public import SDL_rwops; ++public import SDL_syswm; ++public import SDL_thread; ++public import SDL_timer; ++public import SDL_types; ++public import SDL_video; + + extern(C): + +@@ -73,20 +83,3 @@ + */ + void SDL_Quit(); + +-/+ +-void SDL_SetModuleHandle(void *hInst); +-extern(Windows) void* GetModuleHandle(char*); +- +-static this() +-{ +- /* Load SDL dynamic link library */ +- if (SDL_Init(SDL_INIT_NOPARACHUTE) < 0) +- throw new Error("Error loading SDL"); +- SDL_SetModuleHandle(GetModuleHandle(null)); +-} +- +-static ~this() +-{ +- SDL_Quit(); +-} +-+/ +--- a/import/SDL_events.d ++++ b/import/SDL_events.d +@@ -304,8 +304,8 @@ + If 'state' is set to SDL_QUERY, SDL_EventState() will return the + current processing state of the specified event. + */ +-const uint SDL_QUERY = cast(uint) -1; +-const uint SDL_IGNORE = 0; +-const uint SDL_DISABLE = 0; +-const uint SDL_ENABLE = 1; ++const int SDL_QUERY = -1; ++const int SDL_IGNORE = 0; ++const int SDL_DISABLE = 0; ++const int SDL_ENABLE = 1; + Uint8 SDL_EventState(Uint8 type, int state); +--- /dev/null ++++ b/Makefile +@@ -0,0 +1,30 @@ ++SOURCES=src/abagames/tt/camera.d src/abagames/tt/boot.d\ ++ src/abagames/tt/barrage.d src/abagames/tt/bullettarget.d\ ++ src/abagames/tt/replay.d src/abagames/tt/ship.d src/abagames/tt/particle.d\ ++ src/abagames/tt/tunnel.d src/abagames/tt/enemy.d src/abagames/tt/bulletactor.d\ ++ src/abagames/tt/gamemanager.d src/abagames/tt/screen.d src/abagames/tt/title.d\ ++ src/abagames/tt/stagemanager.d src/abagames/tt/bulletactorpool.d\ ++ src/abagames/tt/shot.d src/abagames/tt/prefmanager.d\ ++ src/abagames/tt/bulletimpl.d src/abagames/tt/letter.d\ ++ src/abagames/tt/soundmanager.d src/abagames/tt/floatletter.d\ ++ src/abagames/tt/shape.d src/abagames/util/actor.d src/abagames/util/rand.d\ ++ src/abagames/util/sdl/input.d src/abagames/util/sdl/sound.d\ ++ src/abagames/util/sdl/pad.d src/abagames/util/sdl/screen3d.d\ ++ src/abagames/util/sdl/mainloop.d src/abagames/util/sdl/gamemanager.d\ ++ src/abagames/util/sdl/screen.d src/abagames/util/sdl/recordablepad.d\ ++ src/abagames/util/sdl/luminous.d src/abagames/util/sdl/sdlexception.d\ ++ src/abagames/util/sdl/displaylist.d src/abagames/util/sdl/texture.d\ ++ src/abagames/util/iterator.d src/abagames/util/bulletml/bullet.d\ ++ src/abagames/util/bulletml/bulletsmanager.d src/abagames/util/tokenizer.d\ ++ src/abagames/util/prefmanager.d src/abagames/util/vector.d\ ++ src/abagames/util/logger.d import/SDL_video.d import/SDL_mixer.d ++OBJS=$(SOURCES:.d=.o) ++EXE=torus-trooper ++ ++all: $(EXE) ++ ++$(EXE): $(OBJS) ++ gdc -o $@ $(OBJS) -lbulletml -lSDL -lGL -lGLU -lSDL_mixer ++ ++$(OBJS): %.o: %.d ++ gdc -c -o $@ -Iimport -Isrc $(DFLAGS) $< +--- a/src/abagames/util/logger.d ++++ b/src/abagames/util/logger.d +@@ -5,7 +5,7 @@ + */ + module abagames.util.logger; + +-private import std.stream; ++private import std.cstream; + private import std.string; + + /** +@@ -56,28 +56,28 @@ + + public static void info(char[] msg, bool nline = true) { + if (nline) +- stderr.writeLine(msg); ++ derr.writeLine(msg); + else +- stderr.writeString(msg); ++ derr.writeString(msg); + } + + public static void info(double n, bool nline = true) { + if (nline) +- stderr.writeLine(std.string.toString(n)); ++ derr.writeLine(std.string.toString(n)); + else +- stderr.writeString(std.string.toString(n) ~ " "); ++ derr.writeString(std.string.toString(n) ~ " "); + } + + public static void error(char[] msg) { +- stderr.writeLine("Error: " ~ msg); ++ derr.writeLine("Error: " ~ msg); + } + + public static void error(Exception e) { +- stderr.writeLine("Error: " ~ e.toString()); ++ derr.writeLine("Error: " ~ e.toString()); + } + + public static void error(Error e) { +- stderr.writeLine("Error: " ~ e.toString()); ++ derr.writeLine("Error: " ~ e.toString()); + if (e.next) + error(e.next); + } +--- a/src/abagames/util/sdl/luminous.d ++++ b/src/abagames/util/sdl/luminous.d +@@ -9,6 +9,7 @@ + private import std.string; + private import opengl; + private import abagames.util.actor; ++import std.c.string; + + /** + * Luminous effect texture. +@@ -30,7 +31,7 @@ + } + + private void makeLuminousTexture() { +- uint *data = td; ++ uint *data = td.ptr; + int i; + memset(data, 0, luminousTextureWidth * luminousTextureHeight * 4 * uint.sizeof); + glGenTextures(1, &luminousTexture); +--- a/src/abagames/tt/barrage.d ++++ b/src/abagames/tt/barrage.d +@@ -98,6 +98,7 @@ + public static void load() { + char[][] dirs = listdir(BARRAGE_DIR_NAME); + foreach (char[] dirName; dirs) { ++ parser[dirName] = null; + char[][] files = listdir(BARRAGE_DIR_NAME ~ "/" ~ dirName); + foreach (char[] fileName; files) { + if (getExt(fileName) != "xml") +--- a/src/abagames/tt/camera.d ++++ b/src/abagames/tt/camera.d +@@ -155,10 +155,10 @@ + moveCnt--; + if (moveCnt < 0) { + moveCnt = 15 + rand.nextInt(15); +- float lox = fabs(_lookAtPos.x - _cameraPos.x); +- if (lox > PI) +- lox = PI * 2 - lox; +- float ofs = lox * 3 + fabs(_lookAtPos.y - _cameraPos.y); ++ float newlox = fabs(_lookAtPos.x - _cameraPos.x); ++ if (newlox > PI) ++ newlox = PI * 2 - newlox; ++ float ofs = newlox * 3 + fabs(_lookAtPos.y - _cameraPos.y); + zoomTrg = 3.0f / ofs; + if (zoomTrg < zoomMin) + zoomTrg = zoomMin; +--- a/src/abagames/tt/shape.d ++++ b/src/abagames/tt/shape.d +@@ -248,21 +248,23 @@ + float wingD1, float wingD2, int color, int shp, int divNum, + int rev, bool damaged = false) { + Structure[] sts; +- Structure st = new Structure; +- st.pos.x = ox; +- st.pos.y = oy; +- st.d1 = st.d2 = 0; +- st.width = rocketLength * 0.15; +- st.height = rocketLength; +- st.shape = Structure.Shape.ROCKET; +- st.shapeXReverse = 1; +- if (!damaged) +- st.color = 1; +- else +- st.color = 0; +- if (rev == -1) +- st.pos.x *= -1; +- sts ~= st; ++ { ++ Structure st = new Structure; ++ st.pos.x = ox; ++ st.pos.y = oy; ++ st.d1 = st.d2 = 0; ++ st.width = rocketLength * 0.15; ++ st.height = rocketLength; ++ st.shape = Structure.Shape.ROCKET; ++ st.shapeXReverse = 1; ++ if (!damaged) ++ st.color = 1; ++ else ++ st.color = 0; ++ if (rev == -1) ++ st.pos.x *= -1; ++ sts ~= st; ++ } + float wofs = offset; + float whgt = rocketLength * (rand.nextFloat(0.5) + 1.5); + for (int i = 0; i < wingNum; i++) { +--- a/src/abagames/util/rand.d ++++ b/src/abagames/util/rand.d +@@ -165,14 +165,14 @@ + + void next_state() + { +- uint *p=state; ++ uint *p=state.ptr; + + /* if init_genrand() has not been called, */ + /* a default initial seed is used */ + if (initf==0) init_genrand(5489UL); + + left = N; +- next = state; ++ next = state.ptr; + + for (int j=N-M+1; --j; p++) + *p = p[M] ^ TWIST(p[0], p[1]); +--- a/import/opengl.d ++++ b/import/opengl.d +@@ -1116,7 +1116,7 @@ + /*************************************************************/ + + void /*APIENTRY*/glAccum (GLenum op, GLfloat value); +-void /*APIENTRY*/glAlphaFunc (GLenum func, GLclampf ref); ++void /*APIENTRY*/glAlphaFunc (GLenum func, GLclampf ref_); + GLboolean /*APIENTRY*/glAreTexturesResident (GLsizei n, GLuint *textures, GLboolean *residences); + void /*APIENTRY*/glArrayElement (GLint i); + void /*APIENTRY*/glBegin (GLenum mode); +@@ -1369,7 +1369,7 @@ + void /*APIENTRY*/glScissor (GLint x, GLint y, GLsizei width, GLsizei height); + void /*APIENTRY*/glSelectBuffer (GLsizei size, GLuint *buffer); + void /*APIENTRY*/glShadeModel (GLenum mode); +-void /*APIENTRY*/glStencilFunc (GLenum func, GLint ref, GLuint mask); ++void /*APIENTRY*/glStencilFunc (GLenum func, GLint ref_, GLuint mask); + void /*APIENTRY*/glStencilMask (GLuint mask); + void /*APIENTRY*/glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); + void /*APIENTRY*/glTexCoord1d (GLdouble s); +--- /dev/null ++++ b/Makefile.pure +@@ -0,0 +1,34 @@ ++SOURCES=src-hiz/abagames/tt/camera.d src-hiz/abagames/tt/boot.d\ ++ src-hiz/abagames/tt/barrage.d src-hiz/abagames/tt/bullettarget.d\ ++ src-hiz/abagames/tt/replay.d src-hiz/abagames/tt/ship.d\ ++ src-hiz/abagames/tt/particle.d src-hiz/abagames/tt/tunnel.d\ ++ src-hiz/abagames/tt/enemy.d src-hiz/abagames/tt/bulletactor.d\ ++ src-hiz/abagames/tt/gamemanager.d src-hiz/abagames/tt/screen.d\ ++ src-hiz/abagames/tt/title.d src-hiz/abagames/tt/stagemanager.d\ ++ src-hiz/abagames/tt/bulletactorpool.d src-hiz/abagames/tt/shot.d\ ++ src-hiz/abagames/tt/prefmanager.d src-hiz/abagames/tt/bulletimpl.d\ ++ src-hiz/abagames/tt/letter.d src-hiz/abagames/tt/soundmanager.d\ ++ src-hiz/abagames/tt/floatletter.d src-hiz/abagames/tt/shape.d\ ++ src-hiz/abagames/tt/crystal.d\ ++ src-hiz/abagames/util/actor.d src-hiz/abagames/util/rand.d\ ++ src-hiz/abagames/util/sdl/input.d src-hiz/abagames/util/sdl/sound.d\ ++ src-hiz/abagames/util/sdl/pad.d src-hiz/abagames/util/sdl/screen3d.d\ ++ src-hiz/abagames/util/sdl/mainloop.d src-hiz/abagames/util/sdl/gamemanager.d\ ++ src-hiz/abagames/util/sdl/screen.d src-hiz/abagames/util/sdl/recordablepad.d\ ++ src-hiz/abagames/util/sdl/luminous.d src-hiz/abagames/util/sdl/sdlexception.d\ ++ src-hiz/abagames/util/sdl/displaylist.d src-hiz/abagames/util/sdl/texture.d\ ++ src-hiz/abagames/util/iterator.d src-hiz/abagames/util/bulletml/bullet.d\ ++ src-hiz/abagames/util/bulletml/bulletsmanager.d\ ++ src-hiz/abagames/util/tokenizer.d src-hiz/abagames/util/prefmanager.d\ ++ src-hiz/abagames/util/vector.d src-hiz/abagames/util/logger.d\ ++ import/SDL_video.d import/SDL_mixer.d ++OBJS=$(SOURCES:.d=.o) ++EXE=torus-trooper-pure ++ ++all: $(EXE) ++ ++$(EXE): $(OBJS) ++ gdc -o $@ $(OBJS) -lbulletml -lSDL -lGL -lGLU -lSDL_mixer ++ ++$(OBJS): %.o: %.d ++ gdc -c -o $@ -Iimport -Isrc-hiz -fversion=pure $(DFLAGS) $< --- torus-trooper-0.22.dfsg1.orig/debian/patches/level-select-444948.patch +++ torus-trooper-0.22.dfsg1/debian/patches/level-select-444948.patch @@ -0,0 +1,27 @@ +# Copyright (C) 2007 Peter De Wachter +# Distributed under the same license as the game. See debian/copyright. + +# Make the level selection UI a bit more user-friendly. Fixes #444948. + +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/title.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/title.d 2007-10-03 00:11:28.000000000 +0200 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/title.d 2007-10-03 00:12:06.000000000 +0200 +@@ -69,6 +69,7 @@ + if (dir & (Pad.Dir.RIGHT | Pad.Dir.LEFT)) { + if (!dirPressed) { + dirPressed = true; ++ int oldGrade = grade; + if (dir & Pad.Dir.RIGHT) { + grade++; + if (grade >= Ship.GRADE_NUM) +@@ -79,7 +80,8 @@ + if (grade < 0) + grade = Ship.GRADE_NUM - 1; + } +- if (level > prefManager.prefData.getMaxLevel(grade)) ++ if (level == prefManager.prefData.getMaxLevel(oldGrade) ++ || level > prefManager.prefData.getMaxLevel(grade)) + level = prefManager.prefData.getMaxLevel(grade); + } + } --- torus-trooper-0.22.dfsg1.orig/debian/patches/windowed.patch +++ torus-trooper-0.22.dfsg1/debian/patches/windowed.patch @@ -0,0 +1,37 @@ +# Copyright (C) 2007 Miriam Ruiz +# Distributed under the same license as the game. See debian/copyright. + +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/boot.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/boot.d 2007-08-26 18:14:13.000000000 +0000 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/boot.d 2007-08-26 18:15:11.000000000 +0000 +@@ -129,6 +129,9 @@ + case "-window": + Screen.windowMode = true; + break; ++ case "-fullscreen": ++ Screen.windowMode = false; ++ break; + case "-res": + if (i >= args.length - 2) { + usage(progName); +@@ -169,5 +172,5 @@ + + private void usage(char[] progName) { + Logger.error +- ("Usage: " ~ progName ~ " [-brightness [0-100]] [-luminosity [0-100]] [-window] [-res x y] [-nosound]"); ++ ("Usage: " ~ progName ~ " [-brightness [0-100]] [-luminosity [0-100]] [-window] [-fullscreen] [-res x y] [-nosound]"); + } +Index: torus-trooper-0.22.dfsg1/src/abagames/util/sdl/screen3d.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/util/sdl/screen3d.d 2007-08-26 18:15:51.000000000 +0000 ++++ torus-trooper-0.22.dfsg1/src/abagames/util/sdl/screen3d.d 2007-08-26 18:16:05.000000000 +0000 +@@ -20,7 +20,7 @@ + static float brightness = 1; + static int width = 640; + static int height = 480; +- static bool windowMode = false; ++ static bool windowMode = true; + static float nearPlane = 0.1; + static float farPlane = 1000; + private: --- torus-trooper-0.22.dfsg1.orig/debian/patches/save-score-444372.patch +++ torus-trooper-0.22.dfsg1/debian/patches/save-score-444372.patch @@ -0,0 +1,31 @@ +# Copyright (C) 2007 Peter De Wachter +# Distributed under the same license as the game. See debian/copyright. + +# Save score when quitting using escape. Fixes #444372. + +Index: torus-trooper-0.22.dfsg1/src/abagames/tt/gamemanager.d +=================================================================== +--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/gamemanager.d 2007-10-02 23:05:33.000000000 +0200 ++++ torus-trooper-0.22.dfsg1/src/abagames/tt/gamemanager.d 2007-10-02 23:07:56.000000000 +0200 +@@ -172,6 +172,7 @@ + if (!escPressed) { + escPressed = true; + if (state == inGameState) { ++ inGameState.endGame(); + startTitle(); + } else { + mainLoop.breakLoop(); +@@ -524,6 +525,13 @@ + public ReplayData replayData() { + return _replayData; + } ++ ++ public void endGame() { ++ if (!ship.isGameOver) { ++ ship.isGameOver = true; ++ prefManager.prefData.recordResult(cast(int) stageManager.level, score); ++ } ++ } + } + + public class TitleState: GameState {