Import jumpnbump/1.50upstream/1.50
authorAnsgar Burchardt <ansgar-guest@alioth.debian.org>
Sun, 7 Dec 2008 23:58:46 +0000 (8 00:58 +0100)
committerAnsgar Burchardt <ansgar-guest@alioth.debian.org>
Mon, 8 Dec 2008 00:01:50 +0000 (8 01:01 +0100)
Source: Debian Etch (http://packages.debian.org/etch/jumpnbump)

90 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
LINKS [new file with mode: 0644]
Makefile [new file with mode: 0644]
PB/.DS_Store [new file with mode: 0644]
PB/English.lproj/InfoPlist.strings [new file with mode: 0644]
PB/JumpNBump.pbproj/.DS_Store [new file with mode: 0644]
PB/JumpNBump.pbproj/ben.pbxuser [new file with mode: 0644]
PB/JumpNBump.pbproj/project.pbxproj [new file with mode: 0644]
PB/SDLMain.h [new file with mode: 0644]
PB/SDLMain.m [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
VisualC6/gobpack/gobpack.dsp [new file with mode: 0644]
VisualC6/jumpnbump.dsp [new file with mode: 0644]
VisualC6/jumpnbump.dsw [new file with mode: 0644]
VisualC6/pack/pack.dsp [new file with mode: 0644]
VisualC6/resource.h [new file with mode: 0644]
VisualC6/ressource.rc [new file with mode: 0644]
VisualC6/unpack/unpack.dsp [new file with mode: 0644]
XF86Config-4 [new file with mode: 0644]
config.h [new file with mode: 0644]
data/Makefile [new file with mode: 0644]
data/bump.mod [new file with mode: 0644]
data/calib.dat [new file with mode: 0644]
data/death.smp [new file with mode: 0644]
data/fly.smp [new file with mode: 0644]
data/font.pcx [new file with mode: 0644]
data/font.txt [new file with mode: 0644]
data/jump.mod [new file with mode: 0644]
data/jump.smp [new file with mode: 0644]
data/level.pcx [new file with mode: 0644]
data/levelmap.txt [new file with mode: 0644]
data/mask.pcx [new file with mode: 0644]
data/menu.pcx [new file with mode: 0644]
data/menumask.pcx [new file with mode: 0644]
data/numbers.pcx [new file with mode: 0644]
data/numbers.txt [new file with mode: 0644]
data/objects.pcx [new file with mode: 0644]
data/objects.txt [new file with mode: 0644]
data/pack.bat [new file with mode: 0644]
data/rabbit.pcx [new file with mode: 0644]
data/rabbit.txt [new file with mode: 0644]
data/scores.mod [new file with mode: 0644]
data/splash.smp [new file with mode: 0644]
data/spring.smp [new file with mode: 0644]
dj.h [new file with mode: 0644]
dos/gfx.S [new file with mode: 0644]
dos/gfx.c [new file with mode: 0644]
dos/input.c [new file with mode: 0644]
dos/interrpt.c [new file with mode: 0644]
dos/libdj.a [new file with mode: 0644]
filter.c [new file with mode: 0644]
filter.h [new file with mode: 0644]
fireworks.c [new file with mode: 0644]
globals.pre [new file with mode: 0644]
gob.txt [new file with mode: 0644]
indent.txt [new file with mode: 0644]
jnbmenu.pre [new file with mode: 0644]
jumpnbump-kdialog [new file with mode: 0755]
jumpnbump-xdialog [new file with mode: 0755]
jumpnbump.6 [new file with mode: 0644]
jumpnbump.fbcon [new file with mode: 0755]
jumpnbump.html [new file with mode: 0644]
jumpnbump.ico [new file with mode: 0644]
jumpnbump.svgalib [new file with mode: 0755]
levelmaking/jumpnbump_levelmaking.htm [new file with mode: 0644]
levelmaking/level.pcx [new file with mode: 0644]
levelmaking/making1.gif [new file with mode: 0644]
levelmaking/making2.gif [new file with mode: 0644]
levelmaking/making3.gif [new file with mode: 0644]
levelmaking/pack.gif [new file with mode: 0644]
main.c [new file with mode: 0644]
menu.c [new file with mode: 0644]
modify/Makefile [new file with mode: 0644]
modify/gobpack.c [new file with mode: 0644]
modify/jnbpack.c [new file with mode: 0644]
modify/jnbunpack.c [new file with mode: 0644]
readme-win32.txt [new file with mode: 0644]
readme.txt [new file with mode: 0644]
sdl/Makefile [new file with mode: 0644]
sdl/gfx.c [new file with mode: 0644]
sdl/input.c [new file with mode: 0644]
sdl/interrpt.c [new file with mode: 0644]
sdl/jumpnbump128.xpm [new file with mode: 0644]
sdl/jumpnbump32.xpm [new file with mode: 0644]
sdl/jumpnbump64.xpm [new file with mode: 0644]
sdl/sound.c [new file with mode: 0644]
source.txt [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..aa878b4
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,62 @@
+Jump'n'Bump is done by many people. The authors and contributors are listed
+below. Invented and implemented was Jump'n'Bump by Brainchild Design as a
+DOS game. Later the source was released and Chuck Mason did the port to
+Linux using SDL. Some people contributed various stuff to it.
+The current maintainer is Florian Schulze.
+
+Mattias Brynervall <matbr656@student.liu.se>
+  Original DOS code.
+
+Andreas Brynervall <andreasb@acc.umu.se>
+Martin Magnusson <marma102@student.liu.se>
+  Original Graphics.
+
+Anders Nilsson <equel@swipnet.se>
+  Original Music.
+
+Chuck Mason <cemason@users.sourceforge.net>
+  The first Linux port using SDL.
+
+Philippe Brochard <phil.brochard@wanadoo.fr>
+  The jbmenu.tcl script.
+
+Joe Wreschnig <piman@sacredchao.net>
+  The manual page
+
+"timecop" <timecop@japan.co.jp>
+  pack and unpack.
+
+Jon Atkins <jcatki@home.com>
+  The network code of the Linux version.
+
+Gürkan Sengün <gurkan@linuks.mine.nu>
+  Made the website http://www.jumpbump.mine.nu/ and hosts it.
+  A few patches here and there.
+
+Ricardo Cruz <rick2@aeiou.pt>
+  AI Players, level menu for X and KDE dialog.
+
+Florian Schulze <crow@icculus.org>
+  Cleaned up code. Added scaling graphics mode (800x512). Fixed sound.
+
+Ben Hines <bhines@alumni.ucsd.edu>
+  MacOS X fixes.
+
+Gil Megidish
+  Made the Kaillera network version.
+
+David García Rodríguez <bkron@hotmail.com>
+  Level making tutorial.
+
+Ryan C. Gordon <icculus@clutteredmind.org>
+  Made networking possible again.
+
+Martin Willemoes Hansen <mwh@sysrq.dk>
+  The python frontend.
+  http://mwh.sysrq.dk/programs/programs.phtml
+
+Alessandro Gatti <a.gatti@tiscali.it>
+  FreeBSD fixes.
+
+Ulrich Eckhardt <uli@doommachine.dyndns.org>
+  Cleanup and small patches for enhanced networking.
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
+++ b/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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..204bada
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,92 @@
+16 Jun 2004 - 1.50
+  - AI Bunnies
+  - Contributed level selectors for KDE and X
+
+21 Mar 2003 - 1.41
+  - new scaling filter which works with 8bit graphics. Removed the old scaler
+    completely, now fading and everything else works in scaled up mode.
+  - another attempt to fix sound on big endian systems.
+
+Sep 2002 - 1.40
+  - manpage update
+  - joystick support added
+  - freebsd ports (thanks rigel from #demoscene)
+  - a while back network code using kaillera was send to me by Gil Megidish,
+    it's not enabled, because it doesn't seem to work good enough.
+
+17 Aug 2002 - 1.39
+  - added -noflies option
+  - added client/server networking. Thanks to Ryan C. Gordon who did the base
+    work for it.
+
+11 Aug 2002 - 1.35
+   - gobpack added
+   - documentation updated
+   - little fixes here and there
+
+2 Aug 2002 - 1.34
+   - fixed too dark font
+   - attempt to fix sound and scaleup on big endian systems
+
+5 Jul 2002 - 1.33
+   - added -musicnosound option
+
+15 Jun 2002 - 1.32
+   - fix for off by one in -mirror
+     add icon for application (macosx,windows,x)
+
+10 Jun 2002 - 1.31
+   - rename jbmenu.tcl to jnbmenu.tcl, make it +x, add
+     options for -mirror and -scaleup
+     update manpage and -h with -scaleup
+     update makefiles accordingly
+     rename pack/unpack to jnbpack/jnbunpack
+     set gametitle
+
+9 Jun 2002 - 1.3
+   - Added -mirror commandline option to play the level mirrored
+   - Deleting temporary music file
+
+- 1.2
+   - MacOS X fixes
+   - some endian fixes
+
+24 Feb 2002 - 1.1
+   - fixed timing problems
+   - fixed crash when temporary music can't be written
+
+22 Feb 2002 - 1.0
+   - working sound
+   - new scaling graphics mode
+   - cleaned up code
+
+===========================================================================
+This is the changelog of the linux version from which this port is derived.
+
+25 Feb 2001 - 0.69
+   initial linux port, worked fine with freebsd too (chuck mason)
+
+26 Feb 2001 - 0.69
+   made sound be played (chuck mason)
+
+03 Mar 2001 - 0.70
+   fixing fps (longislandman)
+   changing player input: 4 player at one keyboard (tarzeau)
+   pack/unpack which packs/unpacks the leveldata (timecop)
+
+?? Mar 2001 - 0.70
+   network code has been written (longislandman, jonatkins.org)
+   it werks but we won't release it until it's good for the masses,
+   for test and fun play come join #keen on irc.linux.com
+   (be sure to have one udp port open if you have a firewall,
+   and also have sdl-mixer, sdl and sdl-net)
+
+16 Mar 2001 - 0.70
+   did a new screenshot http://jumpbump.mine.nu/port/jumpbumprocks.jpg
+   wrote a little faq http://jumpbump.mine.nu/port/jumpbumpfaq.txt
+   put online level-selector-menu http://jumpbump.mine.nu/port/jbmenu.tcl
+   (received from philippe brochard, thank you!)
+
+20 Mar 2001 - 0.72
+   repackaged tarballs with network code jnb-net.tar.gz,
+   menusystem and unpack/pack
diff --git a/LINKS b/LINKS
new file mode 100644 (file)
index 0000000..4236096
--- /dev/null
+++ b/LINKS
@@ -0,0 +1,8 @@
+http://www.jumpbump.mine.nu/
+http://www.icculus.org/jumpnbump/
+http://freshmeat.net/projects/jumpnbump/
+http://www.geocities.com/bkron2000
+http://bloodybunnies.8m.com/
+http://gohanz.www7.50megs.com/jumpbump/
+http://brainchilddesign.com/games/jumpnbump/index.html
+http://www.libsdl.org/
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..cef00ca
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,59 @@
+SDL_CFLAGS = `sdl-config --cflags`
+SDL_LIBS = `sdl-config --libs`
+CFLAGS = -Wall -O2 -ffast-math -funroll-loops -Dstricmp=strcasecmp \
+       -Dstrnicmp=strncasecmp -DUSE_SDL -DNDEBUG -I. $(SDL_CFLAGS) -DUSE_NET
+LIBS = -lm $(SDL_LIBS) -lSDL_mixer -lSDL_net
+SDL_TARGET = sdl.a
+MODIFY_TARGET = gobpack jnbpack jnbunpack
+OBJS = fireworks.o main.o menu.o filter.o
+TARGET = jumpnbump
+BINARIES = $(TARGET) jumpnbump.svgalib jumpnbump.fbcon $(MODIFY_TARGET) \
+       jnbmenu.tcl
+PREFIX ?= /usr/local
+
+.PHONY: data
+
+all: $(BINARIES)
+
+$(SDL_TARGET): globals.h
+       cd sdl && make
+
+$(MODIFY_TARGET): globals.h
+       cd modify && make
+
+$(TARGET): $(OBJS) $(SDL_TARGET) data globals.h
+       $(CC) -o $(TARGET) $(OBJS) $(LIBS) $(SDL_TARGET)
+
+$(OBJS): globals.h
+
+globals.h: globals.pre
+       sed -e "s#%%PREFIX%%#$(PREFIX)#g" < globals.pre > globals.h
+
+jnbmenu.tcl: jnbmenu.pre
+       sed -e "s#%%PREFIX%%#$(PREFIX)#g" < jnbmenu.pre > jnbmenu.tcl
+
+data: jnbpack
+       cd data && make
+
+clean:
+       cd sdl && make clean
+       cd modify && make clean
+       cd data && make clean
+       rm -f $(TARGET) *.o globals.h jnbmenu.tcl
+
+install:
+       mkdir -p $(PREFIX)/games/
+       mkdir -p $(PREFIX)/share/jumpnbump/
+       mkdir -p $(PREFIX)/share/man/man6/
+       install -o root -g games -m 755 $(BINARIES) $(PREFIX)/games/
+       install -o root -g games -m 644 data/jumpbump.dat \
+       $(PREFIX)/share/jumpnbump/jumpbump.dat
+       install -o root -g root -m 644 jumpnbump.6 $(PREFIX)/share/man/man6/
+
+uninstall:
+       cd $(PREFIX)/games && rm -f $(BINARIES)
+       rm -rf $(PREFIX)/share/jumpnbump
+       rm -f $(PREFIX)/share/man/man6/jumpnbump.6
+
+doc:
+       rman jumpnbump.6 -f HTML >jumpnbump.html
diff --git a/PB/.DS_Store b/PB/.DS_Store
new file mode 100644 (file)
index 0000000..a9c4092
Binary files /dev/null and b/PB/.DS_Store differ
diff --git a/PB/English.lproj/InfoPlist.strings b/PB/English.lproj/InfoPlist.strings
new file mode 100644 (file)
index 0000000..ae9592a
Binary files /dev/null and b/PB/English.lproj/InfoPlist.strings differ
diff --git a/PB/JumpNBump.pbproj/.DS_Store b/PB/JumpNBump.pbproj/.DS_Store
new file mode 100644 (file)
index 0000000..12e20a1
Binary files /dev/null and b/PB/JumpNBump.pbproj/.DS_Store differ
diff --git a/PB/JumpNBump.pbproj/ben.pbxuser b/PB/JumpNBump.pbproj/ben.pbxuser
new file mode 100644 (file)
index 0000000..d06efee
--- /dev/null
@@ -0,0 +1,1146 @@
+// !$*UTF8*$!
+{
+       29B97313FDCFA39411CA2CEA = {
+               activeBuildStyle = 4A9504CCFFE6A4B311CA0CBA;
+               activeExecutable = F5CA6AF4026B5039012A168D;
+               activeTarget = 29B97326FDCFA39411CA2CEA;
+               addToTargets = (
+                       29B97326FDCFA39411CA2CEA,
+               );
+               breakpoints = (
+                       F5C435BB026C8C7E012A168D,
+                       F5C435BC026C8C93012A168D,
+                       F5C435BD026C8CBC012A168D,
+                       F5C435BE026C8CE2012A168D,
+                       F5C435BF026C8CE2012A168D,
+                       F5C435C0026C8FA8012A168D,
+                       F5C435C1026C9035012A168D,
+                       F5C435C3026C9AA7012A168D,
+                       F5C435C4026C9AC3012A168D,
+                       F5C435C5026C9AC3012A168D,
+                       F5C435C6026C9ADC012A168D,
+                       F5C435C7026C9AF1012A168D,
+                       F5C435C8026C9B29012A168D,
+                       F5C435C9026C9B29012A168D,
+                       F553E33602721C3D012A168D,
+               );
+               executables = (
+                       F5CA6B21026B5378012A168D,
+                       F5CA6AF4026B5039012A168D,
+                       F5CA6B19026B535C012A168D,
+               );
+               perUserDictionary = {
+                       PBXPerProjectTemplateStateSaveDate = 41550216;
+                       "PBXTemplateGeometry-F5314676015831810DCA290F" = {
+                               ContentSize = "{685, 434}";
+                               LeftSlideOut = {
+                                       Collapsed = NO;
+                                       Frame = "{{0, 23}, {685, 411}}";
+                                       Split0 = {
+                                               ActiveTab = 2;
+                                               Collapsed = NO;
+                                               Frame = "{{0, 0}, {685, 411}}";
+                                               Split0 = {
+                                                       Frame = "{{0, 221}, {685, 190}}";
+                                               };
+                                               SplitCount = 1;
+                                               Tab0 = {
+                                                       Debugger = {
+                                                               Collapsed = NO;
+                                                               Frame = "{{0, 0}, {952, 321}}";
+                                                               Split0 = {
+                                                                       Frame = "{{0, 24}, {952, 297}}";
+                                                                       Split0 = {
+                                                                               Frame = "{{0, 0}, {468, 297}}";
+                                                                       };
+                                                                       Split1 = {
+                                                                               DebugVariablesTableConfiguration = (
+                                                                                       Name,
+                                                                                       126.803,
+                                                                                       Value,
+                                                                                       150.074,
+                                                                                       Summary,
+                                                                                       172.123,
+                                                                               );
+                                                                               Frame = "{{477, 0}, {475, 297}}";
+                                                                       };
+                                                                       SplitCount = 2;
+                                                               };
+                                                               SplitCount = 1;
+                                                               Tab0 = {
+                                                                       Frame = "{{0, 0}, {100, 50}}";
+                                                               };
+                                                               Tab1 = {
+                                                                       Frame = "{{0, 0}, {100, 50}}";
+                                                               };
+                                                               TabCount = 2;
+                                                               TabsVisible = YES;
+                                                       };
+                                                       Frame = "{{0, 0}, {952, 321}}";
+                                                       LauncherConfigVersion = 7;
+                                               };
+                                               Tab1 = {
+                                                       Frame = "{{0, 0}, {781, 452}}";
+                                                       LauncherConfigVersion = 3;
+                                                       Runner = {
+                                                               Frame = "{{0, 0}, {781, 452}}";
+                                                       };
+                                               };
+                                               Tab2 = {
+                                                       BuildMessageFrame = "{{0, 0}, {687, 149}}";
+                                                       BuildTranscriptFrame = "{{0, 158}, {687, 59}}";
+                                                       Frame = "{{0, 0}, {685, 215}}";
+                                               };
+                                               Tab3 = {
+                                                       Frame = "{{0, 0}, {612, 295}}";
+                                               };
+                                               TabCount = 4;
+                                               TabsVisible = NO;
+                                       };
+                                       SplitCount = 1;
+                                       Tab0 = {
+                                               Frame = "{{0, 0}, {300, 533}}";
+                                               GroupTreeTableConfiguration = (
+                                                       TargetStatusColumn,
+                                                       18,
+                                                       MainColumn,
+                                                       267,
+                                               );
+                                       };
+                                       Tab1 = {
+                                               ClassesFrame = "{{0, 0}, {280, 398}}";
+                                               ClassesTreeTableConfiguration = (
+                                                       PBXBookColumnIdentifier,
+                                                       20,
+                                                       PBXClassColumnIdentifier,
+                                                       237,
+                                               );
+                                               Frame = "{{0, 0}, {278, 659}}";
+                                               MembersFrame = "{{0, 407}, {280, 252}}";
+                                               MembersTreeTableConfiguration = (
+                                                       PBXBookColumnIdentifier,
+                                                       20,
+                                                       PBXMethodColumnIdentifier,
+                                                       236,
+                                               );
+                                       };
+                                       Tab2 = {
+                                               Frame = "{{0, 0}, {200, 100}}";
+                                       };
+                                       Tab3 = {
+                                               Frame = "{{0, 0}, {200, 100}}";
+                                               Split0 = {
+                                                       Frame = "{{0, 0}, {200, 45}}";
+                                                       TargetTreeTableConfiguration = (
+                                                               ActiveTarget,
+                                                               16,
+                                                               TargetName,
+                                                               168,
+                                                       );
+                                               };
+                                               Split1 = {
+                                                       BuildStyleTreeTableConfiguration = (
+                                                               IsActive,
+                                                               16,
+                                                               Name,
+                                                               169,
+                                                       );
+                                                       Frame = "{{0, 54}, {200, 46}}";
+                                               };
+                                               SplitCount = 2;
+                                       };
+                                       Tab4 = {
+                                               ExecutableTreeTableConfiguration = (
+                                                       ActiveExecutable,
+                                                       16,
+                                                       ExecutableName,
+                                                       217,
+                                               );
+                                               Frame = "{{0, 0}, {250, 100}}";
+                                       };
+                                       Tab5 = {
+                                               BreakpointsTreeTableConfiguration = (
+                                                       breakpointColumn,
+                                                       197,
+                                                       enabledColumn,
+                                                       31,
+                                               );
+                                               Frame = "{{0, 0}, {250, 100}}";
+                                       };
+                                       TabCount = 6;
+                                       TabsVisible = NO;
+                               };
+                               StatusViewVisible = YES;
+                               Template = F5314676015831810DCA290F;
+                               ToolbarVisible = YES;
+                               WindowLocation = "{432, 367}";
+                       };
+                       PBXWorkspaceContents = (
+                               {
+                                       LeftSlideOut = {
+                                               Split0 = {
+                                                       Split0 = {
+                                                               NavContent0 = {
+                                                                       bookmark = F57C7C90027A04E7012A168D;
+                                                                       history = (
+                                                                               F553E33702724F48012A168D,
+                                                                               F553E33802724F48012A168D,
+                                                                               F57C7C62027A0083012A168D,
+                                                                               F57C7C63027A0083012A168D,
+                                                                               F57C7C8E027A04E7012A168D,
+                                                                               F57C7C64027A0083012A168D,
+                                                                       );
+                                                                       prevStack = (
+                                                                               F553E33A02724F48012A168D,
+                                                                               F553E33B02724F48012A168D,
+                                                                               F57C7C66027A0083012A168D,
+                                                                               F57C7C67027A0083012A168D,
+                                                                               F57C7C68027A0083012A168D,
+                                                                               F57C7C6A027A0083012A168D,
+                                                                               F57C7C6B027A0083012A168D,
+                                                                               F57C7C6C027A0083012A168D,
+                                                                               F57C7C8F027A04E7012A168D,
+                                                                       );
+                                                               };
+                                                               NavCount = 1;
+                                                               NavGeometry0 = {
+                                                                       Frame = "{{0, 0}, {927, 655}}";
+                                                                       NavBarVisible = YES;
+                                                               };
+                                                       };
+                                                       SplitCount = 1;
+                                                       Tab0 = {
+                                                               Debugger = {
+                                                                       Split0 = {
+                                                                               SplitCount = 2;
+                                                                       };
+                                                                       SplitCount = 1;
+                                                                       TabCount = 2;
+                                                               };
+                                                               LauncherConfigVersion = 7;
+                                                       };
+                                                       Tab1 = {
+                                                               LauncherConfigVersion = 3;
+                                                               Runner = {
+                                                               };
+                                                       };
+                                                       TabCount = 4;
+                                               };
+                                               SplitCount = 1;
+                                               Tab1 = {
+                                                       OptionsSetName = "Hierarchy, all classes";
+                                               };
+                                               Tab3 = {
+                                                       SplitCount = 2;
+                                               };
+                                               TabCount = 6;
+                                       };
+                               },
+                               {
+                                       LeftSlideOut = {
+                                               Split0 = {
+                                                       Split0 = {
+                                                               NavCount = 1;
+                                                               NavGeometry0 = {
+                                                                       Frame = "{{0, 0}, {958, 190}}";
+                                                                       NavBarVisible = YES;
+                                                               };
+                                                       };
+                                                       SplitCount = 1;
+                                                       Tab0 = {
+                                                               Debugger = {
+                                                                       Split0 = {
+                                                                               SplitCount = 2;
+                                                                       };
+                                                                       SplitCount = 1;
+                                                                       TabCount = 2;
+                                                               };
+                                                               LauncherConfigVersion = 7;
+                                                       };
+                                                       Tab1 = {
+                                                               LauncherConfigVersion = 3;
+                                                               Runner = {
+                                                               };
+                                                       };
+                                                       TabCount = 4;
+                                               };
+                                               SplitCount = 1;
+                                               Tab1 = {
+                                                       OptionsSetName = "Hierarchy, all classes";
+                                               };
+                                               Tab3 = {
+                                                       SplitCount = 2;
+                                               };
+                                               TabCount = 6;
+                                       };
+                               },
+                               {
+                                       LeftSlideOut = {
+                                               Split0 = {
+                                                       Split0 = {
+                                                               NavCount = 1;
+                                                               NavGeometry0 = {
+                                                                       Frame = "{{0, 0}, {749, 262}}";
+                                                                       NavBarVisible = YES;
+                                                               };
+                                                       };
+                                                       SplitCount = 1;
+                                                       Tab0 = {
+                                                               Debugger = {
+                                                                       Split0 = {
+                                                                               SplitCount = 2;
+                                                                       };
+                                                                       SplitCount = 1;
+                                                                       TabCount = 2;
+                                                               };
+                                                               LauncherConfigVersion = 7;
+                                                       };
+                                                       Tab1 = {
+                                                               LauncherConfigVersion = 3;
+                                                               Runner = {
+                                                               };
+                                                       };
+                                                       TabCount = 4;
+                                               };
+                                               SplitCount = 1;
+                                               Tab1 = {
+                                                       OptionsSetName = "Hierarchy, all classes";
+                                               };
+                                               Tab3 = {
+                                                       SplitCount = 2;
+                                               };
+                                               TabCount = 6;
+                                       };
+                               },
+                       );
+                       PBXWorkspaceGeometries = (
+                               {
+                                       ContentSize = "{1174, 678}";
+                                       LeftSlideOut = {
+                                               ActiveTab = 0;
+                                               Collapsed = NO;
+                                               Frame = "{{0, 23}, {1174, 655}}";
+                                               Split0 = {
+                                                       Collapsed = NO;
+                                                       Frame = "{{247, 0}, {927, 655}}";
+                                                       Split0 = {
+                                                               Frame = "{{0, 0}, {927, 655}}";
+                                                       };
+                                                       SplitCount = 1;
+                                                       Tab0 = {
+                                                               Debugger = {
+                                                                       Collapsed = NO;
+                                                                       Frame = "{{0, 0}, {681, 289}}";
+                                                                       Split0 = {
+                                                                               Frame = "{{0, 24}, {681, 265}}";
+                                                                               Split0 = {
+                                                                                       Frame = "{{0, 0}, {333, 265}}";
+                                                                               };
+                                                                               Split1 = {
+                                                                                       DebugVariablesTableConfiguration = (
+                                                                                               Name,
+                                                                                               82.80298,
+                                                                                               Value,
+                                                                                               104.074,
+                                                                                               Summary,
+                                                                                               126.123,
+                                                                                       );
+                                                                                       Frame = "{{342, 0}, {339, 265}}";
+                                                                               };
+                                                                               SplitCount = 2;
+                                                                       };
+                                                                       SplitCount = 1;
+                                                                       Tab0 = {
+                                                                               Frame = "{{0, 0}, {100, 50}}";
+                                                                       };
+                                                                       Tab1 = {
+                                                                               Frame = "{{0, 0}, {100, 50}}";
+                                                                       };
+                                                                       TabCount = 2;
+                                                                       TabsVisible = YES;
+                                                               };
+                                                               Frame = "{{0, 0}, {681, 289}}";
+                                                               LauncherConfigVersion = 7;
+                                                       };
+                                                       Tab1 = {
+                                                               Frame = "{{0, 0}, {681, 120}}";
+                                                               LauncherConfigVersion = 3;
+                                                               Runner = {
+                                                                       Frame = "{{0, 0}, {681, 120}}";
+                                                               };
+                                                       };
+                                                       Tab2 = {
+                                                               BuildMessageFrame = "{{0, 0}, {683, 127}}";
+                                                               BuildTranscriptFrame = "{{0, 136}, {683, 100}}";
+                                                               Frame = "{{0, 0}, {681, 234}}";
+                                                       };
+                                                       Tab3 = {
+                                                               Frame = "{{0, 0}, {681, 238}}";
+                                                       };
+                                                       TabCount = 4;
+                                                       TabsVisible = NO;
+                                               };
+                                               SplitCount = 1;
+                                               Tab0 = {
+                                                       Frame = "{{0, 0}, {223, 655}}";
+                                                       GroupTreeTableConfiguration = (
+                                                               TargetStatusColumn,
+                                                               18,
+                                                               MainColumn,
+                                                               190,
+                                                       );
+                                               };
+                                               Tab1 = {
+                                                       ClassesFrame = "{{0, 0}, {250, 333}}";
+                                                       ClassesTreeTableConfiguration = (
+                                                               PBXBookColumnIdentifier,
+                                                               20,
+                                                               PBXClassColumnIdentifier,
+                                                               207,
+                                                       );
+                                                       Frame = "{{0, 0}, {248, 554}}";
+                                                       MembersFrame = "{{0, 342}, {250, 212}}";
+                                                       MembersTreeTableConfiguration = (
+                                                               PBXBookColumnIdentifier,
+                                                               20,
+                                                               PBXMethodColumnIdentifier,
+                                                               206,
+                                                       );
+                                               };
+                                               Tab2 = {
+                                                       Frame = "{{0, 0}, {217, 554}}";
+                                               };
+                                               Tab3 = {
+                                                       Frame = "{{0, 0}, {239, 554}}";
+                                                       Split0 = {
+                                                               Frame = "{{0, 0}, {239, 268}}";
+                                                               TargetTreeTableConfiguration = (
+                                                                       ActiveTarget,
+                                                                       16,
+                                                                       TargetName,
+                                                                       207,
+                                                               );
+                                                       };
+                                                       Split1 = {
+                                                               BuildStyleTreeTableConfiguration = (
+                                                                       IsActive,
+                                                                       16,
+                                                                       Name,
+                                                                       208,
+                                                               );
+                                                               Frame = "{{0, 277}, {239, 277}}";
+                                                       };
+                                                       SplitCount = 2;
+                                               };
+                                               Tab4 = {
+                                                       ExecutableTreeTableConfiguration = (
+                                                               ActiveExecutable,
+                                                               16,
+                                                               ExecutableName,
+                                                               217,
+                                                       );
+                                                       Frame = "{{0, 0}, {250, 554}}";
+                                               };
+                                               Tab5 = {
+                                                       BreakpointsTreeTableConfiguration = (
+                                                               breakpointColumn,
+                                                               197,
+                                                               enabledColumn,
+                                                               31,
+                                                       );
+                                                       Frame = "{{0, 0}, {250, 554}}";
+                                               };
+                                               TabCount = 6;
+                                               TabsVisible = YES;
+                                       };
+                                       StatusViewVisible = YES;
+                                       Template = 64ABBB4501FA494900185B06;
+                                       ToolbarVisible = YES;
+                                       WindowLocation = "{80, 223}";
+                               },
+                               {
+                                       ContentSize = "{958, 664}";
+                                       LeftSlideOut = {
+                                               Collapsed = NO;
+                                               Frame = "{{0, 23}, {958, 641}}";
+                                               Split0 = {
+                                                       ActiveTab = 2;
+                                                       Collapsed = NO;
+                                                       Frame = "{{0, 0}, {958, 641}}";
+                                                       Split0 = {
+                                                               Frame = "{{0, 451}, {958, 190}}";
+                                                       };
+                                                       SplitCount = 1;
+                                                       Tab0 = {
+                                                               Debugger = {
+                                                                       Collapsed = NO;
+                                                                       Frame = "{{0, 0}, {952, 321}}";
+                                                                       Split0 = {
+                                                                               Frame = "{{0, 24}, {952, 297}}";
+                                                                               Split0 = {
+                                                                                       Frame = "{{0, 0}, {468, 297}}";
+                                                                               };
+                                                                               Split1 = {
+                                                                                       DebugVariablesTableConfiguration = (
+                                                                                               Name,
+                                                                                               126.803,
+                                                                                               Value,
+                                                                                               150.074,
+                                                                                               Summary,
+                                                                                               172.123,
+                                                                                       );
+                                                                                       Frame = "{{477, 0}, {475, 297}}";
+                                                                               };
+                                                                               SplitCount = 2;
+                                                                       };
+                                                                       SplitCount = 1;
+                                                                       Tab0 = {
+                                                                               Frame = "{{0, 0}, {100, 50}}";
+                                                                       };
+                                                                       Tab1 = {
+                                                                               Frame = "{{0, 0}, {100, 50}}";
+                                                                       };
+                                                                       TabCount = 2;
+                                                                       TabsVisible = YES;
+                                                               };
+                                                               Frame = "{{0, 0}, {952, 321}}";
+                                                               LauncherConfigVersion = 7;
+                                                       };
+                                                       Tab1 = {
+                                                               Frame = "{{0, 0}, {781, 452}}";
+                                                               LauncherConfigVersion = 3;
+                                                               Runner = {
+                                                                       Frame = "{{0, 0}, {781, 452}}";
+                                                               };
+                                                       };
+                                                       Tab2 = {
+                                                               BuildMessageFrame = "{{0, 0}, {960, 116}}";
+                                                               BuildTranscriptFrame = "{{0, 125}, {960, 322}}";
+                                                               Frame = "{{0, 0}, {958, 445}}";
+                                                       };
+                                                       Tab3 = {
+                                                               Frame = "{{0, 0}, {612, 295}}";
+                                                       };
+                                                       TabCount = 4;
+                                                       TabsVisible = NO;
+                                               };
+                                               SplitCount = 1;
+                                               Tab0 = {
+                                                       Frame = "{{0, 0}, {300, 533}}";
+                                                       GroupTreeTableConfiguration = (
+                                                               TargetStatusColumn,
+                                                               18,
+                                                               MainColumn,
+                                                               267,
+                                                       );
+                                               };
+                                               Tab1 = {
+                                                       ClassesFrame = "{{0, 0}, {280, 398}}";
+                                                       ClassesTreeTableConfiguration = (
+                                                               PBXBookColumnIdentifier,
+                                                               20,
+                                                               PBXClassColumnIdentifier,
+                                                               237,
+                                                       );
+                                                       Frame = "{{0, 0}, {278, 659}}";
+                                                       MembersFrame = "{{0, 407}, {280, 252}}";
+                                                       MembersTreeTableConfiguration = (
+                                                               PBXBookColumnIdentifier,
+                                                               20,
+                                                               PBXMethodColumnIdentifier,
+                                                               236,
+                                                       );
+                                               };
+                                               Tab2 = {
+                                                       Frame = "{{0, 0}, {200, 100}}";
+                                               };
+                                               Tab3 = {
+                                                       Frame = "{{0, 0}, {200, 100}}";
+                                                       Split0 = {
+                                                               Frame = "{{0, 0}, {200, 45}}";
+                                                               TargetTreeTableConfiguration = (
+                                                                       ActiveTarget,
+                                                                       16,
+                                                                       TargetName,
+                                                                       168,
+                                                               );
+                                                       };
+                                                       Split1 = {
+                                                               BuildStyleTreeTableConfiguration = (
+                                                                       IsActive,
+                                                                       16,
+                                                                       Name,
+                                                                       169,
+                                                               );
+                                                               Frame = "{{0, 54}, {200, 46}}";
+                                                       };
+                                                       SplitCount = 2;
+                                               };
+                                               Tab4 = {
+                                                       ExecutableTreeTableConfiguration = (
+                                                               ActiveExecutable,
+                                                               16,
+                                                               ExecutableName,
+                                                               217,
+                                                       );
+                                                       Frame = "{{0, 0}, {250, 100}}";
+                                               };
+                                               Tab5 = {
+                                                       BreakpointsTreeTableConfiguration = (
+                                                               breakpointColumn,
+                                                               197,
+                                                               enabledColumn,
+                                                               31,
+                                                       );
+                                                       Frame = "{{0, 0}, {250, 100}}";
+                                               };
+                                               TabCount = 6;
+                                               TabsVisible = NO;
+                                       };
+                                       StatusViewVisible = YES;
+                                       Template = F5314676015831810DCA290F;
+                                       ToolbarVisible = YES;
+                                       WindowLocation = "{296, 113}";
+                               },
+                               {
+                                       ContentSize = "{773, 558}";
+                                       LeftSlideOut = {
+                                               Collapsed = NO;
+                                               Frame = "{{0, 23}, {773, 535}}";
+                                               Split0 = {
+                                                       ActiveTab = 0;
+                                                       Collapsed = NO;
+                                                       Frame = "{{24, 0}, {749, 535}}";
+                                                       Split0 = {
+                                                               Frame = "{{0, 273}, {749, 262}}";
+                                                       };
+                                                       SplitCount = 1;
+                                                       Tab0 = {
+                                                               Debugger = {
+                                                                       Collapsed = NO;
+                                                                       Frame = "{{0, 0}, {749, 267}}";
+                                                                       Split0 = {
+                                                                               Frame = "{{0, 24}, {749, 243}}";
+                                                                               Split0 = {
+                                                                                       Frame = "{{0, 0}, {366, 243}}";
+                                                                               };
+                                                                               Split1 = {
+                                                                                       DebugVariablesTableConfiguration = (
+                                                                                               Name,
+                                                                                               93.80298,
+                                                                                               Value,
+                                                                                               116.074,
+                                                                                               Summary,
+                                                                                               138.123,
+                                                                                       );
+                                                                                       Frame = "{{375, 0}, {374, 243}}";
+                                                                               };
+                                                                               SplitCount = 2;
+                                                                       };
+                                                                       SplitCount = 1;
+                                                                       Tab0 = {
+                                                                               Frame = "{{0, 0}, {100, 50}}";
+                                                                       };
+                                                                       Tab1 = {
+                                                                               Frame = "{{0, 0}, {100, 50}}";
+                                                                       };
+                                                                       TabCount = 2;
+                                                                       TabsVisible = YES;
+                                                               };
+                                                               Frame = "{{0, 0}, {749, 267}}";
+                                                               LauncherConfigVersion = 7;
+                                                       };
+                                                       Tab1 = {
+                                                               Frame = "{{0, 0}, {664, 208}}";
+                                                               LauncherConfigVersion = 3;
+                                                               Runner = {
+                                                                       Frame = "{{0, 0}, {664, 208}}";
+                                                               };
+                                                       };
+                                                       Tab2 = {
+                                                               BuildMessageFrame = "{{0, 0}, {666, 43}}";
+                                                               BuildTranscriptFrame = "{{0, 52}, {666, 0}}";
+                                                               Frame = "{{0, 0}, {664, 50}}";
+                                                       };
+                                                       Tab3 = {
+                                                               Frame = "{{0, 0}, {612, 295}}";
+                                                       };
+                                                       TabCount = 4;
+                                                       TabsVisible = NO;
+                                               };
+                                               SplitCount = 1;
+                                               Tab0 = {
+                                                       Frame = "{{0, 0}, {313, 531}}";
+                                                       GroupTreeTableConfiguration = (
+                                                               TargetStatusColumn,
+                                                               18,
+                                                               MainColumn,
+                                                               280,
+                                                       );
+                                               };
+                                               Tab1 = {
+                                                       ClassesFrame = "{{0, 0}, {280, 398}}";
+                                                       ClassesTreeTableConfiguration = (
+                                                               PBXBookColumnIdentifier,
+                                                               20,
+                                                               PBXClassColumnIdentifier,
+                                                               237,
+                                                       );
+                                                       Frame = "{{0, 0}, {278, 659}}";
+                                                       MembersFrame = "{{0, 407}, {280, 252}}";
+                                                       MembersTreeTableConfiguration = (
+                                                               PBXBookColumnIdentifier,
+                                                               20,
+                                                               PBXMethodColumnIdentifier,
+                                                               236,
+                                                       );
+                                               };
+                                               Tab2 = {
+                                                       Frame = "{{0, 0}, {200, 100}}";
+                                               };
+                                               Tab3 = {
+                                                       Frame = "{{0, 0}, {200, 557}}";
+                                                       Split0 = {
+                                                               Frame = "{{0, 0}, {200, 270}}";
+                                                               TargetTreeTableConfiguration = (
+                                                                       ActiveTarget,
+                                                                       16,
+                                                                       TargetName,
+                                                                       168,
+                                                               );
+                                                       };
+                                                       Split1 = {
+                                                               BuildStyleTreeTableConfiguration = (
+                                                                       IsActive,
+                                                                       16,
+                                                                       Name,
+                                                                       169,
+                                                               );
+                                                               Frame = "{{0, 279}, {200, 278}}";
+                                                       };
+                                                       SplitCount = 2;
+                                               };
+                                               Tab4 = {
+                                                       ExecutableTreeTableConfiguration = (
+                                                               ActiveExecutable,
+                                                               16,
+                                                               ExecutableName,
+                                                               217,
+                                                       );
+                                                       Frame = "{{0, 0}, {250, 100}}";
+                                               };
+                                               Tab5 = {
+                                                       BreakpointsTreeTableConfiguration = (
+                                                               breakpointColumn,
+                                                               197,
+                                                               enabledColumn,
+                                                               31,
+                                                       );
+                                                       Frame = "{{0, 0}, {250, 100}}";
+                                               };
+                                               TabCount = 6;
+                                               TabsVisible = YES;
+                                       };
+                                       StatusViewVisible = YES;
+                                       Template = F5CA7ECC015C09990DCA290F;
+                                       ToolbarVisible = YES;
+                                       WindowLocation = "{13, 372}";
+                               },
+                       );
+                       PBXWorkspaceStateSaveDate = 41550216;
+               };
+               perUserProjectItems = {
+                       F553E33702724F48012A168D = F553E33702724F48012A168D;
+                       F553E33802724F48012A168D = F553E33802724F48012A168D;
+                       F553E33A02724F48012A168D = F553E33A02724F48012A168D;
+                       F553E33B02724F48012A168D = F553E33B02724F48012A168D;
+                       F57C7C62027A0083012A168D = F57C7C62027A0083012A168D;
+                       F57C7C63027A0083012A168D = F57C7C63027A0083012A168D;
+                       F57C7C64027A0083012A168D = F57C7C64027A0083012A168D;
+                       F57C7C66027A0083012A168D = F57C7C66027A0083012A168D;
+                       F57C7C67027A0083012A168D = F57C7C67027A0083012A168D;
+                       F57C7C68027A0083012A168D = F57C7C68027A0083012A168D;
+                       F57C7C6A027A0083012A168D = F57C7C6A027A0083012A168D;
+                       F57C7C6B027A0083012A168D = F57C7C6B027A0083012A168D;
+                       F57C7C6C027A0083012A168D = F57C7C6C027A0083012A168D;
+                       F57C7C8E027A04E7012A168D = F57C7C8E027A04E7012A168D;
+                       F57C7C8F027A04E7012A168D = F57C7C8F027A04E7012A168D;
+                       F57C7C90027A04E7012A168D = F57C7C90027A04E7012A168D;
+               };
+               projectwideBuildSettings = {
+                       OBJROOT = /Users/ben/Desktop/jumpnbumpc/jumpnbump/PB/build;
+                       SYMROOT = /Users/ben/Desktop/jumpnbumpc/output;
+               };
+               wantsIndex = 1;
+               wantsSCM = -1;
+       };
+       29B97326FDCFA39411CA2CEA = {
+               activeExec = 0;
+               executables = (
+                       F5CA6AF4026B5039012A168D,
+               );
+       };
+       F553E33602721C3D012A168D = {
+               fileReference = F5C435AD026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 7;
+               state = 2;
+       };
+       F553E33702724F48012A168D = {
+               fRef = F556CBA30271DD9A012A168D;
+               isa = PBXTextBookmark;
+               name = "sound.c: 298";
+               rLen = 7;
+               rLoc = 7707;
+               rType = 0;
+               vrLen = 1791;
+               vrLoc = 4344;
+       };
+       F553E33802724F48012A168D = {
+               fRef = F553E33D02724F48012A168D;
+               isa = PBXBookmark;
+       };
+       F553E33A02724F48012A168D = {
+               fRef = F556CBA30271DD9A012A168D;
+               isa = PBXTextBookmark;
+               name = "sound.c: 298";
+               rLen = 7;
+               rLoc = 7707;
+               rType = 0;
+               vrLen = 1791;
+               vrLoc = 4344;
+       };
+       F553E33B02724F48012A168D = {
+               fRef = F553E33E02724F48012A168D;
+               isa = PBXBookmark;
+       };
+       F553E33D02724F48012A168D = {
+               isa = PBXFileReference;
+               name = ReleaseNotes.html;
+               path = "/Developer/Applications/Project Builder.app/Contents/Resources/English.lproj/ReleaseNotes.html";
+               refType = 0;
+       };
+       F553E33E02724F48012A168D = {
+               isa = PBXFileReference;
+               name = ReleaseNotes.html;
+               path = "/Developer/Applications/Project Builder.app/Contents/Resources/English.lproj/ReleaseNotes.html";
+               refType = 0;
+       };
+       F57C7C62027A0083012A168D = {
+               fRef = F5C435AD026C8997012A168D;
+               isa = PBXTextBookmark;
+               name = "menu.c: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1805;
+               vrLoc = 0;
+       };
+       F57C7C63027A0083012A168D = {
+               fRef = 089C165DFE840E0CC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 5";
+               rLen = 0;
+               rLoc = 173;
+               rType = 0;
+               vrLen = 239;
+               vrLoc = 0;
+       };
+       F57C7C64027A0083012A168D = {
+               fRef = F5A47A9E01A0483001D3D55B;
+               isa = PBXTextBookmark;
+               name = "SDLMain.m: main";
+               rLen = 0;
+               rLoc = 6158;
+               rType = 0;
+               vrLen = 712;
+               vrLoc = 5446;
+       };
+       F57C7C66027A0083012A168D = {
+               fRef = F5C435AD026C8997012A168D;
+               isa = PBXTextBookmark;
+               name = "menu.c: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1805;
+               vrLoc = 0;
+       };
+       F57C7C67027A0083012A168D = {
+               fRef = F5A47A9E01A0483001D3D55B;
+               isa = PBXTextBookmark;
+               name = "SDLMain.m: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1697;
+               vrLoc = 0;
+       };
+       F57C7C68027A0083012A168D = {
+               fRef = 089C165DFE840E0CC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 265;
+               vrLoc = 0;
+       };
+       F57C7C6A027A0083012A168D = {
+               fRef = F5A47A9E01A0483001D3D55B;
+               isa = PBXTextBookmark;
+               name = "SDLMain.m: SDL_USE_NIB_FILE";
+               rLen = 0;
+               rLoc = 1724;
+               rType = 0;
+               vrLen = 1260;
+               vrLoc = 1514;
+       };
+       F57C7C6B027A0083012A168D = {
+               fRef = 089C165DFE840E0CC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 5";
+               rLen = 0;
+               rLoc = 173;
+               rType = 0;
+               vrLen = 239;
+               vrLoc = 0;
+       };
+       F57C7C6C027A0083012A168D = {
+               fRef = F5A47A9E01A0483001D3D55B;
+               isa = PBXTextBookmark;
+               name = "SDLMain.m: main";
+               rLen = 0;
+               rLoc = 6158;
+               rType = 0;
+               vrLen = 712;
+               vrLoc = 5446;
+       };
+       F57C7C8E027A04E7012A168D = {
+               isa = PBXTargetBookmark;
+               trg = 29B97326FDCFA39411CA2CEA;
+               uiCtxt = {
+                       buildPhasesExpandedSubviews = (
+                               0,
+                               1,
+                               2,
+                               3,
+                               4,
+                       );
+                       buildPhasesVisRect = "{{0, 0}, {912, 604}}";
+                       buildSettingsExpandedSubviews = (
+                               0,
+                               1,
+                               2,
+                               3,
+                               4,
+                               5,
+                               8,
+                       );
+                       buildSettingsVisRect = "{{0, 0}, {393, 256}}";
+                       expertProductSettingsVisRect = "{{0, 0}, {464, 403}}";
+                       guiProductSettingsExpandedSubviews = (
+                               0,
+                               1,
+                               2,
+                               3,
+                               4,
+                               5,
+                               6,
+                       );
+                       guiProductSettingsVisRect = "{{0, 0}, {2000, 1428}}";
+                       productSettingsIsSimple = YES;
+                       selectedTab = buildPhases;
+               };
+       };
+       F57C7C8F027A04E7012A168D = {
+               isa = PBXTargetBookmark;
+               trg = 29B97326FDCFA39411CA2CEA;
+               uiCtxt = {
+                       buildPhasesExpandedSubviews = (
+                               0,
+                               1,
+                               2,
+                               3,
+                               4,
+                       );
+                       buildPhasesVisRect = "{{0, 0}, {912, 604}}";
+                       buildSettingsExpandedSubviews = (
+                               0,
+                               1,
+                               2,
+                               3,
+                               4,
+                               5,
+                               8,
+                       );
+                       buildSettingsVisRect = "{{0, 0}, {393, 256}}";
+                       expertProductSettingsVisRect = "{{0, 0}, {464, 403}}";
+                       guiProductSettingsExpandedSubviews = (
+                               0,
+                               1,
+                               2,
+                               3,
+                               4,
+                               5,
+                               6,
+                       );
+                       guiProductSettingsVisRect = "{{0, 0}, {2000, 1428}}";
+                       productSettingsIsSimple = YES;
+                       selectedTab = buildPhases;
+               };
+       };
+       F57C7C90027A04E7012A168D = {
+               fRef = F5A47A9E01A0483001D3D55B;
+               isa = PBXTextBookmark;
+               name = "SDLMain.m: 228";
+               rLen = 0;
+               rLoc = 6158;
+               rType = 0;
+               vrLen = 1651;
+               vrLoc = 0;
+       };
+       F5C435BB026C8C7E012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 2274;
+               state = 2;
+       };
+       F5C435BC026C8C93012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 1909;
+               state = 2;
+       };
+       F5C435BD026C8CBC012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 1906;
+               state = 2;
+       };
+       F5C435BE026C8CE2012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 2288;
+               state = 2;
+       };
+       F5C435BF026C8CE2012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 2294;
+               state = 2;
+       };
+       F5C435C0026C8FA8012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 2244;
+               state = 2;
+       };
+       F5C435C1026C9035012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 2282;
+               state = 2;
+       };
+       F5C435C3026C9AA7012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 722;
+               state = 2;
+       };
+       F5C435C4026C9AC3012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 232;
+               state = 1;
+       };
+       F5C435C5026C9AC3012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 228;
+               state = 2;
+       };
+       F5C435C6026C9ADC012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 1959;
+               state = 2;
+       };
+       F5C435C7026C9AF1012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 1884;
+               state = 2;
+       };
+       F5C435C8026C9B29012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 1917;
+               state = 2;
+       };
+       F5C435C9026C9B29012A168D = {
+               fileReference = F5C435B2026C8997012A168D;
+               isa = PBXFileBreakpoint;
+               lineNumber = 1958;
+               state = 2;
+       };
+       F5CA6AF4026B5039012A168D = {
+               activeArgIndex = 2147483647;
+               argumentStrings = (
+               );
+               debuggerPlugin = GDBDebugging;
+               dylibVariantSuffix = "";
+               enableDebugStr = 1;
+               environmentEntries = (
+               );
+               isa = PBXExecutable;
+               name = JumpNBump;
+               shlibInfoDictList = (
+               );
+               sourceDirectories = (
+               );
+       };
+       F5CA6B13026B535C012A168D = {
+               activeExec = 0;
+               executables = (
+                       F5CA6B19026B535C012A168D,
+               );
+       };
+       F5CA6B19026B535C012A168D = {
+               activeArgIndex = 2147483647;
+               argumentStrings = (
+               );
+               debuggerPlugin = GDBDebugging;
+               dylibVariantSuffix = "";
+               enableDebugStr = 1;
+               environmentEntries = (
+               );
+               isa = PBXExecutable;
+               name = unpack;
+               shlibInfoDictList = (
+               );
+               sourceDirectories = (
+               );
+       };
+       F5CA6B1B026B5376012A168D = {
+               activeExec = 0;
+               executables = (
+                       F5CA6B21026B5378012A168D,
+               );
+       };
+       F5CA6B21026B5378012A168D = {
+               activeArgIndex = 2147483647;
+               argumentStrings = (
+               );
+               debuggerPlugin = GDBDebugging;
+               enableDebugStr = 1;
+               environmentEntries = (
+               );
+               isa = PBXExecutable;
+               name = pack;
+               shlibInfoDictList = (
+               );
+               sourceDirectories = (
+               );
+       };
+}
diff --git a/PB/JumpNBump.pbproj/project.pbxproj b/PB/JumpNBump.pbproj/project.pbxproj
new file mode 100644 (file)
index 0000000..3aa7352
--- /dev/null
@@ -0,0 +1,671 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 38;
+       objects = {
+               080E96DDFE201D6D7F000001 = {
+                       children = (
+                               F5A47A9E01A0483001D3D55B,
+                       );
+                       isa = PBXGroup;
+                       name = Classes;
+                       refType = 4;
+               };
+               089C165CFE840E0CC02AAC07 = {
+                       children = (
+                               089C165DFE840E0CC02AAC07,
+                       );
+                       isa = PBXVariantGroup;
+                       name = InfoPlist.strings;
+                       refType = 4;
+               };
+               089C165DFE840E0CC02AAC07 = {
+                       fileEncoding = 10;
+                       isa = PBXFileReference;
+                       name = English;
+                       path = English.lproj/InfoPlist.strings;
+                       refType = 4;
+               };
+               089C165EFE840E0CC02AAC07 = {
+                       fileRef = 089C165CFE840E0CC02AAC07;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+//080
+//081
+//082
+//083
+//084
+//100
+//101
+//102
+//103
+//104
+               1058C7A0FEA54F0111CA2CBB = {
+                       children = (
+                               1058C7A1FEA54F0111CA2CBB,
+                       );
+                       isa = PBXGroup;
+                       name = "Linked Frameworks";
+                       refType = 4;
+               };
+               1058C7A1FEA54F0111CA2CBB = {
+                       isa = PBXFrameworkReference;
+                       name = Cocoa.framework;
+                       path = /System/Library/Frameworks/Cocoa.framework;
+                       refType = 0;
+               };
+               1058C7A2FEA54F0111CA2CBB = {
+                       children = (
+                               29B97325FDCFA39411CA2CEA,
+                               29B97324FDCFA39411CA2CEA,
+                       );
+                       isa = PBXGroup;
+                       name = "Other Frameworks";
+                       refType = 4;
+               };
+               1058C7A3FEA54F0111CA2CBB = {
+                       fileRef = 1058C7A1FEA54F0111CA2CBB;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+//100
+//101
+//102
+//103
+//104
+//170
+//171
+//172
+//173
+//174
+               17587328FF379C6511CA2CBB = {
+                       isa = PBXApplicationReference;
+                       path = JumpNBump.app;
+                       refType = 3;
+               };
+//170
+//171
+//172
+//173
+//174
+//190
+//191
+//192
+//193
+//194
+               19C28FACFE9D520D11CA2CBB = {
+                       children = (
+                               17587328FF379C6511CA2CBB,
+                               F5CA6B12026B535C012A168D,
+                               F5CA6B1A026B5376012A168D,
+                       );
+                       isa = PBXGroup;
+                       name = Products;
+                       refType = 4;
+               };
+//190
+//191
+//192
+//193
+//194
+//290
+//291
+//292
+//293
+//294
+               29B97313FDCFA39411CA2CEA = {
+                       buildStyles = (
+                               4A9504CCFFE6A4B311CA0CBA,
+                               4A9504CDFFE6A4B311CA0CBA,
+                       );
+                       isa = PBXProject;
+                       mainGroup = 29B97314FDCFA39411CA2CEA;
+                       projectDirPath = "";
+                       targets = (
+                               29B97326FDCFA39411CA2CEA,
+                               F5CA6B13026B535C012A168D,
+                               F5CA6B1B026B5376012A168D,
+                       );
+               };
+               29B97314FDCFA39411CA2CEA = {
+                       children = (
+                               080E96DDFE201D6D7F000001,
+                               29B97315FDCFA39411CA2CEA,
+                               29B97317FDCFA39411CA2CEA,
+                               29B97323FDCFA39411CA2CEA,
+                               19C28FACFE9D520D11CA2CBB,
+                       );
+                       isa = PBXGroup;
+                       name = "SDL App";
+                       path = "";
+                       refType = 4;
+               };
+               29B97315FDCFA39411CA2CEA = {
+                       children = (
+                               F5C435A6026C8394012A168D,
+                               F5C435AD026C8997012A168D,
+                               F5C435AE026C8997012A168D,
+                               F5C435AF026C8997012A168D,
+                               F5C435B0026C8997012A168D,
+                               F5C435B1026C8997012A168D,
+                               F5C435B2026C8997012A168D,
+                               F5CA6AF5026B505E012A168D,
+                       );
+                       isa = PBXGroup;
+                       name = "Other Sources";
+                       path = "";
+                       refType = 4;
+               };
+               29B97317FDCFA39411CA2CEA = {
+                       children = (
+                               089C165CFE840E0CC02AAC07,
+                               F57C7C600279FFCF012A168D,
+                       );
+                       isa = PBXGroup;
+                       name = Resources;
+                       path = "";
+                       refType = 4;
+               };
+               29B97323FDCFA39411CA2CEA = {
+                       children = (
+                               1058C7A0FEA54F0111CA2CBB,
+                               F5CA6B0E026B50C2012A168D,
+                               1058C7A2FEA54F0111CA2CBB,
+                       );
+                       isa = PBXGroup;
+                       name = Frameworks;
+                       path = "";
+                       refType = 4;
+               };
+               29B97324FDCFA39411CA2CEA = {
+                       isa = PBXFrameworkReference;
+                       name = AppKit.framework;
+                       path = /System/Library/Frameworks/AppKit.framework;
+                       refType = 0;
+               };
+               29B97325FDCFA39411CA2CEA = {
+                       isa = PBXFrameworkReference;
+                       name = Foundation.framework;
+                       path = /System/Library/Frameworks/Foundation.framework;
+                       refType = 0;
+               };
+               29B97326FDCFA39411CA2CEA = {
+                       buildPhases = (
+                               29B97327FDCFA39411CA2CEA,
+                               29B97328FDCFA39411CA2CEA,
+                               29B9732BFDCFA39411CA2CEA,
+                               29B9732DFDCFA39411CA2CEA,
+                               F57C7C3F0279FEDD012A168D,
+                       );
+                       buildSettings = {
+                               FRAMEWORK_SEARCH_PATHS = "\"$(HOME)/Library/Frameworks\" /Users/ben/Library/Frameworks";
+                               HEADER_SEARCH_PATHS = "/sw/include \"$(HOME)/Library/Frameworks/SDL_mixer.framework/Headers\" \"$(HOME)/Library/Frameworks/SDL.framework/Headers\"";
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               LIBRARY_SEARCH_PATHS = /sw/lib;
+                               OPTIMIZATION_CFLAGS = "-O0";
+                               OTHER_CFLAGS = "-ffast-math -funroll-loops -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -DUSE_SDL -D_THREAD_SAFE";
+                               OTHER_LDFLAGS = "-framework SDL";
+                               PRODUCT_NAME = JumpNBump;
+                               SECTORDER_FLAGS = "";
+                               WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+                               WRAPPER_EXTENSION = app;
+                       };
+                       dependencies = (
+                               F5C435A7026C8394012A168D,
+                               F5C435A8026C8394012A168D,
+                       );
+                       isa = PBXApplicationTarget;
+                       name = JumpNBump;
+                       productInstallPath = "$(HOME)/Applications";
+                       productName = "SDL App";
+                       productReference = 17587328FF379C6511CA2CBB;
+                       productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist SYSTEM \"file://localhost/System/Library/DTDs/PropertyList.dtd\">
+<plist version=\"0.9\">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>JumpNBump</string>
+       <key>CFBundleGetInfoString</key>
+       <string>JumpNBump 1.2</string>
+       <key>CFBundleIconFile</key>
+       <string></string>
+       <key>CFBundleIdentifier</key>
+       <string>net.sf.jumpnbump</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>JumpNBump</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.2</string>
+       <key>CFBundleSignature</key>
+       <string>jpnb</string>
+       <key>CFBundleVersion</key>
+       <string>1.2</string>
+       <key>NSMainNibFile</key>
+       <string>SDLMain.nib</string>
+       <key>NSPrincipalClass</key>
+       <string>NSApplication</string>
+</dict>
+</plist>
+";
+                       shouldUseHeadermap = 1;
+               };
+               29B97327FDCFA39411CA2CEA = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               F5C435B3026C8997012A168D,
+                               F5C435B4026C8997012A168D,
+                               F5C435B5026C8997012A168D,
+                       );
+                       isa = PBXHeadersBuildPhase;
+               };
+               29B97328FDCFA39411CA2CEA = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               089C165EFE840E0CC02AAC07,
+                               F57C7C610279FFCF012A168D,
+                       );
+                       isa = PBXResourcesBuildPhase;
+               };
+               29B9732BFDCFA39411CA2CEA = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               F5A47AA301A0483001D3D55B,
+                               F5C435B6026C8997012A168D,
+                               F5C435B7026C8997012A168D,
+                               F59A9B8B026DCE30012A168D,
+                               F556CBA40271DD9A012A168D,
+                               F556CBA50271DD9A012A168D,
+                               F556CBA60271DD9A012A168D,
+                               F556CBA70271DD9A012A168D,
+                       );
+                       isa = PBXSourcesBuildPhase;
+               };
+               29B9732DFDCFA39411CA2CEA = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               1058C7A3FEA54F0111CA2CBB,
+                               F5CA6B0F026B50C2012A168D,
+                       );
+                       isa = PBXFrameworksBuildPhase;
+               };
+//290
+//291
+//292
+//293
+//294
+//4A0
+//4A1
+//4A2
+//4A3
+//4A4
+               4A9504CCFFE6A4B311CA0CBA = {
+                       buildRules = (
+                       );
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               OPTIMIZATION_CFLAGS = "-O0";
+                       };
+                       isa = PBXBuildStyle;
+                       name = Development;
+               };
+               4A9504CDFFE6A4B311CA0CBA = {
+                       buildRules = (
+                       );
+                       buildSettings = {
+                               COPY_PHASE_STRIP = YES;
+                       };
+                       isa = PBXBuildStyle;
+                       name = Deployment;
+               };
+//4A0
+//4A1
+//4A2
+//4A3
+//4A4
+//F50
+//F51
+//F52
+//F53
+//F54
+               F556CBA00271DD9A012A168D = {
+                       isa = PBXFileReference;
+                       name = gfx.c;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/sdl/gfx.c;
+                       refType = 0;
+               };
+               F556CBA10271DD9A012A168D = {
+                       isa = PBXFileReference;
+                       name = input.c;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/sdl/input.c;
+                       refType = 0;
+               };
+               F556CBA20271DD9A012A168D = {
+                       isa = PBXFileReference;
+                       name = interrpt.c;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/sdl/interrpt.c;
+                       refType = 0;
+               };
+               F556CBA30271DD9A012A168D = {
+                       isa = PBXFileReference;
+                       name = sound.c;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/sdl/sound.c;
+                       refType = 0;
+               };
+               F556CBA40271DD9A012A168D = {
+                       fileRef = F556CBA00271DD9A012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F556CBA50271DD9A012A168D = {
+                       fileRef = F556CBA10271DD9A012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F556CBA60271DD9A012A168D = {
+                       fileRef = F556CBA20271DD9A012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F556CBA70271DD9A012A168D = {
+                       fileRef = F556CBA30271DD9A012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F57C7C3F0279FEDD012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       generatedFileNames = (
+                       );
+                       isa = PBXShellScriptBuildPhase;
+                       neededFileNames = (
+                       );
+                       shellPath = /bin/sh;
+                       shellScript = "chdir ../data\n${SYMROOT}/pack -o jumpbump.dat bump.mod calib.dat death.smp fly.smp font.gob jump.mod jump.smp levelmap.txt level.pcx mask.pcx menu.pcx menumask.pcx numbers.gob objects.gob rabbit.gob scores.mod splash.smp spring.smp\nmkdir ${SYMROOT}/JumpNBump.app/Contents/Resources/data/\ncp jumpbump.dat ${SYMROOT}/JumpNBump.app/Contents/Resources/data/jumpbump.dat";
+               };
+               F57C7C600279FFCF012A168D = {
+                       isa = PBXFileReference;
+                       name = SDLMain.nib;
+                       path = /Users/ben/Library/Frameworks/SDL.framework/Versions/A/Resources/SDLMain.nib;
+                       refType = 0;
+               };
+               F57C7C610279FFCF012A168D = {
+                       fileRef = F57C7C600279FFCF012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F59A9B8B026DCE30012A168D = {
+                       fileRef = F5C435B2026C8997012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5A47A9E01A0483001D3D55B = {
+                       isa = PBXFileReference;
+                       path = SDLMain.m;
+                       refType = 2;
+               };
+               F5A47AA301A0483001D3D55B = {
+                       fileRef = F5A47A9E01A0483001D3D55B;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5C435A6026C8394012A168D = {
+                       children = (
+                               F5CA6B0A026B5089012A168D,
+                               F5C435B9026C89A2012A168D,
+                       );
+                       isa = PBXGroup;
+                       name = modify;
+                       refType = 4;
+               };
+               F5C435A7026C8394012A168D = {
+                       isa = PBXTargetDependency;
+                       target = F5CA6B1B026B5376012A168D;
+               };
+               F5C435A8026C8394012A168D = {
+                       isa = PBXTargetDependency;
+                       target = F5CA6B13026B535C012A168D;
+               };
+               F5C435AD026C8997012A168D = {
+                       isa = PBXFileReference;
+                       name = menu.c;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/menu.c;
+                       refType = 0;
+               };
+               F5C435AE026C8997012A168D = {
+                       isa = PBXFileReference;
+                       name = config.h;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/config.h;
+                       refType = 0;
+               };
+               F5C435AF026C8997012A168D = {
+                       isa = PBXFileReference;
+                       name = dj.h;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/dj.h;
+                       refType = 0;
+               };
+               F5C435B0026C8997012A168D = {
+                       isa = PBXFileReference;
+                       name = fireworks.c;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/fireworks.c;
+                       refType = 0;
+               };
+               F5C435B1026C8997012A168D = {
+                       isa = PBXFileReference;
+                       name = globals.h;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/globals.h;
+                       refType = 0;
+               };
+               F5C435B2026C8997012A168D = {
+                       isa = PBXFileReference;
+                       name = main.c;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/main.c;
+                       refType = 0;
+               };
+               F5C435B3026C8997012A168D = {
+                       fileRef = F5C435AE026C8997012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5C435B4026C8997012A168D = {
+                       fileRef = F5C435AF026C8997012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5C435B5026C8997012A168D = {
+                       fileRef = F5C435B1026C8997012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5C435B6026C8997012A168D = {
+                       fileRef = F5C435AD026C8997012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5C435B7026C8997012A168D = {
+                       fileRef = F5C435B0026C8997012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5C435B9026C89A2012A168D = {
+                       isa = PBXFileReference;
+                       name = unpack.c;
+                       path = /Users/ben/Desktop/jumpnbumpc/jumpnbump/modify/unpack.c;
+                       refType = 0;
+               };
+               F5C435BA026C89A2012A168D = {
+                       fileRef = F5C435B9026C89A2012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5CA6AF5026B505E012A168D = {
+                       children = (
+                               F556CBA00271DD9A012A168D,
+                               F556CBA10271DD9A012A168D,
+                               F556CBA20271DD9A012A168D,
+                               F556CBA30271DD9A012A168D,
+                       );
+                       isa = PBXGroup;
+                       name = sdl;
+                       refType = 4;
+               };
+               F5CA6B0A026B5089012A168D = {
+                       isa = PBXFileReference;
+                       name = pack.c;
+                       path = ../modify/pack.c;
+                       refType = 2;
+               };
+               F5CA6B0E026B50C2012A168D = {
+                       isa = PBXFrameworkReference;
+                       name = SDL_mixer.framework;
+                       path = /Users/ben/Library/Frameworks/SDL_mixer.framework;
+                       refType = 0;
+               };
+               F5CA6B0F026B50C2012A168D = {
+                       fileRef = F5CA6B0E026B50C2012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5CA6B12026B535C012A168D = {
+                       isa = PBXExecutableFileReference;
+                       path = unpack;
+                       refType = 3;
+               };
+               F5CA6B13026B535C012A168D = {
+                       buildPhases = (
+                               F5CA6B14026B535C012A168D,
+                               F5CA6B15026B535C012A168D,
+                               F5CA6B17026B535C012A168D,
+                               F5CA6B18026B535C012A168D,
+                       );
+                       buildSettings = {
+                               OTHER_CFLAGS = "";
+                               OTHER_LDFLAGS = "";
+                               OTHER_REZFLAGS = "";
+                               PRODUCT_NAME = unpack;
+                               REZ_EXECUTABLE = YES;
+                               SECTORDER_FLAGS = "";
+                               WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+                       };
+                       dependencies = (
+                       );
+                       isa = PBXToolTarget;
+                       name = unpack;
+                       productInstallPath = /usr/local/bin;
+                       productName = unpack;
+                       productReference = F5CA6B12026B535C012A168D;
+                       shouldUseHeadermap = 0;
+               };
+               F5CA6B14026B535C012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXHeadersBuildPhase;
+               };
+               F5CA6B15026B535C012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               F5C435BA026C89A2012A168D,
+                       );
+                       isa = PBXSourcesBuildPhase;
+               };
+               F5CA6B17026B535C012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXFrameworksBuildPhase;
+               };
+               F5CA6B18026B535C012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXRezBuildPhase;
+               };
+               F5CA6B1A026B5376012A168D = {
+                       isa = PBXExecutableFileReference;
+                       path = pack;
+                       refType = 3;
+               };
+               F5CA6B1B026B5376012A168D = {
+                       buildPhases = (
+                               F5CA6B1C026B5376012A168D,
+                               F5CA6B1D026B5376012A168D,
+                               F5CA6B1F026B5376012A168D,
+                               F5CA6B20026B5376012A168D,
+                       );
+                       buildSettings = {
+                               OTHER_CFLAGS = "";
+                               OTHER_LDFLAGS = "";
+                               OTHER_REZFLAGS = "";
+                               PRODUCT_NAME = pack;
+                               REZ_EXECUTABLE = YES;
+                               SECTORDER_FLAGS = "";
+                               WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+                       };
+                       dependencies = (
+                       );
+                       isa = PBXToolTarget;
+                       name = pack;
+                       productInstallPath = /usr/local/bin;
+                       productName = pack;
+                       productReference = F5CA6B1A026B5376012A168D;
+                       shouldUseHeadermap = 0;
+               };
+               F5CA6B1C026B5376012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXHeadersBuildPhase;
+               };
+               F5CA6B1D026B5376012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                               F5CA6B1E026B5376012A168D,
+                       );
+                       isa = PBXSourcesBuildPhase;
+               };
+               F5CA6B1E026B5376012A168D = {
+                       fileRef = F5CA6B0A026B5089012A168D;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               F5CA6B1F026B5376012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXFrameworksBuildPhase;
+               };
+               F5CA6B20026B5376012A168D = {
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       isa = PBXRezBuildPhase;
+               };
+       };
+       rootObject = 29B97313FDCFA39411CA2CEA;
+}
diff --git a/PB/SDLMain.h b/PB/SDLMain.h
new file mode 100644 (file)
index 0000000..3b33d77
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * SDLMain.m
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ * 
+ * Copyright (C) 2001 Chuck Mason <cemason@users.sourceforge.net>
+ *
+ * Copyright (C) 2002 Florian Schulze <crow@icculus.org>
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump 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.
+ *
+ * Jump'n'Bump 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
+ */
+
+
+/*   SDLMain.m - main entry point for our Cocoa-ized SDL app
+       Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
+       Non-NIB-Code & other changes: Max Horn <max@quendi.de>
+
+    Feel free to customize this file to suit your needs
+*/
+
+#import <Cocoa/Cocoa.h>
+
+@interface SDLMain : NSObject
+@end
diff --git a/PB/SDLMain.m b/PB/SDLMain.m
new file mode 100644 (file)
index 0000000..a8952a1
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+ * SDLMain.m
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ * 
+ * Copyright (C) 2001 Chuck Mason <cemason@users.sourceforge.net>
+ *
+ * Copyright (C) 2002 Florian Schulze <crow@icculus.org>
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump 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.
+ *
+ * Jump'n'Bump 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
+ */
+
+/*   SDLMain.m - main entry point for our Cocoa-ized SDL app
+               
+       These files turn an SDL app into a double-clickable Cocoa app on mac os X.
+       
+    Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
+    Non-NIB-Code & other changes: Max Horn <max@quendi.de>
+
+    Feel free to customize this file to suit your needs
+*/
+
+#import "SDL.h"
+
+/* SDLMain.h */
+#import <Cocoa/Cocoa.h>
+
+@interface SDLMain : NSObject
+@end
+/* SDLMain.h */
+
+#import <sys/param.h> /* for MAXPATHLEN */
+#import <unistd.h>
+
+
+static int    gArgc;
+static char  **gArgv;
+static BOOL   gFinderLaunch;
+
+/* A helper category for NSString */
+@interface NSString (ReplaceSubString)
+- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
+@end
+
+@interface SDLApplication : NSApplication
+@end
+
+@implementation SDLApplication
+/* Invoked from the Quit menu item */
+- (void)terminate:(id)sender
+{
+    /* Post a SDL_QUIT event */
+    SDL_Event event;
+    event.type = SDL_QUIT;
+    SDL_PushEvent(&event);
+}
+@end
+
+
+/* The main class of the application, the application's delegate */
+@implementation SDLMain
+- (void)quit:(id)sender
+{
+       /* Post a SDL_QUIT event */
+    SDL_Event event;
+    event.type = SDL_QUIT;
+    SDL_PushEvent(&event);
+
+       //              uMenu::quickexit=true;
+}
+//this changes the current working directory to the resource folder of
+//the .app bundle in Mac OS X
+void MacOSX_SetCWD(char **argv) {
+    char buffer[300];
+    int count = 2, i;
+    strcpy(buffer, argv[0]);
+
+    if ( !strstr( buffer, ".app") ) {
+        //it's not a .app bundle
+        return;
+    }
+
+    for (i = strlen(buffer); i > 0 && count > 0; i--) {
+        if (buffer[i] == '/')
+            count--;
+    }
+    if (i == 0)
+        return;
+    i+=2;
+    buffer[i] = 0;
+    strcat( buffer, "Resources");
+    printf(buffer);
+    chdir( buffer );
+}
+
+
+/* Fix menu to contain the real app name instead of "SDL App" */
+- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
+{
+    NSRange aRange;
+    NSEnumerator *enumerator;
+    NSMenuItem *menuItem;
+
+    aRange = [[aMenu title] rangeOfString:@"SDL App"];
+    if (aRange.length != 0)
+        [aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
+
+    enumerator = [[aMenu itemArray] objectEnumerator];
+    while ((menuItem = [enumerator nextObject]))
+    {
+        aRange = [[menuItem title] rangeOfString:@"SDL App"];
+        if (aRange.length != 0)
+            [menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
+        if ([menuItem hasSubmenu])
+            [self fixMenu:[menuItem submenu] withAppName:appName];
+    }
+    [ aMenu sizeToFit ];
+}
+
+/* Called when the internal event loop has just started running */
+- (void) applicationDidFinishLaunching: (NSNotification *) note
+{
+    int status;
+
+    /* Set the main menu to contain the real app name instead of "SDL App" */
+    [self fixMenu:[NSApp mainMenu] withAppName:[[NSProcessInfo processInfo] processName]];
+
+    /* Hand off to main application code */
+    status = SDL_main (gArgc, gArgv);
+
+    /* We're done, thank you for playing */
+    exit(status);
+}
+@end
+
+
+@implementation NSString (ReplaceSubString)
+
+- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
+{
+    unsigned int bufferSize;
+    unsigned int selfLen = [self length];
+    unsigned int aStringLen = [aString length];
+    unichar *buffer;
+    NSRange localRange;
+    NSString *result;
+
+    bufferSize = selfLen + aStringLen - aRange.length;
+    buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
+    
+    /* Get first part into buffer */
+    localRange.location = 0;
+    localRange.length = aRange.location;
+    [self getCharacters:buffer range:localRange];
+    
+    /* Get middle part into buffer */
+    localRange.location = 0;
+    localRange.length = aStringLen;
+    [aString getCharacters:(buffer+aRange.location) range:localRange];
+     
+    /* Get last part into buffer */
+    localRange.location = aRange.location + aRange.length;
+    localRange.length = selfLen - localRange.location;
+    [self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
+    
+    /* Build output string */
+    result = [NSString stringWithCharacters:buffer length:bufferSize];
+    
+    NSDeallocateMemoryPages(buffer, bufferSize);
+    
+    return result;
+}
+
+@end
+
+
+
+#ifdef main
+#  undef main
+#endif
+
+
+/* Main entry point to executable - should *not* be SDL_main! */
+int main (int argc, char **argv)
+{
+
+    /* Copy the arguments into a global variable */
+    int i;
+    
+    /* This is passed if we are launched by double-clicking */
+    if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
+        gArgc = 1;
+       gFinderLaunch = YES;
+    } else {
+        gArgc = argc;
+       gFinderLaunch = NO;
+    }
+    gArgv = (char**) malloc (sizeof(*gArgv) * (gArgc+1));
+    assert (gArgv != NULL);
+    for (i = 0; i < gArgc; i++)
+        gArgv[i] = argv[i];
+    gArgv[i] = NULL;
+
+       MacOSX_SetCWD(gArgv);
+
+    [SDLApplication poseAsClass:[NSApplication class]];
+    NSApplicationMain (argc, argv);
+
+    return 0;
+}
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..c19723d
--- /dev/null
+++ b/README
@@ -0,0 +1,62 @@
+Jump n Bump
+
+This is a game for the whole family. You are cute fluffy little bunnies
+and hop on the other bunnies' heads.
+
+At the beginning you are in the menu, where you have to jump
+over the tree trunk if you want to play and walk right.
+Then you'll enter the arena. The aim is to jump on the
+other bunnies' heads...
+
+a,w,d to steer Dott
+arrows to steer Jiffy
+j,i,l to steer Fizz
+4,8,6 to steer Mijji (on the numeric pad)
+
+Thanks to sabrewulf (chuck mason) in irc.linux.com #keen
+who did port this wonderful game! find him, longislandman
+and me (tarzeau) on irc.linux.com
+Thanks also to longisland for working on network code
+and timecop for the pack/unpacker
+Thanks to florian for adding scale mode, fixing the sound
+bug and having alot of patience and maintaining everything.
+Thanks to ben for making patches to run it on mac os x.
+Thanks to ivo for doing debian packages.
+
+f10 change between windowed/fullscreen mode
+(see the XF86Config-4, copy n paste the modeline 400x256
+then add the mode "400x256" to whatever bpp you have by default, restart x)
+example: add following line in Section "Monitor" of your 
+/etc/X11/XF86Config (or XF86Config-4)
+Modeline "400x256"     22.00  400 416 480 504  256 259 262 269 doublescan
+then in Section "Screen" if your DefaultDepth is 24 do be sure you have
+something like:
+Modes           "1024x768" "640x480" "512x384" "400x256" "320x240"
+esc/f12 exit
+
+For compilation you will need:
+do following on a debian gnu/linux system (www.debian.org)
+apt-get install libsdl-dev libsdl-mixer-dev
+sdl libraries are needed, you might find it at www.libsdl.org
+
+You can find more levels at http://www.jumpbump.mine.nu/cgi-bin/jb.sh
+which you can start with: jumpnbump -dat levelname.dat
+there's a screensaver mode as well:
+jumpnbump -fireworks -fullscreen
+
+Network play works like this, oh well here's an example
+Player 1: jumpnbump -port 7777 -net 0 ip_or_hostname_of_player2 port_of_player2
+Player 2: jumpnbump -port 7777 -net 1 ip_or_hostname_of_player1 port_of_player1
+just take port 7777 for all ports and hope it's open and you aren't
+firewalled (it's all udp!)
+You can add -net 3 and -net 4 for 3rd and 4th player, and be sure.
+All the players use the same -dat level.dat
+(the scoreboards is different on each player and strange things like
+that, but longislandman is working on it (isn't it? longislandman? you alive?))
+
+You can find the original dos game (which runs in dos/win9x (dosextender!))
+at http://www.brainchilddesign.com/games/jumpnbump/index.html
+
+If you like the game or have any ideas don't hesitate to contact me
+gurkan@linuks.mine.nu
+
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..fe8f787
--- /dev/null
+++ b/TODO
@@ -0,0 +1,2 @@
+- fix network code
+- port for dreamcast
diff --git a/VisualC6/gobpack/gobpack.dsp b/VisualC6/gobpack/gobpack.dsp
new file mode 100644 (file)
index 0000000..296c1ee
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="gobpack" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=gobpack - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "gobpack.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "gobpack.mak" CFG="gobpack - Win32 Debug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "gobpack - Win32 Release" (basierend auf  "Win32 (x86) Console Application")
+!MESSAGE "gobpack - Win32 Debug" (basierend auf  "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "gobpack - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF  "$(CFG)" == "gobpack - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "gobpack - Win32 Release"
+# Name "gobpack - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\modify\gobpack.c
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/VisualC6/jumpnbump.dsp b/VisualC6/jumpnbump.dsp
new file mode 100644 (file)
index 0000000..50efec3
--- /dev/null
@@ -0,0 +1,235 @@
+# Microsoft Developer Studio Project File - Name="jumpnbump" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Application" 0x0101
+
+CFG=jumpnbump - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "jumpnbump.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "jumpnbump.mak" CFG="jumpnbump - Win32 Debug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "jumpnbump - Win32 Release" (basierend auf  "Win32 (x86) Application")
+!MESSAGE "jumpnbump - Win32 Debug" (basierend auf  "Win32 (x86) Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "jumpnbump - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "../" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "USE_SDL" /D "USE_NET" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib SDLmain.lib SDL.lib SDL_mixer.lib SDL_net.lib /nologo /subsystem:windows /profile /machine:I386
+# SUBTRACT LINK32 /debug
+# Begin Custom Build
+ProjDir=.
+InputPath=.\Release\jumpnbump.exe
+SOURCE="$(InputPath)"
+
+BuildCmds= \
+       call "$(ProjDir)\..\data\pack.bat" "$(ProjDir)\..\data" "..\VisualC6\gobpack\Release\gobpack.exe" "..\VisualC6\pack\Release\jnbpack.exe"
+
+"$(ProjDir)\..\data\font.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"$(ProjDir)\..\data\rabbit.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"$(ProjDir)\..\data\numbers.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"$(ProjDir)\..\data\objects.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"$(ProjDir)\..\data\jumpbump.dat" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "jumpnbump - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "USE_SDL" /D "USE_NET" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib SDLmain.lib SDL.lib SDL_mixer.lib SDL_net.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build
+ProjDir=.
+InputPath=.\Debug\jumpnbump.exe
+SOURCE="$(InputPath)"
+
+BuildCmds= \
+       call "$(ProjDir)\..\data\pack.bat" "$(ProjDir)\..\data" "..\VisualC6\gobpack\Debug\gobpack.exe" "..\VisualC6\pack\Debug\jnbpack.exe"
+
+"$(ProjDir)\..\data\font.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"$(ProjDir)\..\data\rabbit.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"$(ProjDir)\..\data\numbers.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"$(ProjDir)\..\data\objects.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"$(ProjDir)\..\data\jumpbump.dat" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# Begin Target
+
+# Name "jumpnbump - Win32 Release"
+# Name "jumpnbump - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\filter.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fireworks.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sdl\gfx.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sdl\input.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sdl\interrpt.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\main.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\menu.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sdl\sound.c
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\dj.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\filter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\globals.pre
+
+!IF  "$(CFG)" == "jumpnbump - Win32 Release"
+
+# Begin Custom Build
+ProjDir=.
+InputPath=..\globals.pre
+
+"$(ProjDir)\..\globals.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+       copy "$(ProjDir)\..\globals.pre" "$(ProjDir)\..\globals.h"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "jumpnbump - Win32 Debug"
+
+# Begin Custom Build
+ProjDir=.
+InputPath=..\globals.pre
+
+"$(ProjDir)\..\globals.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+       copy "$(ProjDir)\..\globals.pre" "$(ProjDir)\..\globals.h"
+
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\resource.h
+# End Source File
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\jumpnbump.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\ressource.rc
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/VisualC6/jumpnbump.dsw b/VisualC6/jumpnbump.dsw
new file mode 100644 (file)
index 0000000..71c28fc
--- /dev/null
@@ -0,0 +1,71 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "gobpack"=.\gobpack\gobpack.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "jumpnbump"=.\jumpnbump.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name pack
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name gobpack
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "pack"=.\pack\pack.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "unpack"=.\unpack\unpack.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/VisualC6/pack/pack.dsp b/VisualC6/pack/pack.dsp
new file mode 100644 (file)
index 0000000..46ada16
--- /dev/null
@@ -0,0 +1,102 @@
+# Microsoft Developer Studio Project File - Name="pack" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=pack - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "pack.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "pack.mak" CFG="pack - Win32 Debug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "pack - Win32 Release" (basierend auf  "Win32 (x86) Console Application")
+!MESSAGE "pack - Win32 Debug" (basierend auf  "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "pack - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"Release/jnbpack.exe"
+
+!ELSEIF  "$(CFG)" == "pack - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/jnbpack.exe" /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "pack - Win32 Release"
+# Name "pack - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\modify\jnbpack.c
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/VisualC6/resource.h b/VisualC6/resource.h
new file mode 100644 (file)
index 0000000..88ce220
--- /dev/null
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by ressource.rc
+//
+#define IDI_ICON1                       101
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        102
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/VisualC6/ressource.rc b/VisualC6/ressource.rc
new file mode 100644 (file)
index 0000000..af470c3
--- /dev/null
@@ -0,0 +1,72 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Deutsch (Deutschland) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
+#ifdef _WIN32
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ICON1               ICON    DISCARDABLE     "../jumpnbump.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // Deutsch (Deutschland) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/VisualC6/unpack/unpack.dsp b/VisualC6/unpack/unpack.dsp
new file mode 100644 (file)
index 0000000..57684a7
--- /dev/null
@@ -0,0 +1,102 @@
+# Microsoft Developer Studio Project File - Name="unpack" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=unpack - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "unpack.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "unpack.mak" CFG="unpack - Win32 Debug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "unpack - Win32 Release" (basierend auf  "Win32 (x86) Console Application")
+!MESSAGE "unpack - Win32 Debug" (basierend auf  "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "unpack - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"Release/jnbunpack.exe"
+
+!ELSEIF  "$(CFG)" == "unpack - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/jnbunpack.exe" /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "unpack - Win32 Release"
+# Name "unpack - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\modify\jnbunpack.c
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/XF86Config-4 b/XF86Config-4
new file mode 100644 (file)
index 0000000..561bb31
--- /dev/null
@@ -0,0 +1,118 @@
+# XF86Config-4 (XFree86 server configuration file) generated by Dexconf, the
+# Debian X Configuration tool, using values from the debconf database.
+#
+# Edit this file with caution, and see the XF86Config manual page.
+# (Type "man XF86Config" at the shell prompt.)
+
+Section "Files"
+       FontPath        "unix/:7100"                    # local font server
+       # if the local font server has problems, we can fall back on these
+       FontPath        "/usr/lib/X11/fonts/misc"
+       FontPath        "/usr/lib/X11/fonts/cyrillic"
+       FontPath        "/usr/lib/X11/fonts/100dpi/:unscaled"
+       FontPath        "/usr/lib/X11/fonts/75dpi/:unscaled"
+       FontPath        "/usr/lib/X11/fonts/Type1"
+       FontPath        "/usr/lib/X11/fonts/Speedo"
+       FontPath        "/usr/lib/X11/fonts/100dpi"
+       FontPath        "/usr/lib/X11/fonts/75dpi"
+EndSection
+
+Section "ServerFlags"
+EndSection
+
+Section "Module"
+       Load    "ddc"
+       Load    "GLcore"
+       Load    "dbe"
+       Load    "dri"
+       Load    "extmod"
+       Load    "glx"
+       Load    "pex5"
+       Load    "record"
+       Load    "xie"
+       Load    "bitmap"
+       Load    "freetype"
+       Load    "speedo"
+       Load    "type1"
+       Load    "vbe"
+       Load    "int10"
+EndSection
+
+Section "InputDevice"
+       Identifier      "Generic Keyboard"
+       Driver          "keyboard"
+       Option          "CoreKeyboard"
+       Option          "XkbRules"      "xfree86"
+       Option          "XkbModel"      "pc105"
+       Option          "XkbLayout"     "de_CH"
+EndSection
+
+Section "InputDevice"
+       Identifier      "Generic Mouse"
+       Driver          "mouse"
+       Option          "CorePointer"
+       Option          "Device"                "/dev/ttyS0"
+       Option          "Protocol"              "Microsoft"
+EndSection
+
+Section "Device"
+       Identifier      "Generic Video Card"
+       Driver          "nvidia"
+EndSection
+
+Section "Monitor"
+       Identifier      "Generic Monitor"
+       HorizSync       28-57
+       VertRefresh     43-90
+       Option          "DPMS"
+       #Modeline       "320x240"       15.75 320 336 384 400 240 244 246 262 doublescan
+       Modeline        "320x240"       12.588 320 336 384 400 240 245 246 262 doublescan
+        Modeline "400x256"     22.00  400 416 480 504  256 259 262 269 doublescan
+        Modeline        "512x384"       22.00 512 528 592 640 384 385 388 404 -hsync -vsync
+       #Modeline       "320x240"       15.750 320 336 384 400 240 244 246 262 doublescan
+EndSection
+
+Section "Screen"
+       Identifier      "Default Screen"
+       Device          "Generic Video Card"
+       Monitor         "Generic Monitor"
+       DefaultDepth    24
+       SubSection "Display"
+               Depth           1
+               Modes           "1152x864" "1024x768" "640x480" "320x240"
+       EndSubSection
+       SubSection "Display"
+               Depth           4
+               Modes           "1152x864" "1024x768" "640x480" "320x240"
+       EndSubSection
+       SubSection "Display"
+               Depth           8
+               Modes           "1152x864" "1024x768" "640x480" "320x240"
+       EndSubSection
+       SubSection "Display"
+               Depth           15
+               Modes           "1152x864" "1024x768" "640x480" "320x240"
+       EndSubSection
+       SubSection "Display"
+               Depth           16
+               Modes           "1152x864" "1024x768" "640x480" "320x240"
+       EndSubSection
+       SubSection "Display"
+               Depth           24
+               Modes           "1024x768" "640x480" "512x384" "400x256" "320x240"
+#"1280x1024" "1152x864" 
+       EndSubSection
+EndSection
+
+Section "ServerLayout"
+       Identifier      "Default Layout"
+       Screen          "Default Screen"
+       InputDevice     "Generic Keyboard"
+       InputDevice     "Generic Mouse"
+EndSection
+
+Section "DRI"
+       Mode    0666
+EndSection
+
+# end of XF86Config
diff --git a/config.h b/config.h
new file mode 100644 (file)
index 0000000..b4914b5
--- /dev/null
+++ b/config.h
@@ -0,0 +1,29 @@
+/*
+ * config.h
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ * 
+ * Copyright (C) 2001 Chuck Mason <cemason@users.sourceforge.net>
+ *
+ * Copyright (C) 2002 Florian Schulze <crow@icculus.org>
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump 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.
+ *
+ * Jump'n'Bump 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
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#endif
diff --git a/data/Makefile b/data/Makefile
new file mode 100644 (file)
index 0000000..de362fe
--- /dev/null
@@ -0,0 +1,27 @@
+GOBS = numbers.gob objects.gob rabbit.gob
+DATAFILES = bump.mod calib.dat death.smp fly.smp font.gob jump.mod \
+       jump.smp levelmap.txt level.pcx mask.pcx menu.pcx \
+       menumask.pcx $(GOBS) scores.mod splash.smp spring.smp
+
+all: jumpbump.dat
+
+font.gob:
+       ../gobpack font
+
+rabbit.gob:
+       ../gobpack rabbit
+
+numbers.gob:
+       ../gobpack numbers
+
+objects.gob:
+       ../gobpack objects
+
+jumpbump.dat: $(DATAFILES) ../jnbpack
+       ../jnbpack -o jumpbump.dat $(DATAFILES)
+
+../jnbpack:
+       cd ../modify && make
+
+clean:
+       rm -f jumpbump.dat $(GOBS)
diff --git a/data/bump.mod b/data/bump.mod
new file mode 100644 (file)
index 0000000..286847d
Binary files /dev/null and b/data/bump.mod differ
diff --git a/data/calib.dat b/data/calib.dat
new file mode 100644 (file)
index 0000000..1934f52
Binary files /dev/null and b/data/calib.dat differ
diff --git a/data/death.smp b/data/death.smp
new file mode 100644 (file)
index 0000000..3e9b588
Binary files /dev/null and b/data/death.smp differ
diff --git a/data/fly.smp b/data/fly.smp
new file mode 100644 (file)
index 0000000..dc9d3e1
Binary files /dev/null and b/data/fly.smp differ
diff --git a/data/font.pcx b/data/font.pcx
new file mode 100644 (file)
index 0000000..cda12ef
Binary files /dev/null and b/data/font.pcx differ
diff --git a/data/font.txt b/data/font.txt
new file mode 100644 (file)
index 0000000..f2a1a56
--- /dev/null
@@ -0,0 +1,650 @@
+num_images: 81
+
+image: 1
+x: 0
+y: 0
+width: 4
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 2
+x: 14
+y: 0
+width: 5
+height: 4
+hotspot_x: 0
+hotspot_y: -1
+
+image: 3
+x: 28
+y: 0
+width: 3
+height: 4
+hotspot_x: 0
+hotspot_y: -1
+
+image: 4
+x: 42
+y: 0
+width: 5
+height: 12
+hotspot_x: 0
+hotspot_y: 0
+
+image: 5
+x: 56
+y: 0
+width: 6
+height: 12
+hotspot_x: 0
+hotspot_y: 0
+
+image: 6
+x: 70
+y: 0
+width: 3
+height: 5
+hotspot_x: 0
+hotspot_y: -8
+
+image: 7
+x: 84
+y: 0
+width: 5
+height: 3
+hotspot_x: 0
+hotspot_y: -4
+
+image: 8
+x: 98
+y: 0
+width: 3
+height: 3
+hotspot_x: 0
+hotspot_y: -8
+
+image: 9
+x: 112
+y: 0
+width: 6
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 10
+x: 126
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 11
+x: 140
+y: 0
+width: 5
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 12
+x: 154
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 13
+x: 168
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 14
+x: 182
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 15
+x: 196
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 16
+x: 210
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 17
+x: 224
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 18
+x: 238
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 19
+x: 252
+y: 0
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 20
+x: 266
+y: 0
+width: 4
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 21
+x: 280
+y: 0
+width: 4
+height: 9
+hotspot_x: 0
+hotspot_y: -3
+
+image: 22
+x: 294
+y: 0
+width: 12
+height: 11
+hotspot_x: 0
+hotspot_y: 0
+
+image: 23
+x: 308
+y: 0
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 24
+x: 322
+y: 0
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 25
+x: 336
+y: 0
+width: 9
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 26
+x: 350
+y: 0
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 27
+x: 364
+y: 0
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 28
+x: 378
+y: 0
+width: 8
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 29
+x: 0
+y: 14
+width: 9
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 30
+x: 14
+y: 14
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 31
+x: 28
+y: 14
+width: 4
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 32
+x: 42
+y: 14
+width: 8
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 33
+x: 56
+y: 14
+width: 10
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 34
+x: 70
+y: 14
+width: 7
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 35
+x: 84
+y: 14
+width: 11
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 36
+x: 98
+y: 14
+width: 10
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 37
+x: 112
+y: 14
+width: 9
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 38
+x: 126
+y: 14
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 39
+x: 140
+y: 14
+width: 9
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 40
+x: 154
+y: 14
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 41
+x: 168
+y: 14
+width: 8
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 42
+x: 182
+y: 14
+width: 8
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 43
+x: 196
+y: 14
+width: 9
+height: 10
+hotspot_x: 0
+hotspot_y: -1
+
+image: 44
+x: 210
+y: 14
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 45
+x: 224
+y: 14
+width: 12
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 46
+x: 238
+y: 14
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 47
+x: 252
+y: 14
+width: 8
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 48
+x: 266
+y: 14
+width: 9
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 49
+x: 280
+y: 14
+width: 7
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 50
+x: 294
+y: 14
+width: 8
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 51
+x: 308
+y: 14
+width: 6
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 52
+x: 322
+y: 14
+width: 8
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 53
+x: 336
+y: 14
+width: 7
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 54
+x: 350
+y: 14
+width: 5
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 55
+x: 364
+y: 14
+width: 8
+height: 10
+hotspot_x: 0
+hotspot_y: -3
+
+image: 56
+x: 378
+y: 14
+width: 7
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 57
+x: 0
+y: 28
+width: 4
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 58
+x: 14
+y: 28
+width: 5
+height: 12
+hotspot_x: 0
+hotspot_y: -1
+
+image: 59
+x: 28
+y: 28
+width: 8
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 60
+x: 42
+y: 28
+width: 4
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 61
+x: 56
+y: 28
+width: 11
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 62
+x: 70
+y: 28
+width: 8
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 63
+x: 84
+y: 28
+width: 7
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 64
+x: 98
+y: 28
+width: 8
+height: 10
+hotspot_x: 0
+hotspot_y: -3
+
+image: 65
+x: 112
+y: 28
+width: 8
+height: 10
+hotspot_x: 0
+hotspot_y: -3
+
+image: 66
+x: 126
+y: 28
+width: 6
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 67
+x: 140
+y: 28
+width: 7
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 68
+x: 154
+y: 28
+width: 5
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 69
+x: 168
+y: 28
+width: 7
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 70
+x: 182
+y: 28
+width: 7
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 71
+x: 196
+y: 28
+width: 10
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 72
+x: 210
+y: 28
+width: 8
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 73
+x: 224
+y: 28
+width: 8
+height: 10
+hotspot_x: 0
+hotspot_y: -3
+
+image: 74
+x: 238
+y: 28
+width: 7
+height: 7
+hotspot_x: 0
+hotspot_y: -3
+
+image: 75
+x: 252
+y: 28
+width: 6
+height: 3
+hotspot_x: 0
+hotspot_y: -4
+
+image: 76
+x: 266
+y: 28
+width: 7
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 77
+x: 280
+y: 28
+width: 7
+height: 10
+hotspot_x: 0
+hotspot_y: 0
+
+image: 78
+x: 294
+y: 28
+width: 9
+height: 11
+hotspot_x: 0
+hotspot_y: 1
+
+image: 79
+x: 308
+y: 28
+width: 9
+height: 11
+hotspot_x: 0
+hotspot_y: 1
+
+image: 80
+x: 322
+y: 28
+width: 7
+height: 9
+hotspot_x: 0
+hotspot_y: -1
+
+image: 81
+x: 336
+y: 28
+width: 9
+height: 11
+hotspot_x: 0
+hotspot_y: 1
+
diff --git a/data/jump.mod b/data/jump.mod
new file mode 100644 (file)
index 0000000..204fe28
Binary files /dev/null and b/data/jump.mod differ
diff --git a/data/jump.smp b/data/jump.smp
new file mode 100644 (file)
index 0000000..92661e5
Binary files /dev/null and b/data/jump.smp differ
diff --git a/data/level.pcx b/data/level.pcx
new file mode 100644 (file)
index 0000000..ba30d92
Binary files /dev/null and b/data/level.pcx differ
diff --git a/data/levelmap.txt b/data/levelmap.txt
new file mode 100644 (file)
index 0000000..e87448f
--- /dev/null
@@ -0,0 +1,16 @@
+1110000000000000000000
+1000000000001000011000
+1000111100001100000000
+1000000000011110000011
+1100000000111000000001
+1110001111110000000001
+1000000000000011110001
+1000000000000000000011
+1110011100000000000111
+1000000000003100000001
+1000000000031110000001
+1011110000311111111001
+1000000000000000000001
+1100000000000000000011
+2222222214000001333111
+1111111111111111111111
\ No newline at end of file
diff --git a/data/mask.pcx b/data/mask.pcx
new file mode 100644 (file)
index 0000000..8e5856f
Binary files /dev/null and b/data/mask.pcx differ
diff --git a/data/menu.pcx b/data/menu.pcx
new file mode 100644 (file)
index 0000000..b31b9c8
Binary files /dev/null and b/data/menu.pcx differ
diff --git a/data/menumask.pcx b/data/menumask.pcx
new file mode 100644 (file)
index 0000000..6c47bb0
Binary files /dev/null and b/data/menumask.pcx differ
diff --git a/data/numbers.pcx b/data/numbers.pcx
new file mode 100644 (file)
index 0000000..d080bac
Binary files /dev/null and b/data/numbers.pcx differ
diff --git a/data/numbers.txt b/data/numbers.txt
new file mode 100644 (file)
index 0000000..3055319
--- /dev/null
@@ -0,0 +1,82 @@
+num_images: 10
+
+image: 1
+x: 0
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 2
+x: 18
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 3
+x: 36
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 4
+x: 54
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 5
+x: 72
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 6
+x: 90
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 7
+x: 108
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 8
+x: 126
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 9
+x: 144
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
+image: 10
+x: 162
+y: 0
+width: 16
+height: 22
+hotspot_x: 0
+hotspot_y: 0
+
diff --git a/data/objects.pcx b/data/objects.pcx
new file mode 100644 (file)
index 0000000..0e1371a
Binary files /dev/null and b/data/objects.pcx differ
diff --git a/data/objects.txt b/data/objects.txt
new file mode 100644 (file)
index 0000000..31a7295
--- /dev/null
@@ -0,0 +1,642 @@
+num_images: 80
+
+image: 1
+x: 0
+y: 0
+width: 17
+height: 7
+hotspot_x: 0
+hotspot_y: 3
+
+image: 2
+x: 32
+y: 0
+width: 17
+height: 8
+hotspot_x: 0
+hotspot_y: 4
+
+image: 3
+x: 64
+y: 0
+width: 17
+height: 12
+hotspot_x: 0
+hotspot_y: 8
+
+image: 4
+x: 96
+y: 0
+width: 17
+height: 10
+hotspot_x: 0
+hotspot_y: 6
+
+image: 5
+x: 128
+y: 0
+width: 17
+height: 8
+hotspot_x: 0
+hotspot_y: 4
+
+image: 6
+x: 160
+y: 0
+width: 17
+height: 7
+hotspot_x: 0
+hotspot_y: 3
+
+image: 7
+x: 192
+y: 0
+width: 12
+height: 6
+hotspot_x: 5
+hotspot_y: 5
+
+image: 8
+x: 224
+y: 0
+width: 16
+height: 8
+hotspot_x: 7
+hotspot_y: 7
+
+image: 9
+x: 256
+y: 0
+width: 20
+height: 10
+hotspot_x: 9
+hotspot_y: 9
+
+image: 10
+x: 288
+y: 0
+width: 23
+height: 11
+hotspot_x: 11
+hotspot_y: 10
+
+image: 11
+x: 320
+y: 0
+width: 25
+height: 12
+hotspot_x: 12
+hotspot_y: 11
+
+image: 12
+x: 352
+y: 0
+width: 27
+height: 11
+hotspot_x: 13
+hotspot_y: 10
+
+image: 13
+x: 0
+y: 14
+width: 29
+height: 10
+hotspot_x: 14
+hotspot_y: 8
+
+image: 14
+x: 32
+y: 14
+width: 30
+height: 7
+hotspot_x: 15
+hotspot_y: 5
+
+image: 15
+x: 64
+y: 14
+width: 29
+height: 4
+hotspot_x: 16
+hotspot_y: 2
+
+image: 16
+x: 96
+y: 14
+width: 2
+height: 2
+hotspot_x: 0
+hotspot_y: 0
+
+image: 17
+x: 128
+y: 14
+width: 4
+height: 4
+hotspot_x: 1
+hotspot_y: 1
+
+image: 18
+x: 160
+y: 14
+width: 5
+height: 5
+hotspot_x: 2
+hotspot_y: 2
+
+image: 19
+x: 192
+y: 14
+width: 5
+height: 5
+hotspot_x: 2
+hotspot_y: 2
+
+image: 20
+x: 224
+y: 14
+width: 5
+height: 5
+hotspot_x: 2
+hotspot_y: 2
+
+image: 21
+x: 256
+y: 14
+width: 7
+height: 5
+hotspot_x: 4
+hotspot_y: 4
+
+image: 22
+x: 288
+y: 14
+width: 8
+height: 4
+hotspot_x: 5
+hotspot_y: 3
+
+image: 23
+x: 320
+y: 14
+width: 9
+height: 3
+hotspot_x: 5
+hotspot_y: 2
+
+image: 24
+x: 352
+y: 14
+width: 8
+height: 3
+hotspot_x: 5
+hotspot_y: 1
+
+image: 25
+x: 0
+y: 28
+width: 8
+height: 4
+hotspot_x: 5
+hotspot_y: 1
+
+image: 26
+x: 32
+y: 28
+width: 7
+height: 5
+hotspot_x: 4
+hotspot_y: 1
+
+image: 27
+x: 64
+y: 28
+width: 7
+height: 5
+hotspot_x: 2
+hotspot_y: 4
+
+image: 28
+x: 96
+y: 28
+width: 8
+height: 4
+hotspot_x: 2
+hotspot_y: 3
+
+image: 29
+x: 128
+y: 28
+width: 9
+height: 3
+hotspot_x: 3
+hotspot_y: 2
+
+image: 30
+x: 160
+y: 28
+width: 8
+height: 3
+hotspot_x: 2
+hotspot_y: 1
+
+image: 31
+x: 192
+y: 28
+width: 8
+height: 4
+hotspot_x: 2
+hotspot_y: 1
+
+image: 32
+x: 224
+y: 28
+width: 7
+height: 5
+hotspot_x: 2
+hotspot_y: 1
+
+image: 33
+x: 256
+y: 28
+width: 7
+height: 5
+hotspot_x: 4
+hotspot_y: 4
+
+image: 34
+x: 288
+y: 28
+width: 8
+height: 4
+hotspot_x: 5
+hotspot_y: 3
+
+image: 35
+x: 320
+y: 28
+width: 9
+height: 3
+hotspot_x: 5
+hotspot_y: 2
+
+image: 36
+x: 352
+y: 28
+width: 8
+height: 3
+hotspot_x: 5
+hotspot_y: 1
+
+image: 37
+x: 0
+y: 42
+width: 8
+height: 4
+hotspot_x: 5
+hotspot_y: 1
+
+image: 38
+x: 32
+y: 42
+width: 7
+height: 5
+hotspot_x: 4
+hotspot_y: 1
+
+image: 39
+x: 64
+y: 42
+width: 7
+height: 5
+hotspot_x: 2
+hotspot_y: 4
+
+image: 40
+x: 96
+y: 42
+width: 8
+height: 4
+hotspot_x: 2
+hotspot_y: 3
+
+image: 41
+x: 128
+y: 42
+width: 9
+height: 3
+hotspot_x: 3
+hotspot_y: 2
+
+image: 42
+x: 160
+y: 42
+width: 8
+height: 3
+hotspot_x: 2
+hotspot_y: 1
+
+image: 43
+x: 192
+y: 42
+width: 8
+height: 4
+hotspot_x: 2
+hotspot_y: 1
+
+image: 44
+x: 224
+y: 42
+width: 7
+height: 5
+hotspot_x: 2
+hotspot_y: 1
+
+image: 45
+x: 256
+y: 42
+width: 6
+height: 4
+hotspot_x: 3
+hotspot_y: 2
+
+image: 46
+x: 288
+y: 42
+width: 6
+height: 5
+hotspot_x: 3
+hotspot_y: 3
+
+image: 47
+x: 320
+y: 42
+width: 4
+height: 6
+hotspot_x: 2
+hotspot_y: 3
+
+image: 48
+x: 352
+y: 42
+width: 5
+height: 6
+hotspot_x: 2
+hotspot_y: 3
+
+image: 49
+x: 0
+y: 56
+width: 6
+height: 4
+hotspot_x: 2
+hotspot_y: 2
+
+image: 50
+x: 32
+y: 56
+width: 6
+height: 5
+hotspot_x: 2
+hotspot_y: 2
+
+image: 51
+x: 64
+y: 56
+width: 4
+height: 6
+hotspot_x: 1
+hotspot_y: 2
+
+image: 52
+x: 96
+y: 56
+width: 5
+height: 6
+hotspot_x: 2
+hotspot_y: 3
+
+image: 53
+x: 128
+y: 56
+width: 6
+height: 4
+hotspot_x: 3
+hotspot_y: 2
+
+image: 54
+x: 160
+y: 56
+width: 6
+height: 5
+hotspot_x: 3
+hotspot_y: 2
+
+image: 55
+x: 192
+y: 56
+width: 4
+height: 6
+hotspot_x: 2
+hotspot_y: 3
+
+image: 56
+x: 224
+y: 56
+width: 5
+height: 6
+hotspot_x: 3
+hotspot_y: 3
+
+image: 57
+x: 256
+y: 56
+width: 6
+height: 4
+hotspot_x: 4
+hotspot_y: 2
+
+image: 58
+x: 288
+y: 56
+width: 6
+height: 5
+hotspot_x: 4
+hotspot_y: 3
+
+image: 59
+x: 320
+y: 56
+width: 4
+height: 6
+hotspot_x: 3
+hotspot_y: 3
+
+image: 60
+x: 352
+y: 56
+width: 5
+height: 6
+hotspot_x: 3
+hotspot_y: 3
+
+image: 61
+x: 0
+y: 70
+width: 6
+height: 4
+hotspot_x: 3
+hotspot_y: 2
+
+image: 62
+x: 32
+y: 70
+width: 6
+height: 5
+hotspot_x: 3
+hotspot_y: 2
+
+image: 63
+x: 64
+y: 70
+width: 4
+height: 6
+hotspot_x: 3
+hotspot_y: 2
+
+image: 64
+x: 96
+y: 70
+width: 5
+height: 6
+hotspot_x: 4
+hotspot_y: 2
+
+image: 65
+x: 128
+y: 70
+width: 6
+height: 4
+hotspot_x: 5
+hotspot_y: 1
+
+image: 66
+x: 160
+y: 70
+width: 6
+height: 5
+hotspot_x: 5
+hotspot_y: 2
+
+image: 67
+x: 192
+y: 70
+width: 4
+height: 6
+hotspot_x: 4
+hotspot_y: 3
+
+image: 68
+x: 224
+y: 70
+width: 5
+height: 6
+hotspot_x: 3
+hotspot_y: 3
+
+image: 69
+x: 256
+y: 70
+width: 6
+height: 4
+hotspot_x: 3
+hotspot_y: 2
+
+image: 70
+x: 288
+y: 70
+width: 6
+height: 5
+hotspot_x: 3
+hotspot_y: 2
+
+image: 71
+x: 320
+y: 70
+width: 4
+height: 6
+hotspot_x: 2
+hotspot_y: 2
+
+image: 72
+x: 352
+y: 70
+width: 5
+height: 6
+hotspot_x: 4
+hotspot_y: 2
+
+image: 73
+x: 0
+y: 84
+width: 6
+height: 4
+hotspot_x: 5
+hotspot_y: 1
+
+image: 74
+x: 32
+y: 84
+width: 6
+height: 5
+hotspot_x: 5
+hotspot_y: 2
+
+image: 75
+x: 64
+y: 84
+width: 4
+height: 6
+hotspot_x: 3
+hotspot_y: 3
+
+image: 76
+x: 96
+y: 84
+width: 5
+height: 6
+hotspot_x: 3
+hotspot_y: 3
+
+image: 77
+x: 128
+y: 84
+width: 5
+height: 4
+hotspot_x: 2
+hotspot_y: 1
+
+image: 78
+x: 160
+y: 84
+width: 4
+height: 4
+hotspot_x: 2
+hotspot_y: 1
+
+image: 79
+x: 192
+y: 84
+width: 2
+height: 3
+hotspot_x: 1
+hotspot_y: 1
+
+image: 80
+x: 224
+y: 84
+width: 1
+height: 1
+hotspot_x: 0
+hotspot_y: 0
+
diff --git a/data/pack.bat b/data/pack.bat
new file mode 100644 (file)
index 0000000..94de5b2
--- /dev/null
@@ -0,0 +1,6 @@
+cd %1
+%2 font
+%2 rabbit
+%2 numbers
+%2 objects
+%3 -o jumpbump.dat bump.mod calib.dat death.smp fly.smp font.gob jump.mod jump.smp levelmap.txt level.pcx mask.pcx menu.pcx menumask.pcx numbers.gob objects.gob rabbit.gob scores.mod splash.smp spring.smp
diff --git a/data/rabbit.pcx b/data/rabbit.pcx
new file mode 100644 (file)
index 0000000..6ed26f2
Binary files /dev/null and b/data/rabbit.pcx differ
diff --git a/data/rabbit.txt b/data/rabbit.txt
new file mode 100644 (file)
index 0000000..9902f7c
--- /dev/null
@@ -0,0 +1,578 @@
+num_images: 72
+
+image: 1
+x: 0
+y: 0
+width: 13
+height: 15
+hotspot_x: -2
+hotspot_y: -1
+
+image: 2
+x: 19
+y: 0
+width: 14
+height: 14
+hotspot_x: -2
+hotspot_y: 0
+
+image: 3
+x: 38
+y: 0
+width: 14
+height: 16
+hotspot_x: -2
+hotspot_y: 2
+
+image: 4
+x: 57
+y: 0
+width: 13
+height: 16
+hotspot_x: -3
+hotspot_y: 2
+
+image: 5
+x: 76
+y: 0
+width: 14
+height: 14
+hotspot_x: -3
+hotspot_y: -2
+
+image: 6
+x: 95
+y: 0
+width: 15
+height: 14
+hotspot_x: -1
+hotspot_y: 0
+
+image: 7
+x: 114
+y: 0
+width: 16
+height: 16
+hotspot_x: 0
+hotspot_y: 0
+
+image: 8
+x: 133
+y: 0
+width: 17
+height: 16
+hotspot_x: 1
+hotspot_y: 0
+
+image: 9
+x: 152
+y: 0
+width: 17
+height: 13
+hotspot_x: -1
+hotspot_y: -3
+
+image: 10
+x: 171
+y: 0
+width: 13
+height: 15
+hotspot_x: -1
+hotspot_y: -1
+
+image: 11
+x: 190
+y: 0
+width: 14
+height: 14
+hotspot_x: 0
+hotspot_y: 0
+
+image: 12
+x: 209
+y: 0
+width: 14
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 13
+x: 228
+y: 0
+width: 13
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 14
+x: 247
+y: 0
+width: 14
+height: 14
+hotspot_x: 1
+hotspot_y: -1
+
+image: 15
+x: 266
+y: 0
+width: 15
+height: 14
+hotspot_x: 0
+hotspot_y: 1
+
+image: 16
+x: 285
+y: 0
+width: 16
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 17
+x: 304
+y: 0
+width: 17
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 18
+x: 323
+y: 0
+width: 17
+height: 13
+hotspot_x: 2
+hotspot_y: -4
+
+image: 19
+x: 342
+y: 0
+width: 13
+height: 15
+hotspot_x: -2
+hotspot_y: -1
+
+image: 20
+x: 361
+y: 0
+width: 14
+height: 14
+hotspot_x: -2
+hotspot_y: 0
+
+image: 21
+x: 380
+y: 0
+width: 14
+height: 16
+hotspot_x: -2
+hotspot_y: 2
+
+image: 22
+x: 0
+y: 18
+width: 13
+height: 16
+hotspot_x: -3
+hotspot_y: 2
+
+image: 23
+x: 19
+y: 18
+width: 14
+height: 14
+hotspot_x: -3
+hotspot_y: -2
+
+image: 24
+x: 38
+y: 18
+width: 15
+height: 14
+hotspot_x: -1
+hotspot_y: 0
+
+image: 25
+x: 57
+y: 18
+width: 16
+height: 16
+hotspot_x: 0
+hotspot_y: 0
+
+image: 26
+x: 76
+y: 18
+width: 17
+height: 16
+hotspot_x: 1
+hotspot_y: 0
+
+image: 27
+x: 95
+y: 18
+width: 17
+height: 13
+hotspot_x: -1
+hotspot_y: -3
+
+image: 28
+x: 114
+y: 18
+width: 13
+height: 15
+hotspot_x: -1
+hotspot_y: -1
+
+image: 29
+x: 133
+y: 18
+width: 14
+height: 14
+hotspot_x: 0
+hotspot_y: 0
+
+image: 30
+x: 152
+y: 18
+width: 14
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 31
+x: 171
+y: 18
+width: 13
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 32
+x: 190
+y: 18
+width: 14
+height: 14
+hotspot_x: 1
+hotspot_y: -1
+
+image: 33
+x: 209
+y: 18
+width: 15
+height: 14
+hotspot_x: 0
+hotspot_y: 1
+
+image: 34
+x: 228
+y: 18
+width: 16
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 35
+x: 247
+y: 18
+width: 17
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 36
+x: 266
+y: 18
+width: 17
+height: 13
+hotspot_x: 2
+hotspot_y: -4
+
+image: 37
+x: 285
+y: 18
+width: 13
+height: 15
+hotspot_x: -2
+hotspot_y: -1
+
+image: 38
+x: 304
+y: 18
+width: 14
+height: 14
+hotspot_x: -2
+hotspot_y: 0
+
+image: 39
+x: 323
+y: 18
+width: 14
+height: 16
+hotspot_x: -2
+hotspot_y: 2
+
+image: 40
+x: 342
+y: 18
+width: 13
+height: 16
+hotspot_x: -3
+hotspot_y: 2
+
+image: 41
+x: 361
+y: 18
+width: 14
+height: 14
+hotspot_x: -3
+hotspot_y: -2
+
+image: 42
+x: 380
+y: 18
+width: 15
+height: 14
+hotspot_x: -1
+hotspot_y: 0
+
+image: 43
+x: 0
+y: 36
+width: 16
+height: 16
+hotspot_x: 0
+hotspot_y: 0
+
+image: 44
+x: 19
+y: 36
+width: 17
+height: 16
+hotspot_x: 1
+hotspot_y: 0
+
+image: 45
+x: 38
+y: 36
+width: 17
+height: 13
+hotspot_x: -1
+hotspot_y: -3
+
+image: 46
+x: 57
+y: 36
+width: 13
+height: 15
+hotspot_x: -1
+hotspot_y: -1
+
+image: 47
+x: 76
+y: 36
+width: 14
+height: 14
+hotspot_x: 0
+hotspot_y: 0
+
+image: 48
+x: 95
+y: 36
+width: 14
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 49
+x: 114
+y: 36
+width: 13
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 50
+x: 133
+y: 36
+width: 14
+height: 14
+hotspot_x: 1
+hotspot_y: -1
+
+image: 51
+x: 152
+y: 36
+width: 15
+height: 14
+hotspot_x: 0
+hotspot_y: 1
+
+image: 52
+x: 171
+y: 36
+width: 16
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 53
+x: 190
+y: 36
+width: 17
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 54
+x: 209
+y: 36
+width: 17
+height: 13
+hotspot_x: 2
+hotspot_y: -4
+
+image: 55
+x: 228
+y: 36
+width: 13
+height: 15
+hotspot_x: -2
+hotspot_y: -1
+
+image: 56
+x: 247
+y: 36
+width: 14
+height: 14
+hotspot_x: -2
+hotspot_y: -1
+
+image: 57
+x: 266
+y: 36
+width: 14
+height: 16
+hotspot_x: -2
+hotspot_y: 2
+
+image: 58
+x: 285
+y: 36
+width: 13
+height: 16
+hotspot_x: -3
+hotspot_y: 2
+
+image: 59
+x: 304
+y: 36
+width: 14
+height: 14
+hotspot_x: -3
+hotspot_y: -2
+
+image: 60
+x: 323
+y: 36
+width: 15
+height: 14
+hotspot_x: -1
+hotspot_y: 0
+
+image: 61
+x: 342
+y: 36
+width: 16
+height: 16
+hotspot_x: 0
+hotspot_y: 0
+
+image: 62
+x: 361
+y: 36
+width: 17
+height: 16
+hotspot_x: 1
+hotspot_y: 0
+
+image: 63
+x: 380
+y: 36
+width: 17
+height: 13
+hotspot_x: -1
+hotspot_y: -3
+
+image: 64
+x: 0
+y: 54
+width: 13
+height: 15
+hotspot_x: -1
+hotspot_y: -1
+
+image: 65
+x: 19
+y: 54
+width: 14
+height: 14
+hotspot_x: 0
+hotspot_y: 0
+
+image: 66
+x: 38
+y: 54
+width: 14
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 67
+x: 57
+y: 54
+width: 13
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 68
+x: 76
+y: 54
+width: 14
+height: 14
+hotspot_x: 1
+hotspot_y: -1
+
+image: 69
+x: 95
+y: 54
+width: 15
+height: 14
+hotspot_x: 0
+hotspot_y: 1
+
+image: 70
+x: 114
+y: 54
+width: 16
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 71
+x: 133
+y: 54
+width: 17
+height: 16
+hotspot_x: 0
+hotspot_y: 2
+
+image: 72
+x: 152
+y: 54
+width: 17
+height: 13
+hotspot_x: 2
+hotspot_y: -4
+
diff --git a/data/scores.mod b/data/scores.mod
new file mode 100644 (file)
index 0000000..7ed2bfd
Binary files /dev/null and b/data/scores.mod differ
diff --git a/data/splash.smp b/data/splash.smp
new file mode 100644 (file)
index 0000000..5bb55a1
Binary files /dev/null and b/data/splash.smp differ
diff --git a/data/spring.smp b/data/spring.smp
new file mode 100644 (file)
index 0000000..3c2ca08
Binary files /dev/null and b/data/spring.smp differ
diff --git a/dj.h b/dj.h
new file mode 100644 (file)
index 0000000..c5d6b5a
--- /dev/null
+++ b/dj.h
@@ -0,0 +1,135 @@
+/*
+ * dj.h
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ * 
+ * Copyright (C) 2002 Florian Schulze - crow@icculus.org
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump 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.
+ *
+ * Jump'n'Bump 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
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef DOS
+#include <pc.h>
+#include <dpmi.h>
+#include <go32.h>
+#include <sys/nearptr.h>
+#endif
+
+#define DJ_SD_TYPE_NOSOUND 0
+#define DJ_SD_TYPE_SBLASTER 1
+
+#define DJ_SFX_TYPE_SSS 0
+#define DJ_SFX_TYPE_WAV 1
+#define DJ_SFX_TYPE_SMP 2
+
+
+typedef struct dj_hardware_info {
+       char sd_type;
+  short sd_version;
+       short port;
+       char irq;
+       char dma;
+} dj_hardware_info;
+
+typedef struct dj_mixing_info {
+  char sfx_volume, num_sfx_channels;
+  char mod_volume, num_mod_channels;
+       char stereo_mix, auto_mix;
+  unsigned short mixing_freq;
+  unsigned short dma_time, dmabuf_len;
+  char cur_dmabuf;
+       unsigned long dmabuf_address[2];
+  char *mixed_buf;
+} dj_mixing_info;
+
+typedef struct sfx_data {
+  char priority;
+  unsigned short default_freq;
+  char default_volume;
+  unsigned long length;
+  char loop;
+  unsigned long loop_start, loop_length;
+  unsigned char *buf;
+} sfx_data;
+
+typedef struct dj_mod_info {
+  char num_channels;
+       char speed;
+       short bpm;
+       char order_pos;
+       char pat_pos;
+       char name[20];
+       struct {
+               char name[22];
+               unsigned short length;
+               char finetune;
+               char volume;
+               unsigned short loop_start;
+               unsigned short loop_length;
+               char *buf;
+       } samples[31];
+       char song_length;
+       char num_pat;
+       char pat_order[128];
+  char *pat[128];
+} dj_mod_info;
+
+
+extern char dj_init(void);
+extern void dj_deinit(void);
+extern void dj_start(void);
+extern void dj_stop(void);
+extern void dj_set_nosound(char flag);
+extern char dj_set_sd(char sd_type, short port, char irq, char dma);
+extern char dj_autodetect_sd(void);
+extern void dj_get_sd_string(char *strbuf);
+extern char dj_set_stereo(char flag);
+extern void dj_reverse_stereo(char flag);
+extern void dj_set_auto_mix(char flag);
+extern unsigned short dj_set_mixing_freq(unsigned short freq);
+extern void dj_set_dma_time(unsigned short time);
+extern char dj_get_hardware_info(dj_hardware_info *ptr);
+extern char dj_get_mixing_info(dj_mixing_info *ptr);
+extern char dj_get_mod_info(char mod_num, dj_mod_info *ptr);
+extern void dj_set_fake_vu_speed(unsigned char speed);
+extern unsigned char dj_get_fake_vu(char channel);
+extern char dj_reset_sd(void);
+
+extern char dj_mix_needed(void);
+extern void dj_mix(void);
+
+extern char dj_set_num_sfx_channels(char num_channels);
+extern void dj_set_sfx_volume(char volume);
+extern char dj_get_sfx_volume(void);
+extern void dj_play_sfx(unsigned char sfx_num, unsigned short freq, char volume, char panning, unsigned short delay, char channel);
+extern char dj_get_sfx_settings(unsigned char sfx_num, sfx_data *data);
+extern char dj_set_sfx_settings(unsigned char sfx_num, sfx_data *data);
+extern void dj_set_sfx_channel_volume(char channel_num, char volume);
+extern void dj_stop_sfx_channel(char channel_num);
+extern char dj_load_sfx(unsigned char *file_handle, char *filename, int file_length, char sfx_type, unsigned char sfx_num);
+extern void dj_free_sfx(unsigned char sfx_num);
+
+extern char dj_ready_mod(char mod_num);
+extern char dj_start_mod(void);
+extern void dj_stop_mod(void);
+extern void dj_set_mod_volume(char volume);
+extern char dj_get_mod_volume(void);
+extern char dj_load_mod(unsigned char *file_handle, char *filename, char mod_num);
+extern void dj_free_mod(char mod_num);
+
diff --git a/dos/gfx.S b/dos/gfx.S
new file mode 100644 (file)
index 0000000..1b895af
--- /dev/null
+++ b/dos/gfx.S
@@ -0,0 +1,271 @@
+[GLOBAL _get_block]
+[GLOBAL _put_block]
+
+[EXTERN ___djgpp_base_address]
+
+
+[SECTION .text]
+
+
+; void get_block(char page, long x, long y, long width, long height, char *buffer);
+
+_get_block
+       push    ebp
+       mov     ebp,esp
+       pusha
+
+       mov     eax,[ebp+12]
+       mov     [.x],eax
+       mov     eax,[ebp+16]
+       mov     [.y],eax
+       mov     eax,[ebp+20]
+       mov     [.draw_width],eax
+       mov     eax,[ebp+24]
+       mov     [.draw_height],eax
+       mov     eax,[ebp+28]
+       mov     [.buf_ptr],eax
+
+       mov     eax,[.x]
+       or      eax,eax
+       jns     .11
+
+       neg     eax
+       cmp     eax,[ebp+20]
+       jge     near .exit
+
+       mov     dword [.x],0
+       sub     [.draw_width],eax
+       add     [.buf_ptr],eax
+
+.11
+       cmp     dword [.x],400
+       jge     near .exit
+
+       mov     eax,[.y]
+       or      eax,eax
+       jns     .12
+
+       neg     eax
+       cmp     eax,[ebp+24]
+       jge     near .exit
+
+       mov     dword [.y],0
+       sub     [.draw_height],eax
+       imul    dword [ebp+20]
+       add     [.buf_ptr],eax
+
+.12
+       cmp     eax,256
+       jge     near .exit
+
+       mov     edi,0xa0000
+       sub     edi,[___djgpp_base_address]
+       xor     eax,eax
+       mov     al,[ebp+8]
+       shl     eax,15
+       add     edi,eax
+       mov     eax,100
+       imul    dword [.y]
+       add     edi,eax
+       mov     [.vga_ptr],edi
+
+       mov     dword [.c1],0
+
+.1
+       mov     edx,0x3ce
+        mov    eax,[.x]
+       add     eax,[.c1]
+       shl     eax,8
+       and     ah,3
+       mov     al,4
+       out     dx,ax
+
+       mov     esi,[.vga_ptr]
+       mov     eax,[.x]
+       add     eax,[.c1]
+       sar     eax,2
+       add     esi,eax
+
+       mov     edi,[.buf_ptr]
+       add     edi,[.c1]
+
+       mov     ebx,[.draw_height]
+
+.2
+       mov     ecx,[.draw_width]
+       add     ecx,3
+       sub     ecx,[.c1]
+       shr     ecx,2
+       mov     edx,ecx
+       cmp     ecx,0
+       jle     .4
+
+.3
+       mov     al,[esi]
+       mov     [edi],al
+       inc     esi
+       add     edi,4
+       dec     cx
+       jnz     .3
+
+.4
+       add     esi,100
+       sub     esi,edx
+
+       add     edi,[ebp+20]
+       mov     eax,edx
+       shl     eax,2
+       sub     edi,eax
+
+       dec     ebx
+       jnz     .2
+
+       inc     byte [.c1]
+       cmp     byte [.c1],4
+       jl      near .1
+
+.exit
+       popa
+       pop     ebp
+       ret
+
+.c1            dd      0
+.vga_ptr       dd      0
+.x             dd      0
+.y             dd      0
+.draw_width    dd      0
+.draw_height   dd      0
+.buf_ptr       dd      0
+
+
+; void put_block(char page, long x, long y, long width, long height, char *buffer);
+
+_put_block
+       push    ebp
+       mov     ebp,esp
+       pusha
+
+       mov     eax,[ebp+12]
+       mov     [.x],eax
+       mov     eax,[ebp+16]
+       mov     [.y],eax
+       mov     eax,[ebp+20]
+       mov     [.draw_width],eax
+       mov     eax,[ebp+24]
+       mov     [.draw_height],eax
+       mov     eax,[ebp+28]
+       mov     [.buf_ptr],eax
+
+       mov     eax,[.x]
+       or      eax,eax
+       jns     .11
+
+       neg     eax
+       cmp     eax,[ebp+20]
+       jge     near .exit
+
+       mov     dword [.x],0
+       sub     [.draw_width],eax
+       add     [.buf_ptr],eax
+
+.11
+       cmp     dword [.x],400
+       jge     near .exit
+
+       mov     eax,[.y]
+       or      eax,eax
+       jns     .12
+
+       neg     eax
+       cmp     eax,[ebp+24]
+       jge     near .exit
+
+       mov     dword [.y],0
+       sub     [.draw_height],eax
+       imul    dword [ebp+20]
+       add     [.buf_ptr],eax
+
+.12
+       cmp     eax,256
+       jge     near .exit
+
+       mov     edi,0xa0000
+       sub     edi,[___djgpp_base_address]
+       xor     eax,eax
+       mov     al,[ebp+8]
+       shl     eax,15
+       add     edi,eax
+       mov     eax,100
+       imul    dword [.y]
+       add     edi,eax
+       mov     [.vga_ptr],edi
+
+       mov     dword [.c1],0
+
+.1
+       mov     edx,0x3c4
+       mov     eax,0x100
+        mov    ecx,[.x]
+       add     ecx,[.c1]
+       and     ecx,3
+       shl     eax,cl
+       mov     al,2
+       out     dx,ax
+
+       mov     esi,[.buf_ptr]
+       add     esi,[.c1]
+
+       mov     edi,[.vga_ptr]
+       mov     eax,[.x]
+       add     eax,[.c1]
+       sar     eax,2
+       add     edi,eax
+
+       mov     ebx,[.draw_height]
+
+.2
+       mov     ecx,[.draw_width]
+       add     ecx,3
+       sub     ecx,[.c1]
+       shr     ecx,2
+       mov     edx,ecx
+       cmp     ecx,0
+       jle     .4
+
+.3
+       mov     al,[esi]
+       mov     [edi],al
+       add     esi,4
+       inc     edi
+       dec     ecx
+       jnz     .3
+
+.4
+       add     esi,[ebp+20]
+       mov     eax,edx
+       shl     eax,2
+       sub     esi,eax
+
+       add     edi,100
+       sub     edi,edx
+
+       dec     ebx
+       jnz     .2
+
+       inc     byte [.c1]
+       cmp     byte [.c1],4
+       jl      near .1
+
+.exit
+       popa
+       pop     ebp
+       ret
+
+.c1            dd      0
+.vga_ptr       dd      0
+.x             dd      0
+.y             dd      0
+.draw_width    dd      0
+.draw_height   dd      0
+.buf_ptr       dd      0
+
diff --git a/dos/gfx.c b/dos/gfx.c
new file mode 100644 (file)
index 0000000..5b40d0a
--- /dev/null
+++ b/dos/gfx.c
@@ -0,0 +1,473 @@
+/*
+ * gfx.h
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ * 
+ * Copyright (C) 2002 Florian Schulze - crow@icculus.org
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump 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.
+ *
+ * Jump'n'Bump 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
+ */
+
+#include "globals.h"
+
+
+void open_screen(void)
+{
+       __dpmi_regs regs;
+       char *ptr1;
+
+       regs.x.ax = 0x13;
+       __dpmi_int(0x10, &regs);
+
+       outportw(0x3c4, 0x0604);
+       outportw(0x3c4, 0x0100);
+       outportb(0x3c2, 0xe7);
+       outportw(0x3c4, 0x0300);
+
+       outportb(0x3d4, 0x11);
+       outportb(0x3d5, inportb(0x3d5) & 0x7f);
+
+       outportw(0x3d4, 0x7100);
+       outportw(0x3d4, 0x6301);
+       outportw(0x3d4, 0x6402);
+       outportw(0x3d4, 0x9203);
+       outportw(0x3d4, 0x6604);
+       outportw(0x3d4, 0x8205);
+       outportw(0x3d4, 0x2b06);
+       outportw(0x3d4, 0xb207);
+       outportw(0x3d4, 0x0008);
+       outportw(0x3d4, 0x6109);
+       outportw(0x3d4, 0x1310);
+       outportw(0x3d4, 0xac11);
+       outportw(0x3d4, 0xff12);
+       outportw(0x3d4, 0x3213);
+       outportw(0x3d4, 0x0014);
+       outportw(0x3d4, 0x0715);
+       outportw(0x3d4, 0x1a16);
+       outportw(0x3d4, 0xe317);
+
+       outportw(0x3d4, 0x3213);
+
+       ptr1 = (char *) (0xa0000 + __djgpp_conventional_base);
+       outportw(0x3c4, 0x0f02);
+       memset(ptr1, 0, 65535);
+
+}
+
+
+void wait_vrt(int mix)
+{
+       if (mix) {
+               while ((inportb(0x3da) & 8) == 0)
+                       dj_mix();
+               while ((inportb(0x3da) & 8) == 8)
+                       dj_mix();
+       } else {
+               while ((inportb(0x3da) & 8) == 0);
+               while ((inportb(0x3da) & 8) == 8);
+       }
+}
+
+void clear_page(int page, int color)
+{
+       outportw(0x3c4, 0x0f02);
+       memset((char *) (0xa0000 - __djgpp_base_address), 0, 32768);
+}
+
+void clear_lines(int page, int y, int count, int color)
+{
+       int i;
+
+       outportw(0x3c4, 0x0f02);
+       for (i=0; i<count; i++)
+               if ((i+y)<256)
+                       memset((char *) (0xa0000 + (i+y) * 100 + __djgpp_conventional_base), 0, 100);
+}
+
+int get_pixel(int page, int x, int y)
+{
+       outportw(0x3ce, (((x) & 3) << 8) + 0x04);
+       //outportw(0x3c4, ((1 << ((x) & 3)) << 8) + 0x02);
+       return *(char *) (0xa0000 + (y * 100 + (x >> 2)) + ((long) page << 15) - __djgpp_base_address);
+}
+
+void set_pixel(int page, int x, int y, int color)
+{
+       //outportw(0x3ce, (((x) & 3) << 8) + 0x04);
+       outportw(0x3c4, ((1 << ((x) & 3)) << 8) + 0x02);
+       *(char *) (0xa0000 + (y * 100 + (x >> 2)) + ((long) page << 15) - __djgpp_base_address) = color;
+}
+
+void flippage(int page)
+{
+       outportw(0x3d4, (page << 23) + 0x0d);
+       outportw(0x3d4, ((page << 15) & 0xff00) + 0x0c);
+}
+
+#if 0
+void get_block(char page, short x, short y, short width, short height, char *buffer)
+{
+       short c1, c2, c3;
+       char *buffer_ptr, *vga_ptr;
+
+       for (c3 = 0; c3 < 4; c3++) {
+               outportw(0x3ce, (((x + c3) & 3) << 8) + 0x04);
+               for (c1 = 0; (c1 + c3) < width; c1 += 4) {
+                       buffer_ptr = &buffer[(c1 + c3) * height];
+                       vga_ptr = (char *) (0xa0000 + ((long) page << 15) + (long) y * 100 + ((x + c1 + c3) >> 2) + __djgpp_conventional_base);
+                       for (c2 = 0; c2 < height; c2++) {
+                               *buffer_ptr = *vga_ptr;
+                               buffer_ptr++;
+                               vga_ptr += 100;
+                       }
+               }
+       }
+
+}
+#endif
+
+#if 0
+void put_block(char page, short x, short y, short width, short height, char *buffer)
+{
+       short c1, c2, c3;
+       char *vga_ptr, *buffer_ptr;
+
+       for (c3 = 0; c3 < 4; c3++) {
+               outportw(0x3c4, ((1 << ((x + c3) & 3)) << 8) + 0x02);
+               for (c1 = 0; (c1 + c3) < width; c1 += 4) {
+                       vga_ptr = (char *) (0xa0000 + ((long) page << 15) + (long) y * 100 + ((x + c1 + c3) >> 2) + __djgpp_conventional_base);
+                       buffer_ptr = &buffer[(c1 + c3) * height];
+                       for (c2 = 0; c2 < height; c2++) {
+                               *vga_ptr = *buffer_ptr;
+                               vga_ptr += 100;
+                               buffer_ptr++;
+                       }
+               }
+       }
+
+}
+#endif
+
+void put_text(char page, int x, int y, char *text, char align)
+{
+       int c1;
+       int t1;
+       int width;
+       int cur_x;
+       int image;
+
+       if (text == NULL || strlen(text) == 0)
+               return;
+       if (font_gobs == NULL)
+               return;
+
+       width = 0;
+       c1 = 0;
+       while (text[c1] != 0) {
+               t1 = text[c1];
+               c1++;
+               if (t1 == ' ') {
+                       width += 5;
+                       continue;
+               }
+               if (t1 >= 33 && t1 <= 34)
+                       image = t1 - 33;
+               else if (t1 >= 39 && t1 <= 41)
+                       image = t1 - 37;
+               else if (t1 >= 44 && t1 <= 59)
+                       image = t1 - 39;
+               else if (t1 >= 64 && t1 <= 90)
+                       image = t1 - 43;
+               else if (t1 >= 97 && t1 <= 122)
+                       image = t1 - 49;
+               else if (t1 == '~')
+                       image = 74;
+               else if (t1 == 0x84)
+                       image = 75;
+               else if (t1 == 0x86)
+                       image = 76;
+               else if (t1 == 0x8e)
+                       image = 77;
+               else if (t1 == 0x8f)
+                       image = 78;
+               else if (t1 == 0x94)
+                       image = 79;
+               else if (t1 == 0x99)
+                       image = 80;
+               else
+                       continue;
+               width += pob_width(image, font_gobs) + 1;
+       }
+
+       switch (align) {
+       case 0:
+               cur_x = x;
+               break;
+       case 1:
+               cur_x = x - width;
+               break;
+       case 2:
+               cur_x = x - width / 2;
+               break;
+       }
+       c1 = 0;
+       while (text[c1] != 0) {
+               t1 = text[c1];
+               c1++;
+               if (t1 == ' ') {
+                       cur_x += 5;
+                       continue;
+               }
+               if (t1 >= 33 && t1 <= 34)
+                       image = t1 - 33;
+               else if (t1 >= 39 && t1 <= 41)
+                       image = t1 - 37;
+               else if (t1 >= 44 && t1 <= 59)
+                       image = t1 - 39;
+               else if (t1 >= 64 && t1 <= 90)
+                       image = t1 - 43;
+               else if (t1 >= 97 && t1 <= 122)
+                       image = t1 - 49;
+               else if (t1 == '~')
+                       image = 74;
+               else if (t1 == 0x84)
+                       image = 75;
+               else if (t1 == 0x86)
+                       image = 76;
+               else if (t1 == 0x8e)
+                       image = 77;
+               else if (t1 == 0x8f)
+                       image = 78;
+               else if (t1 == 0x94)
+                       image = 79;
+               else if (t1 == 0x99)
+                       image = 80;
+               else
+                       continue;
+               put_pob(page, cur_x, y, image, font_gobs, 1, mask_pic);
+               cur_x += pob_width(image, font_gobs) + 1;
+       }
+
+}
+
+
+void put_pob(char page, short x, short y, short image, char *pob_data, char mask, char *mask_pic)
+{
+       long c1, c2, c3;
+       long pob_offset;
+       char *pob_ptr, *vga_ptr, *mask_ptr;
+       long width, height;
+       long draw_width, draw_height;
+       char colour;
+
+       if (image < 0 || image >= *(short *) (pob_data))
+               return;
+
+       pob_offset = *(long *) (pob_data + image * 4 + 2);
+
+       width = draw_width = *(short *) (pob_data + pob_offset);
+       height = draw_height = *(short *) (pob_data + pob_offset + 2);
+       x -= *(short *) (pob_data + pob_offset + 4);
+       y -= *(short *) (pob_data + pob_offset + 6);
+
+       pob_offset += 8;
+
+       if ((x + width) <= 0 || x >= 400)
+               return;
+       if ((y + height) <= 0 || y >= 256)
+               return;
+       if (x < 0) {
+               pob_offset -= x;
+               draw_width += x;
+               x = 0;
+       }
+       if ((x + width) > 400)
+               draw_width -= x + width - 400;
+       if (y < 0) {
+               pob_offset += -y * width;
+               draw_height -= -y;
+               y = 0;
+       }
+       if ((y + height) > 256)
+               draw_height -= y + height - 256;
+
+       for (c3 = 0; c3 < 4; c3++) {
+               outportw(0x3c4, ((1 << ((x + c3) & 3)) << 8) + 0x02);
+               pob_ptr = &pob_data[pob_offset + c3];
+               vga_ptr = (char *) (0xa0000 + (long) (page << 15) + (long) y * 100L + ((x + c3) >> 2) + __djgpp_conventional_base);
+               mask_ptr = (char *) (mask_pic + (long) y * 400L + x + c3);
+               for (c1 = 0; c1 < draw_height; c1++) {
+                       for (c2 = c3; c2 < draw_width; c2 += 4) {
+                               colour = *mask_ptr;
+                               if (mask == 0 || (mask == 1 && colour == 0)) {
+                                       colour = *pob_ptr;
+                                       if (colour != 0)
+                                               *vga_ptr = colour;
+                               }
+                               pob_ptr += 4;
+                               vga_ptr++;
+                               mask_ptr += 4;
+                       }
+                       pob_ptr += width - c2 + c3;
+                       vga_ptr += (400 - c2 + c3) >> 2;
+                       mask_ptr += 400 - c2 + c3;
+               }
+       }
+
+}
+
+
+char pob_col(short x1, short y1, short image1, char *pob_data1, short x2, short y2, short image2, char *pob_data2)
+{
+       short c1, c2;
+       long pob_offset1, pob_offset2;
+       short width1, width2;
+       short height1, height2;
+       short check_width, check_height;
+       char *pob_ptr1, *pob_ptr2;
+
+       pob_offset1 = *(long *) (pob_data1 + image1 * 4 + 2);
+       width1 = *(short *) (pob_data1 + pob_offset1);
+       height1 = *(short *) (pob_data1 + pob_offset1 + 2);
+       x1 -= *(short *) (pob_data1 + pob_offset1 + 4);
+       y1 -= *(short *) (pob_data1 + pob_offset1 + 6);
+       pob_offset1 += 8;
+
+       pob_offset2 = *(long *) (pob_data2 + image2 * 4 + 2);
+       width2 = *(short *) (pob_data2 + pob_offset2);
+       height2 = *(short *) (pob_data2 + pob_offset2 + 2);
+       x2 -= *(short *) (pob_data2 + pob_offset2 + 4);
+       y2 -= *(short *) (pob_data2 + pob_offset2 + 6);
+       pob_offset2 += 8;
+
+       if (x1 < x2) {
+               if ((x1 + width1) <= x2)
+                       return 0;
+               else if ((x1 + width1) <= (x2 + width2)) {
+                       pob_offset1 += x2 - x1;
+                       check_width = x1 + width1 - x2;
+               } else {
+                       pob_offset1 += x2 - x1;
+                       check_width = width2;
+               }
+       } else {
+               if ((x2 + width2) <= x1)
+                       return 0;
+               else if ((x2 + width2) <= (x1 + width1)) {
+                       pob_offset2 += x1 - x2;
+                       check_width = x2 + width2 - x1;
+               } else {
+                       pob_offset2 += x1 - x2;
+                       check_width = width1;
+               }
+       }
+       if (y1 < y2) {
+               if ((y1 + height1) <= y2)
+                       return 0;
+               else if ((y1 + height1) <= (y2 + height2)) {
+                       pob_offset1 += (y2 - y1) * width1;
+                       check_height = y1 + height1 - y2;
+               } else {
+                       pob_offset1 += (y2 - y1) * width1;
+                       check_height = height2;
+               }
+       } else {
+               if ((y2 + height2) <= y1)
+                       return 0;
+               else if ((y2 + height2) <= (y1 + height1)) {
+                       pob_offset2 += (y1 - y2) * width2;
+                       check_height = y2 + height2 - y1;
+               } else {
+                       pob_offset2 += (y1 - y2) * width2;
+                       check_height = height1;
+               }
+       }
+
+       pob_ptr1 = (char *) (pob_data1 + pob_offset1);
+       pob_ptr2 = (char *) (pob_data2 + pob_offset2);
+       for (c1 = 0; c1 < check_height; c1++) {
+               for (c2 = 0; c2 < check_width; c2++) {
+                       if (*pob_ptr1 != 0 && *pob_ptr2 != 0)
+                               return 1;
+                       pob_ptr1++;
+                       pob_ptr2++;
+               }
+               pob_ptr1 += width1 - check_width;
+               pob_ptr2 += width2 - check_width;
+       }
+
+       return 0;
+
+}
+
+
+short pob_width(short image, char *pob_data)
+{
+       return *(short *) (pob_data + *(long *) (pob_data + image * 4 + 2));
+}
+
+
+short pob_height(short image, char *pob_data)
+{
+       return *(short *) (pob_data + *(long *) (pob_data + image * 4 + 2) + 2);
+}
+
+
+short pob_hs_x(short image, char *pob_data)
+{
+       return *(short *) (pob_data + *(long *) (pob_data + image * 4 + 2) + 4);
+}
+
+
+short pob_hs_y(short image, char *pob_data)
+{
+       return *(short *) (pob_data + *(long *) (pob_data + image * 4 + 2) + 6);
+}
+
+
+char read_pcx(FILE * handle, char *buffer, long buf_len, char *pal)
+{
+       short c1;
+       short a, b;
+       long ofs1;
+
+       if (buffer != 0) {
+               fseek(handle, 128, SEEK_CUR);
+
+               ofs1 = 0;
+
+               while (ofs1 < buf_len) {
+                       a = fgetc(handle);
+                       if ((a & 0xc0) == 0xc0) {
+                               b = fgetc(handle);
+                               a &= 0x3f;
+                               for (c1 = 0; c1 < a; c1++)
+                                       buffer[ofs1++] = b;
+                       } else
+                               buffer[ofs1++] = a;
+               }
+
+               if (pal != 0) {
+                       fseek(handle, 1, SEEK_CUR);
+                       for (c1 = 0; c1 < 768; c1++)
+                               pal[c1] = fgetc(handle) >> 2;
+               }
+
+       }
+
+       fclose(handle);
+       return 0;
+}
diff --git a/dos/input.c b/dos/input.c
new file mode 100644 (file)
index 0000000..e7dc6e0
--- /dev/null
@@ -0,0 +1,275 @@
+/*
+ * input.h
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ * 
+ * Copyright (C) 2002 Florian Schulze - crow@icculus.org
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump 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.
+ *
+ * Jump'n'Bump 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
+ */
+
+#include "globals.h"
+
+static int num_mouse_buttons;
+
+int init_joy(void)
+{
+       int c1;
+
+       outportb(0x201, 0);
+       while (c1 < 0x7fff) {
+               if ((inportb(0x201) & 1) == 0)
+                       break;
+               c1++;
+       }
+       if (c1 != 0x7fff)
+               return 1;
+       else
+               return 0;
+}
+
+
+void read_joy(void)
+{
+       int c1;
+       int x, y;
+       int s1 = 0;
+       char flag;
+
+       c1 = x = y = flag = 0;
+       outportb(0x201, 0);
+
+       while (1) {
+
+               s1 = inportb(0x201);
+
+               if (x == 0) {
+                       if ((s1 & 1) == 0)
+                               x = c1;
+               }
+               if (y == 0) {
+                       if ((s1 & 2) == 0)
+                               y = c1;
+               }
+               if (x != 0 && y != 0)
+                       break;
+
+               c1++;
+               if (c1 == 0x7fff) {
+                       flag = 1;
+                       break;
+               }
+
+       }
+
+       if (flag == 0) {
+               joy.raw_x = x;
+               joy.raw_y = y;
+
+               if (joy.raw_x < joy.calib_data.x2)
+                       joy.x = ((long) (joy.raw_x - joy.calib_data.x2) << 10) / (joy.calib_data.x2 - joy.calib_data.x1);
+               else
+                       joy.x = ((long) (joy.raw_x - joy.calib_data.x2) << 10) / (joy.calib_data.x3 - joy.calib_data.x2);
+               if (joy.raw_y < joy.calib_data.y2)
+                       joy.y = ((long) (joy.raw_y - joy.calib_data.y2) << 10) / (joy.calib_data.y2 - joy.calib_data.y1);
+               else
+                       joy.y = ((long) (joy.raw_y - joy.calib_data.y2) << 10) / (joy.calib_data.y3 - joy.calib_data.y2);
+
+               if (joy.x < -1024)
+                       joy.x = -1024;
+               if (joy.x > 1024)
+                       joy.x = 1024;
+               if (joy.y < -1024)
+                       joy.y = -1024;
+               if (joy.y > 1024)
+                       joy.y = 1024;
+
+               s1 = inportb(0x201);
+               joy.but1 = (((s1 >> 4) & 1) ^ 1);
+               joy.but2 = (((s1 >> 5) & 1) ^ 1);
+       } else {
+               joy.raw_x = joy.calib_data.x2;
+               joy.raw_y = joy.calib_data.y2;
+
+               joy.x = joy.y = 0;
+
+               joy.but1 = joy.but2 = 0;
+       }
+
+}
+
+
+int calib_joy(int type)
+{
+       int c1;
+       int x, y;
+       int s1 = 0;
+       int num_times;
+       char flag = 0;
+
+       while (joy.but1 == 1) {
+               s1 = inportb(0x201);
+               joy.but1 = (((s1 >> 4) & 1) ^ 1);
+               if (key_pressed(1) == 1) {
+                       while (key_pressed(1) == 1);
+                       return 1;
+               }
+       }
+
+       num_times = 0;
+
+       while (joy.but1 == 0) {
+
+               c1 = x = y = flag = 0;
+               outportb(0x201, 0);
+
+               while (1) {
+
+                       s1 = inportb(0x201);
+
+                       if (x == 0) {
+                               if ((s1 & 1) == 0)
+                                       x = c1;
+                       }
+                       if (y == 0) {
+                               if ((s1 & 2) == 0)
+                                       y = c1;
+                       }
+                       if (x != 0 && y != 0)
+                               break;
+
+                       c1++;
+                       if (c1 == 0x7fff) {
+                               flag = 1;
+                               break;
+                       }
+
+               }
+
+               joy.raw_x = x;
+               joy.raw_y = y;
+
+               s1 = inportb(0x201);
+               joy.but1 = (((s1 >> 4) & 1) ^ 1);
+
+               if (num_times < 0x7fffffff)
+                       num_times++;
+
+               if (flag == 1)
+                       break;
+
+               if (key_pressed(1) == 1) {
+                       while (key_pressed(1) == 1);
+                       return 1;
+               }
+
+       }
+
+       if (num_times < 16)
+               return 1;
+
+       if (flag == 0) {
+
+               switch (type) {
+               case 0:
+                       joy.calib_data.x1 = joy.raw_x;
+                       joy.calib_data.y1 = joy.raw_y;
+                       break;
+               case 1:
+                       joy.calib_data.x3 = joy.raw_x;
+                       joy.calib_data.y3 = joy.raw_y;
+                       break;
+               case 2:
+                       joy.calib_data.x2 = joy.raw_x;
+                       joy.calib_data.y2 = joy.raw_y;
+                       break;
+               }
+
+               while (joy.but1 == 1) {
+                       s1 = inportb(0x201);
+                       joy.but1 = (((s1 >> 4) & 1) ^ 1);
+               }
+
+       }
+
+       return 0;
+
+}
+
+
+int init_mouse(int *_num_buttons)
+{
+       __dpmi_regs regs;
+       int mouse_enabled, num_mouse_buttons;
+
+       regs.x.ax = 0;
+       __dpmi_int(0x33, &regs);
+       if (regs.x.ax == 0xffff) {
+               mouse_enabled = 1;
+               num_mouse_buttons = regs.x.bx;
+               if (force2 == 1)
+                       num_mouse_buttons = 2;
+               if (force3 == 1)
+                       num_mouse_buttons = 3;
+       } else {
+               mouse_enabled = 0;
+       }
+       if (_num_buttons)
+               _num_buttons = num_mouse_buttons;
+
+       return mouse_enabled;
+}
+
+
+void read_mouse(void)
+{
+
+       regs.x.ax = 3;
+       __dpmi_int(0x33, &regs);
+       mouse.but1 = regs.x.bx & 1;
+       mouse.but2 = (regs.x.bx & 2) >> 1;
+       mouse.but3 = (regs.x.bx & 4) >> 2;
+
+}
+
+
+void update_player_actions(void)
+{
+       if (main_info.mouse_enabled == 1)
+               read_mouse();
+       if (main_info.joy_enabled == 1)
+               read_joy();
+       player[0].action_left   = key_pressed(KEY_PL1_LEFT) == 1;
+       player[0].action_right  = key_pressed(KEY_PL1_RIGHT) == 1;
+       player[0].action_up     = key_pressed(KEY_PL1_JUMP) == 1;
+       player[1].action_left   = key_pressed(KEY_PL2_LEFT) == 1;
+       player[1].action_right  = key_pressed(KEY_PL2_RIGHT) == 1;
+       player[1].action_up     = key_pressed(KEY_PL2_JUMP) == 1;
+       player[2].action_left   = key_pressed(KEY_PL3_LEFT) == 1;
+       player[2].action_right  = key_pressed(KEY_PL3_RIGHT) == 1;
+       player[2].action_up     = key_pressed(KEY_PL3_JUMP) == 1;
+       player[3].action_left   = key_pressed(KEY_PL4_LEFT) == 1;
+       player[3].action_right  = key_pressed(KEY_PL4_RIGHT) == 1;
+       player[3].action_up     = key_pressed(KEY_PL4_JUMP) == 1;
+}
+
+
+void init_inputs(void)
+{
+       main_info.mouse_enabled = init_mouse(&num_mouse_buttons);
+       main_info.joy_enabled = init_joy(&num_mouse_buttons);
+}
+
diff --git a/dos/interrpt.c b/dos/interrpt.c
new file mode 100644 (file)
index 0000000..819ce7f
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * interrpt.h
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ * 
+ * Copyright (C) 2002 Florian Schulze - crow@icculus.org
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump 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.
+ *
+ * Jump'n'Bump 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
+ */
+
+#include "globals.h"
+
+
+struct {
+       char enabled;
+} keyb_handler_info;
+
+volatile char keyb[256];
+volatile char last_keys[50];
+
+unsigned char scancode2ascii[256] = {
+       0, 0, 49, 50, 51, 52, 53, 54, 55, 56,           /* 0-9 */
+       57, 48, 45, 0, 0, 0, 113, 119, 101, 114,        /* 10-19 */
+       116, 121, 117, 105, 111, 112, 0, 0, 0, 0,       /* 20-29 */
+       97, 115, 100, 102, 103, 104, 106, 107, 108, 0,  /* 30-39 */
+       0, 0, 0, 0, 122, 120, 99, 118, 98, 110,         /* 40-49 */
+       109, 44, 46, 47, 0, 0, 0, 32, 0, 0,             /* 50-59 */
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0
+};
+
+_go32_dpmi_seginfo old_keyb_handler_seginfo, new_keyb_handler_seginfo;
+
+
+void keyb_handler()
+{
+       unsigned char key;
+       static char extended;
+       int c1;
+
+       key = inportb(0x60);
+
+       if (key == 0xe0)
+               extended = 1;
+       else {
+               if (extended == 0) {
+                       if ((key & 0x80) == 0) {
+                               keyb[key & 0x7f] = 1;
+                               for (c1 = 48; c1 > 0; c1--)
+                                       last_keys[c1] = last_keys[c1 - 1];
+                               last_keys[0] = scancode2ascii[key & 0x7f];
+                       } else
+                               keyb[key & 0x7f] = 0;
+               } else {
+                       if ((key & 0x80) == 0) {
+                               keyb[(key & 0x7f) + 0x80] = 1;
+                               for (c1 = 48; c1 > 0; c1--)
+                                       last_keys[c1] = last_keys[c1 - 1];
+                               last_keys[0] = scancode2ascii[(key & 0x7f) + 0x80];
+                       } else
+                               keyb[(key & 0x7f) + 0x80] = 0;
+               }
+               if (extended == 1)
+                       extended = 0;
+       }
+
+       outportb(0x20, 0x20);
+
+}
+
+void keyb_handler_end()
+{
+}
+
+
+char hook_keyb_handler(void)
+{
+
+       if (keyb_handler_info.enabled == 0) {
+               _go32_dpmi_lock_data((char *) &keyb, sizeof(keyb));
+               _go32_dpmi_lock_code(keyb_handler, (unsigned long) keyb_handler_end - (unsigned long) keyb_handler);
+               _go32_dpmi_get_protected_mode_interrupt_vector(9, &old_keyb_handler_seginfo);
+               new_keyb_handler_seginfo.pm_offset = (int) keyb_handler;
+               if (_go32_dpmi_allocate_iret_wrapper(&new_keyb_handler_seginfo) != 0)
+                       return 1;
+               if (_go32_dpmi_set_protected_mode_interrupt_vector(9, &new_keyb_handler_seginfo) != 0) {
+                       _go32_dpmi_free_iret_wrapper(&new_keyb_handler_seginfo);
+                       return 1;
+               }
+               keyb_handler_info.enabled = 1;
+               memset(last_keys, 0, sizeof(last_keys));
+       }
+
+       return 0;
+
+}
+
+
+void remove_keyb_handler(void)
+{
+
+       if (keyb_handler_info.enabled == 1) {
+               _go32_dpmi_set_protected_mode_interrupt_vector(9, &old_keyb_handler_seginfo);
+               _go32_dpmi_free_iret_wrapper(&new_keyb_handler_seginfo);
+               keyb_handler_info.enabled = 0;
+       }
+
+}
+
+
+char key_pressed(unsigned char key)
+{
+
+       return keyb[key];
+
+}
diff --git a/dos/libdj.a b/dos/libdj.a
new file mode 100644 (file)
index 0000000..e05659a
Binary files /dev/null and b/dos/libdj.a differ
diff --git a/filter.c b/filter.c
new file mode 100644 (file)
index 0000000..988788c
--- /dev/null
+++ b/filter.c
@@ -0,0 +1,251 @@
+/*
+ * filter.c
+ * Copyright (C) 2003 Florian Schulze <crow@icculus.org>
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump 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.
+ *
+ * Jump'n'Bump 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
+ */
+
+/*
+ The following scaling filter is called advancedmame2x.
+ The implementation found here was possible because of the great ideas of
+ Lucas Pope.
+ */
+
+typedef unsigned char byte;
+static int scale2x_inited = 0;
+static byte lookup_map[4*16];
+
+void init_scale2x(void)
+{
+       int i;
+
+       if (scale2x_inited)
+               return;
+
+       //-------------------------------------------------------------------------  
+       // scale2x takes the following source:
+       // A B C
+       // D E F
+       // G H I
+       //
+       // and doubles the size of E to produce:
+       // E0 E1
+       // E2 E3
+       //
+       //  E0 = D == B && B != F && D != H ? D : E;
+       //  E1 = B == F && B != D && F != H ? F : E;
+       //  E2 = D == H && D != B && H != F ? D : E;
+       //  E3 = H == F && D != H && B != F ? F : E;
+       //
+       // to make this comparison regimen faster, we encode source color
+       // equivalency into a single byte with the getCode() macro
+       //
+       // #define getCode(b,f,h,d) ( (b == f)<<0 | (f == h)<<1 | (h == d)<<2 | (d == b)<<3 )
+  
+       // encode the scale2x conditionals into a lookup code
+       for (i=0; i<16; i++) {
+               //  E0 = D == B && B != F && D != H ? D : E; // 10-0 => 1000 or 1010 => 8 or A
+               lookup_map[0*16+i] = (i == 0x8 || i == 0xA) ? 0 : 1;
+               //  E1 = B == F && B != D && F != H ? F : E; // 0-01 => 0101 or 0001 => 5 or 1
+               lookup_map[1*16+i] = (i == 0x5 || i == 0x1) ? 2 : 1;
+               //  E2 = D == H && D != B && H != F ? D : E; // 010- => 0101 or 0100 => 5 or 4
+               lookup_map[2*16+i] = (i == 0x4 || i == 0x5) ? 0 : 1;
+               //  E3 = H == F && D != H && B != F ? F : E; // -010 => 1010 or 0010 => A or 2
+               lookup_map[3*16+i] = (i == 0xA || i == 0x2) ? 2 : 1;
+       }
+}
+
+void do_scale2x(unsigned char *src,
+               int src_width,
+               int src_height,
+               unsigned char *dst)
+{
+       int x;
+       int y;
+       int dst_width = src_width * 2;
+       int dst_height = src_height * 2;
+       int code;
+       byte rowColors[3];
+       byte *e0;
+       byte *e1;
+       byte *e2;
+       byte *e3;
+
+       if (!scale2x_inited)
+               init_scale2x();
+
+       // special top case - b is always unknown
+       {
+               byte *d;
+               byte *e;
+               byte *f;
+               byte *h;
+
+               e0 = &dst[0];
+               e1 = &dst[1];
+               e2 = &dst[dst_width];
+               e3 = &dst[dst_width + 1];
+               e = &src[0];
+               f = &src[1];
+               h = &src[src_width];
+
+               // special left case - d is unknown
+               rowColors[0] = *e;
+               rowColors[1] = *e;
+               rowColors[2] = *f;
+               code = ( (*f == *h)<<1 );
+               *e0 = rowColors[lookup_map[0*16+code]];
+               *e1 = rowColors[lookup_map[1*16+code]];
+               *e2 = rowColors[lookup_map[2*16+code]];
+               *e3 = rowColors[lookup_map[3*16+code]];
+