xblast-tnt-models (20050106-3) debian-dir only changes

Summary

 debian/changelog                                  |   38 +
 debian/control                                    |   13 
 debian/copyright                                  |   99 +++
 debian/rules                                      |   70 ++
 debian/sprites/AUTHORS                            |   20 
 debian/sprites/COPYING                            |  340 +++++++++++
 debian/sprites/Makefile                           |   91 +++
 debian/sprites/README                             |   54 +
 debian/sprites/epmtools/COPYING                   |  339 +++++++++++
 debian/sprites/epmtools/Makefile                  |   16 
 debian/sprites/epmtools/README                    |  112 +++
 debian/sprites/epmtools/epmarrange.c              |  372 ++++++++++++
 debian/sprites/epmtools/epmcompress.c             |  167 +++++
 debian/sprites/epmtools/epmcompress2.c            |  234 +++++++
 debian/sprites/epmtools/epmhalf.c                 |  140 ++++
 debian/sprites/epmtools/epmtopgm.c                |  150 ++++
 debian/sprites/epmtools/epmtoppm.c                |  253 ++++++++
 debian/sprites/epmtools/epmuncompress.c           |  147 ++++
 debian/sprites/epmtools/pbmarrange.c              |  364 ++++++++++++
 debian/sprites/epmtools/pgmtoepm.c                |   97 +++
 debian/sprites/epmtools/ppmtoepm.c                |  163 +++++
 debian/sprites/felix/XBlast                       |  661 ++++++++++++++++++++++
 debian/sprites/golem/XBlast                       |  114 +++
 debian/sprites/include/AllPlayerAnimation.ini     |   10 
 debian/sprites/include/AllPlayerAnimation.pov     |   56 +
 debian/sprites/include/AllPlayerAnimation.pov.tut |   53 +
 debian/sprites/include/AllPlayerSpecial.ini       |   10 
 debian/sprites/include/AllPlayerSpecial.pov       |   58 +
 debian/sprites/include/Anschauen.ini              |   10 
 debian/sprites/include/Anschauen.pov              |   54 +
 debian/sprites/include/BigWinner.ini              |   10 
 debian/sprites/include/BigWinner.pov              |   40 +
 debian/sprites/include/HiQ.ini                    |    4 
 debian/sprites/include/LoQ.ini                    |    2 
 debian/sprites/include/LoseFluidly.ini            |    7 
 debian/sprites/include/LoseFluidly.pov            |   32 +
 debian/sprites/include/Quick.ini                  |    3 
 debian/sprites/include/Walk                       |   75 ++
 debian/sprites/include/WalkFluidly.ini            |    7 
 debian/sprites/include/WalkFluidly.pov            |   32 +
 debian/sprites/include/WinFluidly.ini             |    7 
 debian/sprites/include/WinFluidly.pov             |   32 +
 debian/sprites/include/XBlastTexture.inc          |  178 +++++
 debian/sprites/include/chooseColors.inc           |   90 ++
 debian/sprites/include/frame_defaults.inc         |   11 
 debian/sprites/include/frames.inc                 |  174 +++++
 debian/sprites/include/frames.inc.tut             |  174 +++++
 debian/sprites/include/humanoid_frames.inc        |  657 +++++++++++++++++++++
 debian/sprites/include/playerA.inc                |   11 
 debian/sprites/include/playerB.inc                |   11 
 debian/sprites/include/playerC.inc                |   11 
 debian/sprites/include/playerD.inc                |   11 
 debian/sprites/include/postproc.sh                |   72 ++
 debian/sprites/include/world.inc                  |   46 +
 debian/sprites/insect/XBlast                      |  469 +++++++++++++++
 debian/sprites/normal/XBlast                      |  609 ++++++++++++++++++++
 debian/sprites/ping/XBlast                        |  553 ++++++++++++++++++
 debian/sprites/sticky/XBlast                      |   93 +++
 debian/sprites/tutorial/XBlast                    |  182 ++++++
 debian/sprites/tutorial/part1/XBlast              |  104 +++
 debian/sprites/tutorial/part2/XBlast              |  139 ++++
 debian/sprites/tutorial/part3/XBlast              |  127 ++++
 debian/sprites/tutorial/part4/XBlast              |  182 ++++++
 debian/sprites/wuschel/XBlast                     |  450 ++++++++++++++
 debian/sprites/wusel/XBlast                       |  224 +++++++
 debian/sprites/wusel/localframes.inc              |  110 +++
 debian/watch                                      |    4 
 67 files changed, 9248 insertions(+)

    
download this patch

Patch contents

--- xblast-tnt-models-20050106.orig/debian/changelog
+++ xblast-tnt-models-20050106/debian/changelog
@@ -0,0 +1,38 @@
+xblast-tnt-models (20050106-3) unstable; urgency=high
+
+  * Make use of the http://sf.net/$project/ hack in debian/watch instead of
+    chosing a mirror on our own.
+  * Added Homepage source control field.
+  * Bumped Standards-Version to 3.8.0, no changes needed.
+  * Added rendering-sources of some models where the author doesn't accept the
+    xblast team reasoning to accept the rendered images as accepted form for
+    modifications. The images originally were submitted without sources,
+    thanks to Bernhard R. Link for being able to offer the sources
+    (closes: #512284). Urgency high as this is a RC fix targetted at lenny.
+  * Added copyright informations to copyright file for above mentioned models
+    to clear things up.
+  * Fixed copyright information with respect to GPLv2 or later.
+
+ -- Gerfried Fuchs <rhonda@debian.at>  Fri, 06 Feb 2009 09:51:25 +0100
+
+xblast-tnt-models (20050106-2) unstable; urgency=low
+
+  * The "once every two releases" release.
+  * Updated FSF address in copyright file.
+  * Fixed watch file.
+  * Bumped Standards-Version to 3.7.2, no changes needed.
+  * Generate md5sum file.
+
+ -- Gerfried Fuchs <rhonda@debian.at>  Tue, 21 Aug 2007 18:14:19 +0200
+
+xblast-tnt-models (20050106-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Gerfried Fuchs <alfie@debian.org>  Fri, 07 Jan 2005 13:25:30 +0100
+
+xblast-tnt-models (20040907-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Gerfried Fuchs <alfie@debian.org>  Wed, 08 Sep 2004 12:30:48 +0200
--- xblast-tnt-models-20050106.orig/debian/control
+++ xblast-tnt-models-20050106/debian/control
@@ -0,0 +1,13 @@
+Source: xblast-tnt-models
+Section: games
+Priority: optional
+Maintainer: Gerfried Fuchs <rhonda@debian.at>
+Standards-Version: 3.8.0
+Homepage: http://xblast.sf.net/
+
+Package: xblast-tnt-models
+Architecture: all
+Description: player models for xblast-tnt
+ XBlast is a multi-player arcade game inspired by the video/computer game
+ Bomberman (Dynablaster). This package contains the player models needed for
+ the game; both for the regular version and the mini version.
--- xblast-tnt-models-20050106.orig/debian/rules
+++ xblast-tnt-models-20050106/debian/rules
@@ -0,0 +1,70 @@
+#!/usr/bin/make -f
+# debian/rules for xblast-tnt-models
+# (c) 2005-2007 by Gerfried Fuchs <rhonda@debian.at>
+# Licenced the same way as xblast-tnt-models itself
+
+PKG = xblast-tnt-models
+TMP = $(CURDIR)/debian/$(PKG)
+
+INSTALL = install
+INSTALL_FILE    = $(INSTALL) -p    -oroot -groot -m644
+INSTALL_PROGRAM = $(INSTALL) -p    -oroot -groot -m755
+INSTALL_SCRIPT  = $(INSTALL) -p    -oroot -groot -m755
+INSTALL_DIR     = $(INSTALL) -p -d -oroot -groot -m755
+
+
+clean:
+	$(checkdir)
+	$(checkroot)
+	-rm -rf $(TMP) debian/files install-stamp
+
+
+build:
+	# nothing to build
+
+
+install: install-stamp
+install-stamp:
+	$(checkdir)
+	$(checkroot)
+	-rm -rf $(TMP)
+	$(INSTALL_DIR) $(TMP)/usr/share
+	cd $(TMP)/usr/share && $(INSTALL_DIR) doc/$(PKG) \
+		games/xblast-tnt/image/sprite
+	$(INSTALL_FILE) *.ppm *.pbm *.epm \
+		$(TMP)/usr/share/games/xblast-tnt/image/sprite
+	touch install-stamp
+
+
+# Build architecture-independent files here.
+binary-indep: install
+	$(checkdir)
+	$(checkroot)
+	$(INSTALL_DIR) $(TMP)/DEBIAN $(TMP)/usr/share/doc/$(PKG)
+	$(INSTALL_FILE) debian/changelog \
+		$(TMP)/usr/share/doc/$(PKG)/changelog.Debian
+	$(INSTALL_FILE) debian/copyright \
+		$(TMP)/usr/share/doc/$(PKG)
+	gzip -9 $(TMP)/usr/share/doc/$(PKG)/changelog.Debian
+	dpkg-gencontrol -isp -p$(PKG) -P$(TMP)
+	cd $(TMP) && find * -type f ! -regex '^DEBIAN/.*' -print0 | \
+		xargs -r0 md5sum > DEBIAN/md5sums
+	dpkg --build $(TMP) ..
+	
+
+# Build architecture-dependent files here.
+binary-arch:
+	# We have nothing to do here
+
+
+binary: binary-indep
+
+define checkdir
+        test -f debian/rules
+endef
+
+define checkroot
+        test root = "`whoami`"
+endef
+
+.PHONY: clean build install binary-indep binary-arch binary
--- xblast-tnt-models-20050106.orig/debian/copyright
+++ xblast-tnt-models-20050106/debian/copyright
@@ -0,0 +1,99 @@
+This package was debianized by Gerfried Fuchs <rhonda@debian.at> on
+Sun, 15 Aug 2004 16:41:58 +0200.
+
+It was downloaded from <http://sourceforge.net/projects/xblast/>
+
+Upstream Authors:
+=================
+Current maintainers:
+        Fernando Benites <iskywalker@users.sourceforge.net>
+        Gerfried Fuchs <alfie@users.sourceforge.net>
+Original author:
+        Oliver Vogel
+
+
+Copyright:
+==========
+   Copyright by Oliver Vogel <m.vogel@ndh.net>
+
+   This package 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; 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 Street, Fifth Floor, Boston, MA
+   02110-1301 USA.
+
+   --------------------------------------------------------------------
+
+   sprites/golem/XBlast Robot.inc, sprites/insect/XBlast Robot.inc,
+   sprites/sticky/XBlast Robot.inc, sprites/tutorial/*, 
+
+   Copyright by Mark Weyer <weyer@informatik.uni-freiburg.de>
+
+   This program 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; or (at your option)
+   any later version.
+
+   --------------------------------------------------------------------
+
+   sprites/felix/XBlast Robot.inc:
+
+   Copyright by Oliver Vogel <m.vogel@ndh.net>
+   Copyright 2003 by Bernhard R. Link <brlink@debian.org>
+
+   This program 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; or (at your option)
+   any later version.
+
+   --------------------------------------------------------------------
+
+   sprites/ping/XBlast Robot.inc:
+
+   Copyright by Oliver Vogel <m.vogel@ndh.net>
+   Copyright by Daniela Lipps <gkrmbl@gmx.de>
+
+   This program 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; or (at your option)
+   any later version.
+
+   --------------------------------------------------------------------
+
+   sprites/wuschel/XBlast Robot.inc:
+
+   Copyright by Oliver Vogel <m.vogel@ndh.net>
+   Copyright by Immanuel Halupczok <xblast@karimmi.de>
+
+   This program 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; or (at your option)
+   any later version.
+
+   --------------------------------------------------------------------
+
+   sprites/wusel/*:
+
+   Copyright by Immanuel Halupczok <xblast@karimmi.de>
+
+   This program 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; or (at your option)
+   any later version.
+
+
+The debianization is Copyright by Gerfried Fuchs <rhonda@debian.at> and
+licensed likewise under GPLv2 or later.
+
+On Debian GNU/Linux systems, the complete text of the GNU General Public
+License version 2 can be found in `/usr/share/common-licenses/GPL-2',
+later versions can be found in the same directory.
--- xblast-tnt-models-20050106.orig/debian/watch
+++ xblast-tnt-models-20050106/debian/watch
@@ -0,0 +1,4 @@
+version=3
+opts="uversionmangle=s/-//g" \
+http://sf.net/xblast/  models-([\d-]+)\.tar\.gz  debian  uupdate
+# Site/Directory       Pattern                   Version  Script
--- xblast-tnt-models-20050106.orig/debian/sprites/README
+++ xblast-tnt-models-20050106/debian/sprites/README
@@ -0,0 +1,54 @@
+Rendering Sprites for XBlast
+============================
+
+There s one Makefile to help you creatinng xblast player sprites.
+
+for testing:
+
+make test.<name>
+
+for the images:
+
+make conv.<type>
+
+To delete temporar files:
+
+make clean
+
+For faster low quality (BigWinner is still Big):
+
+make QUALITY=LoQ.ini conv.<name>
+
+
+How the povray-stuff works
+=========================
+
+AllPlayer*.pov
+--------------
+
+The main pov-file is always one in the include directory:
+- "AllPlayerAnimation.pov" for normal waliking images
+- "AllPlayerSpecial.pov" for losing, winning, etc.
+- "BigWinner.pov" for the big winner image
+
+The corresponding .ini file tells povray to create an animation. The main
+pov-file then sets some variables, depending on the frame, which describe
+what version of the character should be rendered.
+See "include/frame_defaults.inc" which variables there are.
+Also, the correct colors are set by including "include/chooseColors.inc".
+
+After that, the shape-dependent "XBlast Robot.inc" is included, which
+draws the character according to the variables, and then, by including
+"world.inc", the rest of the world (floor, lights, camera) is created.
+
+XBlast Robot.inc
+----------------
+
+This file creates the character using the variables set by the main
+file. To tell what things like "Second frame of walking" means for
+the differnt parts of the body, there's a file "include/frames.inc"
+which works for human-like characters. The others can have their own
+"localframes.inc" in their own directory. The file
+"include/humanoid_frames.inc" is a new improved version of
+"include/frames.inc".
+
--- xblast-tnt-models-20050106.orig/debian/sprites/Makefile
+++ xblast-tnt-models-20050106/debian/sprites/Makefile
@@ -0,0 +1,91 @@
+EPMTOOLS = ./epmtools
+POV=povray
+QUALITY=HiQ.ini
+
+.DELETE_ON_ERROR:
+.PRECIOUS: %.epm %.pbm %.ppm.gz
+.PHONY: conv.% %.test
+
+all:  conv.normal conv.felix conv.insect conv.wuschel conv.wusel conv.ping conv.golem conv.sticky conv.tutorial
+
+PHASES=1 2 3
+SPECIALPOSES=L L1 L2 W W2 W3 DD DL DU DR
+NORMALPOSES=$(foreach d,D L U R,$(d)_S $(d)_0 $(d)_1 $(d)_2 $(d)_3)
+
+POSES = B $(SPECIALPOSES) $(NORMALPOSES)
+
+conv.%: $(foreach pose,$(POSES),fertig/%_$(pose).epm)
+	@echo "$* finished"
+
+clean:
+	-rm -f *.pgm *.epm *.pbm *.tmp fertig/*.grn fertig/*.red fertig/*.blu fertig/*.pgm tmp/*
+
+					      
+realclean: clean
+	-rm fertig/*.ppm.gz fertig/*.epm fertig/*.pbm
+					      
+					      
+%.red %.grn %.blu: %.ppm.gz
+	gunzip < $< > $*.ppm
+	ppmtorgb3 $*.ppm
+	-rm $*.ppm
+
+%.helmet.pgm: %_1.red %_3.grn
+	pnmarith -sub $^  >$@
+
+%.face.pgm: %_1.grn %_3.grn
+	pnmarith -sub $^  >$@
+
+%.body.pgm: %_1.blu %_3.grn
+	pnmarith -sub $^  >$@
+
+%.handsfeet.pgm: %_2.red %_3.grn
+	pnmarith -sub $^  >$@
+
+%.armslegs.pgm: %_2.grn %_3.grn
+	pnmarith -sub $^  >$@
+
+%.backpack.pgm: %_2.blu %_3.grn
+	pnmarith -sub $^  >$@
+
+%.pbm: %_3.blu %_3.grn
+	pnmarith -sub $^ | pgmtopbm -threshold -value 0.5 >$@
+
+%.epm: %.pbm %.helmet.pgm %.face.pgm %.body.pgm %.handsfeet.pgm %.armslegs.pgm %.backpack.pgm %_3.grn
+	$(EPMTOOLS)/pgmtoepm $*.helmet.pgm $*.face.pgm $*.body.pgm \
+		$*.handsfeet.pgm $*.armslegs.pgm $*.backpack.pgm \
+		$*_3.grn >$@
+	$(EPMTOOLS)/epmcompress $@
+	-rm -f $@~
+
+# Rendern:
+
+# big winner sprites
+%_B_1.ppm.gz %_B_2.ppm.gz %_B_3.ppm.gz:
+	if [ ! -d ./$(notdir $*) ]; then echo "where is '$(notdir $*)'?" ; exit 1 ; fi
+	export DESTNAME=$* ; $(POV) +L./$(notdir $*) +L./include BigWinner.ini +Ob$(notdir $*).tmp
+
+# special sprites
+$(foreach phase,$(PHASES),$(foreach suffix,$(SPECIALPOSES),%_$(suffix)_$(phase).ppm.gz)): 
+	if [ ! -d ./$(notdir $*) ]; then echo "where is '$(notdir $*)'?" ; exit 1 ; fi
+	export DESTNAME=$* ; $(POV) +L./$(notdir $*) +L./include AllPlayerSpecial.ini $(QUALITY) +Os$(notdir $*).tmp
+
+# "normal" sprites
+$(foreach phase,$(PHASES),$(foreach suffix,$(NORMALPOSES),%_$(suffix)_$(phase).ppm.gz)): 
+	if [ ! -d ./$(notdir $*) ]; then echo "where is '$(notdir $*)'?" ; exit 1 ; fi
+	export DESTNAME=$* ; $(POV) +L./$(notdir $*) +L./include AllPlayerAnimation.ini $(QUALITY) +Op$(notdir $*).tmp
+
+test.%:
+	$(POV) +L./$(notdir $*) +L./include Anschauen.ini +O$*_test.tmp
+	-rm $*_test.tmp
+
+walk.%:
+	$(POV) +L./$(notdir $*) +L./include WalkFluidly.ini +Otmp/$*_testwalk.ppm
+
+win.%:
+	$(POV) +L./$(notdir $*) +L./include WinFluidly.ini +Otmp/$*_testwin.ppm
+
+lose.%:
+	$(POV) +L./$(notdir $*) +L./include LoseFluidly.ini +Otmp/$*_testlose.ppm
+
+
--- xblast-tnt-models-20050106.orig/debian/sprites/COPYING
+++ xblast-tnt-models-20050106/debian/sprites/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program 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 program 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 program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- xblast-tnt-models-20050106.orig/debian/sprites/AUTHORS
+++ xblast-tnt-models-20050106/debian/sprites/AUTHORS
@@ -0,0 +1,20 @@
+Theese scripts are based on those by "Oliver Vogel <m.vogel@ndh.net>".
+
+The common infrastructure (consisting in large pieces or even whole 
+files out of parts from the original scripts) was written by:
+	Bernhard R. Link <brlink@debian.org>, 
+	Immanuel Halupzok <xblast@karimmi.de>
+	Mark Weyer <weyer@informatik.uni-freiburg.de>
+
+Design and coding of the characters:
+	normal: 
+		Oliver Vogel <m.vogel@ndh.net>
+	golem, insect, sticky, tutorial, :
+		Mark Wayer <weyer@informatik.uni-freiburg.de>
+	wusel, wuschel:
+		Immanuel Halupzok <xblast@karimmi.de>
+	felix (which is only 'normal' with bad ears):
+		Bernhard R. Link <brlink@debian.org>
+	ping (not considered finished):
+		Daniele Lipps <gkrmbl@gmx.de>
+	
--- xblast-tnt-models-20050106.orig/debian/sprites/tutorial/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/tutorial/XBlast Robot.inc	
@@ -0,0 +1,182 @@
+/*
+   ######################################################################
+
+   XBlast Robot.inc
+
+   Character design tutorial part 4
+
+   (C) by Mark Weyer
+
+   ######################################################################
+*/
+
+//
+///
+//// We have taken care of the states Standing and Walking.
+//// There are some more:
+//// - Winning: This is the state of the winner in a game (the last
+////   player alive after everybody else has been killed). It also is the
+////   state of the cheering crowd between games and after a match and
+////   of the winner of a game or match that is cheered at by the crowd.
+////   Variables:
+////   playerWinning: the flag
+////   playerAnimationClock: similar to playerWalkingClock. Its value
+////     can be 0,1, or 2. The sequence is ...0,1,2,1,0,1,2,1,... .
+////     for the non-animated winner of a match the value is 0.
+////   playerWinningTime: similar to playerWalkingTime. Its value can be
+////   0, 0.5, or 1.
+//// - Losing: This is the state of the disappointed crowd between games.
+////   It is also the state of the losers of a game at that occasion
+////   and sometimes after the match.
+////   The losers in the game are just skeletons.
+////   Variables:
+////   playerLosing: the flag
+////   playerAnimationClock: the same as above, for the non-animated losers
+////   of a match the value is 0.
+////   playerLosingTime: similar to above.
+//// - Killed: This is the state of a player that has just been hit by a
+////   bomb but has not yet completely lost the game. It is only very
+////   shortly visible at that occasion. It is also sometimes the state of
+////   the losers after the match.
+////   Variables:
+////   playerKilled: the flag
+///
+//// We will now make suitable adjustments for all states
+///
+//
+
+// colours
+
+#local wheelColour1 = handsFeetColor;
+#local wheelColour2 = armsLegsColor;
+#local eyeColour = faceColor;
+
+// basic constants
+
+#declare Wheel_diam = 8/pi;
+#declare Wheel_thickness = 1/2;
+#declare Eye_size = 2/3;
+
+//
+///
+//// This is new:
+///
+//
+
+// derived constants for handling different states
+
+#if (playerKilled)
+  #local Wheel_raise = Wheel_thickness/2;
+  #local Eye_raise = 3*Wheel_raise;
+  #local Eye_down = 60;
+#else
+  #local Wheel_raise = Wheel_diam/2;
+  #local Eye_raise = 2*Wheel_raise;
+  #local Eye_down = 0;
+#end
+
+#if (playerLosing)
+  #local Eye_down = 30;
+  #local Eye_leftright = 30*cos(playerLosingTime*pi);
+#else#if (playerWalking)
+  #local Eye_leftright = 45*sin(playerWalkingTime*2*pi);
+#else
+  #local Eye_leftright = 0;
+#end#end
+
+#if (playerWinning)
+  #local Eye_down = -10;
+#end
+
+// a macro for eyes
+
+#macro eye(side)
+  sphere {
+    0 1/2
+    pigment {	// this pigment partitions the eye into three layers:
+		// black (pupil), eyeColour (iris), and white (rest)
+      checker
+      pigment {rgb <1,1,1>}
+      pigment {
+        checker
+        pigment {rgb eyeColour}
+        pigment {rgb <0,0,0>}
+        translate <1/2,1/2,0>
+        scale 10
+        translate -z/4
+      }
+      translate <1/2,1/2,0>
+      scale <10,10,1>
+      translate -z/6
+    }
+    rotate Eye_leftright*y
+    rotate -Eye_down*x
+    scale Eye_size
+    translate <side*2/3,Eye_raise,-1/2>
+//
+///
+//// Previously these transformations had been:
+///
+//    #if (playerWalking)
+//      rotate 45*sin(playerWalkingTime*2*pi)*y
+//    #end
+//    scale Eye_size
+//    translate <side*2/3,Wheel_diam,-1/2>
+  }
+#end
+
+#macro wheel()
+  torus {
+    (Wheel_diam-Wheel_thickness)/2 Wheel_thickness/2
+    rotate 90*z
+    pigment {	// this pigment partitions the wheel in four sectors
+      checker
+      pigment {rgb wheelColour1}
+      pigment {rgb wheelColour2}
+      translate x/2
+      scale 10
+    }
+    #if (playerWalking)
+      rotate -180*playerWalkingTime*x
+    #end
+//
+///
+//// In Killed state the wheel lies on the floor.
+///
+//
+    #if (playerKilled)
+      rotate 90*z
+    #end
+    translate Wheel_raise*y
+//
+///
+//// Previously this translate had been:
+///
+//    translate Wheel_diam/2*y
+  }
+#end
+
+union {
+  wheel()
+  eye(1)
+  eye(-1)
+//
+///
+//// In Winning state the character jumps.
+///
+//
+  #if (playerWinning)
+    translate (1-pow(playerWinningTime,2))*4/3*y
+  #end
+
+  rotate playerAngle*y
+  translate playerLocation
+  translate -2*z
+}
+
+//
+///
+//// That's all. The tutorial ends here.
+///
+//
+
--- xblast-tnt-models-20050106.orig/debian/sprites/tutorial/part1/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/tutorial/part1/XBlast Robot.inc	
@@ -0,0 +1,104 @@
+/*
+   ######################################################################
+
+   XBlast Robot.inc
+
+   Character design tutorial part 1
+
+   (C) by Mark Weyer
+
+   ######################################################################
+*/
+
+
+//
+///
+//// Welcome to the tutorial. You will only need to read comments
+//// that are indented like this one. The tutorial consists of
+//// several parts that are sucessive approximations of a complete
+//// character design.
+///
+//
+
+//
+///
+//// The character of our tutorial is minimalistic,
+//// because this is not meant as a PoVRay tutorial.
+//// It is a stylized yellow/blue monowheel with green eyes.
+///
+//
+
+// basic constants
+
+#declare Wheel_diam = 2;
+#declare Wheel_thickness = 1/2;
+#declare Eye_size = 2/3;
+
+// a macro for eyes
+
+#macro eye(side)
+  sphere {
+    0 1/2
+    pigment {	// this pigment partitions the eye into three layers:
+		// black (pupil), green (iris), and white (rest)
+      checker
+      pigment {rgb <1,1,1>}
+      pigment {
+        checker
+        pigment {rgb <0,1,0>}
+        pigment {rgb <0,0,0>}
+        translate <1/2,1/2,0>
+        scale 10
+        translate -z/4
+      }
+      translate <1/2,1/2,0>
+      scale <10,10,1>
+      translate -z/6
+    }
+    scale Eye_size
+    translate <side*2/3,Wheel_diam,-1/2>
+  }
+#end
+
+#macro wheel()
+  torus {
+    (Wheel_diam-Wheel_thickness)/2 Wheel_thickness/2
+    rotate 90*z
+    pigment {	// this pigment partitions the wheel in four sectors
+      checker
+      pigment {rgb <1,1,0>}
+      pigment {rgb <0,0,1>}
+      translate x/2
+      scale 10
+    }
+    translate Wheel_diam/2*y
+  }
+#end
+
+//
+///
+//// As follows, all we need to do is place our objects in the file.
+//// This is most convenient in a union.
+///
+//
+
+union {
+  wheel()
+  eye(1)
+  eye(-1)
+
+//
+///
+//// The following should be present in every character definition.
+//// It handles the correct placement of the objects.
+//// The objects should _prior_ to these adjustments be contained in a
+////   box {<-2,0,-2> <2,4,2>}
+//// and look in direction <0,0,-1>
+///
+//
+
+  rotate playerAngle*y
+  translate playerLocation
+  translate -2*z
+}
+
--- xblast-tnt-models-20050106.orig/debian/sprites/tutorial/part2/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/tutorial/part2/XBlast Robot.inc	
@@ -0,0 +1,139 @@
+/*
+   ######################################################################
+
+   XBlast Robot.inc
+
+   Character design tutorial part 2
+
+   (C) by Mark Weyer
+
+   ######################################################################
+*/
+
+//
+///
+//// You may have noticed three things:
+//// - The character colours were not adjustable in the appropriate
+////   xblast menu.
+//// - The character became greyish.
+//// - The character was partly transparent.
+//// All of those have the same reason.
+//// We may not choose colours arbitrarily.
+//// There are two kinds of colours for our character:
+//// - adjustable colours (here: yellow, blue, green)
+////   for the character's features (here: wheel colour 1, wheel colour 2,
+////   eye colour).
+////   There are all together six adjustable colours.
+////   Their names in povray are faceColor, helmetColor, bodyColor,
+////   backpackColor, armsLegsColor and handsFeetColor.
+//// - fixed colours (here: white and black) for things that are not fit
+////   to colour arbitrarily (here: the white of the eye and the pupils).
+////   Those have to be shades of grey.
+//// We will now make adjustments.
+///
+//
+
+//
+///
+//// The adjustable colours have peculiar names. We will use local names.
+///
+//
+
+// colours
+
+#local wheelColour1 = handsFeetColor;
+#local wheelColour2 = armsLegsColor;
+#local eyeColour = faceColor;
+
+// basic constants
+
+#declare Wheel_diam = 2;
+#declare Wheel_thickness = 1/2;
+#declare Eye_size = 2/3;
+
+// a macro for eyes
+
+#macro eye(side)
+  sphere {
+    0 1/2
+    pigment {	// this pigment partitions the eye into three layers:
+		// black (pupil), eyeColour (iris), and white (rest)
+      checker
+      pigment {rgb <1,1,1>}
+      pigment {
+        checker
+        pigment {rgb eyeColour}
+        pigment {rgb <0,0,0>}
+        translate <1/2,1/2,0>
+        scale 10
+        translate -z/4
+      }
+      translate <1/2,1/2,0>
+      scale <10,10,1>
+      translate -z/6
+    }
+//
+///
+//// Previously this pigment had been:
+///
+//
+//    pigment {	// this pigment partitions the eye into three layers:
+//		// black (pupil), green (iris), and white (rest)
+//      checker
+//      pigment {rgb <1,1,1>}
+//      pigment {
+//        checker
+//        pigment {rgb <0,1,0>}
+//        pigment {rgb <0,0,0>}
+//        translate <1/2,1/2,0>
+//        scale 10
+//        translate -z/4
+//      }
+//      translate <1/2,1/2,0>
+//      scale <10,10,1>
+//      translate -z/6
+//    }
+//
+    scale Eye_size
+    translate <side*2/3,Wheel_diam,-1/2>
+  }
+#end
+
+#macro wheel()
+  torus {
+    (Wheel_diam-Wheel_thickness)/2 Wheel_thickness/2
+    rotate 90*z
+    pigment {	// this pigment partitions the wheel in four sectors
+      checker
+      pigment {rgb wheelColour1}
+      pigment {rgb wheelColour2}
+      translate x/2
+      scale 10
+    }
+//
+///
+//// Previously this pigment had been:
+///
+//
+//    pigment {	// this pigment partitions the wheel in four sectors
+//      checker
+//      pigment {rgb <1,1,0>}
+//      pigment {rgb <0,0,1>}
+//      translate x/2
+//      scale 10
+//    }
+//
+    translate Wheel_diam/2*y
+  }
+#end
+
+union {
+  wheel()
+  eye(1)
+  eye(-1)
+
+  rotate playerAngle*y
+  translate playerLocation
+  translate -2*z
+}
+
--- xblast-tnt-models-20050106.orig/debian/sprites/tutorial/part3/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/tutorial/part3/XBlast Robot.inc	
@@ -0,0 +1,127 @@
+/*
+   ######################################################################
+
+   XBlast Robot.inc
+
+   Character design tutorial part 3
+
+   (C) by Mark Weyer
+
+   ######################################################################
+*/
+
+//
+///
+//// Our character does not really move so far. It just slides across the
+//// floor. This is no surprise, as we have not designed it to move. Now
+//// we will take care of movements. When this file is included in the
+//// overall image creation process, some variables are set that determine
+//// the state our character is in. For the moment we will only respect
+//// the following three:
+//// - playerStanding is a flag that is set if the character standing
+////   still, waiting for orders. This is what we have assumed anyway,
+////   so we will not change anything with respect to that.
+//// - playerWalking is a flag that is set if the player is walking
+////   from one position to the next. For this case we will alter the code.
+//// - playerWalkingClock is set only if playerWalking is true.
+////   It determines, which part of the process of walking the
+////   character is currently in. Its value can be 0, 1, 2, or 3.
+////   The sequence shown on screen when walking long distances is
+////   ...0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3... . One cycle suffices to move
+////   to the neighbouring position.
+//// - playerWalkingTime is a rescaling of playerWalkingClock. Its value
+////   should be thought of as continually ranging from 0 to 1 during
+////   one cycle. Actually it only assumes the values 0, 0.25, 0.5, 0.75.
+//// We will adjust the code so that the wheel makes a half revolution
+//// (after which it looks the same again) during one animation cycle.
+//// Also the eyes will move.
+///
+//
+
+// colours
+
+#local wheelColour1 = handsFeetColor;
+#local wheelColour2 = armsLegsColor;
+#local eyeColour = faceColor;
+
+// basic constants
+
+#declare Wheel_diam = 8/pi;
+//
+///
+//// This new diameter makes the circumference 8 units,
+//// so that with half a revolution the wheel travels 4 units (one position).
+///
+//
+//#declare Wheel_diam = 2;
+#declare Wheel_thickness = 1/2;
+#declare Eye_size = 2/3;
+
+// a macro for eyes
+
+#macro eye(side)
+  sphere {
+    0 1/2
+    pigment {	// this pigment partitions the eye into three layers:
+		// black (pupil), eyeColour (iris), and white (rest)
+      checker
+      pigment {rgb <1,1,1>}
+      pigment {
+        checker
+        pigment {rgb eyeColour}
+        pigment {rgb <0,0,0>}
+        translate <1/2,1/2,0>
+        scale 10
+        translate -z/4
+      }
+      translate <1/2,1/2,0>
+      scale <10,10,1>
+      translate -z/6
+    }
+//
+///
+//// This rotate is new. The eyes will look left and right during walking.
+///
+//
+    #if (playerWalking)
+      rotate 45*sin(playerWalkingTime*2*pi)*y
+    #end
+    scale Eye_size
+    translate <side*2/3,Wheel_diam,-1/2>
+  }
+#end
+
+#macro wheel()
+  torus {
+    (Wheel_diam-Wheel_thickness)/2 Wheel_thickness/2
+    rotate 90*z
+    pigment {	// this pigment partitions the wheel in four sectors
+      checker
+      pigment {rgb wheelColour1}
+      pigment {rgb wheelColour2}
+      translate x/2
+      scale 10
+    }
+//
+///
+//// This rotate is new. The wheel will turn.
+//// For a cyclic animation there will be a half revolution per cycle.
+///
+//
+    #if (playerWalking)
+      rotate -180*playerWalkingTime*x
+    #end
+    translate Wheel_diam/2*y
+  }
+#end
+
+union {
+  wheel()
+  eye(1)
+  eye(-1)
+
+  rotate playerAngle*y
+  translate playerLocation
+  translate -2*z
+}
+
--- xblast-tnt-models-20050106.orig/debian/sprites/tutorial/part4/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/tutorial/part4/XBlast Robot.inc	
@@ -0,0 +1,182 @@
+/*
+   ######################################################################
+
+   XBlast Robot.inc
+
+   Character design tutorial part 4
+
+   (C) by Mark Weyer
+
+   ######################################################################
+*/
+
+//
+///
+//// We have taken care of the states Standing and Walking.
+//// There are some more:
+//// - Winning: This is the state of the winner in a game (the last
+////   player alive after everybody else has been killed). It also is the
+////   state of the cheering crowd between games and after a match and
+////   of the winner of a game or match that is cheered at by the crowd.
+////   Variables:
+////   playerWinning: the flag
+////   playerAnimationClock: similar to playerWalkingClock. Its value
+////     can be 0,1, or 2. The sequence is ...0,1,2,1,0,1,2,1,... .
+////     for the non-animated winner of a match the value is 0.
+////   playerWinningTime: similar to playerWalkingTime. Its value can be
+////   0, 0.5, or 1.
+//// - Losing: This is the state of the disappointed crowd between games.
+////   It is also the state of the losers of a game at that occasion
+////   and sometimes after the match.
+////   The losers in the game are just skeletons.
+////   Variables:
+////   playerLosing: the flag
+////   playerAnimationClock: the same as above, for the non-animated losers
+////   of a match the value is 0.
+////   playerLosingTime: similar to above.
+//// - Killed: This is the state of a player that has just been hit by a
+////   bomb but has not yet completely lost the game. It is only very
+////   shortly visible at that occasion. It is also sometimes the state of
+////   the losers after the match.
+////   Variables:
+////   playerKilled: the flag
+///
+//// We will now make suitable adjustments for all states
+///
+//
+
+// colours
+
+#local wheelColour1 = handsFeetColor;
+#local wheelColour2 = armsLegsColor;
+#local eyeColour = faceColor;
+
+// basic constants
+
+#declare Wheel_diam = 8/pi;
+#declare Wheel_thickness = 1/2;
+#declare Eye_size = 2/3;
+
+//
+///
+//// This is new:
+///
+//
+
+// derived constants for handling different states
+
+#if (playerKilled)
+  #local Wheel_raise = Wheel_thickness/2;
+  #local Eye_raise = 3*Wheel_raise;
+  #local Eye_down = 60;
+#else
+  #local Wheel_raise = Wheel_diam/2;
+  #local Eye_raise = 2*Wheel_raise;
+  #local Eye_down = 0;
+#end
+
+#if (playerLosing)
+  #local Eye_down = 30;
+  #local Eye_leftright = 30*cos(playerLosingTime*pi);
+#else#if (playerWalking)
+  #local Eye_leftright = 45*sin(playerWalkingTime*2*pi);
+#else
+  #local Eye_leftright = 0;
+#end#end
+
+#if (playerWinning)
+  #local Eye_down = -10;
+#end
+
+// a macro for eyes
+
+#macro eye(side)
+  sphere {
+    0 1/2
+    pigment {	// this pigment partitions the eye into three layers:
+		// black (pupil), eyeColour (iris), and white (rest)
+      checker
+      pigment {rgb <1,1,1>}
+      pigment {
+        checker
+        pigment {rgb eyeColour}
+        pigment {rgb <0,0,0>}
+        translate <1/2,1/2,0>
+        scale 10
+        translate -z/4
+      }
+      translate <1/2,1/2,0>
+      scale <10,10,1>
+      translate -z/6
+    }
+    rotate Eye_leftright*y
+    rotate -Eye_down*x
+    scale Eye_size
+    translate <side*2/3,Eye_raise,-1/2>
+//
+///
+//// Previously these transformations had been:
+///
+//    #if (playerWalking)
+//      rotate 45*sin(playerWalkingTime*2*pi)*y
+//    #end
+//    scale Eye_size
+//    translate <side*2/3,Wheel_diam,-1/2>
+  }
+#end
+
+#macro wheel()
+  torus {
+    (Wheel_diam-Wheel_thickness)/2 Wheel_thickness/2
+    rotate 90*z
+    pigment {	// this pigment partitions the wheel in four sectors
+      checker
+      pigment {rgb wheelColour1}
+      pigment {rgb wheelColour2}
+      translate x/2
+      scale 10
+    }
+    #if (playerWalking)
+      rotate -180*playerWalkingTime*x
+    #end
+//
+///
+//// In Killed state the wheel lies on the floor.
+///
+//
+    #if (playerKilled)
+      rotate 90*z
+    #end
+    translate Wheel_raise*y
+//
+///
+//// Previously this translate had been:
+///
+//    translate Wheel_diam/2*y
+  }
+#end
+
+union {
+  wheel()
+  eye(1)
+  eye(-1)
+//
+///
+//// In Winning state the character jumps.
+///
+//
+  #if (playerWinning)
+    translate (1-pow(playerWinningTime,2))*4/3*y
+  #end
+
+  rotate playerAngle*y
+  translate playerLocation
+  translate -2*z
+}
+
+//
+///
+//// That's all. The tutorial ends here.
+///
+//
+
--- xblast-tnt-models-20050106.orig/debian/sprites/sticky/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/sticky/XBlast Robot.inc	
@@ -0,0 +1,93 @@
+/*
+   XBlast Robot File
+
+   (C) by Mark Weyer
+*/
+
+#include "humanoid_frames.inc"
+
+Erase_humanoid_input_constants()
+
+#declare leg_length = 1.9;
+#declare leg_half_length = 1;
+#declare default_rad = 0.2;
+#declare back_length = 1.4;
+#declare arm_length = 1.7;
+#declare arm_half_length = 0.9;
+
+#declare killed_leg_ang = 75;
+#declare killed_back_ang = 10;
+#declare killed_nod_ang = 45;
+#declare losing_back_ang = 10;
+#declare losing_max_nod_ang = 30;
+#declare winning_jump_height = 0.6;
+#declare walking_back_ang = 10;
+#declare walking_arm_ang = 75;
+
+#declare left_eye_pos = vrotate(<0,0.5,-0.3>,-30*y);
+#declare left_eye_normal = vrotate(-z,-30*y);
+
+Define_humanoid_output_constants()
+
+#macro stick(l,tr,c)
+  cylinder {
+    -l*y 0 0.15
+    pigment {rgb <c.x,c.y,c.z>}
+    transform tr
+  }
+#end
+
+#macro stickk(p1,p2,c)
+  cylinder {
+    p1 p2 0.15
+    pigment {rgb <c.x,c.y,c.z>}
+  }
+#end
+
+#macro round(p,c)
+  sphere {
+    p  default_rad
+    pigment {rgb <c.x,c.y,c.z>}
+  }
+#end
+
+union {
+  stick(lower_leg_length,left_lower_leg_trans,armsLegsColor)
+  stick(lower_leg_length,right_lower_leg_trans,armsLegsColor)
+  stick(upper_leg_length,left_upper_leg_trans,armsLegsColor)
+  stick(upper_leg_length,right_upper_leg_trans,armsLegsColor)
+  stick(back_length,back_trans,bodyColor)
+  stick(-0.5,head_trans,helmetColor)
+  stick(upper_arm_length,left_upper_arm_trans,armsLegsColor)
+  stick(lower_arm_length,left_lower_arm_trans,armsLegsColor)
+  stick(upper_arm_length,right_upper_arm_trans,armsLegsColor)
+  stick(lower_arm_length,right_lower_arm_trans,armsLegsColor)
+  stickk(left_hip_pos,hip_pos,bodyColor)
+  stickk(right_hip_pos,hip_pos,bodyColor)
+  stickk(left_shoulder_pos,neck_pos,bodyColor)
+  stickk(right_shoulder_pos,neck_pos,bodyColor)
+  round(left_ankle_pos,handsFeetColor)
+  round(right_ankle_pos,handsFeetColor)
+  round(left_knee_pos,handsFeetColor)
+  round(right_knee_pos,handsFeetColor)
+  round(left_hip_pos,handsFeetColor)
+  round(right_hip_pos,handsFeetColor)
+  round(hip_pos,backpackColor)
+  round(neck_pos,backpackColor)
+  round(left_shoulder_pos,handsFeetColor)
+  round(right_shoulder_pos,handsFeetColor)
+  round(left_elbow_pos,handsFeetColor)
+  round(right_elbow_pos,handsFeetColor)
+  round(left_wrist_pos,handsFeetColor)
+  round(right_wrist_pos,handsFeetColor)
+  sphere {
+    0.5*y  0.3
+    pigment {rgb faceColor}
+    transform head_trans
+  }
+
+  rotate playerAngle*y
+  translate playerLocation
+  translate -2*z
+}
+
--- xblast-tnt-models-20050106.orig/debian/sprites/wusel/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/wusel/XBlast Robot.inc	
@@ -0,0 +1,224 @@
+//
+// XBlast Robot File
+//
+//
+// Program XBLAST V2.6 or higher
+// (C) by Immanuel Halupczok <xblast@karimmi.de>
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+
+#include "localframes.inc"
+
+/*
+  Parameter an den Wusel:
+    playerDamaged
+    bodyAngle
+    FrontWind
+
+    playerLocation: End-Verschiebung auf dem Boden
+    playerAngle: End-Drehung auf dem Boden
+
+    playerHeight: Abstand Boden-Wuselmitte
+*/
+
+
+#declare haare_schnell = 0;
+#declare haare_anz = 400; // 2000;
+
+// Wird von XBlastTexture benötigt:
+#declare playerIsSick = 0;
+
+#include "XBlastTexture.inc"
+#include "transforms.inc"
+
+
+
+#declare epsi = 0.0001;
+#declare armdicke = 0.15;
+#declare beindicke = 0.15;
+#declare RR = seed(0);
+#declare RRD = seed(1); // Zusatz-Random für damage
+
+
+
+
+/* Gute Werte für kruemmung: 1 für normal, 3 für damaged */
+#macro haar(laenge, kruemmung, wind)
+  #local endpunkt = vnormalize(<laenge, 0, 0> + wind) * laenge;
+  #if (haare_schnell)
+    cylinder {
+      <0, 0, 0> endpunkt 0.03
+      texture {helmetTexture}
+    }
+  #else  
+    #local lyz = kruemmung * laenge * 0;
+
+    /* Hinweis: Bei cubic_spline sollten die Tangenten 6 mal so lang
+       sein, wie man denken würde. Und vom _anderen_ Punkt aus gemessen */
+    #local av = <0, rand(RR) * lyz * 2 - lyz, rand(RR) * lyz * 2 - lyz>;
+    #local ev = <0, rand(RR) * lyz * 2 - lyz, rand(RR) * lyz * 2 - lyz>;
+
+    sphere_sweep {
+      cubic_spline 4
+
+
+      (av + wind) 0.03
+      <0, 0, 0> 0.03
+      endpunkt 0.03
+      (endpunkt + ev + 3 * wind) 0.03
+      texture {helmetTexture}
+    }
+  #end
+#end
+
+
+
+#macro PlayerHaare(wind)
+union {
+  #if (playerDamaged)
+    #local hk = 3;
+  #else
+    #local hk = 1;
+  #end
+  
+  #local ii = 0;
+  #while (ii < haare_anz)
+  
+    /* Wir bauen uns eine Gleichverteilung auf der Kugel:
+       Nutze, dass die Kugelrandfläche einer Scheibe der Dicke
+       epsilon konstant ist. D. h. wähle erst zufällig die y-Koord und dann
+       einen Winkel für Drehung um y-Achse */
+    #local y_koord = rand(RR) * (2 - 2*epsi) - (1 - epsi);
+    #local drehung = rand(RR) * 360;
+      
+    #if((y_koord < 0.05) | (y_koord > 0.55) | (drehung < 55) | (drehung > 125))
+
+      #local haar_drehung = transform {
+	// Haar so drehen, dass der Endpunkt an der angegebenen y-Koord ist:
+	#rotate (asin(y_koord) * 360 / 2 / 3.14159) * z
+	// Um die senkrechte Achse drehen
+	#rotate drehung * y
+      };
+      
+      #local d_wind = vinv_transform(wind, haar_drehung);
+  
+      object {
+	/* Haarlänge zw. 1 und 1.3 */
+	haar(1 + rand(RR)*0.3, hk, d_wind)
+        transform {haar_drehung}
+      }
+    
+    #end
+    
+    #local ii = ii + 1;
+  #end
+}
+#end
+
+
+#declare augengroesse = 0.2;
+
+#macro Auge(richtung)
+union {
+  intersection {
+    sphere {<0, 0, 0>, 1.3}
+    plane {-z, 0}
+    texture {faceTexture}
+  }
+  sphere {<0, 0, 0>, 1
+    pigment {White * 1.1}
+    finish {Shiny}
+  }
+  intersection {
+    sphere {<0, 0, 0>, 1+epsi}
+    sphere {<0, 0, -1>, 0.5}
+    #if (playerDamaged)
+      pigment {White / 2}
+    #else
+      pigment {Black}
+    #end
+    finish {Shiny}
+    rotate richtung
+  }
+
+
+  scale augengroesse
+
+  
+//  texture {eyeTexture}
+}
+#end
+
+
+#declare augpos1 = <-0.3, 0.3, -0.8>;
+#declare augpos2 = < 0.3, 0.3, -0.8>;
+
+#macro Augen(ri1, ri2)
+  union {
+    object { Auge(ri1) translate augpos1 }
+    object { Auge(ri2) translate augpos2 }
+  }
+#end
+
+
+#declare PlayerAugen = object {
+  #if (playerDamaged)
+    Augen(<-15, 30, 0>, <35, 5, 0>)
+  #else
+    Augen(<-5, 0, 0>, <-5, 0, 0>)
+  #end
+}
+
+
+#declare Guckbereich = cone {
+  <0, 0, 0>, augengroesse
+  <0, 0, -1>, 2 * augengroesse
+}
+
+
+/* Der Bereich, der aus den Haaren geschnitten werden muss,
+   damit der Wusel was sieht. */
+#declare Guckbereiche = union {
+  object {Guckbereich translate augpos1}
+  object {Guckbereich translate augpos2}
+}
+
+
+union {
+  #local body_drehung = transform {
+    //rotate 30*x // Damit er in die Kamera schaut; später auskommentieren
+    rotate bodyAngle
+  };
+
+  #local d_wind = vinv_transform(FrontWind, body_drehung);
+  
+
+  
+  //sphere{<0,0,0> 0.1 pigment {color Yellow}}
+  
+  PlayerHaare(d_wind)
+
+  object {PlayerAugen}
+  
+  transform {body_drehung}
+
+
+
+  translate y*playerHeight
+  rotate playerAngle
+  translate playerLocation
+}
--- xblast-tnt-models-20050106.orig/debian/sprites/wusel/localframes.inc
+++ xblast-tnt-models-20050106/debian/sprites/wusel/localframes.inc
@@ -0,0 +1,110 @@
+// (C) by Immanuel Halupczok <xblast@karimmi.de>
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+
+#macro frameDefaults()
+  #declare playerDamaged = 0;
+  #declare playerHeight = 1.0;
+  #declare playerLocation = z*-2.667;
+  #declare bodyAngle = <0, 0, 0>;
+  #declare FrontWind = <0, 0, 0>;
+#end
+
+
+
+
+#if (playerWinning)
+  #local c=playerAnimationClock;
+  frameDefaults()
+  #switch (c)
+    #case (2)
+      #declare playerHeight = 3.0;
+      #declare FrontWind = 0.1*x;
+      #declare bodyAngle = 20*x;
+    #break
+    #case (1)
+      #declare playerHeight = 4.2;
+      #declare FrontWind = 0.2*x;
+      #declare bodyAngle = 30*x;
+    #break
+    #case (0)
+      #declare playerHeight = 4.6;
+      #declare FrontWind = 0.3*x;
+      #declare bodyAngle = 35*x;
+    #break
+  #end 
+
+#end
+
+
+#if (playerLosing)
+  #local c=playerAnimationClock;
+  frameDefaults()
+
+  #switch (c)
+     #case (0) 
+       #declare bodyAngle          = <  -10,   0,  0>;
+     #break
+     #case (1) 
+       #declare bodyAngle          = <  -10,  15,  0>;
+     #break
+     #case (2) 
+       #declare bodyAngle          = <  -10, -15,  0>;
+     #break
+  #end
+#end
+
+
+#if (playerKilled)
+  frameDefaults()
+  #declare playerDamaged = 1;
+  #declare bodyAngle          = 15 * x;
+#end
+
+
+#if (playerWalking)
+  #local c=playerAnimationClock;
+  frameDefaults()
+
+  #switch (c)
+     #case (0) 
+       #declare playerHeight = 1.0;
+       #declare FrontWind = <0, -0.2, 0.4>;
+     #break
+     #case (1) 
+       #declare playerHeight = 2.2;
+       #declare FrontWind = <0, 0.4, 0.4>;
+     #break
+     #case (2) 
+       #declare playerHeight = 2.6;
+       #declare FrontWind = <0, 0, 0.4>;
+     #break
+     #case (3) 
+       #declare playerHeight = 2.2;
+       #declare FrontWind = <0, -0.4, 0.4>;
+     #break
+  #end
+#end
+
+
+
+
+#if (playerStanding)
+  frameDefaults()
+  #declare bodyAngle = < 5, 0, 0 >;
+#end
+
--- xblast-tnt-models-20050106.orig/debian/sprites/felix/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/felix/XBlast Robot.inc	
@@ -0,0 +1,661 @@
+//
+// XBlast Robot File
+//
+//
+// (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+// changed 2003 by Bernhard R. Link <brlink@debian.org>
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+
+#include "frames.inc"
+
+//
+// froce field and other FX
+//
+#ifndef (activateForceField)
+  #declare activateForceField = 0;
+#end
+#ifndef (forceFieldPhase)
+  #declare forceFieldPhase = 0.0;
+#end
+
+//
+// Damaged Player
+//
+#ifndef (playerDamaged)
+  #declare playerDamaged=0
+#end
+
+//
+// sick player
+//
+#ifndef (playerIsSick)
+  #declare playerIsSick=0;
+#end
+
+//
+// additional colors
+//
+#ifndef (beltColor)
+#declare beltColor = color rgb <0.1,0.1,0.1>;
+#end
+
+//
+// no face (needed helmet for helmet camera)
+//
+#ifndef (noFace)
+#declare noFace = 0;
+#end
+
+#include "XBlastTexture.inc"
+
+//
+// some useful shapes
+//
+#declare helmetSphere =
+superellipsoid {
+  <1, 0.9>
+  rotate x*90
+}
+
+#declare crossEye = 
+intersection {
+  cylinder {
+    <0,0,0>, <0,0,-1.5>, 1
+    scale <0.2,0.3,1>
+  }
+  union {
+    box {
+      <-0.05,-1,-1>          
+      < 0.05, 1, 1>
+      rotate z*37.5          
+    }
+    box {
+      <-0.05,-1,-1>          
+      < 0.05, 1, 1>
+      rotate z*-37.5          
+    }
+  }
+}
+
+//
+// include force field
+//
+#if (activateForceField = 1)
+  #include "XBlast Force Field.inc"
+#end
+
+//
+// the head
+//
+#declare PlayerHead =
+union {
+  // helmet
+//  difference {
+    // hull
+    difference {
+      object {
+        helmetSphere
+        scale <1.1,0.85,1.1>
+      }
+      object {
+        helmetSphere
+        scale <1.05,0.80,1.05>
+      }
+    }
+//    // cutout for window
+//    intersection {
+//    cylinder { <0.0,-1.25,0.0>, <0.0,-1.25,-2.0>, 1.75 }
+//      cylinder { <0.0, 1.25,0.1>, <0.0, 1.25,-2.1>, 1.75 }
+//      plane { x, 0.8 }
+//      plane { -x, 0.8 }
+//    }
+//  }
+  // glass window
+//  difference {
+//    object {
+//      helmetSphere
+//      scale <1.083,0.833,1.083>
+//   }
+//    object {
+//      helmetSphere
+//      scale <1.067,0.817,1.067>
+//    }
+//    texture {myGlass}
+//  }
+  #if (noFace = 0)
+    //
+    // face
+    //
+//    sphere {
+//      <0,0,0>, 1
+//      scale <1.0,0.75,1.0>
+//      texture {faceTexture}
+//    }
+    //
+    // eyes
+    //
+    // right eye
+    intersection {
+      sphere {
+        <0,0,0>, 1
+        scale <1.025,0.775,1.025>
+	translate <0,0,-0.1>
+      }
+      #if (playerDamaged) 
+	object {
+          crossEye
+          translate <-0.3,0,0>
+        }
+        pigment {color Black}
+        finish {Glossy}
+      #else
+        cylinder {
+          <0,0,0>, <0,0,-1.5>, 1
+          scale <0.2,0.3,1>
+          translate <-0.3,0,0>
+        }
+        texture {
+          eyeTexture
+          translate <-0.3,0,0>
+        }
+      #end   
+    }
+    // left eye
+    intersection {
+      sphere {
+        <0,0,0>, 1
+        scale <1.025,0.775,1.025>
+	translate <0,0,-0.1>
+      }
+      #if (playerDamaged) 
+	object {
+          crossEye
+          translate < 0.3,0,0>
+        }
+        pigment {color Black}
+        finish {Glossy}
+      #else
+        cylinder {
+          <0,0,0>, <0,0,-1.5>, 1
+          scale <0.2,0.3,1>
+          translate < 0.3,0.0,0>
+        }
+        texture {
+          eyeTexture
+          translate < 0.3,0,0>
+        }
+      #end   
+    }
+    // nose
+    intersection {
+      sphere {
+        <0,0,0>, 1
+        scale <1.025,0.775,1.025>
+	translate <0,0,-0.2>
+      }
+        cylinder {
+          <0,0,0>, <0,0,-1.5>, 0.3
+          scale <0.2,0.3,1>
+          translate < 0,-0.2,0>
+        }
+        texture {
+          faceTexture
+        }
+    }
+  #end
+  //
+  // antenna
+  //
+  object {
+    object {
+	  difference {
+	  sphere {
+		  <0.0,0.0>,0.5
+		  scale <1.0,2.0,1.0>
+		  texture {armsLegsTexture}
+	  }
+	  sphere {
+		  <0.0,0.0>,0.5
+		  scale <1.0,2.0,1.0>
+		  texture {handsFeetTexture}
+		  translate <0,-0.05, -0.1>
+	  }
+	  translate <0,0.5, 0>
+	  }
+      rotate x*-20
+      rotate z*10
+    }
+    translate <-1,0.5,0>
+  }
+  object {
+	  difference {
+	  sphere {
+		  <0.0,0.0>,0.5
+		  scale <1.0,2.0,1.0>
+		  texture {armsLegsTexture}
+	  }
+	  sphere {
+		  <0.0,0.0>,0.5
+		  scale <1.0,2.0,1.0>
+		  texture {handsFeetTexture}
+		  translate <0,-0.05, -0.1>
+	  }
+	  translate <0,0.5, 0>
+	  }
+    rotate x*-20
+    rotate z*-10
+   translate <1,0.5,0>
+  }
+  texture {helmetTexture}
+  translate <0, 0.2125,-0.275>
+  rotate headAngle
+  translate <0,-0.2125, 0.275>
+}
+
+//
+// the body
+//
+#declare PlayerBody =
+union {
+  // main body
+  sphere {
+    <0,0,0>, 1
+    scale <0.8,0.9,0.6>
+  }
+  // backpack
+  union {
+    superellipsoid {
+      <0.5, 0.5>
+      scale <0.6,0.55,0.3>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.4,0.1,0.1>
+      translate <0.0,0.2,0.25>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.4,0.1,0.1>
+      translate <0.0,0.0,0.25>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.4,0.1,0.1>
+      translate <0.0,-0.2,0.25>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.1,0.35,0.1>
+      translate <0.55,0.0,0.05>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.1,0.35,0.1>
+      translate <-0.55,0.0,0.05>
+    }
+    translate <0,0.0,0.5>
+    texture {backpackTexture}
+  }
+  // bomb emblem
+  intersection {
+    sphere {
+      <0,0,0>, 1
+      scale <0.825,0.925,0.625>
+    }
+    union {
+      cylinder {
+        <0,0,0>, <0,0,-1>, 0.175
+      }
+      box {
+        <0.00,-0.025,0>
+        <0.35, 0.025,-1>
+        rotate z*45
+      }
+      translate <0.3,0.2,0>
+    }
+    pigment {
+      wood
+      color_map {
+        [0.000 color White]
+        [0.100 color White]
+        [0.101 color Gray10]
+        [1.000 color Gray10]
+      }
+      translate <0.3-0.04,0.2+0.04,0.0>
+    }
+    finish {Shiny}
+  }
+  // belt
+  intersection {
+    sphere {
+      <0,0,0>, 1
+      scale <0.825,0.925,0.625>
+    }
+    union {
+      box { <-0.20,-0.60,0>, <0.20,-0.30,-1> }
+      intersection {
+        plane { -y, 0.55}
+        plane {  y,-0.35}
+      }
+    }
+    pigment {color beltColor}
+    finish {Dull}
+  }
+  // belt lock
+  intersection {
+    sphere {
+      <0,0,0>, 1
+      scale <0.85,0.95,0.65>
+    }
+    box { <-0.15,-0.55,0>, <0.15,-0.35,-1> }
+    texture {backpackTexture}
+  }
+  texture {bodyTexture}
+}
+
+
+#declare PlayerRightHand =
+union {
+  // main part
+  sphere {
+    <0,0,0>, 1
+    scale <0.2,0.125,0.25>
+  }
+  // thumb
+  sphere {
+    <0,0,0>, 1
+    scale <0.1,0.1,0.25>
+    rotate y*60
+    rotate z*30
+    translate <-0.10,-0.05,-0.15>
+  }
+  // fingers
+  sphere {
+    <0,0,0>, 1
+    scale <0.3,0.125,0.2>
+    translate <-0.20,-0.025,0.05>
+    rotate z*30
+  }
+  // additional objects 
+  #ifdef (rightHandObject)
+    object {rightHandObject translate <-0.20,-0.225,0.05>}
+  #end
+  texture {handsFeetTexture}
+  rotate z*-15
+}
+
+#declare PlayerRightLowerArm =
+union {
+ object {
+    PlayerRightHand
+    translate <-0.525,0,0>
+  }
+  sphere {
+    <-0.4,0,0>, 0.225
+  }
+  cone {
+    <-0.024609375, 0, 0>, 0.261343889659
+    <-0.421093750, 0, 0>, 0.2240090482792
+  }
+}
+
+#declare PlayerRightUpperArm =
+union {
+  object {
+    PlayerRightLowerArm
+    rotate rightLowerArmAngle
+    translate x*-0.4
+  }
+  union {
+    sphere {
+      <0,0,0>, 0.3
+    }
+    cone {
+      <-0.028125000, 0, 0>, 0.2986787310389
+      <-0.424609375, 0, 0>, 0.261343889659
+    }
+    sphere {
+      <-0.4,0,0>, 0.2625
+    }
+  }
+}
+
+#declare PlayerRightArm =
+union {
+  object {
+    PlayerRightUpperArm
+    rotate rightArmAngle
+  }
+  intersection {
+    plane  { -x, 0 }
+    sphere { <0,0,0>, 1 }
+    scale <0.6, 0.3, 0.3>
+  }
+  texture {armsLegsTexture}
+}
+
+//
+// Left arm of player, includings hands
+//
+
+#declare PlayerLeftHand =
+union {
+  sphere {
+    <0,0,0>, 1
+    scale <0.2,0.125,0.25>
+  }
+  // thumb
+  sphere {
+    <0,0,0>, 1
+    scale <0.1,0.1,0.25>
+    rotate y*-60
+    rotate z*-30
+    translate <0.10,-0.05,-0.15>
+  }
+  sphere {
+    <0,0,0>, 1
+    scale <0.3,0.125,0.2>
+    translate <0.20,-0.025,0.05>
+    rotate z*-30
+  }
+  // additional objects 
+  #ifdef (leftHandObject) 
+    object {leftHandObject translate < 0.20,-0.225,0.05>}
+  #end
+  texture {handsFeetTexture}
+  rotate z*15
+}
+
+#declare PlayerLeftLowerArm =
+union {
+ object {
+    PlayerLeftHand
+    translate <0.525,0,0>
+  }
+  sphere {
+    <0.4,0,0>, 0.225
+  }
+  cone {
+    <0.024609375, 0, 0>, 0.261343889659
+    <0.421093750, 0, 0>, 0.2240090482792
+  }
+}
+
+#declare PlayerLeftUpperArm =
+union {
+  object {
+    PlayerLeftLowerArm
+    rotate leftLowerArmAngle
+    translate x*0.4
+  }
+  union {
+    sphere {
+      <0,0,0>, 0.3
+    }
+    cone {
+      <0.028125000, 0, 0>, 0.2986787310389
+      <0.424609375, 0, 0>, 0.261343889659
+    }
+    sphere {
+      <0.4,0,0>, 0.2625
+    }
+  }
+}
+
+#declare PlayerLeftArm =
+union {
+  object {
+    PlayerLeftUpperArm
+    rotate leftArmAngle
+  }
+  intersection {
+    plane  { x, 0 }
+    sphere { <0,0,0>, 1 }
+    scale <0.6, 0.3, 0.3>
+  }
+  texture {armsLegsTexture}
+}
+
+//
+// legs
+//
+
+#declare PlayerFoot =
+union {
+  intersection {
+    sphere { <0,0,0>, 1 }
+    plane  { -y, 0 }
+    scale <0.4,0.3,0.5>
+  }
+  intersection {
+    sphere { <0,0,0>, 1 }
+    plane  { y, 0 }
+    scale <0.4,0.1,0.5>
+  }
+  texture {handsFeetTexture}
+}
+
+#declare PlayerLowerRightLeg =
+union {
+  object {
+    PlayerFoot
+    translate <0.0,-0.3,-0.1>
+    rotate rightFootAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerUpperRightLeg =
+union {
+  object {
+    PlayerLowerRightLeg
+    rotate rightLowerLegAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,0,0>, 0.3
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerRightLeg =
+object {
+    PlayerUpperRightLeg
+    rotate rightLegAngle
+    texture {armsLegsTexture}
+}
+
+
+
+#declare PlayerLowerLeftLeg =
+union {
+  object {
+    PlayerFoot
+    translate <0.0,-0.3,-0.1>
+    rotate leftFootAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerUpperLeftLeg =
+union {
+  object {
+    PlayerLowerLeftLeg
+    rotate leftLowerLegAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,0,0>, 0.3
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerLeftLeg =
+object {
+  PlayerUpperLeftLeg
+  rotate leftLegAngle
+  texture {armsLegsTexture}
+}
+
+#declare Player =
+union {
+  object {PlayerHead     translate < 0.00, 3.25, 0.00> }
+  object {PlayerBody     translate < 0.00, 1.70, 0.00> }
+  object {PlayerLeftArm  translate < 0.6, 1.9, 0.00> }
+  object {PlayerRightArm translate <-0.6, 1.9, 0.00> }
+  object {PlayerRightLeg translate <-0.30, 1.20, 0.00> }
+  object {PlayerLeftLeg  translate < 0.30, 1.20, 0.00> }
+#if (activateForceField = 1)
+  object {ForceField}
+#end
+  translate <0.0, -1.20, 0.0>
+  rotate bodyAngle
+  translate <0.0,  1.20, 0.0>
+  translate y*playerWalkHeight
+  rotate playerAngle
+  translate playerLocation
+  scale 0.75
+  translate <0,0,-1>
+}
+
+object {Player}
+
+//
+// end file "XBlast Robot.inc"//
--- xblast-tnt-models-20050106.orig/debian/sprites/normal/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/normal/XBlast Robot.inc	
@@ -0,0 +1,609 @@
+//
+// XBlast Robot File
+//
+//
+// Program XBLAST V2.6 or higher
+// (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+// some changes by other people, see AUTHORS file...
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+
+#include "frames.inc"
+
+//
+// froce field and other FX
+//
+#ifndef (activateForceField)
+  #declare activateForceField = 0;
+#end
+#ifndef (forceFieldPhase)
+  #declare forceFieldPhase = 0.0;
+#end
+
+//
+// sick player
+//
+#ifndef (playerIsSick)
+  #declare playerIsSick=0;
+#end
+
+//
+// additional colors
+//
+#ifndef (beltColor)
+#declare beltColor = color rgb <0.1,0.1,0.1>;
+#end
+
+//
+// no face (needed helmet for helmet camera)
+//
+#ifndef (noFace)
+#declare noFace = 0;
+#end
+
+#include "XBlastTexture.inc"
+
+//
+// some useful shapes
+//
+#declare helmetSphere =
+superellipsoid {
+  <1, 0.9>
+  rotate x*90
+}
+
+#declare crossEye = 
+intersection {
+  cylinder {
+    <0,0,0>, <0,0,-1.5>, 1
+    scale <0.2,0.3,1>
+  }
+  union {
+    box {
+      <-0.05,-1,-1>          
+      < 0.05, 1, 1>
+      rotate z*37.5          
+    }
+    box {
+      <-0.05,-1,-1>          
+      < 0.05, 1, 1>
+      rotate z*-37.5          
+    }
+  }
+}
+
+//
+// include force field
+//
+#if (activateForceField = 1)
+  #include "XBlast Force Field.inc"
+#end
+
+//
+// the head
+//
+#declare PlayerHead =
+union {
+  // helmet
+  difference {
+    // hull
+    difference {
+      object {
+        helmetSphere
+        scale <1.1,0.85,1.1>
+      }
+      object {
+        helmetSphere
+        scale <1.05,0.80,1.05>
+      }
+    }
+    // cutout for window
+    intersection {
+      cylinder { <0.0,-1.25,0.0>, <0.0,-1.25,-2.0>, 1.75 }
+      cylinder { <0.0, 1.25,0.1>, <0.0, 1.25,-2.1>, 1.75 }
+      plane { x, 0.8 }
+      plane { -x, 0.8 }
+    }
+  }
+  // glass window
+  difference {
+    object {
+      helmetSphere
+      scale <1.083,0.833,1.083>
+    }
+    object {
+      helmetSphere
+      scale <1.067,0.817,1.067>
+    }
+    texture {myGlass}
+    interior {ior 1.5}
+  }
+  #if (noFace = 0)
+    //
+    // face
+    //
+    sphere {
+      <0,0,0>, 1
+      scale <1.0,0.75,1.0>
+      texture {faceTexture}
+    }
+    //
+    // eyes
+    //
+    // right eye
+    intersection {
+      sphere {
+        <0,0,0>, 1
+        scale <1.025,0.775,1.025>
+      }
+      #if (playerDamaged) 
+	object {
+          crossEye
+          translate <-0.3,0,0>
+        }
+        pigment {color Black}
+        finish {Glossy}
+      #else
+        cylinder {
+          <0,0,0>, <0,0,-1.5>, 1
+          scale <0.2,0.3,1>
+          translate <-0.3,0,0>
+        }
+        texture {
+          eyeTexture
+          translate <-0.3,0,0>
+        }
+      #end   
+    }
+    // left eye
+    intersection {
+      sphere {
+        <0,0,0>, 1
+        scale <1.025,0.775,1.025>
+      }
+      #if (playerDamaged) 
+	object {
+          crossEye
+          translate < 0.3,0,0>
+        }
+        pigment {color Black}
+        finish {Glossy}
+      #else
+        cylinder {
+          <0,0,0>, <0,0,-1.5>, 1
+          scale <0.2,0.3,1>
+          translate < 0.3,0,0>
+        }
+        texture {
+          eyeTexture
+          translate < 0.3,0,0>
+        }
+      #end   
+    }
+  #end
+  //
+  // antenna
+  //
+  union {
+    cylinder {
+      <0,0,0>, <0,1.2,0>, 0.1
+      texture {armsLegsTexture}
+    }
+    sphere {
+      <0,1.2,0>, 0.2
+      texture {handsFeetTexture}
+    }
+    rotate x*45
+  }
+  texture {helmetTexture}
+  translate <0, 0.2125,-0.275>
+  rotate headAngle
+  translate <0,-0.2125, 0.275>
+}
+
+//
+// the body
+//
+#declare PlayerBody =
+union {
+  // main body
+  sphere {
+    <0,0,0>, 1
+    scale <0.8,0.9,0.6>
+  }
+  // backpack
+  union {
+    superellipsoid {
+      <0.5, 0.5>
+      scale <0.6,0.55,0.3>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.4,0.1,0.1>
+      translate <0.0,0.2,0.25>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.4,0.1,0.1>
+      translate <0.0,0.0,0.25>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.4,0.1,0.1>
+      translate <0.0,-0.2,0.25>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.1,0.35,0.1>
+      translate <0.55,0.0,0.05>
+    }
+    superellipsoid {
+      <0.75, 0.75>
+      scale <0.1,0.35,0.1>
+      translate <-0.55,0.0,0.05>
+    }
+    translate <0,0.0,0.5>
+    texture {backpackTexture}
+  }
+  // bomb emblem
+  intersection {
+    sphere {
+      <0,0,0>, 1
+      scale <0.825,0.925,0.625>
+    }
+    union {
+      cylinder {
+        <0,0,0>, <0,0,-1>, 0.175
+      }
+      box {
+        <0.00,-0.025,0>
+        <0.35, 0.025,-1>
+        rotate z*45
+      }
+      translate <0.3,0.2,0>
+    }
+    pigment {
+      wood
+      color_map {
+        [0.000 color White]
+        [0.100 color White]
+        [0.101 color Gray10]
+        [1.000 color Gray10]
+      }
+      translate <0.3-0.04,0.2+0.04,0.0>
+    }
+    finish {Shiny}
+  }
+  // belt
+  intersection {
+    sphere {
+      <0,0,0>, 1
+      scale <0.825,0.925,0.625>
+    }
+    union {
+      box { <-0.20,-0.60,0>, <0.20,-0.30,-1> }
+      intersection {
+        plane { -y, 0.55}
+        plane {  y,-0.35}
+      }
+    }
+    pigment {color beltColor}
+    finish {Dull}
+  }
+  // belt lock
+  intersection {
+    sphere {
+      <0,0,0>, 1
+      scale <0.85,0.95,0.65>
+    }
+    box { <-0.15,-0.55,0>, <0.15,-0.35,-1> }
+    texture {backpackTexture}
+  }
+  texture {bodyTexture}
+}
+
+
+#declare PlayerRightHand =
+union {
+  // main part
+  sphere {
+    <0,0,0>, 1
+    scale <0.2,0.125,0.25>
+  }
+  // thumb
+  sphere {
+    <0,0,0>, 1
+    scale <0.1,0.1,0.25>
+    rotate y*60
+    rotate z*30
+    translate <-0.10,-0.05,-0.15>
+  }
+  // fingers
+  sphere {
+    <0,0,0>, 1
+    scale <0.3,0.125,0.2>
+    translate <-0.20,-0.025,0.05>
+    rotate z*30
+  }
+  // additional objects 
+  #ifdef (rightHandObject)
+    object {rightHandObject translate <-0.20,-0.225,0.05>}
+  #end
+  texture {handsFeetTexture}
+  rotate z*-15
+}
+
+#declare PlayerRightLowerArm =
+union {
+ object {
+    PlayerRightHand
+    translate <-0.525,0,0>
+  }
+  sphere {
+    <-0.4,0,0>, 0.225
+  }
+  cone {
+    <-0.024609375, 0, 0>, 0.261343889659
+    <-0.421093750, 0, 0>, 0.2240090482792
+  }
+}
+
+#declare PlayerRightUpperArm =
+union {
+  object {
+    PlayerRightLowerArm
+    rotate rightLowerArmAngle
+    translate x*-0.4
+  }
+  union {
+    sphere {
+      <0,0,0>, 0.3
+    }
+    cone {
+      <-0.028125000, 0, 0>, 0.2986787310389
+      <-0.424609375, 0, 0>, 0.261343889659
+    }
+    sphere {
+      <-0.4,0,0>, 0.2625
+    }
+  }
+}
+
+#declare PlayerRightArm =
+union {
+  object {
+    PlayerRightUpperArm
+    rotate rightArmAngle
+  }
+  intersection {
+    plane  { -x, 0 }
+    sphere { <0,0,0>, 1 }
+    scale <0.6, 0.3, 0.3>
+  }
+  texture {armsLegsTexture}
+}
+
+//
+// Left arm of player, includings hands
+//
+
+#declare PlayerLeftHand =
+union {
+  sphere {
+    <0,0,0>, 1
+    scale <0.2,0.125,0.25>
+  }
+  // thumb
+  sphere {
+    <0,0,0>, 1
+    scale <0.1,0.1,0.25>
+    rotate y*-60
+    rotate z*-30
+    translate <0.10,-0.05,-0.15>
+  }
+  sphere {
+    <0,0,0>, 1
+    scale <0.3,0.125,0.2>
+    translate <0.20,-0.025,0.05>
+    rotate z*-30
+  }
+  // additional objects 
+  #ifdef (leftHandObject) 
+    object {leftHandObject translate < 0.20,-0.225,0.05>}
+  #end
+  texture {handsFeetTexture}
+  rotate z*15
+}
+
+#declare PlayerLeftLowerArm =
+union {
+ object {
+    PlayerLeftHand
+    translate <0.525,0,0>
+  }
+  sphere {
+    <0.4,0,0>, 0.225
+  }
+  cone {
+    <0.024609375, 0, 0>, 0.261343889659
+    <0.421093750, 0, 0>, 0.2240090482792
+  }
+}
+
+#declare PlayerLeftUpperArm =
+union {
+  object {
+    PlayerLeftLowerArm
+    rotate leftLowerArmAngle
+    translate x*0.4
+  }
+  union {
+    sphere {
+      <0,0,0>, 0.3
+    }
+    cone {
+      <0.028125000, 0, 0>, 0.2986787310389
+      <0.424609375, 0, 0>, 0.261343889659
+    }
+    sphere {
+      <0.4,0,0>, 0.2625
+    }
+  }
+}
+
+#declare PlayerLeftArm =
+union {
+  object {
+    PlayerLeftUpperArm
+    rotate leftArmAngle
+  }
+  intersection {
+    plane  { x, 0 }
+    sphere { <0,0,0>, 1 }
+    scale <0.6, 0.3, 0.3>
+  }
+  texture {armsLegsTexture}
+}
+
+//
+// legs
+//
+
+#declare PlayerFoot =
+union {
+  intersection {
+    sphere { <0,0,0>, 1 }
+    plane  { -y, 0 }
+    scale <0.4,0.3,0.5>
+  }
+  intersection {
+    sphere { <0,0,0>, 1 }
+    plane  { y, 0 }
+    scale <0.4,0.1,0.5>
+  }
+  texture {handsFeetTexture}
+}
+
+#declare PlayerLowerRightLeg =
+union {
+  object {
+    PlayerFoot
+    translate <0.0,-0.3,-0.1>
+    rotate rightFootAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerUpperRightLeg =
+union {
+  object {
+    PlayerLowerRightLeg
+    rotate rightLowerLegAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,0,0>, 0.3
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerRightLeg =
+object {
+    PlayerUpperRightLeg
+    rotate rightLegAngle
+    texture {armsLegsTexture}
+}
+
+
+
+#declare PlayerLowerLeftLeg =
+union {
+  object {
+    PlayerFoot
+    translate <0.0,-0.3,-0.1>
+    rotate leftFootAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerUpperLeftLeg =
+union {
+  object {
+    PlayerLowerLeftLeg
+    rotate leftLowerLegAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,0,0>, 0.3
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerLeftLeg =
+object {
+  PlayerUpperLeftLeg
+  rotate leftLegAngle
+  texture {armsLegsTexture}
+}
+
+
+#declare Player =
+union {
+  object {PlayerHead     translate < 0.00, 3.25, 0.00> }
+  object {PlayerBody     translate < 0.00, 1.70, 0.00> }
+  object {PlayerLeftArm  translate < 0.6, 1.9, 0.00> }
+  object {PlayerRightArm translate <-0.6, 1.9, 0.00> }
+  object {PlayerRightLeg translate <-0.30, 1.20, 0.00> }
+  object {PlayerLeftLeg  translate < 0.30, 1.20, 0.00> }
+#if (activateForceField = 1)
+  object {ForceField}
+#end
+  translate <0.0, -1.20, 0.0>
+  rotate bodyAngle
+  translate <0.0,  1.20, 0.0>
+  translate y*playerWalkHeight
+  rotate playerAngle
+  translate playerLocation
+}
+
+object {Player}
+
+
+//
+// end file "XBlast Robot.inc"//
--- xblast-tnt-models-20050106.orig/debian/sprites/golem/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/golem/XBlast Robot.inc	
@@ -0,0 +1,114 @@
+/*
+   XBlast Robot File
+
+   (C) by Mark Weyer
+*/
+
+#local neck_length = 0.6;
+#local head_rad = 0.3;
+#local eye_y = 3/4;
+#local eye_ang = 30;
+#local eye_rad = head_rad/4;
+
+#include "humanoid_frames.inc"
+
+Erase_humanoid_input_constants()
+
+#declare leg_length = 1.7;
+#declare leg_half_length = 0.9;
+#declare default_rad = 0.2;
+#declare back_length = 1.5;
+#declare arm_length = 1.5;
+#declare arm_half_length = 0.8;
+#declare leg_sep = 0.3;
+#declare arm_sep = 0.3;
+
+#declare killed_leg_ang = 45;
+#declare killed_back_ang = 10;
+#declare killed_nod_ang = 45;
+#declare losing_back_ang = 10;
+#declare losing_shake_ang = 60;
+#declare winning_jump_height = 0.6;
+#declare walking_back_ang = 10;
+#declare walking_arm_ang = 30;
+
+#declare left_eye_pos =
+  vrotate(<0,neck_length+head_rad*(2*eye_y-1),-head_rad>,-30*y);
+#declare left_eye_normal = vrotate(-z,-eye_ang*y);
+
+Define_humanoid_output_constants()
+
+#declare rst=seed(3);
+
+#macro limb(Width1,Width2,Height,Depth,Offset,tr,C)
+  #local Length = 0.4;
+  #local Thick = 0.2;
+
+  #local i=0;
+  #while (i<(Width1+Width2)*Height*Depth*300)
+    #local p1=<(2*rand(rst)-1)*Width2,
+      rand(rst)*Height+Offset,
+      (2*rand(rst)-1)*Depth>;
+    #local p2=p1+Length*(2*<rand(rst),rand(rst),rand(rst)>-1);
+    #local Y1=(p1.y-Offset)/Height;
+    #local Y2=(p2.y-Offset)/Height;
+    #local Width_p1 = Width1*(1-Y1)+Width2*Y1;
+    #local Width_p2 = Width1*(1-Y2)+Width2*Y2;
+    #local r1=sqrt(pow(p1.x/Width_p1,2)+pow(p1.z/Depth,2));
+    #local r2=sqrt(pow(p2.x/Width_p2,2)+pow(p2.z/Depth,2));
+    #if ((r1<1) & (r2<1) &
+        (0<Y2) & (Y2<1) &
+        (vlength(p1-p2)<Length))
+
+      cylinder {p1 p2 Thick 1 pigment {rgb <C.x,C.y,C.z>} transform tr}
+
+      #local i=i+1;
+    #end
+  #end
+#end
+
+#macro limb1(Height,tr,C)
+  limb(default_rad,default_rad,Height,default_rad,-Height,tr,C)
+#end
+
+#local left_eye_trans =
+  transform {
+    rotate -90*x
+    rotate -eye_ang*y
+    translate (neck_length+head_rad*(2*eye_y-1))*y
+    head_trans
+  }
+#local right_eye_trans =
+  transform {
+    rotate -90*x
+    rotate eye_ang*y
+    translate (neck_length+head_rad*(2*eye_y-1))*y
+    head_trans
+  }
+
+blob {
+  limb1(lower_leg_length,left_lower_leg_trans,handsFeetColor)
+  limb1(lower_leg_length,right_lower_leg_trans,handsFeetColor)
+  limb1(upper_leg_length,left_upper_leg_trans,armsLegsColor)
+  limb1(upper_leg_length,right_upper_leg_trans,armsLegsColor)
+  limb(hip_width/2,shoulder_width/2,back_length,2*default_rad,-back_length,
+    back_trans,bodyColor)
+  limb(default_rad,default_rad,neck_length,default_rad,0,head_trans,bodyColor)
+  limb(head_rad,head_rad,2*head_rad,head_rad,neck_length-head_rad,
+    head_trans,faceColor)
+  limb(eye_rad,eye_rad,2*eye_rad,eye_rad,head_rad-eye_rad*2/3,
+    left_eye_trans,helmetColor)
+  limb(eye_rad,eye_rad,2*eye_rad,eye_rad,head_rad-eye_rad*2/3,
+    right_eye_trans,helmetColor)
+  limb1(upper_arm_length,left_upper_arm_trans,armsLegsColor)
+  limb1(lower_arm_length,left_lower_arm_trans,handsFeetColor)
+  limb1(upper_arm_length,right_upper_arm_trans,armsLegsColor)
+  limb1(lower_arm_length,right_lower_arm_trans,handsFeetColor)
+
+  threshold 0.2
+  pigment {rgb 1}
+  rotate playerAngle*y
+  translate playerLocation
+  translate -2*z
+}
+
--- xblast-tnt-models-20050106.orig/debian/sprites/insect/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/insect/XBlast Robot.inc	
@@ -0,0 +1,469 @@
+/*
+   XBlast Robot File
+
+   (C) by Mark Weyer
+*/
+
+
+
+/*
+   Parameters
+   ==========
+
+   Copied from the official parameters
+   -----------------------------------
+
+   Eye_colour		- colour of light in eyes and rear
+   Chitin_texture	- used for head and rear
+   Hair_texture_x with x in {lr,Lr,lR,LR}
+			- used for the torso (which consists of hairs only)
+			  change in case of l indicates change of ring
+			  (or shift in direction of _l_ength)
+			  change in case of r indicates change of spiral
+			  (or shift in direction of _r_ing)
+
+   Determined via frames
+   ---------------------
+
+   Torso_wave (on/off)	- on: Torso is shaped like a wave
+			  off: Torso is shaped bent
+   Torso_phase (0-2)	- Torso_wave = on:
+			  the wave shape and hair pattern shift with this phase
+   Torso_bend_deg (0.1-179.9)
+			- Torso_wave = off:
+			  the angle that the torso describes
+   Eye_sharpness (0-4)	- 0 gives completely blunt eyes
+                          (constant media density)
+                          positive value give eyes which are brighter
+                          in the middle. The value is the exponent of density
+                          increase with proximity to the center.
+   Hair_wind_bend_deg (0.1-179.9)
+			- the angle that hairs are bent
+
+   Calculated from the above
+   -------------------------
+
+   Neck_ang_deg (0-90)	- the angle the head is bowed.
+			  180-(angle between neck and nose)
+   Rear_bend_deg (0.1-179.9)
+			- the angle that the rear is bent
+   Antenna_bend_deg (0.1-179.9)
+			- determines the angle that the antennae are bent
+   Torso_y, Torso_z	- curve torso describes (parameterized from 0 to 1)
+   Torso_dy, Torso_dy	- derivative of Torso_y, Torso_z
+*/
+
+#local outer_version = version;
+#version 3.5;
+
+//
+// Colours and textures
+//
+
+#macro Colour_2_Texture(C)
+  texture {pigment {color C} finish {specular 0.5 ambient 0.2}}
+#end
+
+#local Eye_colour = faceColor;
+#local Chitin_texture = Colour_2_Texture(helmetColor)
+#local Hair_texture_lr = Colour_2_Texture(bodyColor)
+#local Hair_texture_Lr = Colour_2_Texture(backpackColor)
+#local Hair_texture_lR = Colour_2_Texture(armsLegsColor)
+#local Hair_texture_LR = Colour_2_Texture(handsFeetColor)
+
+
+//
+// frame initialization
+//
+
+#local Torso_phase = 0;
+#local Torso_bend_deg = 1;
+
+#if (playerWinning)
+  #local Torso_wave = off;
+  #local Torso_bend_deg = 30+playerWinningTime*30;
+  #local Eye_sharpness = (12-playerWinningTime*4)/3;
+  #local Hair_wind_bend_deg = 15+playerWinningTime*30;
+#end
+
+#if (playerLosing)
+  #local Torso_wave = off;
+  #local Torso_bend_deg = 90+playerLosingTime*30;
+  #local Eye_sharpness = (4-playerLosingTime*4)/3;
+  #local Hair_wind_bend_deg = 90+playerLosingTime*60;
+#end
+
+#if (playerKilled)
+  #local Torso_wave = off;
+  #local Torso_bend_deg = 179;
+  #local Eye_sharpness = 0;
+  #local Hair_wind_bend_deg = 10;
+#end
+
+#if (playerWalking)
+  #local Torso_wave = on;
+  #local Torso_phase = playerWalkingTime*2;
+  #local Eye_sharpness = 3;
+  #local Hair_wind_bend_deg = 90;
+#end
+
+#if (playerStanding)
+  #local Torso_wave = off;
+  #local Torso_bend_deg = 60;
+  #local Eye_sharpness = 2;
+  #local Hair_wind_bend_deg = 60;
+#end
+
+
+//
+// internal constants
+//
+
+#local Torso_length = 2;
+#local Torso_bend_center_T = 1/2;
+#local Torso_bend_rad1 = Torso_bend_deg*pi/180;			// radians
+#local Torso_bend_rad2 = Torso_length/Torso_bend_rad1;		// radius
+#local Torso_bend_center_deg = 60;
+#local Torso_bend_center_rad = Torso_bend_center_deg*pi/180;
+#local Torso_w_min = 1/12;
+#local Torso_w_max = 1/2;
+#local Torso_w = function(T)
+  {(sin((T)*pi)*(Torso_w_max-Torso_w_min)+Torso_w_min)}
+#local Torso_dw = function(T) {(cos((T)*pi)*pi*(Torso_w_max-Torso_w_min))}
+#local Torso_wave_amp = 1/3;
+#if (Torso_wave)
+  #local Neck_ang_deg = 30;
+  #local Rear_bend_deg = 30;
+  #local Antenna_bend_deg = 120;
+  #local Eye_sharpness = 3;
+  #local Torso_y = function(T) {(sin(((T)-Torso_phase)*pi)*Torso_wave_amp+2)}
+  #local Torso_z = function(T) {(Torso_length*((T)-1/2)+1/3)}
+  #local Torso_dy = function(T) {(cos(((T)-Torso_phase)*pi)*pi*Torso_wave_amp)}
+  #local Torso_dz = function(T) {(Torso_length)}
+#else
+  #local Neck_ang_deg = Torso_bend_deg/2;
+  #local Rear_bend_deg = Torso_bend_deg/2;
+  #local Antenna_bend_deg = Torso_bend_deg;
+  #local Eye_sharpness = 2;
+  #local Torso_y = function(T)
+    {((cos(((T)-Torso_bend_center_T)*Torso_bend_rad1+Torso_bend_center_rad)
+        -cos(Torso_bend_center_rad))
+      *Torso_bend_rad2+2)}
+  #local Torso_z = function(T)
+    {((sin(((T)-Torso_bend_center_T)*Torso_bend_rad1+Torso_bend_center_rad)
+        -sin(Torso_bend_center_rad))
+      *Torso_bend_rad2+1/3)}
+  #local Torso_dy = function(T)
+    {(-sin(((T)-Torso_bend_center_T)*Torso_bend_rad1+Torso_bend_center_rad)
+      *Torso_bend_rad2*Torso_bend_rad1)}
+  #local Torso_dz = function(T)
+    {(cos(((T)-Torso_bend_center_T)*Torso_bend_rad1+Torso_bend_center_rad)
+      *Torso_bend_rad2*Torso_bend_rad1)}
+#end
+
+
+#local atanf=function(b,a)				// b=sin, a=cos
+  {(select((b),
+    select((a),
+      select((a)-(b),
+        atan2(-(b),-(a))-pi,
+        -pi/2-atan2(-(a),-(b))),
+      select((a)+(b),
+        atan2((a),-(b))-pi/2,
+        -atan2(-(b),(a)))),
+    select((a),
+      select((a)+(b),
+        pi-atan2((b),-(a)),
+        pi/2+atan2(-(a),(b))),
+      select((a)-(b),
+        pi/2-atan2((a),(b)),
+        atan2((b),(a)))
+      )))}
+
+
+
+#local pre_mix = function(x) {select(x,0,0,exp(-1/x))}
+#local mix = function(x1,x2,y1,y2,x)
+  {(y2*pre_mix((x-x1)/(x2-x1))+y1*pre_mix((x2-x)/(x2-x1))) /
+    (pre_mix((x-x1)/(x2-x1))+pre_mix((x2-x)/(x2-x1)))}
+#local End = function(z1,z2,z)
+  {mix(z1,z2,pow((z-z2)/(z2-z1),2),0,z)}
+#local outer =
+  function(zs1,zs2,zv1,zv2,zh1,zh2,ze1,ze2,w1,h1,y1,w2,h2,y2,x,y,z)
+  {End(zs1,zs2,z)+
+    End(-ze2,-ze1,-z)+
+    pow(x/mix(zh1,zh2,w1,w2,z),4)+
+      pow((y-mix(zv1,zv2,y1,y2,z))/mix(zv1,zv2,h1,h2,z),4)
+  }
+#local round_bar = function(Angle,r1,r2,x,y,z)
+  {pow(x/r2,2)+
+    pow((sqrt(pow(y,2)+pow(z,2))-r1)/r2,2)+
+    pow(mix(-r2,0,pow(y/r2,2),(atanf(y,z))/Angle,y),2)}
+
+#local mix_eps_main = 0.5;
+#local mix_eps_eyes = 0.5;
+#local mix_eps_neck = 0.5;
+#local mix_eps_antenna = 0.5;
+
+#local Head_length = 3;
+#local Head_width = 3;
+#local Head_height = 3;
+#local Head_scale = 1/4;
+
+#local Eye_x = Head_width*0.4;
+#local Eye_y = Head_height/3;
+#local Eye_z = -Head_length/4;
+#local Eye_rad = Head_width/4;
+#local Eye_ball_depth = Eye_rad/3;
+#local Eye_ball_rad = Eye_rad*2/3;
+#local Eye_brightness = 1/3;
+#local Eye_greyness = 1/20;
+#if (playerKilled)
+  #local Eye_greyed_colour = 0;
+#else
+  #local Eye_greyed_colour = Eye_colour*(1-Eye_greyness)+<1,1,1>*Eye_greyness;
+#end
+#local Eye_fac =
+  (Eye_sharpness+1)*(Eye_sharpness+2)*(Eye_sharpness+3)/
+  (Eye_ball_rad*Head_scale);
+#local Eye_density = function(x,y,z)
+  {pow(1-sqrt(pow(x,2)+pow(y,2)+pow(z,2)),Eye_sharpness)}
+#local Eye_samples = 3+int(pow(10,Eye_sharpness));
+
+#local eye =
+  sphere {
+    0 1
+    hollow
+    texture {pigment {transmit 1}}
+    interior {
+      media {
+        emission Eye_greyed_colour*Eye_brightness*Eye_fac
+        density {function {Eye_density(x,y,z)}}
+        intervals 1
+        method 3
+        samples Eye_samples,Eye_samples
+      }
+    }
+    scale Eye_ball_rad
+    translate <Eye_x,Eye_y,Eye_z>+<-1,-1,1>*Eye_ball_depth/sqrt(3)
+  }
+
+#local Nose_length = 3.5;
+#local Nose_tip_length = 1/4;
+#local Nose_width = 1/3;
+#local Nose_height = 1/3;
+
+#local Neck_length = 3;
+#local Neck_hlen = Neck_length/2;
+#local Neck_rad = Head_width/6;
+#local Neck_ang_rad = Neck_ang_deg*pi/180;
+
+#local Antenna_length = 4;
+#local Antenna_rad = 1/8;
+#local Antenna_z = Head_length/4;
+#local Antenna_x = Head_width/4;
+#local Antenna_bend_rad = Antenna_bend_deg*pi/180;
+#local Antenna_aux = Antenna_length/Antenna_bend_rad;
+
+#local head =
+  union {
+    isosurface {
+      function {1/2
+        -mix(1-mix_eps_main,1+mix_eps_main,1,0,outer(
+          -Nose_length,-Nose_length+Nose_tip_length,
+          -Head_length,0,
+          -Head_length/2,0,
+          0,Head_length/2,
+          Nose_width/2,Nose_height/2,(Head_height-Nose_height)/2,
+          Head_width/2,Head_height/2,0,
+          x,y,z))
+        -mix(1-mix_eps_neck,1+mix_eps_neck,1,0,
+          pow(x/Neck_rad,2)+
+          pow((y*cos(Neck_ang_rad)+z*sin(Neck_ang_rad))/Neck_rad,2)+
+          pow((z*cos(Neck_ang_rad)-y*sin(Neck_ang_rad)-Neck_hlen)/Neck_hlen,2))
+        -mix(1-mix_eps_antenna,1+mix_eps_antenna,1,0,
+          round_bar
+            (Antenna_bend_rad,Antenna_aux,Antenna_rad,
+            abs(x)-Antenna_x,y-Head_height/2,z-Antenna_z+Antenna_aux))
+        +mix(1-mix_eps_eyes,1+mix_eps_eyes,1,0,
+          pow((abs(x)-Eye_x)/Eye_rad,2)+
+          pow((y-Eye_y)/Eye_rad,2)+pow((z-Eye_z)/Eye_rad,2))}
+      threshold 0
+      contained_by {box {
+        <-Head_width/2,-Neck_length,-Nose_length>-1/2
+        <Head_width/2,Head_height/2+Antenna_length,Neck_length>+1/2}}
+      max_gradient 100
+      texture {Chitin_texture}
+    }
+    object {eye}
+    object {eye scale <-1,1,1>}
+    rotate -Neck_ang_deg*x
+    translate -Neck_hlen*z
+    scale Head_scale
+  }
+
+#local Hair_wind_bend_rad = Hair_wind_bend_deg*pi/180;
+#local Hair_num_segments = 2;
+#local Hair_length = 4;
+#local Hair_aux1 = Hair_length/Hair_wind_bend_rad;
+#local Hair_rad = 1/10;
+#local Hair_root_rad = 1.5;
+#local Hair_scale = 1/16;
+
+#local hair =
+  sphere_sweep {
+    b_spline
+    Hair_num_segments+4
+    <0,-2,0> 1
+    <0,-1,0> 1
+    #local i=0;
+    #while (i<=Hair_num_segments+1)
+      #local Angle=Hair_wind_bend_rad*i/Hair_num_segments;
+      <0,Hair_aux1*sin(Angle),Hair_aux1*(1-cos(Angle))>
+      #if (i<Hair_num_segments)
+        Hair_rad
+      #else
+        0
+      #end
+      #local i=i+1;
+    #end
+    translate y
+    scale Hair_scale
+  }
+
+#local Torso_jitter = 1;
+#local Hair_max_dist = 2*Hair_root_rad*Hair_scale/sqrt(2)/(1+Torso_jitter);
+#local Torso_num_hairs_len = ceil(Torso_length*1.3/Hair_max_dist);
+#local Torso_stream = seed(1);
+#local Torso_l_stripes = 4;
+#local Torso_r_stripes = 6;
+#local Torso_spiral_steepness = 1/Torso_l_stripes;
+
+#local torso = union {
+  #local i=0;
+  #while (i<Torso_num_hairs_len)
+    #local j=0;
+    #local T0=(i+1/2)/Torso_num_hairs_len;
+    #local Torso_num_hairs_circ = ceil(2*pi*(Torso_w(T0))/Hair_max_dist);
+    #while (j<Torso_num_hairs_circ)
+      #local T=(i+1/2+(rand(Torso_stream)-1/2)*Torso_jitter)
+        /Torso_num_hairs_len;
+      #local U=(j+1/2+(rand(Torso_stream)-1/2)*Torso_jitter)
+        /Torso_num_hairs_circ;
+					// mod does not work properly with
+					// negative numbers. Hence 100+
+      #local TT = mod(100+floor(T*Torso_l_stripes-Torso_phase),2);
+      #local UU = mod(100+
+        floor((U+T*Torso_spiral_steepness)*Torso_r_stripes-Torso_phase),2);
+      object {
+        hair
+        #if (TT)
+          #if (UU)
+            texture{Hair_texture_LR}
+          #else
+            texture{Hair_texture_Lr}
+          #end
+        #else
+          #if (UU)
+            texture{Hair_texture_lR}
+          #else
+            texture{Hair_texture_lr}
+          #end
+        #end
+        #local dy=Torso_dy(T);
+        #local dz=Torso_dz(T);
+        #local dw=Torso_dw(T);
+        rotate -atanf(dw,dz)*180/pi*x	// not quite exact,
+					// feel free to correct
+        translate Torso_w(T)*y
+        rotate U*360*z
+        rotate -atanf(dy,dz)*180/pi*x
+        translate <0,Torso_y(T),Torso_z(T)>
+      }
+      #local j=j+1;
+    #end
+    #local i=i+1;
+  #end
+}
+
+
+#local mix_eps_rear = 0.5;
+#local mix_tail_outer = 0.5;
+#local mix_tail_inner = 0.5;
+
+#local Rear_bend_rad = Rear_bend_deg*pi/180;
+#local Rear_length = 1;
+#local Rear_aux = Rear_length/Rear_bend_rad;
+#local Rear_rad = 1/2;
+
+#local Tail_outer_length = 2;
+#local Tail_outer_rad = 1.5;
+#local Tail_thickness = 0.5;
+#local Tail_inner_pos = 0.5;
+#local Tail_inner_length = Tail_outer_length+Tail_inner_pos-Tail_thickness;
+#local Tail_inner_rad = Tail_outer_rad-Tail_thickness;
+#local Tail_scale = 1/6;
+
+#local tail =
+  light_group {
+    light_source {(Tail_thickness+1e-4)*z Eye_greyed_colour}
+    isosurface {
+      function {1/2
+        -mix(1-mix_tail_outer,1+mix_tail_outer,1,0,
+           pow(x/Tail_outer_rad,2)+
+           pow(y/Tail_outer_rad,2)+
+           pow((z-Tail_outer_length)/Tail_outer_length,2))
+        +mix(1-mix_tail_inner,1+mix_tail_inner,1,0,
+           pow(x/Tail_inner_rad,2)+
+           pow(y/Tail_inner_rad,2)+
+           pow((z-Tail_outer_length-Tail_inner_pos)/Tail_inner_length,2))
+        -mix(1-mix_eps_rear,1+mix_eps_rear,1,0,
+          round_bar(Rear_bend_rad,Rear_aux,Rear_rad,
+            x,
+            z*cos(Rear_bend_rad)+(y+Rear_aux)*sin(Rear_bend_rad),
+            (y+Rear_aux)*cos(Rear_bend_rad)-z*sin(Rear_bend_rad)))}
+      threshold 0
+      contained_by {box {
+        <-Tail_outer_rad,-max(Tail_outer_rad,Rear_length),-Rear_length>-1/2
+        <Tail_outer_rad,Tail_outer_rad,Tail_outer_length+Tail_inner_pos>-1/2}}
+      max_gradient 10
+      texture {Chitin_texture}
+    }
+    translate Rear_aux*y
+    rotate Rear_bend_deg*x
+    translate -Rear_aux*y
+    scale Tail_scale
+    global_lights on
+  }
+
+#local insect =
+  union {
+    object {
+      head
+      #local dy=Torso_dy(0);
+      #local dz=Torso_dz(0);
+      rotate -atanf(dy,dz)*180/pi*x
+      translate <0,Torso_y(0),Torso_z(0)>
+    }
+    object {torso}
+    object {
+      tail
+      #local dy=Torso_dy(1);
+      #local dz=Torso_dz(1);
+      rotate -atanf(dy,dz)*180/pi*x
+      translate <0,Torso_y(1),Torso_z(1)>
+    }
+    #if (playerKilled)
+      translate -2*y
+      rotate 90*z
+      translate Torso_w_max*y
+    #end
+    rotate playerAngle
+    translate playerLocation
+    translate <0,0,-2>
+  }
+
+object{insect}
+
+#version outer_version;
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/playerA.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/playerA.inc
@@ -0,0 +1,11 @@
+//
+// color defintions for player 1
+//
+#declare helmetColor    = color rgb <1,0,0>;
+#declare faceColor      = color rgb <0,1,0>;
+#declare bodyColor      = color rgb <0,0,0>;
+#declare handsFeetColor = color rgb <0,0,0>;
+#declare armsLegsColor  = color rgb <0,0,0>;
+#declare backpackColor  = color rgb <0,0,0>;
+
+#declare floorColor = color rgb <0.333,0.333,0.333>;
--- xblast-tnt-models-20050106.orig/debian/sprites/include/playerB.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/playerB.inc
@@ -0,0 +1,11 @@
+//
+// color definitions for player 2
+//
+#declare helmetColor    = color rgb <0,0,0>;
+#declare faceColor      = color rgb <0,0,0>;
+#declare bodyColor      = color rgb <1,0,0>;
+#declare handsFeetColor = color rgb <0,1,0>;
+#declare armsLegsColor  = color rgb <0,0,0>;
+#declare backpackColor  = color rgb <0,0,0>;
+
+#declare floorColor = color rgb <0.333,0.333,0.333>;
--- xblast-tnt-models-20050106.orig/debian/sprites/include/playerC.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/playerC.inc
@@ -0,0 +1,11 @@
+//
+// color defintions for player 3
+//
+#declare helmetColor    = color rgb <0,0,0>;
+#declare faceColor      = color rgb <0,0,0>;
+#declare bodyColor      = color rgb <0,0,0>;
+#declare handsFeetColor = color rgb <0,0,0>;
+#declare armsLegsColor  = color rgb <1,0,0>;
+#declare backpackColor  = color rgb <0,1,0>;
+
+#declare floorColor = color rgb <0.333,0.333,0.333>;
--- xblast-tnt-models-20050106.orig/debian/sprites/include/playerD.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/playerD.inc
@@ -0,0 +1,11 @@
+//
+// color defintions for player 4
+//
+#declare helmetColor    = color rgb <0,0,0>;
+#declare faceColor      = color rgb <0,0,0>;
+#declare bodyColor      = color rgb <0,0,0>;
+#declare handsFeetColor = color rgb <0,0,0>;
+#declare armsLegsColor  = color rgb <0,0,0>;
+#declare backpackColor  = color rgb <0,0,0>;
+
+#declare floorColor = color rgb <1,1,1>;
--- xblast-tnt-models-20050106.orig/debian/sprites/include/XBlastTexture.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/XBlastTexture.inc
@@ -0,0 +1,178 @@
+//
+// first of all the textures
+//
+//
+// Program XBLAST V2.6 or higher
+// (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+
+#declare ambientLow  = 0.10;
+#declare ambientHigh = 0.15;
+
+// Dull creates a large, soft highlight on the object's surface
+#declare myDull = finish {ambient ambientLow specular 0.25 roughness 0.40}
+
+// Shiny creates a small, tight highlig
+#declare myShiny = finish {ambient ambientLow specular 0.75 roughness 0.0125}
+
+
+#ifndef (useOverrideTexture)
+#declare useOverrideTexture = 0;
+#end
+#ifndef (overrideTexture)
+#declare useOverrideTexture = 0;
+#end
+
+#if (useOverrideTexture)
+ #declare useOverrideTexture = 0;
+ #declare myGlass          = texture{overrideTexture}
+ #declare helmetTexture    = texture{overrideTexture}
+ #declare faceTexture      = texture{overrideTexture}
+ #declare bodyTexture      = texture{overrideTexture}
+ #declare armsLegsTexture  = texture{overrideTexture}
+ #declare handsFeetTexture = texture{overrideTexture}
+ #declare backpackTexture  = texture{overrideTexture}
+#else
+
+// Glass for Helmet
+#declare myGlass =
+  texture {
+  pigment { color rgbf<1.0, 1.0, 1.0, 0.85> }
+  finish {
+    specular 1
+    roughness 0.001
+    ambient 0
+    diffuse 0
+    reflection 0.1
+//    refraction 1
+//    ior 1.5
+  }
+#if (playerDamaged != 0)
+  normal {
+    crackle
+    slope_map {
+      [0.0 0.0] [0.1 1.0] [1.0 1.0]
+    }
+    scale 0.5
+  }
+#end
+}
+
+#ifndef (stripeColor) 
+  #declare helmetTexture =
+  texture {
+    pigment {color helmetColor}
+    finish {myShiny ambient ambientHigh}
+    #if (playerDamaged != 0)
+      normal {dents 1.0 scale 0.25}
+    #end
+  }
+#else
+  #declare helmetTexture =
+  texture {
+    pigment {
+      gradient x
+      color_map {
+        [0.0 color stripeColor]
+        [0.2 color stripeColor]
+        [0.2 color helmetColor]
+        [1.0 color helmetColor]
+      }
+      scale 2.5
+    }
+    finish {myShiny ambient ambientHigh}
+    #if (playerDamaged != 0)
+      normal {dents 1.0 scale 0.25}
+    #end
+  }
+#end
+#declare faceTexture =
+texture {
+  pigment {faceColor}
+  finish {Dull ambient ambientHigh}
+}
+#declare bodyTexture =
+texture {
+  pigment {color bodyColor}
+  finish {myShiny ambient ambientHigh}
+  #if (playerDamaged != 0)
+    normal {dents 1.0 scale 0.25}
+  #end
+}
+#declare armsLegsTexture =
+texture {
+  #if (playerDamaged = 0)
+    pigment {armsLegsColor}
+    finish {myDull  ambient ambientHigh}
+  #else
+    bozo
+    texture_map {
+      [0.0 pigment {armsLegsColor} finish {myDull ambient ambientHigh} ]
+      [0.6 pigment {armsLegsColor} finish {myDull ambient ambientHigh} ]
+      [0.7 pigment {Gray25} ]
+      [0.7 pigment {faceColor} finish {Dull ambient ambientHigh}]
+      [1.0 pigment {faceColor} finish {Dull ambient ambientHigh}]
+    }
+  scale 0.33
+  #end
+}
+#declare handsFeetTexture =
+texture {
+  pigment {color handsFeetColor}
+  finish {myShiny ambient ambientHigh}
+}
+#declare backpackTexture =
+texture {
+  pigment {color backpackColor}
+  finish {myShiny ambient ambientHigh}
+}
+
+#declare eyeTexture =
+#if (playerIsSick)
+texture {
+  spiral1 2
+  texture_map {
+    [0.0 pigment {color Gray15} finish {Glossy} ]
+    [0.5 pigment {color Gray15} finish {Glossy} ]
+    [0.5 pigment {color rgbt <0,0,0,1>} ]
+    [1.0 pigment {color rgbt <0,0,0,1>} ]
+  }
+  rotate x*90
+  scale <0.1,0.15,0.5>
+  translate <-0.3,0,0>
+}
+#else
+  texture {
+    pigment {
+#if (1)
+      color Gray15
+#else
+      wood
+      color_map {
+	[0.00 color Black]
+	[0.25 color Black]
+	[0.25 color White]
+	[1.00 color White]
+      }
+      translate <0,-0.1,0>
+#end
+    }
+    finish {Glossy }
+  }
+#end
+
+#end
--- xblast-tnt-models-20050106.orig/debian/sprites/include/Walk Straight.inc	
+++ xblast-tnt-models-20050106/debian/sprites/include/Walk Straight.inc	
@@ -0,0 +1,75 @@
+//
+// Walk Straight
+//  angles for XBlast robot walking straight ahead
+//  1 wclock = 2 steps for 4 units
+//
+// based on code (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+
+// declare walk clock (if needed)
+#ifndef (wclock)
+  #declare wclock = clock
+#end
+
+//
+// lots of trigonometrical functions
+//
+#declare COS = cos(radians(wclock*360))
+#declare SIN = sin(radians(wclock*360))
+
+#if (COS > 0.0)
+  #declare PCOS = COS
+  #declare MCOS = 0.0
+#else
+  #declare PCOS = 0.0
+  #declare MCOS = COS
+#end
+
+#if (SIN > 0.0)
+  #declare PSIN = SIN
+  #declare MSIN = 0.0
+#else
+  #declare PSIN = 0.0
+  #declare MSIN = SIN
+#end
+
+#declare P2SIN=PSIN*PSIN
+#declare M2SIN=-MSIN*MSIN
+#declare P2COS=PCOS*PCOS
+#declare M2COS=-MCOS*MCOS
+
+#declare COS2=COS*COS
+#declare SIN2=SIN*SIN
+
+//
+// the movement pattern
+//
+#declare leftLowerArmAngle  = <  -15,  25*P2SIN    , -30>;
+#declare leftArmAngle       = <   15,  20*COS  +  5, -45>;
+#declare rightLowerArmAngle = <  -15,  25*M2SIN    ,  30>;
+#declare rightArmAngle      = <   15,  20*COS  -  5,  45>;
+
+#declare rightLowerLegAngle = <  30*M2COS -  5,  0,  0>;
+#declare rightLegAngle      = <  25*SIN   +  5, 15,  0>;
+#declare leftLowerLegAngle  = < -30*P2COS -  5,  0,  0>;
+#declare leftLegAngle       = < -25*SIN   +  5,-15,  0>;
+
+#declare rightFootAngle     = < -10*SIN, 0, 0>;
+#declare leftFootAngle      = <  10*SIN, 0, 0>;
+
+#declare playerWalkHeight   = 0
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/world.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/world.inc
@@ -0,0 +1,46 @@
+
+// Floor, Camera, etc.
+
+
+
+// Default values, if not provided:
+#ifndef (cameraUp)
+  #declare cameraUp = 6.0;
+#end
+#ifndef (cameraRight)
+  #declare cameraRight = 4.0;
+#end
+#ifndef (floorColor)
+  #declare floorColor = color rgb <0.3,0.3,0.3>;
+#end
+
+
+
+// draw floor
+plane {
+  y, 0
+  pigment {floorColor}
+  finish {ambient 0.0 diffuse 1.0}
+}
+
+// background (sky) color
+background {color SkyBlue}
+
+
+// light source
+light_source {
+  <-100,500,-250>
+  color rgb <1.2,1.2,1.2>
+}
+
+// camera
+#declare Entf = 500.0;
+camera
+{
+  orthographic
+  location  <0, 0, -Entf>
+  direction z
+  up        cameraUp*y
+  right     cameraRight*x
+  rotate x*48.60
+}
--- xblast-tnt-models-20050106.orig/debian/sprites/include/Anschauen.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/Anschauen.ini
@@ -0,0 +1,10 @@
+; [Das Anschau-Bild]
+Input_File_Name=Anschauen.pov
+Width=256
+Height=192
+; Antialias=On
+Antialias_Threshold=0.1
+Output_File_Name=Anschauen
+Output_File_Type=P
+; Post_Frame_Command=gzip -vf9 %o
+Pause_When_Done=True
--- xblast-tnt-models-20050106.orig/debian/sprites/include/chooseColors.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/chooseColors.inc
@@ -0,0 +1,90 @@
+#version 3.1;
+
+#switch (playerClock)
+  #case (0)
+    #declare helmetColor    = color rgb <1,0,0>;
+    #declare faceColor      = color rgb <0,1,0>;
+    #declare bodyColor      = color rgb <0,0,1>;
+    #declare handsFeetColor = color rgb <0,0,0>;
+    #declare armsLegsColor  = color rgb <0,0,0>;
+    #declare backpackColor  = color rgb <0,0,0>;
+
+    #declare floorColor = color rgb <1/3,1/3,1/3>;
+  #break
+
+  #case (1)
+    #declare helmetColor    = color rgb <0,0,0>;
+    #declare faceColor      = color rgb <0,0,0>;
+    #declare bodyColor      = color rgb <0,0,0>;
+    #declare handsFeetColor = color rgb <1,0,0>;
+    #declare armsLegsColor  = color rgb <0,1,0>;
+    #declare backpackColor  = color rgb <0,0,1>;
+
+    #declare floorColor = color rgb <1/3,1/3,1/3>;
+  #break
+
+  #case (2)
+    #declare helmetColor    = color rgb <0,0,0>;
+    #declare faceColor      = color rgb <0,0,0>;
+    #declare bodyColor      = color rgb <0,0,0>;
+    #declare handsFeetColor = color rgb <0,0,0>;
+    #declare armsLegsColor  = color rgb <0,0,0>;
+    #declare backpackColor  = color rgb <0,0,0>;
+
+    #declare floorColor = color rgb <0,1/3,1>;
+  #break
+
+#end
+
+/*
+Old version with 4 pictures
+
+#version 3.1
+
+#switch (playerClock)
+  #case (0)
+    #declare helmetColor    = color rgb <1,0,0>;
+    #declare faceColor      = color rgb <0,1,0>;
+    #declare bodyColor      = color rgb <0,0,0>;
+    #declare handsFeetColor = color rgb <0,0,0>;
+    #declare armsLegsColor  = color rgb <0,0,0>;
+    #declare backpackColor  = color rgb <0,0,0>;
+
+    #declare floorColor = color rgb <1/3,1/3,1/3>;
+  #break
+
+  #case (1)
+    #declare helmetColor    = color rgb <0,0,0>;
+    #declare faceColor      = color rgb <0,0,0>;
+    #declare bodyColor      = color rgb <1,0,0>;
+    #declare handsFeetColor = color rgb <0,1,0>;
+    #declare armsLegsColor  = color rgb <0,0,0>;
+    #declare backpackColor  = color rgb <0,0,0>;
+
+    #declare floorColor = color rgb <1/3,1/3,1/3>;
+  #break
+
+  #case (2)
+    #declare helmetColor    = color rgb <0,0,0>;
+    #declare faceColor      = color rgb <0,0,0>;
+    #declare bodyColor      = color rgb <0,0,0>;
+    #declare handsFeetColor = color rgb <0,0,0>;
+    #declare armsLegsColor  = color rgb <1,0,0>;
+    #declare backpackColor  = color rgb <0,1,0>;
+
+    #declare floorColor = color rgb <1/3,1/3,1/3>;
+  #break
+
+  #case (3)
+    #declare helmetColor    = color rgb <0,0,0>;
+    #declare faceColor      = color rgb <0,0,0>;
+    #declare bodyColor      = color rgb <0,0,0>;
+    #declare handsFeetColor = color rgb <0,0,0>;
+    #declare armsLegsColor  = color rgb <0,0,0>;
+    #declare backpackColor  = color rgb <0,0,0>;
+
+    #declare floorColor = color rgb <1,1,1>;
+  #break
+
+#end
+*/
--- xblast-tnt-models-20050106.orig/debian/sprites/include/AllPlayerAnimation.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/AllPlayerAnimation.ini
@@ -0,0 +1,10 @@
+; [Antialiasing, 240 Frames]
+Input_File_Name=AllPlayerAnimation.pov
+Width=64
+Height=96
+Antialias=On
+Antialias_Threshold=0.1
+Initial_Frame=1
+Final_Frame=60
+Output_File_Type=P
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/AllPlayerAnimation.pov
+++ xblast-tnt-models-20050106/debian/sprites/include/AllPlayerAnimation.pov
@@ -0,0 +1,56 @@
+#version 3.1;
+//
+// pov file for rendering all players in all animations
+//
+// based on code (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+#include "colors.inc"
+#include "textures.inc"
+#include "frame_defaults.inc"
+
+#declare myClock = int((3 * 5 * 4  - 1)* clock + 0.5);
+//#warning concat("Internal Clock: ",str(myClock,4,3),"\n")
+// - 3 shots of each animation A,B,C,D
+// - 5 : 1 animation frame standing
+//       4 animation frames walking
+// - 4 angles
+
+#declare angleClock = mod(div(myClock,15),4);
+#declare playerAngle = y*angleClock*90;
+
+#declare frameClock = mod(div(myClock,3),5);
+
+#if (frameClock = 0)
+  #declare playerStanding = 1;
+#else
+  #declare playerWalking = 1;
+  #declare playerAnimationClock = frameClock-1;
+  #if ((angleClock=1) | (angleClock=2))
+    #declare playerWalkingClock = 3-playerAnimationClock;
+  #else
+    #declare playerWalkingClock = playerAnimationClock;
+  #end
+  #declare playerWalkingTime = playerWalkingClock/4;
+#end
+
+#declare playerClock = mod(myClock,3);
+
+#include "chooseColors.inc"
+#include "XBlast Robot.inc"
+#include "world.inc"
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/AllPlayerSpecial.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/AllPlayerSpecial.ini
@@ -0,0 +1,10 @@
+; [Antialiasing, 36 Frames]
+Input_File_Name=AllPlayerSpecial.pov
+Width=64
+Height=96
+Antialias=On
+Antialias_Threshold=0.1
+Initial_Frame=1
+Final_Frame=30
+Output_File_Type=P
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/AllPlayerSpecial.pov
+++ xblast-tnt-models-20050106/debian/sprites/include/AllPlayerSpecial.pov
@@ -0,0 +1,58 @@
+#version 3.1;
+//
+// pov file for rendering all players in all animations
+//
+// based on code (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+#include "colors.inc"
+#include "textures.inc"
+#include "frame_defaults.inc"
+
+#declare myClock = int((3 * 10 - 1)*clock + 0.5);
+// 4 shots of each animation
+// 10 pictures losing 3x, winning 3x, killed 4x
+//#warning concat("\nInternal Clock ",str(myClock,4,3),"\n")
+
+#warning concat("\nInternal Clock ",str(myClock,4,3),"\n")
+
+#declare frameClock = mod(div(myClock,3),10);
+
+#switch (frameClock)
+  #range(0,2)
+    #declare playerLosing = 1;
+    #declare playerAnimationClock = frameClock;
+    #declare playerLosingTime = playerAnimationClock/2;
+  #break
+  #range(3,5)
+    #declare playerWinning = 1;
+    #declare playerAnimationClock = frameClock-3;
+    #declare playerWinningTime = playerAnimationClock/2;
+  #break
+  #range(6,9)
+    #declare playerKilled = 1;
+    #declare playerAngle = (frameClock-6)*90*y;
+  #break
+#end
+
+#declare playerClock=mod(myClock,3);
+
+#include "chooseColors.inc"
+#include "XBlast Robot.inc"
+#include "world.inc"
+
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/Anschauen.pov
+++ xblast-tnt-models-20050106/debian/sprites/include/Anschauen.pov
@@ -0,0 +1,54 @@
+#version 3.1;
+//
+// pov file for rendering big winner image
+//
+// based on code (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+#include "colors.inc"
+#include "textures.inc"
+#include "frame_defaults.inc"
+
+//
+// color defintions for player 1
+//
+
+/* Hier gewünschte Einstellungen machen: */
+
+#declare helmetColor    = color rgb <0.7,0.3,0>;
+#declare faceColor      = color rgb <1,0.6,0.3>;
+#declare bodyColor      = color rgb <0,0,1>;
+#declare handsFeetColor = color rgb <1,1,0>;
+#declare armsLegsColor  = color rgb <0,1,1>;
+#declare backpackColor  = color rgb <1,0,1>;
+
+
+#declare playerStanding = 1;
+
+object {
+  #include "XBlast Robot.inc"
+  translate -2*x
+}
+object {
+  #declare playerAngle = 90;
+  #include "XBlast Robot.inc"
+  translate 2*x
+}
+
+#declare camereUp = 6.0;
+#declare cameraRight = 8.0;
+#include "world.inc"
--- xblast-tnt-models-20050106.orig/debian/sprites/include/BigWinner.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/BigWinner.ini
@@ -0,0 +1,10 @@
+; [Antialiasing, 12 Frames]
+Input_File_Name=BigWinner.pov
+Width=128
+Height=192
+Antialias=On
+Antialias_Threshold=0.1
+Initial_Frame=1
+Final_Frame=3
+Output_File_Type=P
+Post_Frame_Command=./include/postproc.sh big %o %s %n
--- xblast-tnt-models-20050106.orig/debian/sprites/include/BigWinner.pov
+++ xblast-tnt-models-20050106/debian/sprites/include/BigWinner.pov
@@ -0,0 +1,40 @@
+#version 3.1;
+
+//
+// pov file for rendering big winner image
+//
+// based on code (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+#include "colors.inc"
+#include "textures.inc"
+#include "frame_defaults.inc"
+
+#declare myClock = int((3 - 1)* clock + 0.5);
+//#warning concat("Internal Clock: ",str(myClock,4,3),"\n")
+// - 3 animations
+
+#declare playerClock = mod(myClock,3);
+
+#declare playerWinning = 1;
+#declare playerAnimationClock = 0;
+#declare playerWinningTime = 0;
+
+#include "chooseColors.inc"
+#include "XBlast Robot.inc"
+#include "world.inc"
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/HiQ.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/HiQ.ini
@@ -0,0 +1,4 @@
+Width=128
+Height=192
+Antialias_Threshold=0.3
+Post_Frame_Command=./include/postproc.sh high %o %s %n
--- xblast-tnt-models-20050106.orig/debian/sprites/include/LoQ.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/LoQ.ini
@@ -0,0 +1,2 @@
+Antialias_Threshold=0.3
+Post_Frame_Command=./include/postproc.sh low %o %s %n
--- xblast-tnt-models-20050106.orig/debian/sprites/include/Quick.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/Quick.ini
@@ -0,0 +1,3 @@
+Antialias=Off
+Quality=1
+Post_Frame_Command=./include/postproc.sh quick %o %s %n
--- xblast-tnt-models-20050106.orig/debian/sprites/include/frames.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/frames.inc
@@ -0,0 +1,174 @@
+
+#macro frameDefaults()
+  #declare playerDamaged = 0;
+  #declare playerWalkHeight = 0.0;
+  #declare playerLocation = z*-2.667;
+#end
+
+
+
+
+#if (playerWinning)
+  #local c=playerAnimationClock;
+  frameDefaults()
+  #switch (c)
+    #case (0)
+      #declare W=0;
+    #break
+    #case (1)
+      #declare W=0.25;
+    #break
+    #case (2)
+      #declare W=0.75;
+    #break
+  #end 
+
+  #declare leftLowerArmAngle  = <   30-45*W,  75-75*W,   0-30*W>;
+  #declare leftArmAngle       = <   75-60*W, -30+40*W, -15-30*W>;
+  #declare rightLowerArmAngle = <   30-45*W, -75+75*W,   0+30*W>;
+  #declare rightArmAngle      = <   75-60*W,  30-40*W,  15+30*W>;
+
+  #declare rightLowerLegAngle = <    0-25*W,   0     ,   0     >;
+  #declare rightLegAngle      = <    0+15*W,  15     ,   0     >;
+  #declare leftLowerLegAngle  = <    0-25*W,   0     ,   0     >;
+  #declare leftLegAngle       = <    0+15*W, -15     ,   0     >;
+
+  #declare rightFootAngle     = <    0     ,   0     ,   0     >;
+  #declare leftFootAngle      = <    0     ,   0     ,   0     >;
+
+  #declare headAngle          = <   10-10*W,   0     ,   0     >;
+  #declare bodyAngle          = <   10-10*W,   0     ,   0     >;
+
+  #declare playerLocation=(-2.567-0.1*W)*z;
+#end
+
+
+#if (playerLosing)
+  #local c=playerAnimationClock;
+  frameDefaults()
+  #declare leftLowerArmAngle  = <  -15,   0, -30>;
+  #declare leftArmAngle       = <    0,   0, -60>;
+  #declare rightLowerArmAngle = <  -15,   0,  30>;
+  #declare rightArmAngle      = <    0,   0,  60>;
+
+  #declare rightLowerLegAngle = < - 25,   0,  0>;
+  #declare rightLegAngle      = < + 25,  15,  0>;
+  #declare leftLowerLegAngle  = < - 25,   0,  0>;
+  #declare leftLegAngle       = < + 25, -15,  0>;
+
+  #declare rightFootAngle     = <    0,   0,  0>;
+  #declare leftFootAngle      = <    0,   0,  0>;
+
+  #switch (c)
+     #case (0) 
+       #declare headAngle          = <  -10,   0,  0>;
+     #break
+     #case (1) 
+       #declare headAngle          = <  -10,  15,  0>;
+     #break
+     #case (2) 
+       #declare headAngle          = <  -10, -15,  0>;
+     #break
+  #end
+  #declare bodyAngle          = <  -10,   0,  0>;
+#end
+
+
+#if (playerKilled)
+  frameDefaults()
+  #declare playerDamaged = 1;
+  #declare playerWalkHeight = -1.0;
+
+  #declare leftLowerArmAngle  = <  -15,   0, -30>;
+  #declare leftArmAngle       = <  -15, -20, -45>;
+  #declare rightLowerArmAngle = <  -15,   0,  30>;
+  #declare rightArmAngle      = <  -15,  20,  45>;
+
+  #declare rightLowerLegAngle = < - 25,   0,  0>;
+  #declare rightLegAngle      = < + 90,  15,  0>;
+  #declare leftLowerLegAngle  = < - 25,   0,  0>;
+  #declare leftLegAngle       = < + 90, -15,  0>;
+
+  #declare rightFootAngle     = <    0,   0,  0>;
+  #declare leftFootAngle      = <    0,   0,  0>;
+
+  #declare headAngle          = <    0,   0, 10>;
+  #declare bodyAngle          = <   15,   0,  0>;
+#end
+
+
+#if (playerWalking)
+  #local c=playerAnimationClock;
+  frameDefaults()
+  //
+  // lots of trigonometrical functions
+  //
+  #declare COS = cos(radians(c/4.0*360));
+  #declare SIN = sin(radians(c/4.0*360));
+
+  #if (COS > 0.0)
+    #declare PCOS = COS;
+    #declare MCOS = 0.0;
+  #else
+    #declare PCOS = 0.0;
+    #declare MCOS = COS;
+  #end
+
+  #if (SIN > 0.0)
+    #declare PSIN = SIN;
+    #declare MSIN = 0.0;
+  #else
+    #declare PSIN = 0.0;
+    #declare MSIN = SIN;
+  #end
+
+  #declare P2SIN=PSIN*PSIN;
+  #declare M2SIN=-MSIN*MSIN;
+  #declare P2COS=PCOS*PCOS;
+  #declare M2COS=-MCOS*MCOS;
+
+  #declare COS2=COS*COS;
+  #declare SIN2=SIN*SIN;
+
+  //
+  // the movement pattern
+  //
+  #declare leftLowerArmAngle  = <  -15,  25*P2SIN    , -30>;
+  #declare leftArmAngle       = <   15,  20*COS  +  5, -45>;
+  #declare rightLowerArmAngle = <  -15,  25*M2SIN    ,  30>;
+  #declare rightArmAngle      = <   15,  20*COS  -  5,  45>;
+
+  #declare rightLowerLegAngle = <  30*M2COS -  5,  0,  0>;
+  #declare rightLegAngle      = <  25*SIN   +  5, 15,  0>;
+  #declare leftLowerLegAngle  = < -30*P2COS -  5,  0,  0>;
+  #declare leftLegAngle       = < -25*SIN   +  5,-15,  0>;
+
+  #declare rightFootAngle     = < -10*SIN, 0, 0>;
+  #declare leftFootAngle      = <  10*SIN, 0, 0>;
+
+  #declare headAngle          = <    0,  0,  0>;
+  #declare bodyAngle          = <    0,  0,  0>;
+#end
+
+
+
+
+#if (playerStanding)
+  frameDefaults()
+  #declare leftLowerArmAngle  = <  -15,   0, -30>;
+  #declare leftArmAngle       = <   15,  10, -45>;
+  #declare rightLowerArmAngle = <  -15,   0,  30>;
+  #declare rightArmAngle      = <   15, -10,  45>;
+
+  #declare rightLowerLegAngle = < - 25,  0,  0>;
+  #declare rightLegAngle      = < + 15, 15,  0>;
+  #declare leftLowerLegAngle  = < - 25,  0,  0>;
+  #declare leftLegAngle       = < + 15,-15,  0>;
+
+  #declare rightFootAngle     = <    0,  0,  0>;
+  #declare leftFootAngle      = <    0,  0,  0>;
+
+  #declare headAngle          = <    0,  0,  0>;
+  #declare bodyAngle          = <    0,  0,  0>;
+#end
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/AllPlayerAnimation.pov.tut
+++ xblast-tnt-models-20050106/debian/sprites/include/AllPlayerAnimation.pov.tut
@@ -0,0 +1,53 @@
+#version 3.1;
+//
+// pov file for rendering all players in all animations
+//
+// based on code (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+#include "colors.inc"
+#include "textures.inc"
+
+#declare myClock = int((3 * 5 * 4  - 1)* clock + 0.5);
+#warning concat("Internal Clock: ",str(myClock,4,3),"\n")
+// - 3 shots of each animation A,B,C,D
+// - 5 : 1 animation frame standing
+//       4 animation frames walking
+// - 4 angles
+
+
+#declare frameClock = mod(div(myClock,3),5);
+
+#include "frames.inc"
+#if (frameClock = 0)
+  frameStanding()
+#else
+  frameWalking(frameClock - 1)
+#end
+
+#declare angleClock = mod(div(myClock,15),4);
+#declare playerAngle = y*angleClock*90;
+
+#declare playerClock = mod(myClock,3);
+
+
+#include "chooseColors.inc"
+#include "XBlast Robot.inc"
+
+#include "world.inc"
+
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/WalkFluidly.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/WalkFluidly.ini
@@ -0,0 +1,7 @@
+Input_File_Name=WalkFluidly.pov
+Width=256
+Height=192
+Initial_Frame=1
+Final_Frame=20
+Cyclic_Animation=1
+Output_File_Type=P
--- xblast-tnt-models-20050106.orig/debian/sprites/include/frames.inc.tut
+++ xblast-tnt-models-20050106/debian/sprites/include/frames.inc.tut
@@ -0,0 +1,174 @@
+
+#macro frameDefaults()
+  #declare playerDamaged = 0;
+  #declare playerWalkHeight = 0.0;
+  #declare playerLocation = z*-2.667;
+  #declare playerAngle = 0;
+#end
+
+
+
+// c = 0..2
+#macro frameWinning(c)
+  frameDefaults()
+  #switch (c)
+    #case (0)
+      #declare W=0;
+    #break
+    #case (1)
+      #declare W=0.25;
+    #break
+    #case (2)
+      #declare W=0.75;
+    #break
+  #end 
+
+  #declare leftLowerArmAngle  = <   30-45*W,  75-75*W,   0-30*W>;
+  #declare leftArmAngle       = <   75-60*W, -30+40*W, -15-30*W>;
+  #declare rightLowerArmAngle = <   30-45*W, -75+75*W,   0+30*W>;
+  #declare rightArmAngle      = <   75-60*W,  30-40*W,  15+30*W>;
+
+  #declare rightLowerLegAngle = <    0-25*W,   0     ,   0     >;
+  #declare rightLegAngle      = <    0+15*W,  15     ,   0     >;
+  #declare leftLowerLegAngle  = <    0-25*W,   0     ,   0     >;
+  #declare leftLegAngle       = <    0+15*W, -15     ,   0     >;
+
+  #declare rightFootAngle     = <    0     ,   0     ,   0     >;
+  #declare leftFootAngle      = <    0     ,   0     ,   0     >;
+
+  #declare headAngle          = <   10-10*W,   0     ,   0     >;
+  #declare bodyAngle          = <   10-10*W,   0     ,   0     >;
+
+  #declare playerLocation=(-2.567-0.1*W)*z;
+#end
+
+
+// c = 0..2
+#macro frameLosing(c)
+  frameDefaults()
+  #declare leftLowerArmAngle  = <  -15,   0, -30>;
+  #declare leftArmAngle       = <    0,   0, -60>;
+  #declare rightLowerArmAngle = <  -15,   0,  30>;
+  #declare rightArmAngle      = <    0,   0,  60>;
+
+  #declare rightLowerLegAngle = < - 25,   0,  0>;
+  #declare rightLegAngle      = < + 25,  15,  0>;
+  #declare leftLowerLegAngle  = < - 25,   0,  0>;
+  #declare leftLegAngle       = < + 25, -15,  0>;
+
+  #declare rightFootAngle     = <    0,   0,  0>;
+  #declare leftFootAngle      = <    0,   0,  0>;
+
+  #switch (c)
+     #case (0) 
+       #declare headAngle          = <  -10,   0,  0>;
+     #break
+     #case (1) 
+       #declare headAngle          = <  -10,  15,  0>;
+     #break
+     #case (2) 
+       #declare headAngle          = <  -10, -15,  0>;
+     #break
+  #end
+  #declare bodyAngle          = <  -10,   0,  0>;
+#end
+
+
+#macro frameKilled()
+  frameDefaults()
+  #declare playerDamaged = 1;
+  #declare playerWalkHeight = -1.0;
+
+  #declare leftLowerArmAngle  = <  -15,   0, -30>;
+  #declare leftArmAngle       = <  -15, -20, -45>;
+  #declare rightLowerArmAngle = <  -15,   0,  30>;
+  #declare rightArmAngle      = <  -15,  20,  45>;
+
+  #declare rightLowerLegAngle = < - 25,   0,  0>;
+  #declare rightLegAngle      = < + 90,  15,  0>;
+  #declare leftLowerLegAngle  = < - 25,   0,  0>;
+  #declare leftLegAngle       = < + 90, -15,  0>;
+
+  #declare rightFootAngle     = <    0,   0,  0>;
+  #declare leftFootAngle      = <    0,   0,  0>;
+
+  #declare headAngle          = <    0,   0, 10>;
+  #declare bodyAngle          = <   15,   0,  0>;
+#end
+
+
+// c = 0..3
+#macro frameWalking(c)
+  frameDefaults()
+  //
+  // lots of trigonometrical functions
+  //
+  #declare COS = cos(radians(c/4.0*360));
+  #declare SIN = sin(radians(c/4.0*360));
+
+  #if (COS > 0.0)
+    #declare PCOS = COS;
+    #declare MCOS = 0.0;
+  #else
+    #declare PCOS = 0.0;
+    #declare MCOS = COS;
+  #end
+
+  #if (SIN > 0.0)
+    #declare PSIN = SIN;
+    #declare MSIN = 0.0;
+  #else
+    #declare PSIN = 0.0;
+    #declare MSIN = SIN;
+  #end
+
+  #declare P2SIN=PSIN*PSIN;
+  #declare M2SIN=-MSIN*MSIN;
+  #declare P2COS=PCOS*PCOS;
+  #declare M2COS=-MCOS*MCOS;
+
+  #declare COS2=COS*COS;
+  #declare SIN2=SIN*SIN;
+
+  //
+  // the movement pattern
+  //
+  #declare leftLowerArmAngle  = <  -15,  25*P2SIN    , -30>;
+  #declare leftArmAngle       = <   15,  20*COS  +  5, -45>;
+  #declare rightLowerArmAngle = <  -15,  25*M2SIN    ,  30>;
+  #declare rightArmAngle      = <   15,  20*COS  -  5,  45>;
+
+  #declare rightLowerLegAngle = <  30*M2COS -  5,  0,  0>;
+  #declare rightLegAngle      = <  25*SIN   +  5, 15,  0>;
+  #declare leftLowerLegAngle  = < -30*P2COS -  5,  0,  0>;
+  #declare leftLegAngle       = < -25*SIN   +  5,-15,  0>;
+
+  #declare rightFootAngle     = < -10*SIN, 0, 0>;
+  #declare leftFootAngle      = <  10*SIN, 0, 0>;
+
+  #declare headAngle          = <    0,  0,  0>;
+  #declare bodyAngle          = <    0,  0,  0>;
+#end
+
+
+
+
+#macro frameStanding()
+  frameDefaults()
+  #declare leftLowerArmAngle  = <  -15,   0, -30>;
+  #declare leftArmAngle       = <   15,  10, -45>;
+  #declare rightLowerArmAngle = <  -15,   0,  30>;
+  #declare rightArmAngle      = <   15, -10,  45>;
+
+  #declare rightLowerLegAngle = < - 25,  0,  0>;
+  #declare rightLegAngle      = < + 15, 15,  0>;
+  #declare leftLowerLegAngle  = < - 25,  0,  0>;
+  #declare leftLegAngle       = < + 15,-15,  0>;
+
+  #declare rightFootAngle     = <    0,  0,  0>;
+  #declare leftFootAngle      = <    0,  0,  0>;
+
+  #declare headAngle          = <    0,  0,  0>;
+  #declare bodyAngle          = <    0,  0,  0>;
+#end
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/frame_defaults.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/frame_defaults.inc
@@ -0,0 +1,11 @@
+
+#declare playerStanding = 0;
+#declare playerWalking = 0;
+#declare playerWinning = 0;
+#declare playerLosing = 0;
+#declare playerKilled = 0;
+#declare playerAnimationClock = 0;
+
+#declare playerLocation = 0;
+#declare playerAngle = 0;
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/humanoid_frames.inc
+++ xblast-tnt-models-20050106/debian/sprites/include/humanoid_frames.inc
@@ -0,0 +1,657 @@
+/*
+
+Constants managed by this file:
+===============================
+
+Input constants:
+----------------
+
+Lengths of parts of the body:
+
+  leg_length
+  leg_half_length
+  upper_leg_length
+  lower_leg_length
+  hip_width
+  back_length
+  shoulder_width
+  arm_length
+  arm_half_length
+  upper_arm_length
+  lower_arm_length
+
+Radii of joints of the body:
+
+  default_rad		- See section defaults
+  ankle_rad
+  knee_rad
+  hip_rad
+  shoulder_rad
+  elbow_rad
+  wrist_rad
+
+Angles:
+
+  killed_leg_ang	- How far (in degrees) the legs are spread
+			  when sitting killed
+  killed_back_ang	- How far the torso is bent backwards when killed
+  killed_nod_ang
+  losing_back_ang	- How far the torso is bent forwards when losing
+  losing_min_nod_ang
+  losing_max_nod_ang
+  losing_shake_ang
+  walking_back_ang	- How far the torso is bent forwards when walking
+  walking_arm_ang	- How far the arms swing when walking
+
+Other:
+
+  winning_jump_height
+  step_length
+  left_eye_pos		- Position of the place where hand and eye meet when
+			  weeping (relative to neck_pos for an upright head).
+  left_eye_normal
+  leg_sep		- The space between the legs
+  arm_sep		- The space between the arms and the legs
+
+
+Output constants:
+-----------------
+
+Positions:
+
+  left_ankle_pos
+  right_ankle_pos
+  left_knee_pos
+  right_knee_pos
+  hip_pos
+  left_hip_pos
+  right_hip_pos
+  neck_pos
+  left_shoulder_pos
+  right_shoulder_pos
+  left_elbow_pos
+  right_elbow_pos
+  left_wrist_pos
+  right_wrist_pos
+
+Transforms:
+
+  left_lower_leg_trans
+  right_lower_leg_trans
+  left_upper_leg_trans
+  right_upper_leg_trans
+  back_trans
+  head_trans
+  left_lower_arm_trans
+  right_lower_arm_trans
+  left_upper_arm_trans
+  right_upper_arm_trans
+
+
+
+The idea of this file:
+======================
+
+This file should aid in placing parts of the body.
+The idea is that for, say, the upper left leg, the following can be used:
+
+  cone {
+    left_knee_pos  knee_rad
+    left_hip_pos  hip_rad
+  }
+
+or
+
+  cone {
+    -upper_leg_length*y  knee_rad
+    0  hip_rad
+    transform left_upper_leg_trans
+  }
+
+
+
+Invokation of this file's functionality:
+========================================
+
+The input is done by declaring the input constants outside of this file.
+A call of Erase_humanoid_input_constants empties previous values
+(so that defaults are available again).
+A call of Define_humanoid_output_constants starts the calculation.
+
+
+
+Defaults of the input constants:
+================================
+
+Constants that are not listed here do not have default values.
+
+  leg_length, upper_leg_length, lower_leg_length:
+	If leg_half_length is given, upper_leg_length and lower_leg_length
+        default to it. If otherwise only two of the other three are given,
+        the third defaults such that
+	  leg_length = upper_leg_length+lower_leg_length.
+	If only leg_length is given, the default is that
+	  upper_leg_length=lower_leg_length.
+	If all three are given or otherwise defaulted and
+	  leg_length < upper_leg_length+lower_leg_length
+        then the leg will never be fully stretched.
+
+  hip_width:
+	2*max(ankle_rad, knee_rad, hip_rad)+leg_sep
+
+  shoulder_width:
+	hip_width +
+	2*max(ankle_rad, knee_rad, hip_rad) +
+        2*arm_sep +
+	2*max(wrist_rad, elbow_rad, shoulder_rad)
+
+  arm_length, upper_arm_length, lower_arm_length:
+	similar to legs.
+
+  ankle_rad, knee_rad, hip_rad, shoulder_rad, elbow_rad, wrist_rad:
+	default_rad
+	If all of the above are given, default_rad is not needed.
+
+  killed_leg_ang, killed_back_ang, killed_nod_ang,
+  losing_back_ang, losing_min_nod_ang, losing_shake_ang,
+  walking_back_ang, walking_arm_ang:
+	0
+
+  losing_max_nod_ang:
+	losing_min_nod_ang
+
+  winning_jump_height, leg_sep, arm_sep:
+	0
+
+  step_length:
+	2
+
+  left_eye_normal:
+	-z
+
+
+*/
+
+
+#ifndef(humanoid_frames_INCLUDED)
+#declare humanoid_frames_INCLUDED = 1;
+
+
+
+#declare atanf=function(b,a)				// b=sin, a=cos
+  {(select((b),
+    select((a),
+      select((a)-(b),
+        atan2(-(b),-(a))-pi,
+        -pi/2-atan2(-(a),-(b))),
+      select((a)+(b),
+        atan2((a),-(b))-pi/2,
+        -atan2(-(b),(a)))),
+    select((a),
+      select((a)+(b),
+        pi-atan2((b),-(a)),
+        pi/2+atan2(-(a),(b))),
+      select((a)-(b),
+        pi/2-atan2((a),(b)),
+        atan2((b),(a)))
+      )))}
+
+
+
+#macro Erase_humanoid_input_constants()
+  #ifdef (leg_length) #undef leg_length #end
+  #ifdef (leg_half_length) #undef leg_half_length #end
+  #ifdef (upper_leg_length) #undef upper_leg_length #end
+  #ifdef (lower_leg_length) #undef lower_leg_length #end
+  #ifdef (hip_width) #undef hip_width #end
+  #ifdef (back_length) #undef back_length #end
+  #ifdef (shoulder_width) #undef shoulder_width #end
+  #ifdef (arm_length) #undef arm_length #end
+  #ifdef (arm_half_length) #undef arm_half_length #end
+  #ifdef (upper_arm_length) #undef upper_arm_length #end
+  #ifdef (lower_arm_length) #undef lower_arm_length #end
+  #ifdef (leg_sep) #undef leg_sep #end
+  #ifdef (arm_sep) #undef arm_sep #end
+  #ifdef (default_rad) #undef default_rad #end
+  #ifdef (ankle_rad) #undef ankle_rad #end
+  #ifdef (knee_rad) #undef knee_rad #end
+  #ifdef (hip_rad) #undef hip_rad #end
+  #ifdef (shoulder_rad) #undef shoulder_rad #end
+  #ifdef (elbow_rad) #undef elbow_rad #end
+  #ifdef (wrist_rad) #undef wrist_rad #end
+  #ifdef (killed_leg_ang) #undef killed_leg_ang #end
+  #ifdef (killed_back_ang) #undef killed_back_ang #end
+  #ifdef (killed_nod_ang) #undef killed_nod_ang #end
+  #ifdef (losing_back_ang) #undef losing_back_ang #end
+  #ifdef (losing_min_nod_ang) #undef losing_min_nod_ang #end
+  #ifdef (losing_max_nod_ang) #undef losing_max_nod_ang #end
+  #ifdef (losing_shake_ang) #undef losing_shake_ang #end
+  #ifdef (walking_back_ang) #undef walking_back_ang #end
+  #ifdef (walking_arm_ang) #undef walking_arm_ang #end
+  #ifdef (winning_jump_height) #undef winning_jump_height #end
+  #ifdef (step_length) #undef step_length #end
+  #ifdef (left_eye_pos) #undef left_eye_pos #end
+  #ifdef (left_eye_normal) #undef left_eye_normal #end
+#end
+
+
+
+#macro Apply_humanoid_defaults()
+
+  #ifndef(ankle_rad)
+    #declare ankle_rad = default_rad;
+  #end
+  #ifndef(knee_rad)
+    #declare knee_rad = default_rad;
+  #end
+  #ifndef(hip_rad)
+    #declare hip_rad = default_rad;
+  #end
+  #ifndef(shoulder_rad)
+    #declare shoulder_rad = default_rad;
+  #end
+  #ifndef(elbow_rad)
+    #declare elbow_rad = default_rad;
+  #end
+  #ifndef(wrist_rad)
+    #declare wrist_rad = default_rad;
+  #end
+
+  #ifndef(lower_leg_length)
+    #ifdef(leg_half_length)
+      #declare lower_leg_length = leg_half_length;
+    #else
+      #ifndef(upper_leg_length)
+        #declare upper_leg_length = leg_length/2;
+      #end
+      #declare lower_leg_length = leg_length-upper_leg_length;
+    #end
+  #end
+  #ifndef(upper_leg_length)
+    #ifdef(leg_half_length)
+      #declare upper_leg_length = leg_half_length;
+    #else
+      #declare upper_leg_length = leg_length-lower_leg_length;
+    #end
+  #end
+  #ifndef(leg_length)
+    #declare leg_length = upper_leg_length+lower_leg_length;
+  #end
+
+  #ifndef(leg_sep)
+    #declare leg_sep = 0;
+  #end
+  #ifndef(arm_sep)
+    #declare arm_sep = 0;
+  #end
+  #ifndef(hip_width)
+    #declare hip_width = 2*max(ankle_rad,knee_rad,hip_rad)+leg_sep;
+  #end
+  #ifndef(shoulder_width)
+    #declare shoulder_width = hip_width +
+      2*max(ankle_rad,knee_rad,hip_rad) +
+      2*arm_sep +
+      2*max(wrist_rad,elbow_rad,shoulder_rad);
+  #end
+
+  #ifndef(lower_arm_length)
+    #ifdef(arm_half_length)
+      #declare lower_arm_length = arm_half_length;
+    #else
+      #ifndef(upper_arm_length)
+        #declare upper_arm_length = arm_length/2;
+      #end
+      #declare lower_arm_length = arm_length-upper_arm_length;
+    #end
+  #end
+  #ifndef(upper_arm_length)
+    #ifdef(arm_half_length)
+      #declare upper_arm_length = arm_half_length;
+    #else
+      #declare upper_arm_length = arm_length-lower_arm_length;
+    #end
+  #end
+  #ifndef(arm_length)
+    #declare arm_length = upper_arm_length+lower_arm_length;
+  #end
+
+  #ifndef(killed_leg_ang)
+    #declare killed_leg_ang = 0;
+  #end
+  #ifndef(killed_back_ang)
+    #declare killed_back_ang = 0;
+  #end
+  #ifndef(killed_nod_ang)
+    #declare killed_nod_ang = 0;
+  #end
+
+  #ifndef(losing_back_ang)
+    #declare losing_back_ang = 0;
+  #end
+  #ifndef(losing_min_nod_ang)
+    #declare losing_min_nod_ang = 0;
+  #end
+  #ifndef(losing_max_nod_ang)
+    #declare losing_max_nod_ang = losing_min_nod_ang;
+  #end
+  #ifndef(losing_shake_ang)
+    #declare losing_shake_ang = 0;
+  #end
+
+  #ifndef(winning_jump_height)
+    #declare winning_jump_height = 0;
+  #end
+
+  #ifndef(walking_back_ang)
+    #declare walking_back_ang = 0;
+  #end
+  #ifndef(walking_arm_ang)
+    #declare walking_arm_ang = 0;
+  #end
+
+  #ifndef(step_length)
+    #declare step_length = 2;
+  #end
+
+  #ifndef(left_eye_normal)
+    #declare left_eye_normal = -z;
+  #end
+
+#end
+
+
+
+#macro Define_humanoid_output_constants()
+  Apply_humanoid_defaults()
+
+  #if (2*leg_length<step_length)
+    #warning "legs are too short\n"
+  #end
+
+  #local walking_hip_height =
+    ankle_rad+sqrt(pow(leg_length,2)-pow(step_length/2,2));
+  #local standing_hip_height = ankle_rad+leg_length;
+  #local leg_ang = 0;
+
+  #if (playerWalking)
+
+    #local playerWalkingTime_=playerWalkingTime+1/8;
+    #if (playerWalkingTime_>1)
+      #local playerWalkingTime_=playerWalkingTime_-1;
+    #end
+
+    #local aux_ang_1 = radians(walking_back_ang);
+    #local aux_ang_2 = radians(walking_arm_ang/2*cos(playerWalkingTime_*2*pi));
+
+    #if (playerWalkingTime_<=0.5)
+      #declare left_ankle_pos =
+        <hip_width/2,ankle_rad,(playerWalkingTime_-0.25)*2*step_length>;
+      #declare right_ankle_pos =
+        <-hip_width/2,
+          ankle_rad+sin(playerWalkingTime_*2*pi),
+          (0.25-playerWalkingTime_)*2*step_length>;
+    #else
+      #declare left_ankle_pos =
+        <hip_width/2,
+          ankle_rad+sin((playerWalkingTime_-0.5)*2*pi),
+          (0.75-playerWalkingTime_)*2*step_length>;
+      #declare right_ankle_pos =
+        <-hip_width/2,ankle_rad,(playerWalkingTime_-0.75)*2*step_length>;
+    #end
+    #declare hip_pos = <0,walking_hip_height,0>;
+    #declare left_hip_pos = <hip_width/2,walking_hip_height,0>;
+    #declare right_hip_pos = <-hip_width/2,walking_hip_height,0>;
+    #declare neck_pos = hip_pos+<0,cos(aux_ang_1),-sin(aux_ang_1)>*back_length;
+    #declare left_shoulder_pos = neck_pos+shoulder_width/2*x;
+    #declare right_shoulder_pos = neck_pos-shoulder_width/2*x;
+    #declare nod_ang = 0;
+    #declare shake_ang = 0;
+    #declare left_wrist_pos = left_shoulder_pos+
+      <0,-cos(aux_ang_2),sin(aux_ang_2)>*arm_length;
+    #declare right_wrist_pos = right_shoulder_pos+
+      <0,-cos(aux_ang_2),-sin(aux_ang_2)>*arm_length;
+
+  #else#if (playerStanding)
+
+    #declare left_ankle_pos = <hip_width/2,ankle_rad,0>;
+    #declare right_ankle_pos = <-hip_width/2,ankle_rad,0>;
+    #declare hip_pos = <0,standing_hip_height,0>;
+    #declare left_hip_pos = <hip_width/2,standing_hip_height,0>;
+    #declare right_hip_pos = <-hip_width/2,standing_hip_height,0>;
+    #declare neck_pos = hip_pos+back_length*y;
+    #declare left_shoulder_pos = neck_pos+shoulder_width/2*x;
+    #declare right_shoulder_pos = neck_pos-shoulder_width/2*x;
+    #declare nod_ang = 0;
+    #declare shake_ang = 0;
+    #declare left_wrist_pos = left_shoulder_pos-arm_length*y;
+    #declare right_wrist_pos = right_shoulder_pos-arm_length*y;
+
+  #else#if (playerKilled)
+
+    #local leg_ang = killed_leg_ang/2;
+
+    #local aux_len_1 = sqrt(pow(leg_length,2)-pow(hip_rad-ankle_rad,2));
+    #local aux_ang_1 = radians(killed_leg_ang)/2;
+    #local aux_ang_2 = radians(killed_back_ang);
+
+    #declare left_ankle_pos =
+      <hip_width/2+sin(aux_ang_1)*aux_len_1,
+        ankle_rad,
+        -cos(aux_ang_1)*aux_len_1/2>;
+    #declare right_ankle_pos = left_ankle_pos*<-1,1,1>;
+    #declare hip_pos = <0,hip_rad,cos(aux_ang_1)*aux_len_1/2>;
+    #declare left_hip_pos = hip_pos+hip_width/2*x;
+    #declare right_hip_pos = hip_pos-hip_width/2*x;
+    #declare neck_pos = hip_pos+<0,cos(aux_ang_2),-sin(aux_ang_2)>*back_length;
+    #declare left_shoulder_pos = neck_pos+shoulder_width/2*x;
+    #declare right_shoulder_pos = neck_pos-shoulder_width/2*x;
+    #declare nod_ang = killed_nod_ang;
+    #declare shake_ang = 0;
+    #declare left_wrist_pos = (left_shoulder_pos.y>arm_length+wrist_rad ?
+      left_shoulder_pos-arm_length*y :
+      <left_shoulder_pos.x
+          +sqrt(pow(arm_length,2)-pow(left_shoulder_pos.y-wrist_rad,2)),
+        wrist_rad,left_shoulder_pos.z>)
+    #declare right_wrist_pos = (right_shoulder_pos.y>arm_length+wrist_rad ?
+      right_shoulder_pos-arm_length*y :
+      <right_shoulder_pos.x
+          -sqrt(pow(arm_length,2)-pow(right_shoulder_pos.y-wrist_rad,2)),
+        wrist_rad,right_shoulder_pos.z>)
+
+  #else#if (playerLosing)
+
+    #local aux_len_1 = ankle_rad+hip_rad;
+    #local aux_ang_1 =
+      asin((ankle_rad-knee_rad)/lower_leg_length)+
+      acos((pow(lower_leg_length,2)+pow(aux_len_1,2)-pow(upper_leg_length,2))
+        / (2*lower_leg_length*aux_len_1));
+    #local aux_ang_2 = radians(losing_back_ang);
+
+    #declare left_ankle_pos = <hip_width/2,ankle_rad,cos(aux_ang_1)*aux_len_1>;
+    #declare right_ankle_pos = left_ankle_pos*<-1,1,1>;
+    #declare hip_pos = <0,sin(aux_ang_1)*aux_len_1+ankle_rad,0>;
+    #declare left_hip_pos = hip_pos+hip_width/2*x;
+    #declare right_hip_pos = hip_pos-hip_width/2*x;
+    #declare neck_pos = hip_pos+<0,cos(aux_ang_2),-sin(aux_ang_2)>*back_length;
+    #declare left_shoulder_pos = neck_pos+shoulder_width/2*x;
+    #declare right_shoulder_pos = neck_pos-shoulder_width/2*x;
+    #declare nod_ang = (losing_max_nod_ang+losing_min_nod_ang +
+      cos(pi*playerLosingTime)*(losing_max_nod_ang-losing_min_nod_ang))/2;
+    #declare shake_ang = cos(pi*playerLosingTime)*losing_shake_ang/2;
+    #declare left_wrist_pos = neck_pos+vrotate(vrotate(
+      left_eye_pos+left_eye_normal*wrist_rad,
+      shake_ang*y),
+      -(losing_back_ang+nod_ang)*x);
+    #declare right_wrist_pos = neck_pos+vrotate(vrotate(
+      (left_eye_pos+left_eye_normal*wrist_rad)*<-1,1,1>,
+      shake_ang*y),
+      -(losing_back_ang+nod_ang)*x);
+
+  #else // playerWinning
+
+    #declare aux_len_1 = cos(pi*playerWinningTime)*winning_jump_height;
+
+    #declare left_ankle_pos = <hip_width/2,ankle_rad+max(0,aux_len_1),0>;
+    #declare right_ankle_pos = left_ankle_pos*<-1,1,1>;
+    #declare hip_pos = <0,standing_hip_height+aux_len_1,0>;
+    #declare left_hip_pos = hip_pos+hip_width/2*x;
+    #declare right_hip_pos = hip_pos-hip_width/2*x;
+    #declare neck_pos = hip_pos+back_length*y;
+    #declare left_shoulder_pos = neck_pos+shoulder_width/2*x;
+    #declare right_shoulder_pos = neck_pos-shoulder_width/2*x;
+    #declare nod_ang = 0;
+    #declare shake_ang = 0;
+    #declare left_wrist_pos = left_shoulder_pos +
+      (cos(pi*playerWinningTime)*(arm_length-wrist_rad-shoulder_rad)+
+        arm_length+wrist_rad+shoulder_rad)/2*y;
+    #declare right_wrist_pos = right_shoulder_pos +
+      (cos(pi*playerWinningTime)*(arm_length-wrist_rad-shoulder_rad)+
+        arm_length+wrist_rad+shoulder_rad)/2*y;
+
+  #end#end#end#end
+
+  #declare left_leg_length = vlength(left_hip_pos-left_ankle_pos);
+  #declare right_leg_length = vlength(right_hip_pos-right_ankle_pos);
+/*
+   ...ang_1: angle between upper leg and line ankle-hip.
+   ...ang_2: angle at knee.
+   ...ang_3: angle between upper leg and -y.
+*/
+  #local left_leg_aux_ang_1 = degrees(acos(
+    (pow(left_leg_length,2)+pow(upper_leg_length,2)-pow(lower_leg_length,2))
+      / (2*left_leg_length*upper_leg_length)));
+  #local left_leg_aux_ang_2 = degrees(acos(
+    (pow(upper_leg_length,2)+pow(lower_leg_length,2)-pow(left_leg_length,2))
+      / (2*upper_leg_length*lower_leg_length)));
+  #local left_leg_aux_ang_3 = degrees(atanf(
+    left_hip_pos.z-left_ankle_pos.z,
+    left_hip_pos.y-left_ankle_pos.y));
+  #local right_leg_aux_ang_1 = degrees(acos(
+    (pow(right_leg_length,2)+pow(upper_leg_length,2)-pow(lower_leg_length,2))
+      / (2*right_leg_length*upper_leg_length)));
+  #local right_leg_aux_ang_2 = degrees(acos(
+    (pow(upper_leg_length,2)+pow(lower_leg_length,2)-pow(right_leg_length,2))
+      / (2*upper_leg_length*lower_leg_length)));
+  #local right_leg_aux_ang_3 = degrees(atanf(
+    right_hip_pos.z-right_ankle_pos.z,
+    right_hip_pos.y-right_ankle_pos.y));
+
+  #declare left_knee_pos = left_hip_pos +
+    vrotate(vrotate(-upper_leg_length*y,
+      (left_leg_aux_ang_1+left_leg_aux_ang_3)*x),
+      -leg_ang*y);
+  #declare right_knee_pos = right_hip_pos +
+    vrotate(vrotate(-upper_leg_length*y,
+      (right_leg_aux_ang_1+right_leg_aux_ang_3)*x),
+      leg_ang*y);
+  #declare left_lower_leg_trans = transform {
+      rotate (left_leg_aux_ang_1+left_leg_aux_ang_2+left_leg_aux_ang_3-180)*x
+      rotate -leg_ang*y
+      translate left_knee_pos
+    }
+  #declare left_upper_leg_trans = transform {
+      rotate (left_leg_aux_ang_1+left_leg_aux_ang_3)*x
+      rotate -leg_ang*y
+      translate left_hip_pos
+    }
+  #declare right_lower_leg_trans = transform {
+      rotate
+        (right_leg_aux_ang_1+right_leg_aux_ang_2+right_leg_aux_ang_3-180)*x
+      rotate leg_ang*y
+      translate right_knee_pos
+    }
+  #declare right_upper_leg_trans = transform {
+      rotate (right_leg_aux_ang_1+right_leg_aux_ang_3)*x
+      rotate leg_ang*y
+      translate right_hip_pos
+    }
+
+  #local back_ang = degrees(atanf(hip_pos.z-neck_pos.z,neck_pos.y-hip_pos.y));
+
+  #declare back_trans = transform {
+    rotate -back_ang*x
+    translate neck_pos
+  }
+
+  #declare head_trans = transform {
+    rotate shake_ang*y
+    rotate -(back_ang+nod_ang)*x
+    translate neck_pos
+  }
+
+  #local left_arm_vec = left_wrist_pos-left_shoulder_pos;
+  #local left_arm_length = vlength(left_arm_vec);
+  #local right_arm_vec = right_wrist_pos-right_shoulder_pos;
+  #local right_arm_length = vlength(right_arm_vec);
+/*
+   ...ang_1: angle between upper arm and line wrist-shoulder.
+   ...ang_2: angle at elbow.
+   ...ang_3: angle between line wrist-shoulder and plane y/z.
+   ...ang_4: angle between -y and line wrist-shoulder.
+*/
+  #local left_arm_aux_ang_1 = degrees(acos(
+    (pow(left_arm_length,2)+pow(upper_arm_length,2)-pow(lower_arm_length,2))
+      / (2*left_arm_length*upper_arm_length)));
+  #local left_arm_aux_ang_2 = degrees(acos(
+    (pow(upper_arm_length,2)+pow(lower_arm_length,2)-pow(left_arm_length,2))
+      / (2*upper_arm_length*lower_arm_length)));
+  #local left_arm_aux_ang_3 = -degrees(atanf(
+    left_arm_vec.x,
+    vlength(left_arm_vec*<0,1,1>)));
+  #local left_arm_aux_ang_4 = degrees(atanf(
+    -left_arm_vec.z,
+    -left_arm_vec.y));
+  #local right_arm_aux_ang_1 = degrees(acos(
+    (pow(right_arm_length,2)+pow(upper_arm_length,2)-pow(lower_arm_length,2))
+      / (2*right_arm_length*upper_arm_length)));
+  #local right_arm_aux_ang_2 = degrees(acos(
+    (pow(upper_arm_length,2)+pow(lower_arm_length,2)-pow(right_arm_length,2))
+      / (2*upper_arm_length*lower_arm_length)));
+  #local right_arm_aux_ang_3 = degrees(atanf(
+    right_arm_vec.x,
+    vlength(right_arm_vec*<0,1,1>)));
+  #local right_arm_aux_ang_4 = degrees(atanf(
+    -right_arm_vec.z,
+    -right_arm_vec.y));
+
+  #declare left_elbow_pos = left_shoulder_pos + vrotate(vrotate(vrotate(
+    -upper_arm_length*y,
+    -left_arm_aux_ang_1*x),
+    -left_arm_aux_ang_3*z),
+    left_arm_aux_ang_4*x);
+  #declare right_elbow_pos = right_shoulder_pos + vrotate(vrotate(vrotate(
+    -upper_arm_length*y,
+    -right_arm_aux_ang_1*x),
+    right_arm_aux_ang_3*z),
+    right_arm_aux_ang_4*x);
+  #declare left_upper_arm_trans = transform {
+      rotate -left_arm_aux_ang_1*x
+      rotate -left_arm_aux_ang_3*z
+      rotate left_arm_aux_ang_4*x
+      translate left_shoulder_pos
+    }
+  #declare left_lower_arm_trans = transform {
+      rotate (180-left_arm_aux_ang_2-left_arm_aux_ang_1)*x
+      rotate -left_arm_aux_ang_3*z
+      rotate left_arm_aux_ang_4*x
+      translate left_elbow_pos
+    }
+  #declare right_upper_arm_trans = transform {
+      rotate -right_arm_aux_ang_1*x
+      rotate right_arm_aux_ang_3*z
+      rotate right_arm_aux_ang_4*x
+      translate right_shoulder_pos
+    }
+  #declare right_lower_arm_trans = transform {
+      rotate (180-right_arm_aux_ang_2-right_arm_aux_ang_1)*x
+      rotate right_arm_aux_ang_3*z
+      rotate right_arm_aux_ang_4*x
+      translate right_elbow_pos
+    }
+
+#end
+
+
+
+#end
+
--- xblast-tnt-models-20050106.orig/debian/sprites/include/LoseFluidly.pov
+++ xblast-tnt-models-20050106/debian/sprites/include/LoseFluidly.pov
@@ -0,0 +1,32 @@
+#include "colors.inc"
+#include "textures.inc"
+#include "frame_defaults.inc"
+
+#declare helmetColor    = color rgb <0.7,0.3,0>;
+#declare faceColor      = color rgb <1,0.6,0.3>;
+#declare bodyColor      = color rgb <0,0,1>;
+#declare handsFeetColor = color rgb <1,1,0>;
+#declare armsLegsColor  = color rgb <0,1,1>;
+#declare backpackColor  = color rgb <1,0,1>;
+
+#declare playerLosing = 1;
+
+#declare playerLosingTime = clock*2;
+#if (playerLosingTime>1)
+  #declare playerLosingTime=2-playerLosingTime;
+#end
+
+object {
+  #declare playerAngle = 45;
+  #include "XBlast Robot.inc"
+  translate <-2,0,0>
+}
+object {
+  #declare playerAngle = 0;
+  #include "XBlast Robot.inc"
+  translate <2,0,0>
+}
+
+#declare camereUp = 6.0;
+#declare cameraRight = 8.0;
+#include "world.inc"
--- xblast-tnt-models-20050106.orig/debian/sprites/include/WalkFluidly.pov
+++ xblast-tnt-models-20050106/debian/sprites/include/WalkFluidly.pov
@@ -0,0 +1,32 @@
+#include "colors.inc"
+#include "textures.inc"
+#include "frame_defaults.inc"
+
+#declare helmetColor    = color rgb <0.7,0.3,0>;
+#declare faceColor      = color rgb <1,0.6,0.3>;
+#declare bodyColor      = color rgb <0,0,1>;
+#declare handsFeetColor = color rgb <1,1,0>;
+#declare armsLegsColor  = color rgb <0,1,1>;
+#declare backpackColor  = color rgb <1,0,1>;
+
+#declare playerWalking = 1;
+
+#declare playerWalkingTime = clock;
+
+object {
+  #declare playerAngle = 45;
+  #include "XBlast Robot.inc"
+  translate <-2,0,0>
+}
+object {
+  #declare playerAngle = 90;
+  #include "XBlast Robot.inc"
+  translate <0,-2,2>
+  rotate 90*x
+  rotate 45*y
+  translate <2,2,-2>
+}
+
+#declare camereUp = 6.0;
+#declare cameraRight = 8.0;
+#include "world.inc"
--- xblast-tnt-models-20050106.orig/debian/sprites/include/WinFluidly.pov
+++ xblast-tnt-models-20050106/debian/sprites/include/WinFluidly.pov
@@ -0,0 +1,32 @@
+#include "colors.inc"
+#include "textures.inc"
+#include "frame_defaults.inc"
+
+#declare helmetColor    = color rgb <0.7,0.3,0>;
+#declare faceColor      = color rgb <1,0.6,0.3>;
+#declare bodyColor      = color rgb <0,0,1>;
+#declare handsFeetColor = color rgb <1,1,0>;
+#declare armsLegsColor  = color rgb <0,1,1>;
+#declare backpackColor  = color rgb <1,0,1>;
+
+#declare playerWinning = 1;
+
+#declare playerWinningTime = clock*2;
+#if (playerWinningTime>1)
+  #declare playerWinningTime=2-playerWinningTime;
+#end
+
+object {
+  #declare playerAngle = 45;
+  #include "XBlast Robot.inc"
+  translate <-2,0,0>
+}
+object {
+  #declare playerAngle = 0;
+  #include "XBlast Robot.inc"
+  translate <2,0,0>
+}
+
+#declare camereUp = 6.0;
+#declare cameraRight = 8.0;
+#include "world.inc"
--- xblast-tnt-models-20050106.orig/debian/sprites/include/WinFluidly.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/WinFluidly.ini
@@ -0,0 +1,7 @@
+Input_File_Name=WinFluidly.pov
+Width=256
+Height=192
+Initial_Frame=1
+Final_Frame=20
+Cyclic_Animation=1
+Output_File_Type=P
--- xblast-tnt-models-20050106.orig/debian/sprites/include/LoseFluidly.ini
+++ xblast-tnt-models-20050106/debian/sprites/include/LoseFluidly.ini
@@ -0,0 +1,7 @@
+Input_File_Name=LooseFluidly.pov
+Width=256
+Height=192
+Initial_Frame=1
+Final_Frame=20
+Cyclic_Animation=1
+Output_File_Type=P
--- xblast-tnt-models-20050106.orig/debian/sprites/include/postproc.sh
+++ xblast-tnt-models-20050106/debian/sprites/include/postproc.sh
@@ -0,0 +1,72 @@
+set -e
+
+if [ "$#" != "4" ] ; then
+	echo "postproc.sh {lo,hi} <filename> <scenename> <framenumber>"
+	exit 10
+fi
+
+echo
+echo "postproc.sh | $1 | $2 | $3 | $4 |"
+
+case "$1" in
+	big)
+		CATFILE="cat $2"
+		;;
+	qu*)
+		CATFILE="cat $2"
+		;;
+	lo*)
+		CATFILE="cat $2"
+		;;
+	hi*)
+		CATFILE="pnmscale 0.5 $2"
+		;;
+	*) 	echo "unknown quality identifier '$1'"
+		exit 1
+esac
+
+PART=$(( (($4 - 1) % 3)+1 ))
+RUN=$(( ($4 - 1) / 3))
+
+echo "guessing part $PART of run $RUN"
+
+case "$3" in
+    *Special*)
+	case "$RUN" in
+	0) NAME=L  ; EPMCUT="pnmcut 0 24 64 66";;
+	1) NAME=L1 ; EPMCUT="pnmcut 0 24 64 66";;
+	2) NAME=L2 ; EPMCUT="pnmcut 0 24 64 66";;
+	3) NAME=W  ; EPMCUT="pnmcut 0 12 64 78";;
+	4) NAME=W2 ; EPMCUT="pnmcut 0 12 64 78";;
+	5) NAME=W3 ; EPMCUT="pnmcut 0 18 64 72";;
+	6) NAME=DD ; EPMCUT="pnmcut 0 24 64 72";;
+	7) NAME=DL ; EPMCUT="pnmcut 0 36 64 60";;
+	8) NAME=DU ; EPMCUT="pnmcut 0 42 64 48";;
+	9) NAME=DR ; EPMCUT="pnmcut 0 36 64 60";;
+	esac
+	;;
+    *Animation*)
+	case $(( $RUN / 5 )) in
+	0) NAME=D ; EPMCUT="pnmcut 0 18 64 78";;
+	1) NAME=L ; EPMCUT="pnmcut 0 24 64 72";;
+	2) NAME=U ; EPMCUT="pnmcut 0 24 64 66";;
+	3) NAME=R ; EPMCUT="pnmcut 0 24 64 66";;
+	esac
+	case $(( $RUN % 5 )) in
+	0) NAME=${NAME}_S ;;
+	1) NAME=${NAME}_0 ;;
+	2) NAME=${NAME}_1 ;;
+	3) NAME=${NAME}_2 ;;
+	4) NAME=${NAME}_3 ;;
+	esac
+	;;
+    *Winner*)
+    	NAME=B ; EPMCUT="pnmcut 0 30 128 152"
+	;;
+    *) echo "Unknown scene name!" >&2
+    	;;
+esac
+
+echo "$CATFILE | $EPMCUT |gzip > ${DESTNAME}_${NAME}_${PART}.ppm.gz"
+$CATFILE | $EPMCUT |gzip > ${DESTNAME}_${NAME}_${PART}.ppm.gz && rm $2
+
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/pgmtoepm.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/pgmtoepm.c
@@ -0,0 +1,97 @@
+/*
+ * program pgmtoepm - convert any number of Portable GrayMap to 
+ *                    Extented Pixmap Format epm
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * $Id: pgmtoepm.c,v 1.1 1999/04/04 11:48:24 xblast Exp $
+ * $Log: pgmtoepm.c,v $
+ * Revision 1.1  1999/04/04 11:48:24  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef __STDC__
+int 
+main (int argc, 
+      char*argv[])
+#else
+int
+main (argc, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  static char magic[256];
+  int width, height, maxval;
+  int d_width, d_height, d_maxval;
+  int i, n_data;
+  FILE *fp;
+  char dummy;
+  char *buf;
+
+  /* check command line args */
+  if (argc <= 1) {
+    fprintf(stderr, "usage: %s pgmfile [...]\n", argv[0]);
+    return 1;
+  }
+
+  for (i=1; i<argc; i++) {
+    /* open first pgm file */
+    if (NULL == (fp = fopen(argv[i],"r") ) ) {
+      fprintf(stderr, "%s: failed to open file \"%s\"\n", argv[0], argv[i]);
+      return 1;
+    }
+    /* read header */
+    fscanf(fp, "%s %d %d %d%c", magic, &width, &height, &maxval, &dummy);
+    /* compare magic word */
+    if (0 != strcmp("P5",magic)) {
+      fprintf(stderr, "%s: wrong magic word in file \"%s\"\n", argv[0], argv[i]);
+      return 1;
+    }
+    if (i==1) {
+      /* set default values */
+      d_height = height;
+      d_width  = width;
+      d_maxval = maxval;
+      n_data   = d_width * d_height;
+      /* alloc data buffer */
+      if (NULL == (buf = malloc(n_data*sizeof(char) ) ) ) {
+	fprintf(stderr, "%s: failed to alloc data buffer\n", argv[0]);
+	return 1;
+      }
+      /* write header */
+      printf("PX\n");
+      printf("%d %d %d %d\n", d_width, d_height, d_maxval, argc-1);
+    } else {
+      /* compare with default values */
+      if ( (d_height != height) || (d_width != width) || (d_maxval != maxval) ) {
+	fprintf(stderr, "%s: wrong image dimensions for file \"%s\"\n", 
+		argv[0], argv[i]);
+	return 1;
+      }
+    }
+    /* copy data */
+    if (n_data != fread(buf, sizeof(char), n_data, fp) ) {
+      fprintf(stderr, "%s: premature end of file \"%s\"\n", argv[0], argv[1]);
+      return 1;
+    }
+    fwrite (buf, sizeof(char), n_data, stdout);
+  }
+
+  return 0;
+}
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/Makefile
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/Makefile
@@ -0,0 +1,16 @@
+CFLAGS=-g -O2 -Wall -pedantic -DDEBUG
+LDFLAGS=-g -O2
+BININSTDIR=/home/xblast/bin
+#LOADLIBES=-lefence
+
+TARGETS=pgmtoepm epmtopgm epmtoppm epmarrange pbmarrange epmhalf ppmtoepm \
+	epmcompress epmuncompress epmcompress2
+
+all: $(TARGETS)
+
+install: all
+	$(foreach prg,$(TARGETS),install -m 755 -c $(prg) $(BININSTDIR); )
+
+clean:
+	rm -f $(TARGETS) core *~ *.o
+
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/epmtopgm.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/epmtopgm.c
@@ -0,0 +1,150 @@
+/*
+ * program epmtopgm - convert Extented Pixmap Format epm into 
+ *                    one Portable Graymap per layer
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * $Id: epmtopgm.c,v 1.1 1999/04/04 11:46:06 xblast Exp xblast $
+ * $Log: epmtopgm.c,v $
+ * Revision 1.1  1999/04/04 11:46:06  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __STDC__
+static char*
+prefix_from_filename (char *filename,
+		      char *extension)
+#else
+static char*
+prefix_from_filename (filename, extension)
+  char *filename, extension;
+#endif
+{
+  int flength, xlength;
+  char *dest;
+
+  flength = strlen(filename);
+  xlength = strlen (extension);
+
+  if ( (flength >= xlength) &&
+       (0 == strcmp(filename + (flength - xlength), extension)) ) {
+    /* cut away extension */
+    flength -= xlength;
+  }
+    
+  /* duplicate string */
+  if (NULL == (dest = malloc((flength+1)*sizeof(char) ) ) ) {
+    return NULL;
+  }
+
+  strncpy (dest, filename, flength);
+  dest[flength]=0;
+
+  return dest;
+}
+
+#ifdef __STDC__
+int 
+main (int argc, 
+      char*argv[])
+#else
+int
+main (argc, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  char *prefix;
+  FILE *fin, *fout;
+  char magic[256];
+  char outfile[1024];
+  int width, height, depth, maxval;
+  int layer, n_pixel;
+  char *buf;
+
+  /* check commandline args */
+  if ( (1 == argc) || ( (2 == argc) && (0 == strcmp(argv[1], "-") ) ) ) {
+    /* read from stdin */
+    fin = stdin;
+    prefix = "noname";
+  } else if ( (2 == argc) && (0 != strcmp(argv[1],"-?") ) ) {
+    if (NULL == (fin = fopen(argv[1],"r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for reading\n",
+	      argv[0], argv[1]);
+      return 1;
+    }
+    prefix = prefix_from_filename (argv[1], ".epm");
+  } else {
+    fprintf(stderr, "usage: %s [epmfile]\n", argv[0]);
+    return (argc != 2);
+  }
+  
+  /* read header */
+  if (5 != fscanf(fin, "%s%d%d%d%d%*c", magic,&width,&height,&maxval,&depth) ) {
+    fprintf(stderr, "%s: Failed to read epm header\n",argv[0]);
+    return 1;
+  }
+  /* test magic */
+  if (0 != strcmp(magic,"PX")) {
+    fprintf(stderr, "%s: Wrong magic word \"%s\".\n",argv[0],magic);
+    return 1;
+  }
+
+  /* calc number of pixel per layer */
+  n_pixel = width*height;
+
+  /* alloc buffer */
+  if (NULL == (buf = malloc(n_pixel*sizeof(char) ) ) ) {
+    fprintf(stderr, "%s: Failed to alloc buffer\n",argv[0]);
+    return 1;
+  }
+
+  for (layer=1; layer<=depth; layer++) {
+    /* read one layer */
+    if (n_pixel != fread (buf, sizeof(char), n_pixel, fin) ) {
+      perror(argv[0]);
+      return 1;
+    }
+    /* open output file */
+    sprintf(outfile, "%s.%d", prefix, layer);
+    if (NULL == (fout = fopen(outfile, "w") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for writing\n",
+	      argv[0], outfile);
+      return 1;
+    }
+    /* write header */
+    fprintf(fout, "P5\n");
+    fprintf(fout, "%d %d %d\n", width, height, maxval);
+    /* write pixel data */
+    if (n_pixel != fwrite (buf, sizeof(char), n_pixel, fout) ) {
+      perror(argv[0]);
+      return 1;
+    }    
+    if (fout != stdout) {
+      fclose(fout);
+    }
+  }
+
+  if (fout != stdin) {
+    fclose(fin);
+  }
+  free(buf);
+
+  return 0;
+}
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/COPYING
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/COPYING
@@ -0,0 +1,339 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program 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 program 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 program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/epmtoppm.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/epmtoppm.c
@@ -0,0 +1,253 @@
+/*
+ * program epmtoppm - convert Extented Pixmap Format epm into a PPM
+ *                    colorizing each layer
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * $Id: epmtoppm.c,v 1.1 1999/04/04 11:46:59 xblast Exp $
+ * $Log: epmtoppm.c,v $
+ * Revision 1.1  1999/04/04 11:46:59  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#ifndef RGB_TXT
+#define RGB_TXT "/usr/lib/X11/rgb.txt"
+#endif
+
+struct color {
+  unsigned red, green, blue;
+};
+
+#ifdef __STDC__
+int
+parse_color (struct color *col,
+	     char *name)
+#else
+int
+parse_color (col, name)
+  struct color *col;
+  char *name;
+#endif
+{
+  FILE *fp;
+  static char line[1024];
+  int i, l_len;
+  char *ptr;
+
+  /* check if in rgb format */
+  if (0 == strncmp(name, "rgb:", 4)) {
+    sscanf(name+4,"%x/%x/%x",(&col->red),&(col->green),&(col->blue));
+#ifdef DEBUG
+    fprintf(stderr, "RGB=%d,%d,%d\n",col->red,col->green,col->blue);
+#endif
+    switch (strlen(name)) {
+    case 9:
+      /* 1 digit */
+      col->red   = 255*col->red   / 15;
+      col->green = 255*col->green / 15;
+      col->blue  = 255*col->blue  / 15;
+      break;
+    case 12:
+      /* 2 digits */
+      col->red   = col->red;
+      col->green = col->green;
+      col->blue  = col->blue;
+      break;
+    case 15:
+      /* 3 digits */
+      col->red   = col->red   >>4;
+      col->green = col->green >>4;
+      col->blue  = col->blue  >>4;
+      break;
+    case 18:
+      /* 3 digits */
+      col->red   = col->red   >>8;
+      col->green = col->green >>8;
+      col->blue  = col->blue  >>8;
+      break;
+    default:
+      return 1;
+    }
+#ifdef DEBUG
+    fprintf(stderr, "RGB=%04x,%04x,%04x\n",col->red,col->green,col->blue);
+#endif
+    return 0;
+  }
+
+  if (NULL == (fp = fopen(RGB_TXT, "r" ) ) ) {
+    fprintf(stderr, "failed to open rgb file %s\n", RGB_TXT);
+    return -1;
+  }
+
+  while (! feof(fp) ) {
+    /* read one line */
+    fgets(line, sizeof(line), fp);
+    /* remove trailing end of line */
+    l_len = strlen(line)-1;
+    line[l_len]='\0';
+    /* find start of color name */
+    ptr = line;
+    /* skip the three rgb values */
+    for (; !isdigit(((int)*ptr)); ptr++);
+    for (i=0; i<3; i++) {
+      for (; isdigit(((int)*ptr)); ptr++);
+      for (; !isalnum(((int)*ptr)); ptr++);
+    }
+    /* compare end of line with color name */
+    if (0 == strcasecmp (ptr, name) ) {
+      /* get rgb values */
+      if (3 != sscanf(line, "%d%d%d", &(col->red), &(col->green), 
+		      &(col->blue) ) ) {
+	fprintf(stderr, "failed to parse rgb.txt line:\n");
+	fprintf(stderr, line);
+	continue;
+      }
+      fclose(fp);
+      return 0;
+    }
+  }
+  fclose(fp);
+  return 1;
+}
+
+
+#ifdef __STDC__
+int 
+main (int argc,
+      char *argv[])
+#else
+int 
+main (argv, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  FILE *fp;
+  int width, height, maxval, depth;
+  int i,j, layer, n_pixel;
+  unsigned char *inbuf, *outbuf;
+  struct color *col = NULL;
+  char magic[256];
+  unsigned red,green,blue;
+
+  /* check args (part one) */
+  if ( (argc < 2) || (0 == strcmp(argv[1],"-?") ) ) {
+    fprintf(stderr, "usage: %s epmfile color ...\n", argv[0]);
+    return (argc != 2);
+  }
+
+  /* open file */
+  if (0 == strcmp(argv[1],"-")) {
+    fp = stdin;
+  } else {
+    if (NULL == (fp = fopen(argv[1],"r") ) ) {
+      fprintf(stderr, "%s: faile to open file %s for reading\n", 
+	      argv[0], argv[1]);
+      return 1;
+    }
+  }
+
+  /* read header */
+  if (5 != fscanf(fp, "%s%d%d%d%d%*c", magic,&width,&height,&maxval,&depth) ) {
+    fprintf(stderr, "%s: Failed to read epm header\n",argv[0]);
+    return 1;
+  }
+  /* test magic */
+  if (0 != strcmp(magic,"PX")) {
+    fprintf(stderr, "%s: Wrong magic word \"%s\".\n",argv[0],magic);
+    return 1;
+  }
+
+  /* compare depth oto number of colors given */
+  if ((argc - 2) > depth) {
+    fprintf(stderr, "%s: warning, to many colors given\n", argv[0]);
+  } else if ((argc - 2) < depth) {
+    fprintf(stderr, "%s: warning, not enough colors given, using black\n", 
+	    argv[0]);
+    depth = argc-2;
+  }
+
+  /* calc number of pixel per layer */
+  n_pixel = width*height;
+
+  /* alloc input and color buffer */
+  if ( (NULL == (inbuf  = malloc(depth*n_pixel*sizeof(char) ) ) ) ||
+       (NULL == (outbuf = calloc(3*n_pixel,sizeof(char) ) ) ) ||
+       (NULL == (col = calloc(depth,sizeof(struct color) ) ) ) ) {
+    fprintf(stderr, "%s: Failed to alloc buffer\n",argv[0]);
+    return 1;
+  }
+  
+  /* read epm data */
+  if (depth*n_pixel != fread(inbuf, sizeof(char), depth*n_pixel, fp) ) {
+    perror(argv[0]);
+    return 1;
+  }
+
+  if (fp != stdin) {
+    fclose(fp);
+  }
+
+  for (layer=0; layer < depth; layer++) {
+    if (parse_color (col+layer, argv[2+layer]) ) {
+      fprintf(stderr, "%s: unkown color %s\n", argv[0], argv[2+layer]);
+      return 1;
+    }
+  }
+
+  /* convert pixel data */
+  for (i=0, j=0; i<n_pixel; i++, j+=3) {
+    red=0;
+    green=0;
+    blue=0;
+    for (layer=0; layer < depth; layer++) {
+      red   += col[layer].red   * inbuf[layer*n_pixel+i];
+      green += col[layer].green * inbuf[layer*n_pixel+i];
+      blue  += col[layer].blue  * inbuf[layer*n_pixel+i];
+    }
+    if (red > maxval*255) {
+      outbuf[j] = 255;
+    } else {
+      outbuf[j] = red/maxval;
+    }
+    if (green > maxval*255) {
+      outbuf[j+1] = 255;
+    } else {
+      outbuf[j+1] = green/maxval;
+    }
+    if (blue > maxval*255) {
+      outbuf[j+2] = 255;
+    } else {
+      outbuf[j+2] = blue/maxval;
+    }
+  }
+
+  /* write header */
+  printf("P6\n");
+  printf("%d %d %d\n", width, height, maxval);
+  /* write pixel data */
+  if (3*n_pixel != fwrite (outbuf, sizeof(char), 3*n_pixel, stdout) ) {
+    perror(argv[0]);
+    return 1;
+  }    
+
+  return 0;
+}
+
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/README
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/README
@@ -0,0 +1,112 @@
+EPMTOOLS
+
+1. Conversion tools
+
+  These are a set of tools to convert epm-files to portable grey- and
+  pixmaps for manipulation with the netpbm/pbmplus tools. These tools
+  only work with the uncompressed epm format.
+
+1.1 epmtopgm
+
+  usage: epmtopgm [epmfile]
+  
+  Converts each layer of the given epmfile to a portable greymap (pgm).
+  When noch epmfile is given, epmtopgm reads from standard in. 
+
+1.2 epmtopm
+
+  usage: epmtoppm epmfile color [...]
+
+  Converts the given epmfile to a portable pixmap (ppm). For color 
+  must be specified for each layer of the epmfile one. The colors
+  can be either given by name (parsed from /usr/X11/lib/rgb.txt)
+  or in rgb:#/#/# format (where # is a 1-4 digit hexadecimal 
+  number). Specify "-" for the epmfile file to read it from standard
+  input.
+  
+1.3 pgmtoepm
+
+  usage: pgmtopm pgmfile [...]
+
+  Converts a set of portable greymaps to an epmfile. The pgm files
+  must be of the same size and depth. The result is written to 
+  the standard output. Specify "-" for the pgmfile file to read it 
+  from standard input.
+  
+1.4 ppmtopepm
+
+  usage: ppmtoepm [-cch|-rgb] [ppmfile [epmfile]]
+
+  Converts a portable pixmap to an epmfile. If no epmfile is specified
+  the result will be written to standard output. If no no ppmfile is
+  specified it will be read from standard input. The pimxap can be 
+  interpreted as an "normal" rgb-pixmap and will be separated into a 
+  red, a blue and green layer (-rgb, default). Use -cch to convert
+  convert recolorable xblast block tiles into an epm. These blocks
+  are always rendered in red and green. In order convert them to
+  "colored" pixmap use:
+
+  ppmtoepm -cch tile.ppm | epmtoppm - color1 color2 White >new.ppm
+
+
+2.0 Compression
+
+  I have included a simple runlength encoding into the epm format.
+   
+2.1 epmcompress
+
+  usage: epmcompress epmfile [...]
+
+  First RLE algorithm, only compresses sequences of 0s in an epmfile.
+  Every epmfile given as argument will be compressed to this format.
+  A backup of the orignal will be keeped with a trailing ~.
+
+2.2 epmcompress2
+
+  usage: epmcompress2 epmfile [...]
+
+  Second RLE algorithm, only compresses sequences of any number in an 
+  epmfile. Better for the sprite bitmaps with their grey background.
+  Alas it is currenlty not supported by xblast. Every epmfile given as 
+  argument will be compressed to this format. A backup of the orignal 
+  will be keeped with a trailing ~.
+
+2.3 epmuncompress epmfile [...]
+
+  Converts the given epmfiles to uncompressed format. Only the first 
+  format (epmcompress) is supported.
+
+
+3. Other Tools
+
+3.1. epmarrange 
+   
+   usage: epmarrange [datafile [outputfile]]
+
+   Creates one big epm file by placing the epmfiles specified in the 
+   datafile at given position. (Can be used to put all sprite image 
+   into one file). If outputfile is ommitted the result will be written
+   to standard output. If the datafile is ommitted it will be read from 
+   standard input. The datafile has one line per epmfile to be used,
+   each of the following format:
+   
+   xpos ypos epmfile.
+
+2.2 pbmarrange
+
+   usage: epmarrange [datafile [outputfile]]
+
+   As epmarrange, but arranges portable bitmaps. (Useful for arranging
+   sprite masks).
+
+2.3 epmhalf
+
+   usage: epmhalf [input [output]]
+
+   Creates an epmfile half as wide and as high as the orignal.
+   If output is omitted the result is written to standard output.If
+   input is omitted the result is written to standard input.
+ 
+
+
+
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/epmarrange.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/epmarrange.c
@@ -0,0 +1,372 @@
+/*
+ * program epmarrange - arrange several epm files on a canvas
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * $Id: epmarrange.c,v 1.1 1999/04/04 11:44:46 xblast Exp $
+ * $Log: epmarrange.c,v $
+ * Revision 1.1  1999/04/04 11:44:46  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * some type defintions
+ */
+typedef struct _epm_file {
+  unsigned x, y;
+  unsigned width, height;
+  unsigned maxval, depth;
+  unsigned npixel;
+  long offset;
+  char *fname;
+  char *line;
+  struct _epm_file * next;
+} EpmFile;
+
+typedef struct _epm_data {
+  unsigned width, height;
+  unsigned maxval, depth;
+  unsigned npixel;
+  char *layer;
+} EpmData;
+
+/*
+ * local variables
+ */
+static char *progname;
+
+/*
+ * parse_input: parse the input file for epmfile names and positions
+ */
+#ifdef __STDC__
+static EpmFile *
+parse_input (char *filename) 
+#else
+static EpmFile *
+parse_input (filename) 
+  char *filename;
+#endif
+{
+  FILE *fp;
+  static char line[1024];
+  static char epmname[1024];
+  unsigned x, y;
+  EpmFile *new, *last = NULL, *root = NULL;
+
+  if ( (NULL == filename) || (0 == strcmp (filename, "-") ) ) {
+    /* use stdin */
+    fp = stdin;
+  } else {
+    if (NULL == (fp = fopen(filename, "r") ) ) {
+      perror(progname);
+      return NULL;
+    }
+  }
+  
+  while (NULL != fgets(line, sizeof(line), fp) ) {
+    if (3 == sscanf(line, "%u %u %s", &x, &y, epmname) ) {
+      if ( (NULL == (new = (EpmFile *) malloc(sizeof(EpmFile) ) ) ) ||
+	   (NULL == (new->fname = (char *) malloc(strlen(epmname)+1) ) ) ) {
+	fprintf(stderr, "%s: alloc failed\n", progname);
+	return NULL;
+      }
+      /* set entries */
+      new->x = x;
+      new->y = y;
+      strcpy(new->fname, epmname);
+#ifdef DEBUG
+      fprintf(stderr, "EPM %s at (%u,%u)\n", new->fname, new->x, new->y);
+#endif
+      if (root == NULL) {
+	root = last = new;
+      } else {
+	last->next = new;
+	last = new;
+      }
+    }
+  }
+  return root;
+}
+
+#ifdef __STDC__
+static int
+check_epm (EpmFile *epm)
+#else
+static int
+check_epm (epm)
+  EpmFile *epm;
+#endif
+{
+  FILE *fp;
+  char magic[256];
+
+  for (; epm != NULL; epm = epm->next) {
+    /* open file */
+    if (NULL == (fp = fopen(epm->fname, "r") ) ) {
+      perror(progname);
+      return 1;
+    }
+    /* read header */
+    if (5 != fscanf(fp, "%s%d%d%d%d%*c", magic, &(epm->width), &(epm->height), 
+		    &(epm->maxval), &(epm->depth) ) ) {
+      fprintf(stderr, "%s: Failed to read epm header\n",progname);
+      return 1;
+    }
+    /* test magic */
+    if (0 != strcmp(magic,"PX")) {
+      fprintf(stderr, "%s: Wrong magic word \"%s\".\n", progname, magic);
+      return 1;
+    }
+    /* get offset of pixel data */
+    epm->offset = ftell(fp);
+    /* close file */
+    fclose(fp);
+    /* alloc line buffer */
+    if (NULL == (epm->line = malloc(epm->width) ) ) {
+      fprintf(stderr, "%s: alloc failed\n", progname);
+      return 1;
+    }
+    /* set total number of pixel */
+    epm->npixel = epm->width * epm->height;
+  }
+
+  return 0;
+}
+
+
+#ifdef __STDC__
+static EpmData *
+init_epm (EpmFile *epm)
+#else
+static EpmData *
+init_epm (epm)
+  EpmFile *epm,
+#endif
+{
+  EpmData *new;
+  unsigned w, h;
+
+  if (NULL == (new = calloc(1, sizeof(EpmData) ) ) ) {
+    fprintf(stderr, "%s: alloc failed\n", progname);
+    return NULL;
+  }
+
+  for (; epm != NULL; epm = epm->next) {
+    /* new width ? */
+    w = epm->x + epm->width;
+    if (w > new->width) {
+      new->width = w;
+    }
+    /* new height ? */
+    h = epm->y + epm->height;
+    if (h > new->height) {
+      new->height = h;
+    }
+    /* new maxval */
+    if (epm->maxval > new->maxval) {
+      new->maxval = epm->maxval;
+    }
+    /* new depth */
+    if (epm->depth > new->depth) {
+      new->depth = epm->depth;
+    }
+  }
+  new->npixel = new->width * new->height;
+
+  /* alloc one layer */
+  if (NULL == (new->layer = malloc(new->npixel) ) ) {
+    fprintf(stderr, "%s: alloc failed\n", progname);
+    return NULL;
+  }
+
+  return new;
+}
+
+#ifdef __STDC__
+static int
+draw_one_layer (EpmData *dst,
+		EpmFile *src,
+		unsigned layer)
+#else
+static int
+draw_one_layer (dst, src, layer)
+  EpmData *dst;
+  EpmFile *src;
+  unsigned layer;
+#endif
+{
+  FILE *fp;
+  char *ptr;
+  unsigned y;
+
+  /* clear it first */
+  memset(dst->layer, 0, src->npixel);
+
+  for (; src != NULL; src = src->next) {
+    if (layer < src->depth) {
+      /* open src file */
+      if (NULL == (fp = fopen(src->fname, "r") ) ) {
+	perror(progname);
+	return 1;
+      }
+      /* skip to layer data */
+      if (0 > fseek(fp, src->offset + layer * src->npixel, SEEK_SET) ) {
+	perror(progname);
+	return 1;
+      }
+      /* draw pixels */
+      ptr = dst->layer + src->x + src->y*dst->width;
+      for (y=0; y<src->height; y++) {
+	/* read line */
+	if (src->width != fread (src->line, 1, src->width, fp) ) {
+	  if (feof(fp)) {
+	    fprintf(stderr, "%s: premature eof in file %s\n",
+		    progname, src->fname);
+	  } else {
+	    perror(progname);
+	  }
+	  return 1;
+	}
+	/* copy to dest epm */
+	memcpy (ptr, src->line, src->width);
+	ptr += dst->width;
+      }
+      /* close file */
+      fclose(fp);
+    }
+  }
+  return 0;
+}
+
+#ifdef __STDC__	      
+static FILE *
+epm_open (EpmData *epm,
+	  char *filename)
+#else
+static FILE *
+epm_open (epm, filename)
+  EpmData *epm;
+  char *filename;
+#endif
+{
+  FILE *fp;
+
+  if ( (NULL == filename) || (0 == strcmp (filename, "-") ) ){
+    fp = stdout;
+  } else {
+    if (NULL == (fp = fopen(filename, "w") ) ) {
+      perror(progname);
+      return NULL;
+    }
+  }
+
+  /* write header */
+  fprintf(fp,"PX\n");
+  fprintf(fp,"%u %u %u %u\n", epm->width,epm->height,epm->maxval,epm->depth);
+  
+  return fp;
+}
+
+
+#ifdef __STDC__
+static int
+write_layer (FILE *fp,
+	     EpmData *epm)
+#else
+static int
+write_layer (fp, epm)
+  FILE *fp;
+  EpmData *epm;
+#endif
+{
+  if (epm->npixel != fwrite(epm->layer, 1, epm->npixel, fp) ) {
+    perror(progname);
+    return 1;
+  }
+
+  return 0;
+}
+
+
+
+/*
+ * the main program
+ */
+
+#ifdef __STDC__
+int
+main (int argc,
+      char *argv[])
+#else
+int
+main (argc, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  char *input  = NULL;
+  char *output = NULL;
+  EpmFile *epm_list;
+  EpmData *new_epm;
+  FILE *fp;
+  int layer;
+
+  /* parse commandline args */
+  switch (argc) {
+    /* correct number */
+  case 3:
+    output   = argv[2];
+  case 2:
+    input    = argv[1];
+  case 1:
+    progname = argv[0];
+    break;
+
+  default:
+    /* print usage message */
+    fprintf(stderr, "usage: %s [datafile [outputfile]]\n", argv[0]);
+    return 1;
+  }
+  /* inits */
+  if (NULL == (epm_list = parse_input(input) ) ) {
+    return 1;
+  }
+  if (check_epm (epm_list) ){
+    return 1;
+  }
+  if (NULL == (new_epm = init_epm(epm_list) ) ) {
+    return 1;
+  }
+  /* open output file */
+  if (NULL == (fp = epm_open(new_epm, output) ) ) {
+    return 1;
+  }
+  for (layer = 0; layer < new_epm->depth; layer++) {
+    if (draw_one_layer(new_epm, epm_list, layer) ) {
+      return 1;
+    }
+    if (write_layer(fp, new_epm) ) {
+      return 1;
+    }
+  }
+  fclose(fp);
+
+  return 0;
+}
+
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/pbmarrange.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/pbmarrange.c
@@ -0,0 +1,364 @@
+/*
+ * program pbmarrange - arrange several pbm files on a canvas
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * $Id: pbmarrange.c,v 1.1 1999/04/04 11:47:56 xblast Exp $
+ * $Log: pbmarrange.c,v $
+ * Revision 1.1  1999/04/04 11:47:56  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * some type defintions
+ */
+typedef struct _pbm_file {
+  unsigned x, y;
+  unsigned wbyte, height;
+  unsigned nbyte;
+  long offset;
+  char *fname;
+  char *line;
+  struct _pbm_file * next;
+} PbmFile;
+
+typedef struct _pbm_data {
+  unsigned wbyte, height;
+  unsigned nbyte;
+  char *data;
+} PbmData;
+
+
+/*
+ * local variables
+ */
+static char *progname;
+
+/*
+ * parse_input: parse the input file for pbmfile names and positions
+ */
+#ifdef __STDC__
+static PbmFile *
+parse_input (char *filename) 
+#else
+static PbmFile *
+parse_input (filename) 
+  char *filename;
+#endif
+{
+  FILE *fp;
+  static char line[1024];
+  static char pbmname[1024];
+  unsigned x, y;
+  PbmFile *new, *last = NULL, *root = NULL;
+
+  if ( (NULL == filename) || (0 == strcmp (filename, "-") ) ) {
+    /* use stdin */
+    fp = stdin;
+  } else {
+    if (NULL == (fp = fopen(filename, "r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s\n", progname, filename);
+      perror(progname);
+      return NULL;
+    }
+  }
+  
+  while (NULL != fgets(line, sizeof(line), fp) ) {
+    if (3 == sscanf(line, "%u %u %s", &x, &y, pbmname) ) {
+      if ( (NULL == (new = (PbmFile *) malloc(sizeof(PbmFile) ) ) ) ||
+	   (NULL == (new->fname = (char *) malloc(strlen(pbmname)+1) ) ) ) {
+	fprintf(stderr, "%s: alloc failed\n", progname);
+	return NULL;
+      }
+      /* set entries */
+      if (x % 8) {
+	fprintf(stderr, "%s: Warning! unaligned xoffset %d ignored",
+		progname, x);
+      }
+      new->x = x/8;
+      new->y = y;
+      strcpy(new->fname, pbmname);
+      if (root == NULL) {
+	root = last = new;
+      } else {
+	last->next = new;
+	last = new;
+      }
+    }
+  }
+  return root;
+}
+
+
+#ifdef __STDC__
+static int
+check_pbm (PbmFile *pbm)
+#else
+static int
+check_pbm (pbm)
+  PbmFile *pbm;
+#endif
+{
+  FILE *fp;
+  char magic[256];
+
+  for (; pbm != NULL; pbm = pbm->next) {
+    /* open file */
+    if (NULL == (fp = fopen(pbm->fname, "r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s\n", progname, pbm->fname);
+      perror(progname);
+      return 1;
+    }
+    /* read header */
+    if (3 != fscanf(fp, "%s%d%d%*c", magic,&(pbm->wbyte),&(pbm->height) ) ) {
+      fprintf(stderr, "%s: Failed to read pbm header\n",progname);
+      return 1;
+    }
+    /* test magic */
+    if (0 != strcmp(magic,"P4")) {
+      fprintf(stderr, "%s: Wrong magic word \"%s\".\n", progname, magic);
+      return 1;
+    }
+    /* get offset of pixel data */
+    pbm->offset = ftell(fp);
+    /* close file */
+    fclose(fp);
+    /* alloc line buffer */
+    pbm->wbyte /= 8;
+    if (NULL == (pbm->line = malloc(pbm->wbyte) ) ) {
+      fprintf(stderr, "%s: alloc failed\n", progname);
+      return 1;
+    }
+    /* set total number of pixel */
+    pbm->nbyte = pbm->wbyte * pbm->height;
+  }
+
+  return 0;
+}
+
+
+
+#ifdef __STDC__
+static PbmData *
+init_pbm (PbmFile *pbm)
+#else
+static PbmData *
+init_pbm (pbm)
+  PbmFile *pbm,
+#endif
+{
+  PbmData *new;
+  unsigned w, h;
+
+  if (NULL == (new = calloc(1, sizeof(PbmData) ) ) ) {
+    fprintf(stderr, "%s: alloc failed\n", progname);
+    return NULL;
+  }
+
+  for (; pbm != NULL; pbm = pbm->next) {
+    /* new wbyte ? */
+    w = pbm->x + pbm->wbyte;
+    if (w > new->wbyte) {
+      new->wbyte = w;
+    }
+    /* new height ? */
+    h = pbm->y + pbm->height;
+    if (h > new->height) {
+      new->height = h;
+    }
+  }
+  new->nbyte = new->wbyte * new->height;
+
+  /* alloc one data */
+  if (NULL == (new->data = malloc(new->nbyte) ) ) {
+    fprintf(stderr, "%s: alloc failed\n", progname);
+    return NULL;
+  }
+
+  return new;
+}
+
+
+#ifdef __STDC__
+static int
+draw_data (PbmData *dst,
+	   PbmFile *src)
+#else
+static int
+draw_data (dst, src)
+  PbmData *dst;
+  PbmFile *src;
+#endif
+{
+  FILE *fp;
+  char *ptr;
+  unsigned y;
+
+  /* clear it first */
+  memset(dst->data, 0, src->nbyte);
+
+  for (; src != NULL; src = src->next) {
+    /* open src file */
+    if (NULL == (fp = fopen(src->fname, "r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s\n", progname, src->fname);
+      perror(progname);
+      return 1;
+    }
+    /* skip to data data */
+    if (0 > fseek(fp, src->offset, SEEK_SET) ) {
+      perror(progname);
+      return 1;
+    }
+    /* draw pixels */
+    ptr = dst->data + src->x + src->y*dst->wbyte;
+    for (y=0; y<src->height; y++) {
+      /* read line */
+      if (src->wbyte != fread (src->line, 1, src->wbyte, fp) ) {
+	if (feof(fp)) {
+	  fprintf(stderr, "%s: premature eof in file %s\n",
+		  progname, src->fname);
+	} else {
+	  perror(progname);
+	}
+	return 1;
+      }
+      /* copy to dest pbm */
+      memcpy (ptr, src->line, src->wbyte);
+      ptr += dst->wbyte;
+    }
+    /* close file */
+    fclose(fp);
+  }
+  return 0;
+}
+
+
+#ifdef __STDC__	      
+static FILE *
+pbm_open (PbmData *pbm,
+	  char *filename)
+#else
+static FILE *
+pbm_open (pbm, filename)
+  PbmData *pbm;
+  char *filename;
+#endif
+{
+  FILE *fp;
+
+  if ( (NULL == filename) || (0 == strcmp (filename, "-") ) ){
+    fp = stdout;
+  } else {
+    if (NULL == (fp = fopen(filename, "w") ) ) {
+      perror(progname);
+      return NULL;
+    }
+  }
+
+  /* write header */
+  fprintf(fp,"P4\n");
+  fprintf(fp,"%u %u\n", pbm->wbyte*8, pbm->height);
+  
+  return fp;
+}
+
+
+#ifdef __STDC__
+static int
+write_data (FILE *fp,
+	     PbmData *pbm)
+#else
+static int
+write_data (fp, pbm)
+  FILE *fp;
+  PbmData *pbm;
+#endif
+{
+  if (pbm->nbyte != fwrite(pbm->data, 1, pbm->nbyte, fp) ) {
+    perror(progname);
+    return 1;
+  }
+
+  return 0;
+}
+
+
+
+/*
+ * the main program
+ */
+
+#ifdef __STDC__
+int
+main (int argc,
+      char *argv[])
+#else
+int
+main (argc, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  char *input  = NULL;
+  char *output = NULL;
+  PbmFile *pbm_list;
+  PbmData *new_pbm;
+  FILE *fp;
+
+  /* parse commandline args */
+  switch (argc) {
+    /* correct number */
+  case 3:
+    output   = argv[2];
+  case 2:
+    input    = argv[1];
+  case 1:
+    progname = argv[0];
+    break;
+
+  default:
+    /* print usage message */
+    fprintf(stderr, "usage: %s [datafile [outputfile]]\n", argv[0]);
+    return 1;
+  }
+  /* inits */
+  if (NULL == (pbm_list = parse_input(input) ) ) {
+    return 1;
+  }
+  if (check_pbm (pbm_list) ){
+    return 1;
+  }
+  if (NULL == (new_pbm = init_pbm(pbm_list) ) ) {
+    return 1;
+  }
+  /* open output file */
+  if (NULL == (fp = pbm_open(new_pbm, output) ) ) {
+    return 1;
+  }
+  if (draw_data(new_pbm, pbm_list) ) {
+    return 1;
+  }
+  if (write_data(fp, new_pbm) ) {
+    return 1;
+  }
+  fclose(fp);
+
+  return 0;
+}
+
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/epmhalf.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/epmhalf.c
@@ -0,0 +1,140 @@
+/*
+ * program epmhalf - scale down epm by a factor of two
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * $Id: epmhalf.c,v 1.1 1999/04/04 11:45:18 xblast Exp $
+ * $Log: epmhalf.c,v $
+ * Revision 1.1  1999/04/04 11:45:18  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#ifdef __STDC__
+int
+main (int argc, 
+      char *argv[])
+#else
+int
+main (argv, argv)
+     int argc;
+     char *argv[];
+#endif
+{
+  FILE *fin, *fout;
+  int width, height, maxval, depth;
+  int n_pixel, o_pixel;
+  unsigned char *inbuf, *outbuf;
+  unsigned char *pin, *pout;
+  char magic[256];
+  int d, y, x;
+
+  /* check args */
+  switch(argc) {
+  case 1:
+    fin  = stdin;
+    fout = stdout;
+    break;
+
+  case 2:
+    fout = stdout;
+    /* open file */
+    if (NULL == (fin = fopen(argv[1],"r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for reading\n", 
+	      argv[0], argv[1]);
+      return 1;
+    }
+    break;
+
+  case 3:
+    /* open files */
+    if (NULL == (fin = fopen(argv[1],"r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for reading\n", 
+	      argv[0], argv[1]);
+      return 1;
+    }
+    if (NULL == (fout = fopen(argv[2],"w") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for writing\n", 
+	      argv[0], argv[1]);
+      return 1;
+    }
+    break;
+
+  default:
+    fprintf (stderr, "usage: %s [input [output]]\n", argv[0]);
+    return 1;
+  } 
+
+  /* read header */
+  if (5 != fscanf(fin, "%s%d%d%d%d%*c", magic,&width,&height,&maxval,&depth) ) {
+    fprintf(stderr, "%s: Failed to read epm header\n",argv[0]);
+    return 1;
+  }
+  /* test magic */
+  if (0 != strcmp(magic,"PX")) {
+    fprintf(stderr, "%s: Wrong magic word \"%s\".\n",argv[0],magic);
+    return 1;
+  }
+
+  /* calc number of pixel per layer */
+  n_pixel = width*height;
+  o_pixel = (width/2)*(height/2);
+
+  /* alloc input and output buffer */
+  if ( (NULL == (inbuf  = malloc(depth*n_pixel*sizeof(char) ) ) ) ||
+       (NULL == (outbuf = malloc(depth*o_pixel*sizeof(char) ) ) ) ) {
+    fprintf(stderr, "%s: Failed to alloc buffers\n",argv[0]);
+    return 1;
+  }
+  
+  /* read epm data */
+  if (depth*n_pixel != fread(inbuf, sizeof(char), depth*n_pixel, fin) ) {
+    perror(argv[0]);
+    return 1;
+  }
+
+  /* convert it */
+
+  pout = outbuf;
+  for (d=0; d<depth; d++) {
+    for (y=0; y<height; y+=2) {
+      pin = inbuf + d*n_pixel + y*width;
+      for (x=0; x<width; x+=2) {
+	*pout = (unsigned char)((pin[0]+pin[1]+pin[width]+pin[width+1])/4);
+	pout ++;
+	pin +=2;
+      }
+    }
+  }
+  
+  /* write header */
+  fprintf(fout,"PX\n");
+  fprintf(fout,"%d %d %d %d\n", width/2, height/2, maxval, depth);
+  fwrite(outbuf, sizeof(char), depth*o_pixel, fout);
+  
+  /* close files if neceassry */
+  if (fin != stdin) {
+    fclose(fin);
+  }
+  if (fout != stdout) {
+    fclose(fout);
+  }
+
+  return 0;
+}
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/ppmtoepm.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/ppmtoepm.c
@@ -0,0 +1,163 @@
+/*
+ * program ppmtoepm - convert Portable Pixmap ppm into 
+ *                    Extented Pixmap Format epm
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ * 
+ * $Id: ppmtoepm.c,v 1.1 1999/04/04 11:49:18 xblast Exp $
+ * $Log: ppmtoepm.c,v $
+ * Revision 1.1  1999/04/04 11:49:18  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef __STDC__
+int 
+main (int argc, 
+      char*argv[])
+#else
+int
+main (argc, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  static char magic[256];
+  int width, height, maxval;
+  int i, j, n_data, n_pixel;
+  FILE *fp, *fout;
+  char *ppm, *epm;
+  char dummy;
+  unsigned char *inbuf, *outbuf;
+  int val, rgb_mode;
+
+  /* check command line args */
+  if ( (argc <= 1) || (argc >=5) ) {
+    fprintf(stderr, "usage: %s [-cch|-rgb] [ppmfile [epmfile]]\n", argv[0]);
+    return 1;
+  } 
+  /* parse command line */
+  i=1;
+  /* conversion mode */
+  rgb_mode = 1;
+  if (0 == strcmp(argv[i], "-cch") ) {
+    rgb_mode = 0;
+    i ++;
+  } else if (0 == strcmp(argv[i], "-rgb") ) {
+    rgb_mode =1;
+    i ++;
+  } else if ( ('-' == argv[i][0]) && ('\0' != argv[i][1]) ) {
+    fprintf(stderr, "%s: unknown option %s\n", argv[0], argv[i]);
+    return 1;
+  }
+  /* files */
+  ppm = NULL;
+  epm = NULL;
+  /* input file */
+  if (i < argc) {
+    ppm = argv[i];
+    i++;
+    /* output file */
+    if (i < argc) {
+      epm = argv[i];
+      i++;
+    }
+  }
+  if (i != argc) {
+    fprintf(stderr, "usage: %s [-cch|-rgb] [ppmfile [epmfile]]\n", argv[0]);
+    return 1;
+  } 
+  
+
+  /* open  ppm file */
+  if ( (NULL == ppm) || (0 == strcmp(ppm, "-") ) ) {
+    fp = stdin;
+  } else if (NULL == (fp = fopen(ppm,"r") ) ) {
+    fprintf(stderr, "%s: failed to open file \"%s\"\n", argv[0], ppm);
+    return 1;
+  }
+  /* read header */
+  fscanf(fp, "%s %d %d %d%c", magic, &width, &height, &maxval, &dummy);
+  /* compare magic word */
+  if (0 != strcmp("P6",magic)) {
+    fprintf(stderr, "%s: wrong magic word in file \"%s\"\n", argv[0], ppm);
+    return 1;
+  }
+  n_data  = 3 * width * height;
+  n_pixel = width * height;
+  /* alloc data buffer */
+  if ( (NULL == (inbuf = malloc(n_data*sizeof(char) ) ) ) ||
+       (NULL == (outbuf = malloc(n_data*sizeof(char) ) ) ) ) {
+    fprintf(stderr, "%s: failed to alloc data buffer\n", argv[0]);
+    return 1;
+  }
+  /* read data */
+  if (n_data != fread(inbuf, sizeof(char), n_data, fp) ) {
+    fprintf(stderr, "%s: premature end of file \"%s\"\n", argv[0], ppm);
+    return 1;
+  }
+  /* close pgm file */
+  fclose(fp);
+
+  /* open epm file if necessary */
+  if ( (NULL == epm) || (0 == strcmp(epm,"-") ) ) {
+    fout = stdout;
+  } else {
+    if (NULL == (fout = fopen(epm,"w") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for writing\n", 
+	      argv[0], epm);
+    }
+  }
+
+  /* write header */
+  fprintf(fout, "PX\n");
+  fprintf(fout, "%d %d %d %d\n", width, height, maxval, 3);
+
+  if (rgb_mode) {
+    /* convert data */
+    for (i=0, j=0; i<n_pixel; i++, j+=3) {
+      /* channel 0 is red */
+      outbuf[i] = inbuf[j];
+      /* channel 1 is green */
+      outbuf[i+n_pixel] = inbuf[j+1];
+      /* channel is just blue */
+      outbuf[i+2*n_pixel] = inbuf[j+2];
+    }
+  } else {
+    /* convert data */
+    for (i=0, j=0; i<n_pixel; i++, j+=3) {
+      /* channel 0 is red - blue */
+      if ( 0 > (val = inbuf[j] - inbuf[j+2]) ) {
+	val = 0;
+      }
+      outbuf[i] = val;
+      /* channel 1 is green - blue */
+      if ( 0 > (val = inbuf[j+1] - inbuf[j+2]) ) {
+	val = 0;
+      }
+      outbuf[i+n_pixel] = val;
+      /* channel is just blue */
+      outbuf[i+2*n_pixel] = inbuf[j+2];
+    }
+  }
+  /* write data*/
+  fwrite(outbuf, sizeof(char), n_data, fout);
+  /* close epm file */
+  fclose(fout);
+
+  return 0;
+}
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/epmcompress.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/epmcompress.c
@@ -0,0 +1,167 @@
+/*
+ * program epmcompress - compress Extented Pixmap Format epm using
+ *                       simple Runlength Encoding
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * $Id: epmcompress.c,v 1.1 1999/04/04 11:43:23 xblast Exp $
+ * $Log: epmcompress.c,v $
+ * Revision 1.1  1999/04/04 11:43:23  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#ifdef __STDC__
+int 
+main (int argc,
+      char *argv[])
+#else
+int 
+main (argv, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  FILE *fp;
+  int width, height, maxval, depth;
+  int arg, n_pixel;
+  unsigned char *inbuf, *outbuf;
+  unsigned char *src, *dst;
+  char magic[256];
+  char file_name[1024];
+  unsigned zero_count;
+
+  /* check args (part one) */
+  if ( (argc < 2) || (0 == strcmp(argv[1],"-?") ) ) {
+    fprintf(stderr, "usage: %s epmfile ...\n", argv[0]);
+    return (argc != 2);
+  }
+
+  for (arg = 1; arg < argc; arg++) {
+
+    /* open file */
+    if (NULL == (fp = fopen(argv[arg],"r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for reading\n", 
+	      argv[0], argv[arg]);
+      return 1;
+    }
+
+    /* read header */
+    if (5 != fscanf(fp, "%s%d%d%d%d%*c", magic,&width,&height,&maxval,&depth) ) {
+      fprintf(stderr, "%s: Failed to read epm header\n",argv[0]);
+      return 1;
+    }
+    /* test magic */
+    if (0 != strcmp(magic,"PX")) {
+      if (0 == strcmp(magic, "PZ") ) {
+	fprintf(stderr, "File \"%s\" is already compressed.\n", argv[arg]);
+	fclose(fp);
+	continue;
+      }
+      fprintf(stderr, "%s: Wrong magic word \"%s\".\n",argv[0],magic);
+      return 1;
+    }
+
+    /* calc number of pixel per layer */
+    n_pixel = width*height;
+    
+    /* alloc input and color buffer */
+    if ( (NULL == (inbuf  = malloc(depth*n_pixel*sizeof(char) ) ) ) ||
+	 (NULL == (outbuf = calloc(2*depth*n_pixel,sizeof(char) ) ) ) ) {
+      fprintf(stderr, "%s: Failed to alloc buffer\n",argv[0]);
+      return 1;
+    }
+    
+    /* read epm data */
+    if (depth*n_pixel != fread(inbuf, sizeof(char), depth*n_pixel, fp) ) {
+      perror(argv[0]);
+      return 1;
+    }
+    
+    /* convert data */
+    dst = outbuf;
+    zero_count = 0;
+    for (src = inbuf; src < (inbuf + depth*n_pixel); src++) {
+      if (0 != *src) {
+	if (zero_count) {
+	  *dst = 0;
+	  dst++;
+	  while (zero_count >= 255) {
+	    *dst = 255;
+	    dst++;
+	    zero_count -= 255;
+	  } 
+	  *dst = zero_count;
+	  dst++;
+	  zero_count = 0;
+	}
+	*dst = *src;
+	dst++;
+      } else {
+	zero_count ++;
+      }
+    }
+    /* store remaining zeros */
+    if (zero_count) {
+      *dst = 0;
+      dst++;
+      while (zero_count > 255) {
+	*dst = 255;
+	dst++;
+	zero_count -= 255;
+      } 
+      *dst = zero_count;
+      dst++;
+      zero_count = 0;
+    }
+    fprintf (stderr, "File \"%s\": %6.1f%%.\n", argv[arg], 
+	     100. * (1. - (double)(dst-outbuf)/(src-inbuf) ) );
+    fclose (fp);
+    /* use compression only if better */
+    if ( (dst-outbuf) < (src - inbuf) ) {
+      /* rename old file */
+      sprintf (file_name, "%s~", argv[arg]);
+      if (rename (argv[arg], file_name)) {
+	fprintf (stderr, "Failed to create backup file \"%s\".\n",
+		 file_name);
+	return 1;
+      }
+      /* write new file */
+      if (NULL == (fp = fopen (argv[arg], "w") ) ) {
+	fprintf(stderr, "%s: failed to open file %s for writing\n", 
+		argv[0], argv[arg]);
+	return 1;
+      }
+      /* write header */
+      fprintf (fp, "PZ\n");
+      fprintf (fp, "%d %d %d %d\n", width, height, maxval, depth);
+      fwrite (outbuf, sizeof(char), dst-outbuf, fp);
+      fclose (fp);
+    } else {
+      fprintf (stderr, "Skipping file \"%s\".\n", argv[arg]);
+    }
+    /* free buffers */
+    free (outbuf);
+    free (inbuf);
+  }
+  return 0;
+}
+
+
+
+
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/epmuncompress.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/epmuncompress.c
@@ -0,0 +1,147 @@
+/*
+ * program epmcompress - compress Extented Pixmap Format epm using
+ *                       simple Runlength Encoding
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * $Id: epmuncompress.c,v 1.1 1999/04/04 11:43:54 xblast Exp $
+ * $Log: epmuncompress.c,v $
+ * Revision 1.1  1999/04/04 11:43:54  xblast
+ * Initial revision
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#ifdef __STDC__
+int 
+main (int argc,
+      char *argv[])
+#else
+int 
+main (argv, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  FILE *fp;
+  int width, height, maxval, depth;
+  int arg, n_pixel, n_bytes;
+  unsigned char *inbuf, *outbuf;
+  unsigned char *src, *dst;
+  unsigned zero_count;
+  char magic[256];
+  char file_name[1024];
+
+  /* check args (part one) */
+  if ( (argc < 2) || (0 == strcmp(argv[1],"-?") ) ) {
+    fprintf(stderr, "usage: %s epmfile ...\n", argv[0]);
+    return (argc != 2);
+  }
+
+  for (arg = 1; arg < argc; arg++) {
+
+    /* open file */
+    if (NULL == (fp = fopen(argv[arg],"r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for reading\n", 
+	      argv[0], argv[arg]);
+      return 1;
+    }
+
+    /* read header */
+    if (5 != fscanf(fp, "%s%d%d%d%d%*c", magic,&width,&height,&maxval,&depth) ) {
+      fprintf(stderr, "%s: Failed to read epm header\n",argv[0]);
+      return 1;
+    }
+    /* test magic */
+    if (0 != strcmp(magic,"PZ")) {
+      if (0 == strcmp(magic, "PX") ) {
+	fprintf(stderr, "File \"%s\" is already uncompressed.\n", argv[arg]);
+	fclose (fp);
+	continue;
+      }
+      fprintf(stderr, "%s: Wrong magic word \"%s\".\n",argv[0],magic);
+      return 1;
+    }
+
+    /* calc number of pixel per layer */
+    n_pixel = width*height;
+#ifdef DEBUG
+    fprintf (stderr, "%d pixels\n", n_pixel);
+#endif
+    
+
+    /* alloc input and color buffer */
+    if ( (NULL == (inbuf  = malloc(2*depth*n_pixel*sizeof(char) ) ) ) ||
+	 (NULL == (outbuf = calloc(depth*n_pixel,sizeof(char) ) ) ) ) {
+      fprintf(stderr, "%s: Failed to alloc buffer\n",argv[0]);
+      return 1;
+    }
+    
+    /* read epm data */
+    if (0 == (n_bytes = fread(inbuf, sizeof(char), 2*depth*n_pixel, fp) ) ) {
+      perror(argv[0]);
+      return 1;
+    }
+    fprintf (stderr, "File \"%s\": %6.1f%%.\n", argv[arg], 
+	     100. * (1. - (double)n_bytes/(depth*n_pixel) ) );
+
+    /* convert data */
+    for (src = inbuf, dst=outbuf; (src < inbuf + n_bytes) && (dst < outbuf + depth*n_pixel); src++) {
+      if (*src) {
+	*dst = *src;
+	dst ++;
+      } else {
+	zero_count = 0;
+	do {
+	  src ++;
+	  zero_count += *src;
+	} while (*src == 255);
+	memset (dst, 0, zero_count);
+	dst += zero_count;
+      }
+    }
+    fclose (fp);
+
+    /* rename old file */
+    sprintf (file_name, "%s~", argv[arg]);
+    if (rename (argv[arg], file_name)) {
+      fprintf (stderr, "Failed to create backup file \"%s\".\n",
+	       file_name);
+      return 1;
+    }
+    /* write new file */
+    if (NULL == (fp = fopen (argv[arg], "w") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for writing\n", 
+	      argv[0], argv[arg]);
+      return 1;
+    }
+    /* write header */
+    fprintf (fp, "PX\n");
+    fprintf (fp, "%d %d %d %d\n", width, height, maxval, depth);
+    fwrite (outbuf, sizeof(char), dst - outbuf, fp);
+    fclose (fp);
+    /* free buffers */
+    free (outbuf);
+    free (inbuf);
+  }
+  return 0;
+}
+
+
+
+
--- xblast-tnt-models-20050106.orig/debian/sprites/epmtools/epmcompress2.c
+++ xblast-tnt-models-20050106/debian/sprites/epmtools/epmcompress2.c
@@ -0,0 +1,234 @@
+/*
+ * program epmcompress - compress Extented Pixmap Format epm using
+ *                       simple Runlength Encoding
+ *
+ * (C) by Oliver Vogel (e-mail: vogel@ikp.uni-koeln.de)
+ * April 5th, 1997
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public Licence as by published
+ * by the Free Software Foundation; either version 2; or (at your option)
+ * any later version
+ *
+ * This program is distributed in the hope that it will entertaining,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILTY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+
+#ifdef __STDC__
+typedef unsigned char * (*store_func) (unsigned char *, unsigned, unsigned);
+#else
+typedef unsigned char * (*store_func) ();
+#endif
+
+static unsigned byteRaw[256];
+static unsigned byteZip[256];
+static store_func storeByte[256];
+
+#ifdef __STDC__
+static unsigned char *
+StoreRaw (unsigned char *dst,
+	  unsigned value, 
+	  unsigned count)
+#else
+static unsigned char *
+StoreRaw (dst, value, count)
+     unsigned char *dst;
+     unsigned value; 
+     unsigned count;
+#endif	  
+{
+  memset (dst, value, count);
+  return dst + count;
+}
+
+#ifdef __STDC__
+static unsigned char *
+StoreZip (unsigned char *dst,
+	  unsigned value, 
+	  unsigned count)
+#else
+static unsigned char *
+StoreZip (dst, value, count)
+     unsigned char *dst;
+     unsigned value; 
+     unsigned count;
+#endif	  
+{
+  *dst = value;
+  dst ++;
+  while (count >= 255) {
+    *dst = 255;
+    count -= 255;
+  }
+  *dst = count;
+  dst ++;
+  return dst;
+}
+
+
+
+#ifdef __STDC__
+int 
+main (int argc,
+      char *argv[])
+#else
+int 
+main (argv, argv)
+  int argc;
+  char *argv[];
+#endif
+{
+  FILE *fp;
+  int width, height, maxval, depth;
+  int i, arg, n_pixel;
+  unsigned char *inbuf, *outbuf;
+  unsigned char *src, *dst;
+  char magic[256];
+  char file_name[1024];
+  unsigned last, count;
+  unsigned numZip;
+
+  /* check args (part one) */
+  if ( (argc < 2) || (0 == strcmp(argv[1],"-?") ) ) {
+    fprintf(stderr, "usage: %s epmfile ...\n", argv[0]);
+    return (argc != 2);
+  }
+
+  for (arg = 1; arg < argc; arg++) {
+
+    /* open file */
+    if (NULL == (fp = fopen(argv[arg],"r") ) ) {
+      fprintf(stderr, "%s: failed to open file %s for reading\n", 
+	      argv[0], argv[arg]);
+      return 1;
+    }
+
+    /* read header */
+    if (5 != fscanf(fp, "%s%d%d%d%d%*c", magic,&width,&height,&maxval,&depth) ) {
+      fprintf(stderr, "%s: Failed to read epm header\n",argv[0]);
+      return 1;
+    }
+    /* test magic */
+    if (0 != strcmp(magic,"PX")) {
+      if (0 == strncmp(magic, "PZ", 2) ) {
+	fprintf(stderr, "File \"%s\" is already compressed.\n", argv[arg]);
+	fclose(fp);
+	continue;
+      }
+      fprintf(stderr, "%s: Wrong magic word \"%s\".\n",argv[0],magic);
+      return 1;
+    }
+
+    /* calc number of pixel per layer */
+    n_pixel = width*height;
+    
+    /* alloc input and color buffer */
+    if ( (NULL == (inbuf  = malloc(depth*n_pixel*sizeof(char) ) ) ) ||
+	 (NULL == (outbuf = calloc(2*depth*n_pixel,sizeof(char) ) ) ) ) {
+      fprintf(stderr, "%s: Failed to alloc buffer\n",argv[0]);
+      return 1;
+    }
+    
+    /* read epm data */
+    if (depth*n_pixel != fread(inbuf, sizeof(char), depth*n_pixel, fp) ) {
+      perror(argv[0]);
+      return 1;
+    }
+
+    fclose (fp);
+    
+    /* clear byte count buffers */
+    memset (byteRaw, 0, sizeof (byteRaw) );
+    for (i=0; i<256; i++) {
+      byteZip[i] = 1;
+    }
+    /* create byte count table */
+    last = *inbuf;
+    count = 1;
+    for (src = inbuf+1; src < (inbuf + depth*n_pixel); src++) {
+      if (last == *src) {
+	count ++;
+      } else {
+        byteRaw[last] += count;
+	byteZip[last] += count / 255 + 2;
+	count = 1;
+	last = *src;
+      }
+    } 
+    /* store last byte */
+    byteRaw[last] += count;
+    byteZip[last] += count / 255 + 2;
+
+    /* check table */
+    dst = outbuf + 1;
+    numZip = 0;
+    for (i=0; i<256; i++) {
+      if (byteRaw[i] > byteZip[i]) {
+	storeByte[i] =  StoreZip;
+	numZip ++;
+	*dst = i;
+	dst ++;
+      } else {
+	storeByte[i] =  StoreRaw;
+      }
+    }
+    *outbuf = numZip;
+
+    /* convert data */
+    count = 1;
+    last = *inbuf;
+    for (src = inbuf+1; src < (inbuf + depth*n_pixel); src++) {
+      if (last == *src) {
+	count ++;
+      } else {
+	dst = storeByte[last] (dst, last, count);
+	last = *src;
+	count = 1;
+      }
+    }
+    dst = storeByte[last] (dst, last, count);
+    
+    fprintf (stderr, "File \"%s\": %6.1f%%.\n", argv[arg], 
+	     100. * (1. - (double)(dst-outbuf)/(src-inbuf) ) );
+
+    /* use compression only if better */
+    if ( (dst-outbuf) < (src - inbuf) ) {
+      /* rename old file */
+      sprintf (file_name, "%s~", argv[arg]);
+      if (rename (argv[arg], file_name)) {
+	fprintf (stderr, "Failed to create backup file \"%s\".\n",
+		 file_name);
+	return 1;
+      }
+      /* write new file */
+      if (NULL == (fp = fopen (argv[arg], "w") ) ) {
+	fprintf(stderr, "%s: failed to open file %s for writing\n", 
+		argv[0], argv[arg]);
+	return 1;
+      }
+      /* write header */
+      fprintf (fp, "PZ2\n");
+      fprintf (fp, "%d %d %d %d\n", width, height, maxval, depth);
+      fwrite (outbuf, sizeof(char), dst-outbuf, fp);
+      fclose (fp);
+    } else {
+      fprintf (stderr, "Skipping file \"%s\".\n", argv[arg]);
+    }
+    /* free buffers */
+    free (outbuf);
+    free (inbuf);
+  }
+  return 0;
+}
+
+
+
+
--- xblast-tnt-models-20050106.orig/debian/sprites/wuschel/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/wuschel/XBlast Robot.inc	
@@ -0,0 +1,450 @@
+//
+// XBlast Robot File
+//
+// (C) by Immanuel Halupczok <xblast@karimmi.de>
+// based on code and containing parts
+// (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+
+#include "frames.inc"
+
+//
+// froce field and other FX
+//
+#ifndef (activateForceField)
+  #declare activateForceField = 0;
+#end
+#ifndef (forceFieldPhase)
+  #declare forceFieldPhase = 0.0;
+#end
+
+//
+// sick player
+//
+#ifndef (playerIsSick)
+  #declare playerIsSick=0;
+#end
+
+//
+// additional colors
+//
+#ifndef (beltColor)
+#declare beltColor = color rgb <0.1,0.1,0.1>;
+#end
+
+//
+// no face (needed helmet for helmet camera)
+//
+#ifndef (noFace)
+#declare noFace = 0;
+#end
+
+#include "XBlastTexture.inc"
+
+
+
+
+#declare gesichtTexture =
+texture {
+  pigment {faceColor}
+  finish {Dull ambient ambientHigh}
+  #if (playerDamaged != 0)
+    normal {dents 1.0 scale 0.25}
+  #end
+}
+
+
+//
+// include force field
+//
+#if (activateForceField = 1)
+  #include "XBlast Force Field.inc"
+#end
+
+//
+// the head
+//
+
+#declare epsi = 0.0001;
+#declare armdicke = 0.15;
+#declare beindicke = 0.15;
+#declare RR = seed(0);
+#declare RRD = seed(1); // Zusatz-Random für damage
+
+
+#macro bogen(rgross, rklein, w1, w2)
+  intersection {
+    torus {rgross, rklein}
+    plane {x, 0 rotate w1*y}
+    plane {-x, 0 rotate w2*y}
+  }
+
+#end
+
+
+
+#declare haar = intersection {
+  bogen(0.7, 0.05, 0, 45)
+  rotate -90*z
+  translate <0, 0, 0.5>
+  texture {helmetTexture}
+}
+
+
+#macro Auge(richtung)
+union {
+  intersection {
+    sphere {<0, 0, 0>, 1.3}
+    plane {-z, 0}
+    texture {gesichtTexture}
+  }
+  sphere {<0, 0, 0>, 1
+    pigment {White * 1.1}
+    finish {Shiny}
+  }
+  intersection {
+    sphere {<0, 0, 0>, 1+epsi}
+    sphere {<0, 0, -1>, 0.5}
+    #if (playerDamaged)
+      pigment {White / 2}
+    #else
+      pigment {Black}
+    #end
+    finish {Shiny}
+    rotate richtung
+  }
+
+
+  scale <0.2,0.2,0.2>
+
+  
+//  texture {eyeTexture}
+}
+#end
+
+#declare LinkesOhr = difference {
+  sphere {<0,0,0> 0.3 scale <0.5,1,0.8>}
+  sphere {<-0.2,0,0> 0.2 scale <0.5,1,0.8>}
+}
+
+
+#declare PlayerHead = union {
+  union {
+    sphere {<0, 0, 0>, 0.8}
+    #if (playerDamaged)
+      intersection {
+        sphere {<0, 0, -0.8>, 0.3} // Nase
+	sphere {<0, 0, -0.6>, 0.4}
+	scale <1,1,1.2>
+      }
+    #else
+      sphere {<0, 0, -0.8>, 0.3 scale <1,1,1.2>} // Nase
+    #end
+    object { LinkesOhr translate <-0.75, 0, 0> }
+    object { LinkesOhr translate <-0.75, 0, 0> scale <-1, 1, 1>}
+    texture {gesichtTexture}
+  }
+  #if (playerDamaged)
+    object { Auge(<-15, 30, 0>) translate <-0.3, 0.3, -0.6> }
+    object { Auge(<35, 5, 0>) translate < 0.3, 0.3, -0.6> }
+  #else
+    object { Auge(<-5, 0, 0>) translate <-0.3, 0.3, -0.6> }
+    object { Auge(<-5, 0, 0>) translate < 0.3, 0.3, -0.6> }
+  #end
+
+  union {
+    #local ii = 0;
+    #while (ii < 60)
+      object {
+        haar
+	rotate (rand(RR)*60-30)*y
+	#if (playerDamaged)
+	  rotate (rand(RRD)*240 - 120)*y
+	#end
+	translate <rand(RR)*0.6-0.3, 0, rand(RR)*0.6-0.3>
+        translate <0, 0.8, 0>
+	rotate max(rand(RR),rand(RR))*80*x
+	rotate (rand(RR)*180-90)*y
+      }
+      #local ii = ii + 1;
+    #end
+  }
+
+  translate <0, 0.6, 0>
+  rotate headAngle
+  translate <0,-0.6, 0>
+}
+
+
+//
+// the body
+//
+#declare PlayerBody =
+union {
+  // main body
+  sphere {
+    <0,0,0>, 0.6
+    texture {bodyTexture}
+  }
+  cylinder {
+    <0, 0, 0>, <0, 1, 0>, 0.2
+    texture {gesichtTexture}
+  }
+}
+
+
+#declare PlayerRightHand =
+union {
+  sphere {
+    <0,0,0>, 0.2
+  }
+  texture {gesichtTexture}
+}
+
+#declare PlayerRightLowerArm =
+union {
+ object {
+    PlayerRightHand
+    translate <-0.6,0,0>
+  }
+  sphere {
+    <-0.4,0,0>, armdicke
+  }
+  cylinder {
+    <0, 0, 0> <-0.4, 0, 0> armdicke
+  }
+}
+
+#declare PlayerRightUpperArm =
+union {
+  object {
+    PlayerRightLowerArm
+    rotate rightLowerArmAngle
+    translate x*-0.5
+  }
+  union {
+    sphere {
+      <0,0,0>, armdicke
+    }
+    cylinder {
+      <0, 0, 0> <-0.4, 0, 0> armdicke
+    }
+    sphere {
+      <-0.4,0,0>, armdicke
+    }
+  }
+}
+
+#declare PlayerRightArm =
+union {
+  object {
+    PlayerRightUpperArm
+    rotate rightArmAngle
+  }
+/*  intersection {
+    plane  { -x, 0 }
+    sphere { <0,0,0>, 1 }
+    scale <0.6, 0.3, 0.3>
+  }*/
+  texture {armsLegsTexture}
+}
+
+//
+// Left arm of player, includings hands
+//
+
+#declare PlayerLeftHand =
+union {
+  sphere {
+    <0,0,0>, 0.2
+  }
+  texture {gesichtTexture}
+}
+
+#declare PlayerLeftLowerArm =
+union {
+ object {
+    PlayerLeftHand
+    translate <0.6,0,0>
+  }
+  sphere {
+    <0.4,0,0>, armdicke
+  }
+  cylinder {
+    <0, 0, 0> <0.4, 0, 0> armdicke
+  }
+}
+
+#declare PlayerLeftUpperArm =
+union {
+  object {
+    PlayerLeftLowerArm
+    rotate leftLowerArmAngle
+    translate x*0.4
+  }
+  union {
+    sphere {
+      <0,0,0>, armdicke
+    }
+    cylinder {
+      <0, 0, 0> <0.4, 0, 0> armdicke
+    }
+    sphere {
+      <0.4,0,0>, armdicke
+    }
+  }
+}
+
+#declare PlayerLeftArm =
+union {
+  object {
+    PlayerLeftUpperArm
+    rotate leftArmAngle
+  }
+/*  intersection {
+    plane  { x, 0 }
+    sphere { <0,0,0>, 1 }
+    scale <0.6, 0.3, 0.3>
+  }*/
+  texture {armsLegsTexture}
+}
+
+//
+// legs
+//
+
+#declare PlayerFoot =
+union {
+  intersection {
+    sphere { <0,0,0>, 1 }
+    plane  { -y, 0 }
+    scale <0.4,0.4,0.4>
+  }
+  texture {handsFeetTexture}
+}
+
+#declare PlayerLowerRightLeg =
+union {
+  object {
+    PlayerFoot
+    translate <0.0,-0.3,-0.1>
+    rotate rightFootAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,-0.4,0>, beindicke
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, beindicke
+  }
+}
+
+#declare PlayerUpperRightLeg =
+union {
+  object {
+    PlayerLowerRightLeg
+    rotate rightLowerLegAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,0,0>, beindicke
+  }
+  sphere {
+    <0,-0.4,0>, beindicke
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, beindicke
+  }
+}
+
+#declare PlayerRightLeg =
+object {
+    PlayerUpperRightLeg
+    rotate rightLegAngle
+    texture {armsLegsTexture}
+}
+
+
+
+#declare PlayerLowerLeftLeg =
+union {
+  object {
+    PlayerFoot
+    translate <0.0,-0.3,-0.1>
+    rotate leftFootAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,-0.4,0>, beindicke
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, beindicke
+  }
+}
+
+#declare PlayerUpperLeftLeg =
+union {
+  object {
+    PlayerLowerLeftLeg
+    rotate leftLowerLegAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,0,0>, beindicke
+  }
+  sphere {
+    <0,-0.4,0>, beindicke
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, beindicke
+  }
+}
+
+#declare PlayerLeftLeg =
+object {
+  PlayerUpperLeftLeg
+  rotate leftLegAngle
+  texture {armsLegsTexture}
+}
+
+
+
+#declare Player =
+union {
+  object {PlayerHead     translate < 0.00, 3.25, 0.00> }
+  object {PlayerBody     translate < 0.00, 1.70, 0.00> }
+  object {PlayerLeftArm  translate < 0.6, 1.9, 0.00> }
+  object {PlayerRightArm translate <-0.6, 1.9, 0.00> }
+  object {PlayerRightLeg translate <-0.30, 1.20, 0.00> }
+  object {PlayerLeftLeg  translate < 0.30, 1.20, 0.00> }
+#if (activateForceField = 1)
+  object {ForceField}
+#end
+  translate <0.0, -1.20, 0.0>
+  rotate bodyAngle
+  translate <0.0,  1.20, 0.0>
+  translate y*playerWalkHeight
+  rotate playerAngle
+  translate playerLocation
+}
+
+object {Player}
+
+
+//
+// end file "XBlast Robot.inc"//
--- xblast-tnt-models-20050106.orig/debian/sprites/ping/XBlast Robot.inc	
+++ xblast-tnt-models-20050106/debian/sprites/ping/XBlast Robot.inc	
@@ -0,0 +1,553 @@
+//
+// XBlast Robot File
+//
+// (C) by Daniela Lipps <...>
+// based on and containing code
+// (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
+//
+// This program 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; or (at your option)
+// any later version
+//
+// This program is distributed in the hope that it will be entertaining,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILTY 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 program; if not, write to the Free Software Foundation, Inc.
+// 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//
+
+#include "frames.inc"
+
+//
+// default value for angles (if not already defined)
+//
+#ifndef (leftLowerArmAngle)
+  #declare leftLowerArmAngle  = <  -15,   0, -30>;
+#end
+#ifndef (leftArmAngle)
+  #declare leftArmAngle       = <   15,  10, -45>;
+#end
+#ifndef (rightLowerArmAngle)
+  #declare rightLowerArmAngle = <  -15,   0,  30>;
+#end
+#ifndef (rightArmAngle)
+  #declare rightArmAngle      = <   15, -10,  45>;
+#end
+
+#ifndef (rightLowerLegAngle)
+  #declare rightLowerLegAngle = < - 25,  0,  0>;
+#end
+#ifndef (rightLegAngle)
+  #declare rightLegAngle      = < + 15, 15,  0>;
+#end
+#ifndef (leftLowerLegAngle)
+  #declare leftLowerLegAngle  = < - 25,  0,  0>;
+#end
+#ifndef (leftLegAngle)
+  #declare leftLegAngle       = < + 15,-15,  0>;
+#end
+
+#ifndef (rightFootAngle)
+  #declare rightFootAngle     = <    0,  0,  0>;
+#end
+#ifndef (leftFootAngle)
+  #declare leftFootAngle      = <    0,  0,  0>;
+#end
+
+#ifndef (headAngle)
+  #declare headAngle          = <    0,  0,  0>;
+#end
+#ifndef (bodyAngle)           
+  #declare bodyAngle          = <    0,  0,  0>;
+#end
+
+//
+// froce field and other FX
+//
+#ifndef (activateForceField)
+  #declare activateForceField = 0;
+#end
+#ifndef (forceFieldPhase)
+  #declare forceFieldPhase = 0.0;
+#end
+
+//
+// Damaged Player
+//
+#ifndef (playerDamaged)
+  #declare playerDamaged=0;
+#end
+
+//
+// sick player
+//
+#ifndef (playerIsSick)
+  #declare playerIsSick=0;
+#end
+
+//
+// additional colors
+//
+#ifndef (beltColor)
+#declare beltColor = color rgb <0.1,0.1,0.1>;
+#end
+
+//
+// no face (needed helmet for helmet camera)
+//
+#ifndef (noFace)
+#declare noFace = 0;
+#end
+
+#include "XBlastTexture.inc"
+
+//
+// some useful shapes
+//
+#declare helmetSphere =
+superellipsoid {
+  <1, 0.9>
+  rotate x*90
+}
+
+#declare crossEye = 
+intersection {
+  cylinder {
+    <0,0,0>, <0,0,-1.5>, 1
+    scale <0.2,0.3,1>
+  }
+  union {
+    box {
+      <-0.05,-1,-1>          
+      < 0.05, 1, 1>
+      rotate z*37.5          
+    }
+    box {
+      <-0.05,-1,-1>          
+      < 0.05, 1, 1>
+      rotate z*-37.5          
+    }
+  }
+}
+
+//
+// include force field
+//
+#if (activateForceField = 1)
+  #include "XBlast Force Field.inc"
+#end
+
+//
+// the head
+//
+#declare PlayerHead =
+union {
+  // head
+      object {
+        helmetSphere
+        scale <0.8,0.8,0.8>
+      }
+  #if (noFace = 0)
+  // right eye
+    intersection {
+      sphere {
+        <0,0,0>, 1
+        scale <0.77,0.77,0.77>
+	translate <0,0,-0.1>
+      }
+      #if (playerDamaged) 
+	object {
+          crossEye
+          translate <-0.3,0.2,0>
+        }
+        pigment {color Black}
+        finish {Glossy}
+      #else
+        cylinder {
+          <0,0,0>, <0,0,-1.5>, 0.8
+          scale <0.2,0.3,1>
+          translate <-0.3,0.2,0>
+        }
+        texture {
+          eyeTexture
+          translate <-0.3,0.2,0>
+        }
+      #end   
+    }
+    // left eye
+    intersection {
+      sphere {
+        <0,0,0>, 1
+        scale <0.77,0.77,0.77>
+	translate <0,0,-0.1>
+      }
+      #if (playerDamaged) 
+	object {
+          crossEye
+          translate <0.3,0.2,0>
+        }
+        pigment {color Black}
+        finish {Glossy}
+      #else
+        cylinder {
+          <0,0,0>, <0,0,-1.5>, 0.8
+          scale <0.2,0.3,1>
+          translate < 0.3,0.2,0>
+        }
+        texture {
+          eyeTexture
+          translate < 0.3,0.2,0>
+        }
+      #end   
+    }
+    // nose / beak
+   object {
+      cone {
+        <0,-0.1,0>,0.8, <0,-0.3,-1.2>, 0
+        scale <0.82,0.82,0.82>
+	translate <0,0,-0.2>
+      }
+        texture {
+          faceTexture
+        }
+    }
+  #end
+  
+  texture {bodyTexture}
+  translate <0, 0.2125,-0.275>
+  rotate headAngle
+  translate <0,-0.2125, 0.275>
+}
+
+//
+// the body
+//
+#declare PlayerBody =
+union {
+  // main body
+  sphere {
+    <0,0,0>, 1
+    scale <1,1.6,1>
+    translate <0,-0.3,0>
+  }
+  // neck
+  cone {
+    <0,0.5,0>,0.8,<0,1.5,0>,0.65
+  }
+  
+  // tail
+  cone {
+    <0,0,0>,1,<0,0,1.4>,0
+    translate <0,-1,0>
+  }
+
+  // belly
+  intersection {
+    sphere {
+     <0,0,0>, 1
+     scale <1.01,1.61,1.01>
+     translate <0,-0.3,0>
+    }
+    cylinder {
+      <0,0,0>,<0,0,-2>,0.85
+      scale <0.8,0,0>
+      translate <0,-0.3,0>
+    }
+    texture {helmetTexture}
+  }
+  texture {bodyTexture}
+}
+
+
+#declare PlayerRightHand =
+union {
+  // main part
+  sphere {
+    <0,0,0>, 1
+    scale <0.2,0.125,0.25>
+  }
+  // thumb
+  sphere {
+    <0,0,0>, 1
+    scale <0.1,0.1,0.25>
+    rotate y*60
+    rotate z*30
+    translate <-0.10,-0.05,-0.15>
+  }
+  // fingers
+  sphere {
+    <0,0,0>, 1
+    scale <0.3,0.125,0.2>
+    translate <-0.20,-0.025,0.05>
+    rotate z*30
+  }
+  // additional objects 
+  #ifdef (rightHandObject)
+    object {rightHandObject translate <-0.20,-0.225,0.05>}
+  #end
+  texture {bodyTexture}
+  rotate z*-15
+}
+
+#declare PlayerRightLowerArm =
+union {
+ object {
+    PlayerRightHand
+    translate <-0.525,0,0>
+  }
+  sphere {
+    <-0.4,0,0>, 0.225
+  }
+  cone {
+    <-0.024609375, 0, 0>, 0.261343889659
+    <-0.421093750, 0, 0>, 0.2240090482792
+  }
+}
+
+#declare PlayerRightUpperArm =
+union {
+  object {
+    PlayerRightLowerArm
+    rotate rightLowerArmAngle
+    translate x*-0.4
+  }
+  union {
+    sphere {
+      <0,0,0>, 0.3
+    }
+    cone {
+      <-0.028125000, 0, 0>, 0.2986787310389
+      <-0.424609375, 0, 0>, 0.261343889659
+    }
+    sphere {
+      <-0.4,0,0>, 0.2625
+    }
+  }
+}
+
+#declare PlayerRightArm =
+union {
+  object {
+    PlayerRightUpperArm
+    rotate rightArmAngle
+  }
+  intersection {
+    plane  { -x, 0 }
+    sphere { <0,0,0>, 1 }
+    scale <0.6, 0.3, 0.3>
+  }
+  texture {bodyTexture}
+}
+
+//
+// Left arm of player, includings hands
+//
+
+#declare PlayerLeftHand =
+union {
+  sphere {
+    <0,0,0>, 1
+    scale <0.2,0.125,0.25>
+  }
+  // thumb
+  sphere {
+    <0,0,0>, 1
+    scale <0.1,0.1,0.25>
+    rotate y*-60
+    rotate z*-30
+    translate <0.10,-0.05,-0.15>
+  }
+  sphere {
+    <0,0,0>, 1
+    scale <0.3,0.125,0.2>
+    translate <0.20,-0.025,0.05>
+    rotate z*-30
+  }
+  // additional objects 
+  #ifdef (leftHandObject) 
+    object {leftHandObject translate < 0.20,-0.225,0.05>}
+  #end
+  texture {bodyTexture}
+  rotate z*15
+}
+
+#declare PlayerLeftLowerArm =
+union {
+ object {
+    PlayerLeftHand
+    translate <0.525,0,0>
+  }
+  sphere {
+    <0.4,0,0>, 0.225
+  }
+  cone {
+    <0.024609375, 0, 0>, 0.261343889659
+    <0.421093750, 0, 0>, 0.2240090482792
+  }
+}
+
+#declare PlayerLeftUpperArm =
+union {
+  object {
+    PlayerLeftLowerArm
+    rotate leftLowerArmAngle
+    translate x*0.4
+  }
+  union {
+    sphere {
+      <0,0,0>, 0.3
+    }
+    cone {
+      <0.028125000, 0, 0>, 0.2986787310389
+      <0.424609375, 0, 0>, 0.261343889659
+    }
+    sphere {
+      <0.4,0,0>, 0.2625
+    }
+  }
+}
+
+#declare PlayerLeftArm =
+union {
+  object {
+    PlayerLeftUpperArm
+    rotate leftArmAngle
+  }
+  intersection {
+    plane  { x, 0 }
+    sphere { <0,0,0>, 1 }
+    scale <0.6, 0.3, 0.3>
+  }
+  texture {bodyTexture}
+}
+
+//
+// legs
+//
+
+#declare PlayerFoot =
+union {
+  intersection {
+    sphere { <0,0,0>, 1 }
+    plane  { -y, 0 }
+    scale <0.4,0.3,0.5>
+  }
+  intersection {
+    sphere { <0,0,0>, 1 }
+    plane  { y, 0 }
+    scale <0.4,0.1,0.5>
+  }
+  texture {handsFeetTexture}
+}
+
+#declare PlayerLowerRightLeg =
+union {
+  object {
+    PlayerFoot
+    translate <0.0,-0.3,-0.1>
+    rotate rightFootAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerUpperRightLeg =
+union {
+  object {
+    PlayerLowerRightLeg
+    rotate rightLowerLegAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,0,0>, 0.3
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerRightLeg =
+object {
+    PlayerUpperRightLeg
+    rotate rightLegAngle
+    texture {bodyTexture}
+}
+
+
+
+#declare PlayerLowerLeftLeg =
+union {
+  object {
+    PlayerFoot
+    translate <0.0,-0.3,-0.1>
+    rotate leftFootAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerUpperLeftLeg =
+union {
+  object {
+    PlayerLowerLeftLeg
+    rotate leftLowerLegAngle
+    translate <0.0,-0.4,0.0>
+  }
+  sphere {
+    <0,0,0>, 0.3
+  }
+  sphere {
+    <0,-0.4,0>, 0.3
+  }
+  cylinder {
+    <0,0,0>, <0,-0.4,0>, 0.3
+  }
+}
+
+#declare PlayerLeftLeg =
+object {
+  PlayerUpperLeftLeg
+  rotate leftLegAngle
+  texture {bodyTexture}
+}
+#declare Player =
+union {
+  object {PlayerHead     translate < 0.00, 3.25, 0.00> }
+  object {PlayerBody     translate < 0.00, 1.70, 0.00> }
+  object {PlayerLeftArm  translate < 0.6, 1.9, 0.00> }
+  object {PlayerRightArm translate <-0.6, 1.9, 0.00> }
+  object {PlayerRightLeg translate <-0.30, 1.20, 0.00> }
+  object {PlayerLeftLeg  translate < 0.30, 1.20, 0.00> }
+#if (activateForceField = 1)
+  object {ForceField}
+#end
+  translate <0.0, -1.20, 0.0>
+  rotate bodyAngle
+  translate <0.0,  1.20, 0.0>
+  translate y*playerWalkHeight
+  rotate playerAngle
+  translate playerLocation
+}
+
+object {Player}
+
+//
+// end file "XBlast Robot.inc"//