--- 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 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 Tue, 21 Aug 2007 18:14:19 +0200 + +xblast-tnt-models (20050106-1) unstable; urgency=low + + * New upstream release. + + -- Gerfried Fuchs Fri, 07 Jan 2005 13:25:30 +0100 + +xblast-tnt-models (20040907-1) unstable; urgency=low + + * Initial Release. + + -- Gerfried Fuchs 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 +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 +# 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 on +Sun, 15 Aug 2004 16:41:58 +0200. + +It was downloaded from + +Upstream Authors: +================= +Current maintainers: + Fernando Benites + Gerfried Fuchs +Original author: + Oliver Vogel + + +Copyright: +========== + Copyright by Oliver Vogel + + 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 + + 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 + Copyright 2003 by Bernhard R. Link + + 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 + Copyright by Daniela Lipps + + 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 + Copyright by Immanuel Halupczok + + 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 + + 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 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. + +for the images: + +make conv. + +To delete temporar files: + +make clean + +For faster low quality (BigWinner is still Big): + +make QUALITY=LoQ.ini conv. + + +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. + + + Copyright (C) + + 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. + + , 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 ". + +The common infrastructure (consisting in large pieces or even whole +files out of parts from the original scripts) was written by: + Bernhard R. Link , + Immanuel Halupzok + Mark Weyer + +Design and coding of the characters: + normal: + Oliver Vogel + golem, insect, sticky, tutorial, : + Mark Wayer + wusel, wuschel: + Immanuel Halupzok + felix (which is only 'normal' with bad ears): + Bernhard R. Link + ping (not considered finished): + Daniele Lipps + --- 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 +// +/// +//// Previously these transformations had been: +/// +// #if (playerWalking) +// rotate 45*sin(playerWalkingTime*2*pi)*y +// #end +// scale Eye_size +// translate + } +#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 + } +#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 + } +#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 + } +#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 +// +/// +//// Previously these transformations had been: +/// +// #if (playerWalking) +// rotate 45*sin(playerWalkingTime*2*pi)*y +// #end +// scale Eye_size +// translate + } +#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 } + transform tr + } +#end + +#macro stickk(p1,p2,c) + cylinder { + p1 p2 0.15 + pigment {rgb } + } +#end + +#macro round(p,c) + sphere { + p default_rad + pigment {rgb } + } +#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 +// +// 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( + 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 +// +// 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 +// +// 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*-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} 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 +<-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 + +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 + } + #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 + -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_length1) + #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 = + ; + #declare right_ankle_pos = + <-hip_width/2, + ankle_rad+sin(playerWalkingTime_*2*pi), + (0.25-playerWalkingTime_)*2*step_length>; + #else + #declare left_ankle_pos = + ; + #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 = ; + #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 = ; + #declare right_ankle_pos = <-hip_width/2,ankle_rad,0>; + #declare hip_pos = <0,standing_hip_height,0>; + #declare left_hip_pos = ; + #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 = + ; + #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 : + ) + #declare right_wrist_pos = (right_shoulder_pos.y>arm_length+wrist_rad ? + right_shoulder_pos-arm_length*y : + ) + + #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 = ; + #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 = ; + #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} " + 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 +#include + +#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 +#include +#include + +#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. + + + Copyright (C) 19yy + + 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. + + , 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 +#include +#include +#include + +#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 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 +#include +#include + +/* + * 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; yheight; 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 +#include +#include + +/* + * 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; yheight; 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 +#include +#include +#include + +#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 +#include + +#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 (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 +#include +#include + +#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 +#include +#include +#include + +#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 +#include +#include +#include + + +#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 +// 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 + 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"//