pax_global_header00006660000000000000000000000064110702255350014512gustar00rootroot0000000000000052 comment=ded9840b10a91a4c4db377eb27269a36e05e458f jumpnbump-1.50.orig/000077500000000000000000000000001107022553500144135ustar00rootroot00000000000000jumpnbump-1.50.orig/AUTHORS000066400000000000000000000032631107022553500154670ustar00rootroot00000000000000Jump'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 Original DOS code. Andreas Brynervall Martin Magnusson Original Graphics. Anders Nilsson Original Music. Chuck Mason The first Linux port using SDL. Philippe Brochard The jbmenu.tcl script. Joe Wreschnig The manual page "timecop" pack and unpack. Jon Atkins The network code of the Linux version. Grkan Sengn Made the website http://www.jumpbump.mine.nu/ and hosts it. A few patches here and there. Ricardo Cruz AI Players, level menu for X and KDE dialog. Florian Schulze Cleaned up code. Added scaling graphics mode (800x512). Fixed sound. Ben Hines MacOS X fixes. Gil Megidish Made the Kaillera network version. David Garca Rodrguez Level making tutorial. Ryan C. Gordon Made networking possible again. Martin Willemoes Hansen The python frontend. http://mwh.sysrq.dk/programs/programs.phtml Alessandro Gatti FreeBSD fixes. Ulrich Eckhardt Cleanup and small patches for enhanced networking. jumpnbump-1.50.orig/COPYING000066400000000000000000000431101107022553500154450ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. jumpnbump-1.50.orig/ChangeLog000066400000000000000000000054331107022553500161720ustar00rootroot0000000000000016 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 jumpnbump-1.50.orig/LINKS000066400000000000000000000004361107022553500152210ustar00rootroot00000000000000http://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/ jumpnbump-1.50.orig/Makefile000066400000000000000000000030331107022553500160520ustar00rootroot00000000000000SDL_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 jumpnbump-1.50.orig/PB/000077500000000000000000000000001107022553500147145ustar00rootroot00000000000000jumpnbump-1.50.orig/PB/.DS_Store000066400000000000000000000140041107022553500163760ustar00rootroot00000000000000Bud1 dIlocblobB@+<x Px@DT X XxbuildIlocblobP English.lprojIlocblobmain.cIlocblobPSDL App.pbprojIlocblobPV SDLMain.hIlocblob~ SDLMain.mIlocblobP&^;k@ation</string> </dict> </plist> NAӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡӡ  @ @ @ @ R0 E DSDB ` @ @ @ R0jumpnbump-1.50.orig/PB/English.lproj/000077500000000000000000000000001107022553500174325ustar00rootroot00000000000000jumpnbump-1.50.orig/PB/English.lproj/InfoPlist.strings000066400000000000000000000007401107022553500227550ustar00rootroot00000000000000/* Localized versions of Info.plist keys */ CFBundleName = "JumpNBump"; CFBundleShortVersionString = "JumpNBump version 1.2"; CFBundleGetInfoString = "JumpNBump version 1.2, Copyright 2002."; NSHumanReadableCopyright = "Copyright 2002."; jumpnbump-1.50.orig/PB/JumpNBump.pbproj/000077500000000000000000000000001107022553500200645ustar00rootroot00000000000000jumpnbump-1.50.orig/PB/JumpNBump.pbproj/.DS_Store000066400000000000000000000140041107022553500215460ustar00rootroot00000000000000Bud1ect.pbw"pLw"B[project.pbxprojIlocblobPwalissdl.pbxuserIlocblob#w"0L*w"B[1w"L8w"B[?w"LFw"`B[Mw"LTw"@B[[w"L lbw" B[iw"Lpw"B[}ww"pL~w"B[(  @ @ @ @( pict/string> <( pctg> ( TIFFPCT CFBun ( GIF PB ( JPEG> CFBu( JPGkey> ( ICNS/string> <( PNGng> NSD@MN0NPNpNNNOO NOOOOPP0PPO@O`QQ Q@Q`QQQQRR R@R`RRPpPPPSSTT0TPTpTTT>CFBundleTypeIconFile hfile CFBundleTypeNameCFBundleTy( RGB <( TARGA>  EDSDB ` @ @ @pict/string> <( pctg> ( TIFFPCT CFBun ( GIF PB ( JPEG> CFBu( JPGkey> ( ICNS/string> <( PNGng> NSD@MN0NPNpNNNOO NOOOOPP0PPO@O`QQ Q@Q`QQQQRR R@R`RRPpPPPSSTT0TPTpTTT>CFBundleTypeIconFile hfile CFBundleTypeNameCFBundleTy( RGB <( TARGA> jumpnbump-1.50.orig/PB/JumpNBump.pbproj/ben.pbxuser000066400000000000000000000624531107022553500222540ustar00rootroot00000000000000// !$*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 = ( ); }; } jumpnbump-1.50.orig/PB/JumpNBump.pbproj/project.pbxproj000066400000000000000000000352741107022553500231530ustar00rootroot00000000000000// !$*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 = " CFBundleDevelopmentRegion English CFBundleExecutable JumpNBump CFBundleGetInfoString JumpNBump 1.2 CFBundleIconFile CFBundleIdentifier net.sf.jumpnbump CFBundleInfoDictionaryVersion 6.0 CFBundleName JumpNBump CFBundlePackageType APPL CFBundleShortVersionString 1.2 CFBundleSignature jpnb CFBundleVersion 1.2 NSMainNibFile SDLMain.nib NSPrincipalClass NSApplication "; 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; } jumpnbump-1.50.orig/PB/SDLMain.h000066400000000000000000000024041107022553500163140ustar00rootroot00000000000000/* * SDLMain.m * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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 Non-NIB-Code & other changes: Max Horn Feel free to customize this file to suit your needs */ #import @interface SDLMain : NSObject @end jumpnbump-1.50.orig/PB/SDLMain.m000066400000000000000000000135601107022553500163260ustar00rootroot00000000000000/* * SDLMain.m * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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 Non-NIB-Code & other changes: Max Horn Feel free to customize this file to suit your needs */ #import "SDL.h" /* SDLMain.h */ #import @interface SDLMain : NSObject @end /* SDLMain.h */ #import /* for MAXPATHLEN */ #import 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; } jumpnbump-1.50.orig/README000066400000000000000000000050341107022553500152750ustar00rootroot00000000000000Jump 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 jumpnbump-1.50.orig/TODO000066400000000000000000000000501107022553500150760ustar00rootroot00000000000000- fix network code - port for dreamcast jumpnbump-1.50.orig/VisualC6/000077500000000000000000000000001107022553500160475ustar00rootroot00000000000000jumpnbump-1.50.orig/VisualC6/gobpack/000077500000000000000000000000001107022553500174555ustar00rootroot00000000000000jumpnbump-1.50.orig/VisualC6/gobpack/gobpack.dsp000066400000000000000000000103061107022553500215730ustar00rootroot00000000000000# 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 gltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und fhren Sie den Befehl !MESSAGE !MESSAGE NMAKE /f "gobpack.mak". !MESSAGE !MESSAGE Sie knnen beim Ausfhren 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 Fr 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 jumpnbump-1.50.orig/VisualC6/jumpnbump.dsp000066400000000000000000000153551107022553500206050ustar00rootroot00000000000000# 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 gltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und fhren Sie den Befehl !MESSAGE !MESSAGE NMAKE /f "jumpnbump.mak". !MESSAGE !MESSAGE Sie knnen beim Ausfhren 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 Fr 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 jumpnbump-1.50.orig/VisualC6/jumpnbump.dsw000066400000000000000000000023421107022553500206040ustar00rootroot00000000000000Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELSCHT 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> {{{ }}} ############################################################################### jumpnbump-1.50.orig/VisualC6/pack/000077500000000000000000000000001107022553500167655ustar00rootroot00000000000000jumpnbump-1.50.orig/VisualC6/pack/pack.dsp000066400000000000000000000104111107022553500204100ustar00rootroot00000000000000# 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 gltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und fhren Sie den Befehl !MESSAGE !MESSAGE NMAKE /f "pack.mak". !MESSAGE !MESSAGE Sie knnen beim Ausfhren 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 Fr 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 jumpnbump-1.50.orig/VisualC6/resource.h000066400000000000000000000006721107022553500200540ustar00rootroot00000000000000//{{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 jumpnbump-1.50.orig/VisualC6/ressource.rc000066400000000000000000000031661107022553500204150ustar00rootroot00000000000000//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 jumpnbump-1.50.orig/VisualC6/unpack/000077500000000000000000000000001107022553500173305ustar00rootroot00000000000000jumpnbump-1.50.orig/VisualC6/unpack/unpack.dsp000066400000000000000000000104451107022553500213250ustar00rootroot00000000000000# 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 gltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und fhren Sie den Befehl !MESSAGE !MESSAGE NMAKE /f "unpack.mak". !MESSAGE !MESSAGE Sie knnen beim Ausfhren 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 Fr 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 jumpnbump-1.50.orig/XF86Config-4000066400000000000000000000055331107022553500163260ustar00rootroot00000000000000# 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 jumpnbump-1.50.orig/config.h000066400000000000000000000017751107022553500160430ustar00rootroot00000000000000/* * config.h * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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 jumpnbump-1.50.orig/data/000077500000000000000000000000001107022553500153245ustar00rootroot00000000000000jumpnbump-1.50.orig/data/Makefile000066400000000000000000000010051107022553500167600ustar00rootroot00000000000000GOBS = 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) jumpnbump-1.50.orig/data/bump.mod000066400000000000000000002141401107022553500167720ustar00rootroot00000000000000Bump(c) 1998@Anders N / BrainChildf@@Mail:@equel@swipnet.sejDedicated to @ Mr Ville Koski !!{@thank u for everything @from the past to@present day :) I owe [%you BIG TIME!! hope uu@like this little tune.M.K.G Ō GG@.x0`  _@xG qj PG@j x0j x_@j PG j G@j xx0j PG j _@` G ` G@` x0`@ qG qG@pGx0| G_@G pGG@|G.x0    _@ G G@x0G _@G x0_@G .GGG@\G.x0.G `_@\G \G@hx0 h_@\G .G\G@\Gr x0.G  G \ \_@G hhG@x0\G GPG@Gx0G `_@G S G@.Sx0S ._@SG }GG@Gx0}Gq G   _@x0G Š@x0x<_@.PG PG@Zx0Z .|_@|.VG ZPG PVx0Z P_@PG G@Zx0ZlG Sl |_@G .SG@x0.TG }PG@xx0 _@G G x0_@TG SPG@kx0 G xT_@G x0_@G .GGG@\Gx0.G G_@\\G G@hhx0 _@\\G .G?B G@\GGB PB x0.GUB G \ \_@G hhG@x0\\G SGGG@Gx0SG G_@G G@hhx0 _@G }G G@Gtqx0}GG  _@}l"G h@lx0_@GG/ GG@x0 _@G G@x0 _@G G@x0G _@G G@x0G G@x0 _@G G@x0 _@G G@x0G _@G x0_@G .GGG@\G.x0.G `_@\G \G@hx0 h_@\G .G\G@\Gr x0.G  G \ \_@G hhG@x0\G GPG@Gx0G `_@G S G@.Sx0S ._@SG }GG@Gx0}Gq G   _@\pG Šx0_@pG ŀSpG@Sx0`j _@ j G j G@ j x0Sj j _@j j G Ŋ  G@j j x0 G  _@\\G  G@ x0\ G j Ŋ G@j  x0j :E _@3G \pG@\|x0.| _@G j Ŋ G@j  x0j G p _@S|G S|x0x<_@x<.PG PG@Zx0Z .|_@|.VG ZPG PVx0Z P_@PG G@Zx0SP}G  _@G ŬG@x0}TG S  G@ xx0 _@STG G x0_@TG G@kx0 G x_@S G x00ʿػ6-"Sna2Pte}YTL&`dO$*6,   ç)ͼ˾Ǽ ((*& Ļļ츱    $ %(362<@;00/:7)'23-,/)  $/# и $(,ANO)(9XVUXTI408QRH-''8;@JD9/2>aV?&%$+.$&+.*# #'%! $%  ߺĞʘǪ "!786DE>'";EH:71..*"$$       λöǵ).*096271!  ҿ ⵴ɼ' (, -6:863,03$&.,%"!     *533;97ENVN?:DC@PVP2/211573+ "      "&'      ſ$.121/.5;BB@@A<4-273,#        !     $++)(.4:FHG@==BEFD>7&"''           )2997458HPQC<9<<<71'      )0599978>>;9731.%!        '*-136:::98730-&#        !(+.24567874-*'"!    "*-/24456630-'%#       $'-/0233431,)&!     &),0123220.,&#!      "%(-/033321/*(%       #&),./100/.+&#!      "')+-....-*'%        #&)*+,--+*(#!      $&'*+,-,+'%#      "&()+,--+)%#!      !#%)**+,+)'%!     !%&(++,+)($"      "$&())++*'$"      #%&(()))'#!     "$&&'(('%#!     #$%&''%$#       !#$$%$$!     !"#%%%$"     !"#$%$"!      !#$$$#"     !!""!    !"""      """                                                           #1;JVguu1󵀀166׍ɿᧀ֔ 6-󡀀#k}>慀[g!֏;upM-ֹ-J]xxpeVM>6+!ǽ !#+-16;>CJMNNV[]egkkpuxx}}xxupkkgee][VNMJCC>;61-+#! ǿ!#+-6;>CMNV[egkpx}}xupkge][VNMC>;61-+# ɿ !#+-16;>CJMNV[]egkpux}}}xupkge][[VNMJC>;661-+#! ǿ !!#++-116;;>CCJMMNVV[]]eegkkppuuxx}}}}xxuppkkggee]][[VVNMMJJC>>;;611--++#!! ǿ !!##+++---1166;;;>>>CCJJJMMNNNVVV[[]]]eeeggggkkppppuuuxxxx}}}}}}}}xxxxuuuuupppkkkkgggeeee]]][[[[VVVVNNNMMMJJJCCC>>>>;;;666611---+++###!!! ǿ !!!!!!#####++++++------11111166666666;;;;;;;;>>>>>>>>>CCCCCCCCCCCCJJJJJJJJJJJJJJJJJMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJMMJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCC>>>>>>>>>>;;;;;;;;66666666111111111---------+++++++########!!!!!!! ǿǿǿǿ   S$   6-ℯ³ "SD^MfyhxxxxxxwpvwwnxtuR]Ѻ "52:Q Yn)$+[H>I(*)-G>6#*) 4K &$)E1,&к&" ")14% K72,(:R6=GI L-+B-&16A"9S%I6# Ӝ٣೽(78 -G"*! 'JM 2>9+0 #S>F'! ), ĸ$ 8'  +%4$ -/!K 1IG@= - 8,!# * , 5 !0 +'(1< 0",08"", +."  ,   &     7#<  +$#'".3     "G06+$$   +( N" "" # + )  ! -" 0  &;    " ' ( . $'0! &  &    &1 #      *"  !    #       "  "                                                              !/]Cd-+RX 1fX6 7:}&G$Efb6%H-} a>?$QFs   =<? ݿB;E-94'û #1 & ?%+ <9a&=C9%=$'0(,A@%4,+U/ 3K8 %# $6  (%!Z2C4%*KE 0  &*'6 (W/"  7/* 4. I " !5$ .*5# $1C.  .$#ջ"I 4/4-0C%$/4  +1 " -"  8    "  5  .  #                                         !!  #!##$# $!" '&%(*)&)..)+14, 038/ۼ237044415810  5;//8=/- :>/+:@0+;@2- =@3- >@4,0+5<., 1:,+  ):+* "9)) 8') 4%* "1 + '/* //&   9. !@. #E4  #F@ "&AO  %'@X&*@^ &.C`2 )0EaF -2FdR 07Ef^.!  " 05)<(06#;, .7<, )6<."7;.  35/ ,.1 % (0  /"$/ %#$ . %!.* " 4% 8! 9 " 7 $0" !)%   $%   #" !     !  )  3 = D  H  I%  G0  C;  AC  AH   @L  @O =Q, <6>-&?:;/.@@702?H4/ 2 ;M5-!.6Q7*#)&0S;)$$,'U<+"/ T;,0&(7=*0-/>(/ / +;*,," )5/(&& *12&( )/3'& (/2'" $/3'  ".3'$'!,3*)(-1+)(.-. ($)"/*,&'+)/(*$'0-/'%!&24.& Ҿ$1:,'ٽ!".<*,&"",;7 -'!%)7?0%+'2B/&1'.@%+& 4*);0$'21&58%+;$09#$@(+7@0&4 @7&." =;*(% 7?.$& ,B0&#"C0)"B2+$ >3,'' 64,+,/5,/1 +4*11 +0)0/&-.(.!-, ./&)',/ ,2%%,+1 (5'!.,3 #6+,/1!6/(2.*54'3.. 29 &02+ ->!&.7'&A%#-:%ȿ  !A,-9%ո @4-9*߶=<):-;A%;/ 9D!:1 5D"93/C'73 'B+"61#ܾ #@+$5-% =+&7+% :+&:*! 6)%=+ 4$$?. 6!#?27 =6 :";9 ;'7; 8,12?#-?,(@4#?9 @; @< A: D:H8 L7 P8  $R;&S>"'T@$)TA*+PC .0LE 03HD /8!FB /=#E<!.>#D:/=$D6 2<$C5 5<#C2 8: C1 ;: C2 ?9?4 B8:4 E573 H24/ J/2+ K.1* H,1* E- 2+ C.1-@/0.:-..5- +.  3* (. "4' %-#5" $*&6 "&'8 !$ ): # ); # ,:## /9%"36$"44"! 23 -4  '4 !/  &% '$* ,,/ 000 33 3 52"531"80-!;  /(< 0!> 2?! 3>' 3>."1 ?4%/ @:%,?B$+ON?D      #.**70 )""#.-#,:E&-4# ̷  78    8;$.1;87:?I:K=HYESZi`Yz~gV &ʻ #"  0#$,.*3>HAD#"'*#"03#:E? )=KA-$  & &#5.A»   -48LI0-fc?NZ]`s# =A )NL1"4.H" DI?BU     "$DK>3;>.0'E   #0 #"7B10-,N>HDG "1)) 1&  &53ٻκ'*$)- =EKEB'-:,?=;_V?Ha -   "3  0?&5$-4&#ߺݽĹ,;454=4?L1,L '-4=A-55  'A=*17"    *D0-E?7"&=?Lc  "))#0?47;3Lm#&#&'$&#'50)5 "̴ۺ* #*&01.7-">EY]K    0)?,:00'.$NP   $#&$3 -'  ?)3E0,P`uRI    *, :V  #07EB>G-1&IB )" "# 0 & -.-B&4ֳ )' $*$";E;R7 .*$-8\# *"-"  -=:'  ',X.4)8 $$&"&?XG?0)): > 1.5>BR`78Y;.EN&غ ):HB,-  #0- &")GZ84=  $B");::?SVS;3A1*.4 :   &.  -*$")BN3'0"  $5#7?:BOXLU33047#  ,)*8&)7:BD*-B))  '$ 1505=ABPAEB.#$      '.0#$,   )*")=>;GHLOPKNB)100&))"   ()1 6=" AR7 8`L#%#2 *A51LI   ; +,''.79 C)!$(+,/1 ;J"&,.125 0l $*-/12 #x%(*,. ~' &+-/0sN#45.   gd .3.  Nw'!+// )dO#'*'HY/ &*( Gb>%(& :[G!&&,RP)$%  *PY6   5O=, 7NE $'*^U4&&)DeS $  1U]: 4LP<  /JQG$   /MWR3   +HHA/  GKG<"  FQKC4   1JD9$% !!DOH1   !=OQB! +8   +:E@!)"  *3++&+,! "#&67 23  "' ,F:% */=2 %)  -1370 %".'# 4."". +84*-."  /CD945*#11&!&$ '+#.<:-($   3EJD:1 47.#! *##$%4=8)  %2;DGG>) +7;124%(4;8#   -BCFOO6 " "//3:1  (8:! 07242"   *4?QUWN2  &9:41.!-72.");=/"".(' @gnX-$  %3:=A>?/ 02.-! 5LJ0#(#$&)4:Ob_K97.  ׿ '>MF70. 6??- +<<70,Ӿ ".8:CI[YK;3& ï,47?BF@2 #&/BX==?@??@@@?>>@CEGIJKKHIHHIJIGGGIGDCBECA<;;:8  !   '2BLQSQI?;@KM   꽳 )# '/# #7BB7%5FD޿-ݰ=#8EB<9;8019ELKKJNX   &$)ZC 7FI>. 'L@<˪ 50,,ͼdM $9@BKIG= 3HQW(#;*/9:;AJQNY_WE єʰ\k:XU2# *276/+ &DH%γ)D76.%+!)豻éUf*"4@F;" ,2& A88?FK=-&6LfR$$'2<@OVHOSJ:0 ًMyW( "'' .:89/ +MSDM6%D\\I ж»BuhC &3:1&")'%%" RZd\Z_;/A?4@`V! /Ql]>70#˭μIviD '8A4!$ ERHJK9'3S^P&ұ ҸMzlN(  +<=%#)(/' 7QZbjonI./JUjdN +- 9526. !8@A:.4UdN2%.?F/̀źǼMxcTHC?=8) -?GF@8*%4SiW;$+DPE5),6ǻſƸ0alZJ@7-"0:AEC9*&3O`R1 -BQTGDҀ ":enV@) 2?CIME95AS]V@ )?Veie]ʁ%1FlnL*1AGKMI=;FLUM:' -EVepw .59Ga}g7 '3>EIGA@EOTM<'#(0>O^pǹ$28:F\~~L!!$/::2050"!# +;FThs̀*496>\l9$/667>@:3..48::3/++*-09Le  )5;79GjR( #057<<::2+*-0)/376.,'09;DIS诀 *27>AIYrgH& "3:>=;:91-'"! '0353029E&&"'4=AEP^foyr^C+%06<>?A=:6.$(9?=;=;40.&$"$&')%"  ! !4(,.',0&#"  нǽº !(#%+()/103=@?GFBC@>@:53+((!'((-%$"    ! !32(,.',3%$#   оǾ ($%*')020/<@@GKBC?=>974,))#&'(.%%"    !)4& (-/+-5"    ʺſ'$+((.00/;?@GJAB?=>963+'("&''-,$!      "4' )-/,-6"    Ļ"'& )&'/3-/??>HFBC@??:61,*&#'((,)#     $3%)/.)+2,"$#  ž¾ $&*%.046,3>=DECD>8=<>510$&*)-+&$   #&/(12)&$,($'$ þǹƹǼż 0+'53:3.<;FL@JL59;=B21-..,-'"       !  $'&*31* *#!),&"ݿµǶ· $-)2::7349:JHBID59:@?33'"'00(!       $&+%)-".,(+%!-/("  ڸŲ˾  ),58?95<8>=5,)(/41-       ".# ,0#%+$&)&.2&  ׽ͭ  '2;=B78>47FAJF<95:?<=5*-*31+%      *("8; ("'.)13-  ŻԺ *:>D@<@:9>@DC<;74<=<=.02.67%       ! #(+(;:&!+/*/1& ĩԹDz  (=BE@FB;B?AHE:8::5:>50236.,#   ###(.$.4" '60.1+ ðмȤر %/AH?CI<@A7FB985<62::24377+)   ('#)/&-4,!(70,2*# ϾƯЯ    )1BFCIH@E<9>=975;209468694#!   +"(0.'#2( #4;/,0)!  ź#" )1CDELEIH@?=5788922114=<60%     # &01*!($ $&056-,' īɹ" ,4;,      " $!$/3)'$ '&/44))$ ӽ !&9=IKIMLDD71369655+*8?B>3    "'$#/0' !))*14(%"ؽ˻ϼ  &5:IJKQJGD90057443*,:AC:.   %%''+-&)*(01*»¼ȵ  &6:420.-379<7.*     %&$!&(%$$# ŵ¶$'%%#%)5=AIIEC?:83.,.28:70"    #%$ !"(*$"! ǹ''&&"&*3<@GGCBA:91*)/2993+&    $&'"$$&('" Ͼ$&))%$(+0;>BCCC@97-*+16751#  !$$$#'&%'%$()*+)((-/69;BBAA:30+/566.*   "$$! &''&&$#)*,--*)-/5:=860$  #&''&$ òǶ$/1422/(%&)5:;=?@?=3+    "()('# ſ±#(1543-&""&.78=@A@:+&    #$(*(&# ý½$)2421.&"$+57=AB?7("   %&(('#!÷п%)4760,$!"'25=CC>4.  !&&''&!Ļ $,/74-*" #,9=BA60!    !#'''&$Ļ̿ $,/53+($"*81"Dz(N<.ª )I9+ ҽ " H6(ϸ- C5&ʵ4& B2$Ʊ5'B1!ì*2& @.տ4$ B- Ӽ"4$>* й 4#!<(δ3"'6(Ͱ2"İ)1%1!)+& 2! %'$ & 2 "#* 5  !06տ  2 5Կ / 4Ծ  41Ծ   4 . Ի 5 1 .Ը02 * Թɷ1/ - Էǭ+#/ ' ӷȮ.,/1 'ӺȲ:.6.  ӽɶL.:0  ɶD/C1! ɵ G-E0! ʵ?.C1!  ɵ  @.H0!  ʵ$@/C1! ʶ.;/B2" ʵ;?/&D1" ˵I>0-@2" ˶J@/4C2# ̵N@/@D3#! ͶY=/E@3$% ͷT?.MD4$$ ζSC.YD4%% ηN>,UD5%" Ϸ@;+XF5&! Ϲ?.[E6&ϹG/XG6'йL1\H8'ѺC:YI8( ѻ2?UI8( һGXI:)ӻQZK;)ӼYXJ<* ԽcYK=*վ[YL=+ ֿA[L=+(_L>- _L?.¬bP@/ ¬ VN@/ "í:LA0 #ůM@0 *ů U@1 ,ǰ [@1 )ȱQA1! ,ɲ?D2"  *ʳ#B2"+˴+D5#-̵. F3#* Ͷ + F2#&+ η / 83#3, ϸ/ 4$7- ѹ ,9#:/ Ѻ .># A/Ӽ .B'A1 Խ /!+%B1!վ 5! $E1"ֿ 1#$A2" 4$)D2#4&. E3#«1&& C4$í4'D4$Į2(E5&ů<)D6&ư<)J7'DZF) $H7(DzC+ $N7)ɳH* (M9)ʳB-(M9*˴>-Ը#K:*̳;/շ*H;+ ͵ؿ80 ּ'F<+ δֿ61!(D>, ϴ12"*C=- и.3#+E>. һ$3$/?=/ ҽ3&):>/ 3%6?0 5(5<0 3'8@2"9)1@1";)#E1#?* B2$D, A3$A* D3$J, M2%>, K4&@,14%3.7&., 8&#0  8)/!5' 4! '$3"& 8"+8$3 ;$/ :&$ =&  9' :' 3(!# /((  '+*  *+ - - ! - ) ڻ( /, ./- .2, -0'/ο53 2.ϵ8 2 60 ж6 2=1!+#3 C1"".A3##* F4$&##F4%'#C5&*H5'0E7(5E8)=F8) $ IF9+ LI:, VI;- [J<. YJ1! JM?1"̾?M?2#ε3MA3$ϴ$LA3$кNC4%Ѿ NC5&PD5' ¬SE6( æTE6)  ŬZF8* ưXF8* DzZG9+ ɳPF9+ ʵPF:, ˶?G:- ̸ 7D;- ͹ 'H<.  ϻ C<."м J=/  %ѽ H=0! &ӿO=1! )P?1# )U>1# ) ®V@2$ ) įW=3$ ) ƱS@3% - DzL>3%# , ɲC@4&"0ʳ6@5'%-˵ü)@4'$.̵Ƚ B6($+ʹοB5(&'ηE6(#% ϷG7)%#"иíJ7)%&""ѻĮN8**% #ҽůM7*.(#ưP8+7(#ɲI6+6($ɳϼF7,8*% ʴͽ;7-=)' ̷27,9+( ͸(7-;,+ ϻž 7-&;,, мį:.*8- , ѿIJ:-1<.!, ŷ<-;<.!-ƺ=->/#.żɻH,M=0#.ƻʻH)K?1$0Ǻ˻C*QA2%/ ȹ̼*N@2%,ʸ˽*LA3&*!ʷξ1PA4&'! ̶Ϳ5NB5'%" ͷҿ4LC6'#$η(KC6(!$ϺLD7) $Ѻ´RC8*% ҼWE9+$ ӾĶPD9+& ԿŶ;E:,% ƶ!F;-) ȷD;-) ȸJ<-!- ɸM:.!, " ʻ E2$ *#B3& "C2& %@4' !(C4( $3B5) 5A6) >C6* FB7* IC8+OE9,QD:, OE:-ZF;.  UF;/! վRG;0!UG<0"KD<1"7F>1#F=1$ N=2%  Q=2& N@3' :?3' =4( A5( D4) F5*  :4*$7*9*  ;, <+  0+  +   +  2   6   2!   ! !  %  %!  #   "  #  "$ #,! Խ. " վ4 #$ ջ8 %# ־3,% 47$ -5$ ( % (  - ! *# $ &  '  , ! , ( 0$ 0 0- ( " * $?*&%(#1-&%!0!%A ;  #(M   "4*  2      Ӻ1 <0( / 8     =   =  (&G /(#< "ح'   9   "  & # +#, N &!$ +2:-%<  -!  )    1 6"2 A,!O/ - *( ..&J& ( * +       +" #41 , 3   0E 5 #         ='9 ;  6'"$; <" - 9!*.9 "B    *   !#  %."" ߸! %: Ю7  9   %   D '      ! ;0&#E .4%'7 "))!  %%    &     ( 3 '*D !  K &B&B '%˫&08:% "R% C  %2 "      ?''Ю1 ܽ0-/( %̬. 7" &3ݫ , '  $   $ 4   ,#̢B* 51% G> L5 :, 5 191)1"""% -  9#   %'#  '( ( !*2  Ķ-,   /      $% *,**  '$:.ȳ* $ϭ--'%'$# "A7" 3 3    !+ #) (# &7#: %13!3)8 $! 4    jumpnbump-1.50.orig/data/calib.dat000066400000000000000000000000301107022553500170610ustar00rootroot00000000000000I m.jumpnbump-1.50.orig/data/death.smp000066400000000000000000000117661107022553500171450ustar00rootroot00000000000000'(!&Ĺ ĪŶ³c&:9LbOb^Zgd[f2 ""$0%6.!+2(2ܰʶǣמź!   !* !$ ʼףڛꛕƕġʤ׺ĹѻŻ*9EK*Ş7t" |6nLuazryTd%&Tjgmj'&'KugK--K^]Z%CTOKN9+B,.L0lV^QDQ8UFTB8J?63nLUVO\6& : LB"0? ** (,:!,-N:!*VC<"-<4&012,'"8!$04!&!-"   *ڻʿźͼ˼ʬ诳ǼӹȄǣӞʛع$˻Ǽ *,<'6*=-$',C"N, OQU *OXI  47=1]jV`^']L%\IXHcK"aOVUJQf[ZU KVXQTQFH"0OTOCI@7O &(-"&     '!  2R,"8* Ȥ кҴέͲ 򿉬֤ˠξӯкίίߨ߶ (  L 8 ='::-37B"%B"CCD6<&B4 , ,-2! 6@30. & ,=@?!%9*  .   $   <Ю0 "3!?:, '   & żܼƾʹ  $""(+"!$ $$0(+$$&,$""$--!"+.+'"%$* &"'*  "!!  '.&% $+*! $0+*&!! $1,        "            !!          &                                                                 "  63&   (&$& ,                                                jumpnbump-1.50.orig/data/fly.smp000066400000000000000000000771701107022553500166530ustar00rootroot00000000000000%Y.9  DO -    W;-  0Z( <  QG , =S 5 0W" <  Z. 6   X5 + T< #" V= ܾ$$ X7 0 Y0  4  %W) :  8R 7  JI)  R@ +   V6 6 X/ :  W/ 8  T6 6  T;6 JJ*   2T % Y*3 @J* !U% #   P:3  6N-  V) % X, W'  '  V) +  P* % M1 ,  S/ / W02 R61 R5.  R3 .  U* /  U& .   U& .   (S #  L? +   V,1   T!-   DB    S) (   AB    X) 0   BF   W* ,  Q< ,AJ   #V!-  T7 (  AH  3Q   'U! &  V$ /  T6 -  MA !  ?I   4P     X& .  [, 1  U: 3   OD / 4T  ߻   W3 . II -  2U$ -  [0    PF 2 4W" .    W; #   II -  >M1  4U/  +X# .   /V! 4CN 7SB  1  Y.!   +    f, *   c %  #`    >U     UG"    ZA (  c1 '   $d    <^    OK   _1   d$   6\    WF  !  e2 "  -e"   HX    YD   d4 "  $f$   NT     YI    [H!   d:"  %f(   9b    LY    TS   h7%  +g**  6e'+  ;a")  EW $  ]E  "   e9   #e. ޼  3d' -  J\ 5 ]L 7 c5 2   9[" ߹!   TN.  d3  6  @[" /  \FѼ( -b+ 7 YJ ۵  7^"8  ]> طDZ6_6 ־ KP4  \.  ۻ! FP/"[0%# EO( #Y9 -':U ###Y>9-.]( ޻ '- NM0-\-- ,  ;R#%U? +/ \*ۿ - GQ)*"Y< - /0Y") LK +.!Z'#W> (*-]'' LK 1+&`*' #[? ݻ) )?Y2%a2   " UGݼ# $FU (",`'._6 $VCֿ JP ۺ =[!(*_) +^7"PK ܼ   :W $!`, &Y?ҿ CU '  a0'VEԾ 9["(  `6 ' NP ޹ $a- ( QKع  (`( , VEѾ 5\!  ([A!  0_%  )  ZB$ =Y  ܷ  a3 , FS Ҿ  `,   # XC *  BW  "c)   _< &  PN* 7^  ! b+  ߺ Z="  LO ' 3] % #c'#  `8 ڽVL EX   9^# 8\  4_!  ;^  7^ @[ؽ KV "OR  &XG  &\A  &a< "e+ټ 9\ #QM #`9ߺ  3]#  UI d.RP e2 RO !e7 ٺCZ  'b< !c*ٻ EU  "_> %b+1_#=[ ݷKS  ؾ EH   LN ۶PS ߲NS  3\( ' ^7 ҽQK   0U% #XB  /], ѹ UK  +  ^;"  ![0 '].  2['   8X$    * P: + S5 +   V1 'S)ݶ:K ) P; $ T+ ߷:J *M:! "R$ %  H>'  Q. ޹  ?F &T+ #  EC#  S'%L7 ;G   1N !  V') R5 '  P9)Q4 $G:  ߾  0L   T !V' &W, )R:*L@ڽ  6O !V# &T.' K;    #P # R/!  HE  $Y& + NB #W%. HE $  V,ܽ "T#(  .T#*  5Q +  1S! +  $U($  U3'  FH. V, !  BL,  T<1  #V-+.T%  ,!W) 3 X0 3   T2 2  Q8-  ?I( U)7 JA!  V* 8 MC$ V+6 2Q : HF. T7&   X40 Y43  V9, V6/ W2(! QB 4BM; )W) ;   W:-CO"? X0+#KG>Y/,EK= Y52:S#>  TB> Z3 / *U' 0EL ?V: 6 $Z, +%8U$> BK?  JB @  Q>>X7 ; Y/8 Y0: W. : T-5 W- 1X+ !-)Y) .X, 1$V'((+T#(')R$*#:N 8 AL ? P? AS9=W30 +U(8 FF ?U6 5 3Q%C U9(-DMD #Y/ >  S?%/ AK B.T( C +U, A %V/9  U58   U39  #R, <,P(: .R* = 1S';CH$#  R;1!  U6;#  ,Q'6N>-! U0 < @J'!  T78!  1N&.  R76"  1N$'!  N02 AA(# "P( 2  P:4! BF-'  1P$ٿ' "R&% %  R* +!  S1 3 O83  L@2" HB/# EC.&  DC.% G=-  M5. P4 / P3 * R,   )N! پ # 9I "$ ?E &!  H@ * S. &$ "Q%޻#   0I # >F! !  G@ & N1 ! N&    -J ֿ " C? # O-    5N &   M?* S* ޸   :I ' S, ټ >H ) P3 #  $R!   EB%  Q#  D< & Q$޼  :I * S(   D@ &  S"(  K9   9H $   S%$  K5     5D  "N %   P*# J<    %V#   QF  _)  :S   NA    ]. "   #Z!   :R     MI   OF    MD    S?  U;  V6   S7   U:   T;   X4 !  V:    KF  EH   T6   Z2   \0  Y!  4T   LH   T:  X+ W   1T IB  ]/ _%  HR  c* GR   c-  QL   +b! _> FY  c%  [> OO   ;_   !h& aE  N^   Ba   5d 9f  :i  Ai   @d   Dg  Jb KW   JO   Fc   =j   &n"  h4 XU    *j  eD 5l!   ]Q "  k4    %k# Ba   >^    h"  j/ !dA    GY   _B =a "   i0    ]A     9_  $c"  g$ %e   )^" LO  c? k, <^  e6  EX j5  ;[ i'  g;  cC JW 5_ -e   'h   %f  %d %f  4b =\ VI  [< &j!  KU    h0   =\    _D  1e   hA   ZV  *d!  h6    j?    j>   q>    nC  oN  q<   s/    *m%  (r%    &q 6m  WZ  UX iR   q=   *w)Hl    gQ  vA  5w+  k`  !?   Xm  rQ )y.  Pi  lO   x@  yA   t?   nM Th 1t)   nK   x+  Dl   X_   fM  fW   hX  iN  gP   fS   \]  Kb  =o'   &m-  )m)  *l'  m*m0 #m,  (i'   1d"   7a!  DX   RO   UN d?  j0  ,f#   MYe?   j%  J[ d<   .`!  TN  n5  ?d   ^F   e'   G]  cB    m*   N`   m= =e#  j: Ua  x4  mK   Qf"  ,w,   sA   fP  S[ q*  t/   (x8#   yF&  rR(  Rg)     tB'  Kg/"   pA'  ]W*  6n3$   jQ(  Bj0#   n?'  VX+  'j6&  `L,   PZ.  ?i4&   0k6(  j?,  cL+ SV,!   E_,%   1e2( 'f6)  j;*  k;*  i9) -h4)  8a.& LU)#  TO) ZM( fD) *h5)   Ab0' QZ+#  `G&  d3$  @[)! ZO& e=&  2^/"  \G$ۿ =`-# ^J% :_,$ d:$ b@%  `?# ZE"aF% f>% 4c/$   YL% (d2$   MW&!d7" NO% &_-$ HT$! _3" 8V&  S?  -b-!   YO!" e3 ! DX$  [I" d3" @]$   TO YN  ^K  `D  ]@" SJ BI  Z( b? OP  5`% \> 9]$  _D" d*! .\   AQ  BP  CJ   ES <[    'c" %   b1%   [<"   TH   c& #   NM  a( #  NI   `1 ! ,^% LS   `? %  !f% )  ,b(   -^ '   AX   NO    RM    MU    HW $  FT   CW "  8a-  f2$  WG   @[ &   g(0   `>  3_ )  \G   1c , `<    5^ , \A   d+    @W *  WC    b/     ^& #  ,`" )  )b% "  a.   `2 $ ^A. ZH3  NR1 ;^!'  e0 ! WH1 8Z!)   `1  ) XI4   %`( ) ML*   ]20 9W#_64 ?W#  XD9  1\!!   `5 6 OO3   %`+(   `; 6 LU.   1`($   a8 8  OL1  >T& &a% (   a2 3  RG4  ET1   EW5   CX1   KW8  SS7  YF2   Z?3 _@/  b3 !  )a) )  ?Z 0  LS ,  _6    $a)  3` (  AV +  XC '   a1   &`) ( 8] )  AS ) SD + ]9, \7* ^6+a4)_4&^5,]51 Y<.TC- QH0  ML /  AT ' 4X#  0Z! ߿ b.*   _6/ X=+ NB* Z8/  TD. KM,  EU. LL/ OH/ LJ. MM0 UG0 WC0 Z@0 Y?0 TA, Y:+ RF.  OH1  :T!/ 1Z' -  [/ *  [3 Q@$  =M,  &V$*    W2 & OA  DN   9S,  $W',   X*,  Y)+   V(*  U.'   jumpnbump-1.50.orig/data/font.pcx000066400000000000000000000273631107022553500170210ustar00rootroot00000000000000  ###'''+++333777???CCCKKKOOOWWW ˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ ۧ{ǓS3[{ '_Gחc7k[[CC++?O kKScc++{_C۳kkkGGG###߿Oc#wGO/'www___GGG///׫wwc{_O[G;;/'s ###'''+++333777???CCCKKKOOOWWWjumpnbump-1.50.orig/data/font.txt000066400000000000000000000130251107022553500170340ustar00rootroot00000000000000num_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 jumpnbump-1.50.orig/data/jump.mod000066400000000000000000001420361107022553500170060ustar00rootroot00000000000000Jump(c) 1998@Anders N / BrainChildf@@Mail:@equel@swipnet.se= @ {@ @ O@M.K.G/}\ 0O 0ʐ $xx?eOOʜ G/PGeGeOG G x?G2 OG/POx $ "x?xOOxG/xOxx x?pG G/@pGG/}\ pG O ʐ $xx?eOOʜ G/eeO  x?2 OG/POx $ x?xOOxG/xOxx x?pG G/@SpGG/}POʐ $xx?eOOʜ G/PGeGeOG G x?Gq2 OqG/S _`G j O x $ x?xOOxG/xOxx x?t tG/@tG/:PxO $xx?OxOxkG/PxxOxx?ʜxOG ʐG/P kO $kx?OkOk_G/PkkOkZx?ZkG/x0ʿػ6-"Sna2Pte}YTL&`dO$*6,   ç)ͼ˾Ǽ ((*& Ļļ츱    $ %(362<@;00/:7)'23-,/)  $/# и $(,ANO)(9XVUXTI408QRH-''8;@JD9/2>aV?&%$+.$&+.*# #'%! $%  ߺĞʘǪ "!786DE>'";EH:71..*"$$       λöǵ).*096271!  ҿ ⵴ɼ' (, -6:863,03$&.,%"!     *533;97ENVN?:DC@PVP2/211573+ "      "&'      ſ$.121/.5;BB@@A<4-273,#        !     $++)(.4:FHG@==BEFD>7&"''           )2997458HPQC<9<<<71'      )0599978>>;9731.%!        '*-136:::98730-&#        !(+.24567874-*'"!    "*-/24456630-'%#       $'-/0233431,)&!     &),0123220.,&#!      "%(-/033321/*(%       #&),./100/.+&#!      "')+-....-*'%        #&)*+,--+*(#!      $&'*+,-,+'%#      "&()+,--+)%#!      !#%)**+,+)'%!     !%&(++,+)($"      "$&())++*'$"      #%&(()))'#!     "$&&'(('%#!     #$%&''%$#       !#$$%$$!     !"#%%%$"     !"#$%$"!      !#$$$#"     !!""!    !"""      """                                                           #1;JVguu1󵀀166׍ɿᧀ֔ 6-󡀀#k}>慀[g!֏;upM-ֹ-J]xxpeVM>6+!ǽ !#+-16;>CJMNNV[]egkkpuxx}}xxupkkgee][VNMJCC>;61-+#! ǿ!#+-6;>CMNV[egkpx}}xupkge][VNMC>;61-+# ɿ !#+-16;>CJMNV[]egkpux}}}xupkge][[VNMJC>;661-+#! ǿ !!#++-116;;>CCJMMNVV[]]eegkkppuuxx}}}}xxuppkkggee]][[VVNMMJJC>>;;611--++#!! ǿ !!##+++---1166;;;>>>CCJJJMMNNNVVV[[]]]eeeggggkkppppuuuxxxx}}}}}}}}xxxxuuuuupppkkkkgggeeee]]][[[[VVVVNNNMMMJJJCCC>>>>;;;666611---+++###!!! ǿ !!!!!!#####++++++------11111166666666;;;;;;;;>>>>>>>>>CCCCCCCCCCCCJJJJJJJJJJJJJJJJJMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJMMJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCC>>>>>>>>>>;;;;;;;;66666666111111111---------+++++++########!!!!!!! ǿǿǿǿ   S$   6-ℯ³ "SD^MfyhxxxxxxwpvwwnxtuR]Ѻ "52:Q Yn)$+[H>I(*)-G>6#*) 4K &$)E1,&к&" ")14% K72,(:R6=GI L-+B-&16A"9S%I6# Ӝ٣೽(78 -G"*! 'JM 2>9+0 #S>F'! ), ĸ$ 8'  +%4$ -/!K 1IG@= - 8,!# * , 5 !0 +'(1< 0",08"", +."  ,   &     7#<  +$#'".3     "G06+$$   +( N" "" # + )  ! -" 0  &;    " ' ( . $'0! &  &    &1 #      *"  !    #       "  "                                                              !/]Cd-+RX 1fX6 7:}&G$Efb6%H-} a>?$QFs   =<? ݿB;E-94'û #1 & ?%+ <9a&=C9%=$'0(,A@%4,+U/ 3K8 %# $6  (%!Z2C4%*KE 0  &*'6 (W/"  7/* 4. I " !5$ .*5# $1C.  .$#ջ"I 4/4-0C%$/4  +1 " -"  8    "  5  .  #                                         !!  #!##$# $!" '&%(*)&)..)+14, 038/ۼ237044415810  5;//8=/- :>/+:@0+;@2- =@3- >@4,0+5<., 1:,+  ):+* "9)) 8') 4%* "1 + '/* //&   9. !@. #E4  #F@ "&AO  %'@X&*@^ &.C`2 )0EaF -2FdR 07Ef^.!  " 05)<(06#;, .7<, )6<."7;.  35/ ,.1 % (0  /"$/ %#$ . %!.* " 4% 8! 9 " 7 $0" !)%   $%   #" !     !  )  3 = D  H  I%  G0  C;  AC  AH   @L  @O =Q, <6>-&?:;/.@@702?H4/ 2 ;M5-!.6Q7*#)&0S;)$$,'U<+"/ T;,0&(7=*0-/>(/ / +;*,," )5/(&& *12&( )/3'& (/2'" $/3'  ".3'$'!,3*)(-1+)(.-. ($)"/*,&'+)/(*$'0-/'%!&24.& Ҿ$1:,'ٽ!".<*,&"",;7 -'!%)7?0%+'2B/&1'.@%+& 4*);0$'21&58%+;$09#$@(+7@0&4 @7&." =;*(% 7?.$& ,B0&#"C0)"B2+$ >3,'' 64,+,/5,/1 +4*11 +0)0/&-.(.!-, ./&)',/ ,2%%,+1 (5'!.,3 #6+,/1!6/(2.*54'3.. 29 &02+ ->!&.7'&A%#-:%ȿ  !A,-9%ո @4-9*߶=<):-;A%;/ 9D!:1 5D"93/C'73 'B+"61#ܾ #@+$5-% =+&7+% :+&:*! 6)%=+ 4$$?. 6!#?27 =6 :";9 ;'7; 8,12?#-?,(@4#?9 @; @< A: D:H8 L7 P8  $R;&S>"'T@$)TA*+PC .0LE 03HD /8!FB /=#E<!.>#D:/=$D6 2<$C5 5<#C2 8: C1 ;: C2 ?9?4 B8:4 E573 H24/ J/2+ K.1* H,1* E- 2+ C.1-@/0.:-..5- +.  3* (. "4' %-#5" $*&6 "&'8 !$ ): # ); # ,:## /9%"36$"44"! 23 -4  '4 !/  &% '$* ,,/ 000 33 3 52"531"80-!;  /(< 0!> 2?! 3>' 3>."1 ?4%/ @:%,?B$+ON?D      #.**70 )""#.-#,:E&-4# ̷  78    8;$.1;87:?I:K=HYESZi`Yz~gV &ʻ #"  0#$,.*3>HAD#"'*#"03#:E? )=KA-$  & &#5.A»   -48LI0-fc?NZ]`s# =A )NL1"4.H" DI?BU     "$DK>3;>.0'E   #0 #"7B10-,N>HDG "1)) 1&  &53ٻκ'*$)- =EKEB'-:,?=;_V?Ha -   "3  0?&5$-4&#ߺݽĹ,;454=4?L1,L '-4=A-55  'A=*17"    *D0-E?7"&=?Lc  "))#0?47;3Lm#&#&'$&#'50)5 "̴ۺ* #*&01.7-">EY]K    0)?,:00'.$NP   $#&$3 -'  ?)3E0,P`uRI    *, :V  #07EB>G-1&IB )" "# 0 & -.-B&4ֳ )' $*$";E;R7 .*$-8\# *"-"  -=:'  ',X.4)8 $$&"&?XG?0)): > 1.5>BR`78Y;.EN&غ ):HB,-  #0- &")GZ84=  $B");::?SVS;3A1*.4 :   &.  -*$")BN3'0"  $5#7?:BOXLU33047#  ,)*8&)7:BD*-B))  '$ 1505=ABPAEB.#$      '.0#$,   )*")=>;GHLOPKNB)100&))"   ()1 6=" AR7 8`L#%#2 *A51LI   ; +,''.79 C)!$(+,/1 ;J"&,.125 0l $*-/12 #x%(*,. ~' &+-/0sN#45.   gd .3.  Nw'!+// )dO#'*'HY/ &*( Gb>%(& :[G!&&,RP)$%  *PY6   5O=, 7NE $'*^U4&&)DeS $  1U]: 4LP<  /JQG$   /MWR3   +HHA/  GKG<"  FQKC4   1JD9$% !!DOH1   !=OQB! +8   +:E@!)"  *3++&+,! "#&67 23  "' ,F:% */=2 %)  -1370 %".'# 4."". +84*-."  /CD945*#11&!&$ '+#.<:-($   3EJD:1 47.#! *##$%4=8)  %2;DGG>) +7;124%(4;8#   -BCFOO6 " "//3:1  (8:! 07242"   *4?QUWN2  &9:41.!-72.");=/"".(' @gnX-$  %3:=A>?/ 02.-! 5LJ0#(#$&)4:Ob_K97.  ׿ '>MF70. 6??- +<<70,Ӿ ".8:CI[YK;3& ï,47?BF@2 #&/BX==?@??@@@?>>@CEGIJKKHIHHIJIGGGIGDCBECA<;;:8  !   '2BLQSQI?;@KM   꽳 )# '/# #7BB7%5FD޿-ݰ=#8EB<9;8019ELKKJNX   &$)ZC 7FI>. 'L@<˪ 50,,ͼdM $9@BKIG= 3HQW(#;*/9:;AJQNY_WE єʰ\k:XU2# *276/+ &DH%γ)D76.%+!)豻éUf*"4@F;" ,2& A88?FK=-&6LfR$$'2<@OVHOSJ:0 ًMyW( "'' .:89/ +MSDM6%D\\I ж»BuhC &3:1&")'%%" RZd\Z_;/A?4@`V! /Ql]>70#˭μIviD '8A4!$ ERHJK9'3S^P&ұ ҸMzlN(  +<=%#)(/' 7QZbjonI./JUjdN +- 9526. !8@A:.4UdN2%.?F/̀źǼMxcTHC?=8) -?GF@8*%4SiW;$+DPE5),6ǻſƸ0alZJ@7-"0:AEC9*&3O`R1 -BQTGDҀ ":enV@) 2?CIME95AS]V@ )?Veie]ʁ%1FlnL*1AGKMI=;FLUM:' -EVepw .59Ga}g7 '3>EIGA@EOTM<'#(0>O^pǹ$28:F\~~L!!$/::2050"!# +;FThs̀*496>\l9$/667>@:3..48::3/++*-09Le  )5;79GjR( #057<<::2+*-0)/376.,'09;DIS诀 *27>AIYrgH& "3:>=;:91-'"! '0353029E&&"'4=AEP^foyr^C+%06<>?A=:6.$(9?=6+(&',!    4 -,6  ʻɵ"& &/-?>FC?:1*#(,#  $%).+,"# ѾȾ $&%063=ED8<50&)+$   #/2&,' ô۹ +5:.;LJ5;B1.-"   ! '*3*#)&ݳվǩȷ -2:39JBD9@3''0!   &%)",+!/" ⸸IJ˶ )5?58CGA5>=,(4-   ". 0%$).& ׹Կ̭2=7>7AF9:<5-3+    *"8 "')3 Ӻ *>@@9@C;4==0.7     #+:&!//& ΩԻǤ =EF;?H::5>03.# ##.."'01 úļȢخ /HC   "$/'!)1("ؽǻϷ &:JQG9074*:C.  %'-)(1һ±ϵ  6GOL@0661/B7  $'((')/'ɮƷп %=PNK5041/:@!  ! &'%!!+')Ϻſκ  3DPK81220;<1   "*"#)(&  ίɼɱ(BPP?612/7=1   #' !$*#!Ѽɿʸ 2GQF<31/5:7! %&''&'õźƳ!'9MM=71.2:5!   &$ $&& ®!"$5KND:2.397*   %$($#ɵĶ$%#)=IE?8..87"    #$!($! ǰ'&&3@GB:1)29+    &"$("Ϲ&)$+;BC@7*171 $$'%%(*)(/9BA:0/6.  "$&'&ν#*-*-5.  &'&ӻβ $/4* ,=A0#'&ķݿ,5+$"8B<!'% ѽǰ 01'+<=$  '% ʷѸ+1,$!2<3  "&! ؼ--& -:0  !%$˿Ǹ$*)%54   "#  '+(-3'  "$ ü !'($#/'  !  ($!'$  &'"#"   &#      "$     # "     !!#      $$      $#     $&     $'     (!       &'     $'      &     !"                               jumpnbump-1.50.orig/data/jump.smp000066400000000000000000000146301107022553500170240ustar00rootroot00000000000000 jumpnbump-1.50.orig/data/level.pcx000066400000000000000000001065531107022553500171610ustar00rootroot00000000000000 ('''''##'#'''''#''''''''''#'''''#'''''#'''''#''''')')'''''')'''))'''''')'''('''7''')''''*'''7''')''('''8''''''('''8''')''('''65678'89''')''('''54567979''''')*('''63456789:;'&''')'*)('''487679789:;<=<'46'')''*('''59749…;79;89<;=>='4:MJ''#''*('''8M597<=7<=9>O>'4849:'MJ''788'*('''M:O??‡?<>O8=O>O'6:'MJ'789'*('''HJNK??>?=O>O'64'69'M'78889*('''HIJINL?OM=ONOMOM'JM:4':''789*('&'''HIHKOMKONMLOMLJM':9484'*'89*('a`'''HIKJLKJNMLMJM':6'*('9*('&%&'''HIJKLM'96'('('%&`'''HIJKL':'*'*'%a&'689:''HIJKL'*'('&%&'6789:''HIJKL'*''%&`'68968Y69\6969:9:'689:''HIJKL'',+''&%&'SRQRST'6789:9\69789:'6789:''HIJKL6567'(*+''%a&'TUVUVU68[69\69\689:Z69]69_'68968Y69\6969:9:'HIJKL5456789'(*+(''&%&`'TUVUTRSV[9^]X6789:^_\6789:9\69789:'HIJK63456789:;'*-+(''%&'STSRQRTUTVY\Z68_69_69_9:^??\69\689:]69_9:'HIJ487679789:;<=<'(-,*''&%&`'VUTUVUTUVWYW]9_\9_6896?????X6789_^('HIJ5974959:;79;89<;=>='*--,+(''%a&'VWVSQRQRUVXYVW[^\6789:9?6??9?68_69_???^'HIJ8M59:59:;7:<7<=7<=9>O>'(*-,+*''&%&`'VWXYZVWXY[68[69\69\689:Z69?9_9:]9_\??[?^'HIJM:O7:O;7=>9<>O8=O>O'*-,+*)'#'%&'VWXYZSRQRSTXY[9^]X6789:^_\9_^W[^\Y_]?^Z'HIJHJNK:OM:>O:=O>O'*-,+*)(''&%&'VWXYZTUVUVUVY\Z68_69_69_9:^[_^VWXY[YX][Z[Z_'46'HIJHIJINLM=')+*)(''&%a&'()*+,*'5974959:;79;89<;=>=IJH9?567<=9>O>'(+*)('('&%&`'()*+,*'8M59:59:;7:<7<=7<=9>O>IH5456789O>O'+*)('()'%&'()*+,'M:O7:O;7=>9<>O8=O>O63456789:;O')+*)('()'&%&`'()*+,*'HJNK:OM:>O:=O>O487679789:;<=<')+*)('()'&%a&'()*+,)'HIJINLM=')+*)'6'%&`'()*+,'HIHKOMKONM6567:5=7<=9>O>')+*)'6'&%&'()*+*'HIKJLKJNML54567??‡?O8=O>O)')+*)'7'6'&%a&`'()*+)'HIJKJKML63456789:??:?O>O'()+*)'6'78'6'%&'()*+'HIJKL487679789:…;<=?M=ONOMOM'()+*)*'6'8'7'&%&`'()*+'H6HIJKL5974959:;79;>=MKONMLOML'()+*)*'7'8'78'&%&')*+'6'H6HIJKL8M59:59:;7:<7??‡?>KJNMLML'()+*)*+'6587678'8'%a&`'()*)'6'H7HIJKLM:O7:O;7=>9O:=O?OJKL*'')+*+5678:;%&`')*+)'545678789HIJKLHIJINLM=%&')*+'487679789:;<=_>%&`')*+)'5974…9:;79;89<;=>=JKLKIJKJKJKMKJKLNO*''*,-9<>_8=_>_%a&'&')*+)'8M:<7<=7<=9>O>JKLMLKJLNOLMNO*''(-_^>_^_%&`'%')*+)'M??‡?>9<>O8=O>OIJKLMKJKLNOM*(''*-^[_^[%&'&%`'()*+,*'HJ??M?O:=O>OIJKLOLMNO*(''(-OO[Z^[Z%a&`'%&')*+,*'HIJI?M*(''*-'O'''487679789:;<=<&`'%&9:;7:??‡?*('''*-O''5974959:;79;89<;=>=&'&%&:O;7=>??=?*('''*-O'78'8M59:59:;7:<7<=7<=9>O>&`'&%a&OM:>O:=O?>O('''*-''788'6567:O;7=>9<>O8=O>O)&'%&???NOMO'''*-O78895456789>O:=O>O&`'&%&???L*'''*-788896345678…:;M=ONOMOM&`'%&?('''(-789487679789:KONMLOML&a%a&'''*-895974959:;79;??‡?JNMLML&%&''6''(-@@BD@BD@BD@D8M59:59:;7:<7<=??>?JKML&a%&*''6'6''-BOBOBOBOBODOM:O7:O;7=>9<>O8=?>OJKL)&a%&*''7'6''*DODODODODDOHJNK:OM:>O:=O>OJKL*&%a&('6'68767''(DODODDDOHIJINLM='*)*OLMNO*)&%&()*+,+*)'()*+,*('M:O7:O;7=>9?8M59:59:;7:<7<=76345678…:;:;7:<7<=7?9>O>'&'*)a%)*M*)&a%&()*+*)')*+,*''HJNK:OM:>O:=OM:O7:O;7=>9<>487679789=<;7=>9<>O8=O>O'%`'*(a%a&a%a&()*+*')*+,*''HIJINLMO:=5974959:;79??‡?>=:>O:=O>O'&%&'*(a%&%&()*)'()*+,*''HIHKOMKONMIJINLM9<>O?O>OKOMKONMLOM+'%a&'*a%&a%&)*&')*+,*''IJIJKJKJKMIHIHIKJLKJNJNK:OM:>O:=O>OKJLKJNMLM)'&%&')%&%a&()*&`'()*+,*'')KIJKJKLIJIJKJKMIJINLM9<>?%a&a%&()*+)'''()*+,-*('&%&`'HJNK:OM:>O:=O%&%a&)*+)&''')*+,-*'%&'HIJINLM=68968Y69\6969:9:&689:&a%a&&6789:)68968Y69\6969:9:&`'')*+,)'&%&545679798M59:??‡?=7<=9>O>ő’6789’‘69789:Ē‘‘ƒ‘&a%&68968Y69\696789:9\69789:`''()*+,('%&63456789M:O7??>?>O8=O>OǓ68[69\69ē69]69_9:68968Ɠ69:9:“&a%9:9\6968[69\69\689:Z69]69_9:'')*+)'&%&487679789:HJNK:OM?O:=O>O[9^]9:^_\9_^6789:9\699:&%69\689:Z6[9^]X6789:^_\9_^&`''()*+,('&%a&5974959:;79;899<>O8HIKJLKJNMLMLVW[?\Y_][^Z689:Z68_69_69??[?&a%]9_689:VW[^\Y_][^Z&`'')*+('&%a&HJNK:OM:>O:=OHIJKJKMLVWXY[YX][Z[6789:]9_\9_]_?[Z^&%[6789:VWXY[YX][Z[Z&'')*+)'%&HIJINLM='(*+)')*+'&%&)+MKJKLNO'7',XYZ\]\^,)%%&()*Z[Z[\^*(&'&'!"%'8M59??7?7<=7<=9>O>'*+)('()*+)'&%a&`')+OLMNO'8'',)&),Z[Z[\^,)%%a&&`'%`'!%$'46'M:O7:?7=>9<>O8=O>O'(*+)')*+)'%&`')+M'7889,)&),+*+,)%%&&`'&%&'"&'4:MJ'HJNK:OM:>O:=O>O'(*+)')*+)'&%&')+7889)&)+*)*+,)&%%&&'%&`'#&4849:'MJHIJINLM=')*+,)'%a&`'+)*+&a%%&&'%&!%$&'"#HK9K:M9O>OJKL8M59:59:;7:<7<=7<=9>O>'64'()*+,-*'%&'+)*+(&a%%a&&`'&%&"&%&`#$HKJMJOLJKLM:O7:O;7=>9<>O8=O>O'JM:4')*+,-*(&`'+)*+(&a%%&&`'%&#&%#%HJKLHJNK:OM:>O:=O>OJM':9484')*+,-*&`'&+*)*+(&a%%a&&`'&%a&$&%$%HIJHIJINLM=O;7=>5974959:??‡?54567…8959:;79;89<;=>=&%a%VW[^\Y_68[69\69\68??]?_9:&!$%$%&48767978???‡?=<:<7O>OM:>O8M59:59:;7??7?45678;9:;7:<7<=7<=9>O>&a%a%V689:Y[YX][9^]X6789?_\9_^&a"$%$a&5974959:;79??;?>=>9<>O8=O>ONLM9?487679789??‡?9<>O8=O>O&a%&%V6789:YXYVY\Z68_69_69_9:^[_^&%#$%$%&8M59:59:;7:<7<=?=9>O>O:=O>OHKOMHJNK:OM:>O:=5974959:;79;??=?>=M:>O:=O>O&%&%8968Y69\6969:9:YVWYW]9_\9_]_[Z^&a%$%&%&M:O7:O;7=>9<>O8=O>OM=ONOMOMHIKJLKHIJINLMO>MO:=O>OMKONMLOMLHIJKHIHKOMKOM:O7:O;7=>9<>O8=O>OKOMKONMLOML&a%a&%???689:Z69]69_9:VWXY[YX][Z[Z&%$%a&HIJINLMO:=O>OIKJLKJNMLML&%&%??X?789_\9_^VWXYXY[Z&a%$%$%$&HIHKOMKONMLOMLJKJKMLMLKIJHIJKJHIJINLM=''8'[9^]X6789:^_\9_^%a&&“&a%&HJ*&:6&'()*+,'%)*+)%&a%8M59:59:;7:<7<=7<=9>O>'7889VY\Z68_69_69_9:^[_^%&&“&a%&HL(&96&`'&)*+)%)*+)%a&%M:O7:O;7=>9<>O8=O>O7889VWYW]9_\9_]_[Z^%a&&“&a%a&HJL&:&`'&%)*+'%)*+)%&a%HJNK:OM:>O:=O>O78896:VW[^\Y_][^Z%&&“&%&46&HL*&`&%)*+%')*+%&a%HIJINLM%a&HJL(&H&()*+,%)487679789:…;<=<#$%$#!& #$%$#!& #$%$#5974959:;79;??=?6567JKLXYZ\]\^—“Ǔ8M59:59:;7:<7<=7<=9>%&HJL(&HJ&64&()*+,%')5974959:;79>=$%$#" " !"$%$#" " !"$%$#"8M59:59:;7:<7<=7?456789KLZ[Z[\^–•“ɓM:O7:O;7=>9<>O8=O>%&HIJ*&HJM:4&()*+,'%')8M59:59:;7:&"#!"%&"#!"%&a%M:O7:O;7=>9<>63456789:;M•ÖHJNK:OM:>O:=O>OKMDN&HJL(&HL:9484&()*+,*()M:O7:O;7=>9??O?O&"#!%$&"#!%$&a%HJNK:OM:>O:=487679789:;<=O:=O?O%&#$"&%&#$"&$%$%HIJINLM=ē”ÕHIHKOMKONGHIGHGHMN&HJL&HJ*&96&)*+,-+)HIJINLMO>—זœ”•HIKJLKJNMEHIMN&HJL(&(J(&:&()*+,-+)HIHKOMKONMLOML&%&$%$&%&$%$&a%HIKJLKM:O7:O;7=>9<>O8=O>O–ȗ–œ”•HIJKJKMHJMN&HJL)(JL&()*+,-+)*HIKJLKJNMLML&$%&$a%HIJKJHJNK:OM:>O:=O>O–ŗ–Ǔ”46œHIJKLELNMKMLNMON&HIJL&6&()*+,-+)*+HIJKJKML&$%&$%HIJHIJINLM=&487679789:;<=<-+)*5456789HIJKL%&%$#!%"$%&%$#!%"$%&%$HIJHIJKLǔŕǓ“”HIJKLEHI656L74MN79789:;<=HIJLN<=9>6567959:;79;89<;=>=6567*63456789:;IJKL$%&$#  #$%&$#  #$%&$# IHIJHIJKLǔŕƓ“•”HIJKLE54567M959:;…;89<;=>HIJLN5456789;7:<7<=7<=95456789797…9:;<6567JKLJIJKJHIJKLȔŕœÓ”•”HIJKL63456789:;:<=9HIJLN456789:;=>9<>O863456789:;895456789LKIJKJHIJKLȔƕēÓÔՓ̓ÔHIJK487679789:;Å??‡?5HIJLNL79789:;<==M=O5974959:;79;89<;=>=?9?7679789:;<=<MKJKHIJKL˔ĕ“ē”ԓȓƔHIJ8M59:597O>MKO8M59:59:;7:<7<…=9>O>:?5974959:;79;89<;=>=OLMHIJKL͔ÕÔӔ•ԓǓǔHIJKM:O7:??‡?8=??K?M59HJL:JLN;89=7=>9<>O8=O>OLKJNM:O7:O;7=>>OMO>MHIJKLӔ•Ó”•ӓ”•Óɔ•HIJKHJNK:O??=?O>O?JLK8HJL59:JL<7<=7<=L>O>:>O:=O>OJKJKHJNK:OM:>O??‡?OKOM:O7:O;7=>9<>O8=O>OHIJKLӔ•“”•ӓ”Õʔ•HIJKHIJINLM9<>O8=OL>OMO:=O>OHIJKLԔ•ĔғÔÕʔ•HIJKHIHKOMKONMLOMLJHINK:OJL>O:=O>OLOKOMKONMHIHKOMKON?LOMLJKHIJINLMOJKLKJHIJKJKL…KJKLMHIJHIJKL:HIJKLҔЕ“єĕĖ×HIJHKJMJOLIJKLMKJHIJKKJLNIJHIJKLHIJKLȔܕ֔ŕÖƗHIJKHJHIJKLMOLHIJ??‡?KJKLNOKIJKJHIJKLHIJKL #+3;CKS[cks{˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ w+3c3[[CC++?O kKS333{7ccGCsO+ ۳kkkGGG###߿Oc#wGO/'www___GGG///׫wwc{_O[G;;/'sjumpnbump-1.50.orig/data/levelmap.txt000066400000000000000000000005571107022553500177010ustar00rootroot000000000000001110000000000000000000 1000000000001000011000 1000111100001100000000 1000000000011110000011 1100000000111000000001 1110001111110000000001 1000000000000011110001 1000000000000000000011 1110011100000000000111 1000000000003100000001 1000000000031110000001 1011110000311111111001 1000000000000000000001 1100000000000000000011 2222222214000001333111 1111111111111111111111jumpnbump-1.50.orig/data/mask.pcx000066400000000000000000000126321107022553500167770ustar00rootroot00000000000000 7788889999888667667866876787866878867888778888878888888888888888888877889889998886667678788788888888888667878888887788988999888]?66787888888877977787897989888667788888]88778898899988877686878898799898888888866787888888 ˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ 3c3[[CC++?jumpnbump-1.50.orig/data/menu.pcx000066400000000000000000001111031107022553500170010ustar00rootroot00000000000000  ###'''+++333777???CCCKKKOOOWWW& & & !&'"!"!   !"    !  !" !"# ! "#$'&(&(&'#"! !  !"   !   ! !"# ! "#$%'&&'$#"! !  !  !  ! !"# ! "#$%&(&%$#" !  !   ! ! !"# !  !"#($&&$#" ! ! !  ! !"# ! !"$&&$#"! ! ! ! ! !" !! !!#$%&&$" ! ! ! ! !"! !! !!"#$%&%$#!" ! ! ! ! ! !! ! "#$%%$#"!! ! ! ! ! ! !!"!! !"#$%$#" !! !! ! !! !!! !"!!"! !"#$$#"! !!"!! ! !! !!"!! !"!"! !"#$$#"! "!!"!! ! !"!!!"!"! !"!!"#! !"#$$#"! "!!"!!!! ! !!!"!"! !"! !"# !"#$)$#"! #"!!"!!"!! ! !"!!"! ! !"! !" "#$%&$#"! #"! !""!!"!!! "!"! ! "! !'"#$%&%$# "! !""!!"! !! !":!"! !"! !"#$%(&%$! !"!""! !"!!" !"8" "#! !"#$&&%8  !""" "!""#"8"#  !"#! !"(%&(;868;:86::86"! :8686868::8::868 !"86;8:8"! !:6:8:6:8:68 !";8:88::8:8:8:868:8::8:868;:::8:8:<;=;<:;<:<;<;:;:>NMNMOM<>9:;:;<;=<;>MOKLNML=>=<=;=><;<=>=<=;<=M>=>=><;=;>=><=>=<=<=<;<=;<9:;=;<=<=<;<;=><;=<;=>=<:;<;<;:;<;=>=<=<;<;<;<=>=;<;>?>;=;<;<:;<;=;9;:;=NONONLK;=;9:989:9:;:;<=MO;OMNM=<>;=<;<=<;<=>=<=<>=<;9;=<=;<=<;<;<;<:9:;9:;:<:989:;<;:;:;<=;:;:;:;<=<;<;9;:789:;<;=;:;<;:;9;<;=I=<;:;9;:;=>?=>=>=:<:;9:;:9:;<;<:8:;=<;9;>=<;:;<:<:;:;:;:;<;979789:89:8:868;:9:9:9:8:;<=<=<;:8:8:;<;:898689:9:;::9:79::JIMI<;:87:9:;<=?<=<:<:9:9:;:9:97:;<;<=8:89;=<;OMNMO<=>;:;<:;:<=<;:98;<;:9898989:9;:9:;<::98:KJI<:7:987:;<;<=><=<>:<:9:79:9;:7:;<;<><98:;?=<;:;:;:;=<=<;:898<;=?><;<;<;:9:989;<;:;:9:;98:;<;8979:989:;:87689;:9:989:;<=<;:9;<><;::9:9::;8;9:8:;<::KJI<;8789:;:<;<>=<:<:897:;:8:8:;=;>=<:;<;=?;<=;:<9:=;<=?><:;:9:9:9:;<;:989:;<;78789:;:9:9:;97879:;:;<;:;<=<;<=<>=<;::;:99:LKI<;:=:<=<=>=<:<;:98:;8:8;:;<=><:;<=<;==>?==<;<:;<=?<=<>;:;<;=>?><;9:98:;<='<;9;:;<;:8:;:;<;989:;<;<;<:9:9:;<==<=<[ONONONO;:;:9:;?=?>=<;:;=<=<=<=><;=>=?>=;<>=<=><=><>=><;;:;:;<989:<;:89:9:;:9:<;99:9:ݎMLKIJHIK<;<=<=<=LMOLJHL<:MO;<;:9;<=?>?<;<=?>=>?>;;9;:;:;<:9:<;:89:;:;9;=>;:99:9ݎNLIJK<;<=<=>=?<=?=<;<>?>?>ONM;:;:9;:9:;<'<=<=<;:9;:9:;<;9;9;:;:;:;<=:<;<;:<=?<;<>?>M?OMOM;:9:;:;:;<'=<=;:8;:89;<;:798:;<:<;<;<;=<=<==><==?O=ONLOM<;:969:;<;<9;<'<=<>=<=<;989:;<;9789:;<:M<;<>=;<=<=<===NOMIHIJLMOMONON>?=<=?>NOMOMKJLOM;<>:;<;:;<;<;<'=<=<:;<;9:;':N<>=<=<>=>:;<=ONO:9:<'&%$%$%MKMJKJ<>=<=?>=<==<:<;<=<=<=<;<;<=<'!<=<>=<>=<;<;9:;:;&'%:MN<=>=>=<;<;<=ONO:9:<'&97$%KMLKJIJK<=>=?><;<=>=<>?>=<=>=<=<' !<>=<;<9:;&'%NONM<=<;<;<=O:89:9:9;:'&9578$879$67%KMLJIJIJKMNLJ?>=<=<=<' !"'<;:9;:;&'%NONO&'9:89:9:&'97679$679$7687%MMLKIKIHJKLMJLMOLMNMLNMLJIJKJIJNOMNMNONMLKMLOMLJKONMN'&;:;:;:9;:;<=?>=?=>?>=?=<=< !"'<=<;:9:;&'%ONMKNMN<=<=<>=ONONMOLJLMNOMOMONO'&:9:8%89&'9759$697987679%MLKIHIHFJKLJKMLONMKMNOMNLMJIJIHLKIKMONMNMNONMLNONMOMNLMN'&%;::;9:;<:=;?=<=<;:;:;'%NOLMLMO<=>=?>?><><:;<;<=<=9;<'! <' !"#'=>=><:;&'%LKLKMLMNO<=<=?=>?=<;<;<:<'! !"$' !"#<=<:;&;&'%LKLKLNON?><=<;<;<'! !"$ !"<=<=<;&;&'%LMNONMNKLMLNONLMOLKLMOKLMLNM'&'%&%8679;:;8:9868689:9%MKJKOLKJKMLKLMNLM'MJLKJIJILMNONMLNLMKIHJIJIJMJKJLMN'=98:978:;98789:;Ž:989:<;<;<=;<;<:;<;#! !" !"<=<'<'<;&'%MKLMLMNOLNMJNMLMONMLMLHJKILMKLN'&%!"#%676;<8;986969$%LJKLMLJKLKLKLOMO''MNJMNIDHKMOMLNIJKMOMNJHIHGFHIGHJLMJKLO'=97879:65769;:79:;9;:;89:<;?<;:;<=< ! ! !"#$%&'LJKIJGFJLKJIJGKMLJIJIHIMLJIKJMJM'('&'&%$%Ô$#!$#"!"#%878767$6545356478Ŕ7IJKJKJKLMLKM''JHJLONMGLKIHJIJGHFIJIKIJLJKIKLMNMLKN$ :; M;=;89:;"#&ŽNONKIEHKJGKHFGJKJOMLMKLKIMOLNM;<=<;MH<;<;:=>;:;<=<=<=?=<=>=?=< !"! !"!"! !"#$%&%JKNOIKIKJLJKHGIGHGIHIJKMLKJIJKLMLN'&%89:9:%:869;9798645689879565678܎JIJKJLNLKIHIJKILM''LHGJIKJIFIKLJIKMKJNMLMNOJIN MJIN M;9789;"&'JFGHGHGHLMHIMNLJKJIHGIKIJKLMHJK<=<;:?> < !"!"!"! !"#$%&'%IMKLJKLNMNKJKFHJKGIHKLJNJKJKLKLMLM'&%89:9:979:%:98;8;:;97545656797565678KHGJKMNKIFHIJILKM''LHGIJGIKLMLKJIJKLJKNMLMNMNLOJLM MLHL ;9578:989:#&'KJLHJILHGHIKJKIJKIFEDHGHFHGFEGFHIKN<=<=<;=?>?> !"! !"!"#! !"#$%&%JKINMKMKJMOMIGHJKIJKMKLOMKJMNOM'&%789:76:%97879:;:97568987975678LJIJKLMKJIHGILKM''MHGKJHFGIKLIFJGHKLJKLKLMNOMOMOJM MFIM ;6589:978:#9&'&'OKIHKHIJKHIJKJKHGIFGEDEFGHMK<>=>?><=?>= !"! !"!"! !"# !"#$&&$KJNMKGKNMLGJHJKJHIJKJOKJKLOLKLMONON'&%898:76:%9:79:;9879768KJKMLMLKJHIJIJMLM''KIKJLKFHIJKGIJILFHJLMKLMNKMJMLOJKM MKGMN 9:87879:987879:;89&'LKHIHLILJHIHJLKJIKHIHIHFEGHIJLM<>=>?><=>?>! !" "!"! !" !"#$%&&%LKNMFJLKIHJLIFHLJKOKJKLMOLKMONM'&%9:98989:::9:;97579765678MLKJKMLKJHIJIJKMLM''MIKJLFEHIJIKJHLEIJMOLOMNLJIKMNILM MKHJN :97876:;9:87869;989:&'LJIKHIKIJLJHGIHKLJIJIMJIGFHIJNM'<=<>?><=<< !"!"#"! !"! !"#$%&!&$KLKLLLNJIFKNLMJONLKMLKLMLMLKM'&:9:9679:::;:9656576789:ՎKMLMLKNIJKLN''LFHNHKJDHIJIHKIJFIJKMKLMOMLONMNMJHJMNMKJM MKGIJMN :9878:;9:9;9:9:$&'KIMHJHGFHKHGHMLJIHFHJNMNOLMOMLOM! !'&%< !"!"#$"#"#"! !"#$!&$DKMNL·LJIMONLMOMOLFIKLMNMM':9:9:::;:;:;986567:NLOMKLMKLKM''KGKOHJLHEHIJIJGIKHIJKJFIMKLNMNMLHFMOKLKNM MGHJKOM :989:9;:9:#$%&'KILHIHIKLIGHMLJILJILKNONMNMNM=; !#$#"!"#"#$%$#"!"#"! !"#$%!"#&$BCEFJNOLMNLNKLKIGHJLNOMKMKLNMNM';89:9:;:;987676767:9:8ˎOMKMLKLMLM''JLOLHJLGEHIKHJIKIHIJKJIOKMNMLMNMKJILKMJMFEGJMLN !:9:;:;:!:"#$%&'KHJFGJHJIKJHJGIKNLJILIJMNOMOM;=>=; !"#"#$:#$%"$#! !"#"! ! !"#$%!"#&!"#&$HLNONLMLKLKIGHIHIKOMNMKLMLMN';:979::::;878787676789899879OKMLKLMLMLM''JHFCHLGHGHIJGIJIMIHJKLJIEIKLNOLJKLKNMKJKJGKJMKJHEGJKMO !9:;::!"#$%&'LIHILIKIKJGIGILOKJILJKLMOKMOM;< ! !"$:$%"!"$! !#! ! !"#"! !"#$!!"!"#$&$%JHKNLMKMKIGEFGHGIJLONOKLMLM';89::9:9::978678787687989:878789:MNMLKLOLMNMLM''LHGHFKIHIHIJLIJILIGIJKJIHFIKJMKMNMJKEFJMLIHGIJMOLM !"!:!"#$&&OIGIKIJIKLJGHFEJKOMJIJKLKNLMO<;>?<; !89:9:;:%$%"! !"# # ! !#$#"!"! !"#$!!!"#$%&$%KJIJMLJHJIFEFHKHFHIHIJONNOKM';8:89::;:;867878789787878789;MOMLKLNKLMKMKM'MJHGHGJIHGJGHJKLKIJLNOLKIHGHJKNKLNLJKIDJKLIJKLNM !"!"!!"#$%&NHJGFJLIHFDJKMKLKHJKLMLON<;"! ! :68989:;:8 !"#$#$ ! !"$% !"!"#$%"!"!"#$%&9&$%JKLIHMFKENGKIFKDGIGMHMHNIOMLNMKLMLN';'=:9::::87897986789;:NMLKLMNMLMKM'LJGIHGNIJKIEHIJKIHGIKJGHIJMLJHIKJMLJIJILMLGHLKLMNM!"!"#!!"#$%FKLOJHGHJMHFJIHLIMKLKIJKILOMNOM'<>=;"!:9678:;:989:8 !"#%! !"!"#%& !"#"#$%#"!"!"#$%&9&$%JIEGLKDNEHMHKMKLGNLILENLOLKOLNMLKN';<;<;::::;:8787898789:;MONMLMLMLK'MKIGJHNIKJGHIJKJDJKIHILJIKJMLKGFJHEGJNLNM!"!!"#!"#$&JKIHFHIJLHIHJLMKIKMJLKLO'&%$#"979:9:979:;:89898:8; !":%! !"#$%& !"#$%&'#"9#!"#$7&98$%KIKFDLFKCNFLFHGMDFGNFMLDNHNJKLIJLN'=<;<;<;::::9:8989898789:;LNONLMLKLKLK'KLIHKIJKJIGIJKIEJMKJKLMKGJMLKLMKIGJIKLNO%>="!!"#$%&MJHGEJLNLECEGHIJKMNKLKMNKMN'&%9859;9:89:989787:;:9:'&!"#$%&'! !"#$%&'('$:9$%7#$%798979:89:EHJKJADGHIGFGIKIGFGIHJGIKLMKLMLN'=;9:<:;<;:::9:989:9898989898989:9:9;NMOMLK'LMJFDFHJKEIJIJIGJIHNIBIFHJKIJMJMJLNKLMN;<<>"!!"#$%&LJLJILMKEGHGHIKONMLJLNLNMN'('&985768:9:989:989;:89:9:'"!"#$%'(!"#$%&(&'('9:97$7$%989787;9:9HJFDBCEHIHKNMNLMOIFHEIHJIJKLOLOMN'<;:<;<;:::9:8789898989898989:9;MLM9NMNMLK'LIMIGHJLKJGJHIJIFJIHMIBIHILKJIJMJMJIKONLNMNM;"#"!8!"#$ˎ͎JHKIHLMLHGIGHJLNLIKINKNOM'('87878:9:9:9:;9;:79:'#"#$%&'("#$%&'897987898789:8EJEHIKGCFHFEIGHIHIKIECILKNLMOM<;9:9:;<;::::9:9:87899898989898989:9NMNOMLK'KHLIHJMKJIJHIJKHJGIHJKAHIJMJIJMLOHFLMLNM;;<;:<;<=<=>"#;878:!979;ŽIJKJLMLIJIHKHJKJMLKGIKIJLN'9:989:;:;:;<;:;:;:9:98'%&':%9789798989:98678689;9DEJMIGHIJIHFGCDEIEFGNJKHKLOMN9:;<;:<;::9::976789986789898:9:LMNOMLMLK'IGIHLKJKIHIKLGIHJIKBHJKJIJIJOMLNMLMLINL<;?:<;<=<=>;98:89:!98789;̎Z9:J:KLKMIEFKIKLMNKHGIJGHKOM':98:9:<;:;<:;:;:;9:9878:8'&':968798:89:9868767875989:89EEJMIGHIKLNMIHIKIKNKLKJKLJOMLM9<;<=;::9::987678789898678987879:;MNOMLK'JIJHLKJLMLMIJLGKLJFGILJIGIJNMNMLKNKN><:?<:<=><;8;:!!978589;֎9:LMKHGHGIJMNLKJIHJIJM':989:9:8:;<;<;<;:;:;:8:9:989:;':97679:9898:98767876979;98DEMIJIJKMOJIHEIJKMNMLKMLM:89:;<=;::987899856567898987878:;NMNMLK'IHJKJIHJKEGIKMILMLKFHGIJMJHJONLKMLKN><:;<>=><:89;:°!;98989:;99:KOLHGHJHIJKONKJILMHM':98989:9:9:;<;:;:;<9:;':989:9:89:9787865679:;:8EDEMIDADEIKMOJIFIJOLKLKMNMLKM:;<;=;:::9:9:9878789898565656578989898789:;NMLMK'EGHJKLIJKJKLMJNMKFHLIMJIJNMLKMLKN><=>=>?><:;:9:;:9:9;;78:?;::9:9:9:989876768767985657989898789;<;MLK'KGHJLIMIJKMJMKLKMHFGJKGIGHILJIHIJNMLKMKO><=<=><:;:;:9::9;̰98<;;=<><;8:;:;9;9;8:;<=>=<>?>;878:8;:;:;:;:;9;:<;=?:::9878:99876767986786567989:9:9;OMNMNOMK'FGHJKLJOIJKMLMJIJMKLKJIKLMKJGDEGKJFGJNMOMOMHJM>=>=>=;768:;:;:9=>=::989:9875898987656789:9;MN]KONMNONLK'GHJKILIHKMJIJMJLKIJMNLIHIGHIKJFJOMOMIHLJL><>?>=<;9789:;:;=<:9:?::989:9789:878987656789:9:M;]^NMON>ON'IKJKICIJKMJIJMJKLKJKJIHLMIHILKJHBJONMKILM>=>=><=<;9878679:;:;<:879:?>?>:989:9898:8767898656567898:9NMN>NM'IJKJMHJKLMILMJIFHGKJLJGHILKJFDGMONMJKLHM><><;<;:<;89:979:;9;:;<:9:?>?>?:9898:8:865656787898:9OMNMNKIJKJIMLMNOIECIKIFJKJGKJHIMKJFGFMOMNOJKLHM>?><;:<99:;989;°;<:8:MOLJMK:89:;<;<;:<;:8:;:9:9:989:;:9:9;':'9:89:;:8768:89:;:;:;:9:FEGIJLKNLIFIHLIJOKLKJIZNMLMKN>?>?:9878989:898787657878979:9:;LO>NLMNMLHIKLJMLMNJHILKIKMHKJLKGHIOKJFHEINOMOJKHIM>?>?><;:9<;9:9:9:97989;9;:;<:98:KMONONMLKH98789:9:9:<;<:89:9;9:9:;9898:9:8;:';9:898:9:;:9:69:;<;:989:;:9:EIJLKJMIFJHIJIJKOLNKJIKONLMJ?:9767676789:9:9976567897898978:9:;O>ONMNHILKLJMLMNMOIHIMKIHJOLOLKLFGHJNLJFHEINOMNKLJHL>?><=>;:9:9:9:;9:;9:9:;:;<:‹:NMO[ZOLJIH98:9:;:;898:9:9:9:9:;9786:98:<;:=;:9:989898:;:9:698:;<:987879;:;:9:ˎDFIJLKNJHIHGIHIJLOLNKJIJML?>?:9767689:9:975656789878989789;N>NMJHJNJLJMKLMNOIHILKNKHFMOJNLKLHGHJNLKIGEIMNMNKLMIGKM>?>;=<:989:9:;98;:9:;<:9<;:ONMI:98989:9:9:9:9;:9:89:9:9:9:987869:9:<;=;:989898:9;:9:79:;<;987689:;:EDDIJKLJOJIGIKJNLMLNJIKML?>?:976765689:985456565798989789:;MO>NMNJIJMJLJLKLMLNHIJNKMJEMOLNKJKGHJMLKHFDIMNLMKNLIKM><=<=<;:9:889;9:;;<;<:<986789:9:;:9:9:9:;:9:9:9:98:;:8678:;:;<=<;:98989:9:;<;:9:9:;<;98789:;:;:DBIJMNLJIJKGHILKONMLKLMKJNOLJ?>?:9767676789:9:985456767897898:9:;<;<;NMLJKOJLJIJLMNMHIMLGLMOLMKJKGHJMKHFDIMLNMILMJIHM>=<=<;:9:969:89:9;:;;<;<:<:897878:;:9:;:9:8987:9;<;9;:;89:;:9:9898:;<;<;:;<;:98789:;:;:DFFDJIJKLOLKJIGKFHIKOMLKHFHKNOLM?:9:97676789:9843456767878:9:9:<;LONMKJNLKLJIHLMNLMHIKMLFKMOJLJKIHJMKHEIMKNMLHJKMIHIM>=>‹;<;:;9:9;9:9:;:;9;9:<;<‹<:878679:;:;<;:9;=<:9:9<;<;<;9;989<=;<9;:8789:;<;<:;<;<;:989:9;:;:;:DBEFEEILKLOLKJEGKFIJKJKOMLMLHIJNLMLM?>:97676789:9864354687676789:9:9:NMJMLMICHKLNMHIKMKIJMLKLKOMLKHGIMLNMNLHJKLJGIM>?>?=<=<;°:9:9:9:;9;98:<;<:9867898:;<;:;<;<=<9:?=<;<;:<;8978:;:;<:;:;:9;:;:=;<;<;<;<;<;9:89:;:;:;:ED͎EJMKMJFGIKFIJKJNONMLJIJLOMLM]\LM>:9:97676789:986567876789:9:;?>=<=;:9:;98:;879::<=:9789:;<;<;<;<;<;:;<=;>=;L:;?=?<97879<;<:;:;<:=;<;<;<;89:89:;:EFŽJKLMNJKILFHJKONOMLKJIJLOKL?>?:9787898:9:9:875687898989:9;<;NMLJNLKJILKNKMILMLJOILMJLKILKHGJONONMLKJKJKIGLM>?>=<;:9:9:9:;98:;8<:=:<>;:9:9898:9:;:9;<;<;<9798;=?MLNM=?>=>?:9;:;87:<;<;:;:;<:<9:<;:;<;<;8989:;:;:F͎֎EDCJNJNKJKILGILKMNMNNLJIJOMLJ?>?>?>?;:9787898:9:9867878989:9:9:;<;ONMJKMKLJIHLNOKMFEFIJKMOIMJLKJIMLKIHGFJMNMLKLJIGHM>?>=<;:;;9:;<=:NKJMONKMJ?KLM=;<;9:9:<9;9;<9;<:<;:;:;:;:9:;:;:;:ŽFF͎BKLOKILJIJKMNKNOMLLMJIKONLM?;9:9:8789:9:9::86786789:9;:<;<;LMLMNJLKJHILNMOKMHFHJKMKIJMNLKJIKLJIHIJNLMLNKLMLJIM>=<;:;:;<=?<89:;:;:;:98689:9;:98:;879<><>=MLMNLNMNLK?>:9:9:9878787::9:9:898767865676898989:9;9<;NMNONOJMKJIMOMOKMIHIJKLKLILMLMLKIHIJKJIHIOLOMOLJKMKJHLM>=<;:;<989:;:;:;:;:98986789:98:<=?>=KNMHGHFIKMLNOMOM<;:;=<;<;9;9;<;<;:98:;:;:;:;:̎FBF̎CKJOMKLOJIGFIJKNMLMILNONMJ?M?=<;9:9:9:878789:9:9:987678756567676898989:9:9<;NO>NLJKJHJKONKMNIHIJKHLILMLKMLIJIJKJIHINOJKNOLILJIHM=<;:989:;<;9:87:9:9:9898798989:98:<;<=:=LJOHGHFIHIMONLONM;:<=;<9:;=;<;<;<;:98979:;:;:;:;:FE͎DLNONLMJKHILJLNMLMIHLONLOMLK>?><;::9:987989:9:98767875676768989:9:9:9;ONOMJKJHGINONKMGHJKIKMILMKNMLJIJKJIHGHJNLMILMLMILJIHM=<;:98789:;:;=78:9:9:9878678:98:;>?>=;J?=:;9:9:9:9:9:9:9768798767678989:9;MOLONMLKIHLNJKNMOHKIJKJKMNONKLMLJKJKJGHNLNLIMLJLKHM;:98767989:;:;<987869:;:9:9:9:9:;<=>=<;MOLMHIHGFGHFHGHJNM;<;=<;<;<;<;:98;:;<:FDŽ֎BCCKLOKLNJEFIKJKOMLKJIJNMNL>?>?>:9:9:9:9:9:986767898767898989:9:;NONMIHIMKNOLHGLILMLKJIGHLKMJKJEGHIJONKLNMNLKJGM:9878767898:;<=96789:;:<:;9:989:98989;<;=>MLMLNKLMKIHGFGHGHIKNM;:9:9:9:9:986767898768789898:9:9:9:;:LNJHIMNMOLJHKGIKLKIKLMKLKMJILKJDHIJKOMLNMONMLIHM:987678989:;<:9878:;<:;9:9:98979:;<:?><:9:9:9:9:987867898989:9:9;:NKNHGHLMNOMGDKJHJLNMLKHLMKMLMJIKLIDFHIJHONKNONMNOMKLGM:98748765678689:9:;9:;:;:9:898987869;<>?=;OHJKFHJIHGFDEHGEFGIHM;NMLNMO;<;<=<;:DCEF̎֎DEMOKLNMIGIJMLKOMLKJKNM=>=<;<:;:9:9:9878678989898989:98:9;:;NMIHJLNONJHGFJHGIKLKLOLJLNLMONMIOLOHFGHJHJNOMLMNLJKLGJM;:978789:;9;9:;:;:;:989:;KMJHIKGHIJIGHMHIHGFDEGFGHJIHMNLMONJO;<=;<;FECDF̎9֎̎FDONOKMNIKJGDJLMOML9KJIHIJM<;:98678989898989:9:;:=KOHGJIKFMJLIHGFEFGHFGHIJIHIJMNJEDGIKO;<;<;<;<;<;ILOKDEFÎ̎99ÎONOKMKMJIGEHIKLOMN9L9JIHIJM<;:9767898989:9:9:;=;LJMOMLNMKJHIKJHILMJLMNOIKJKLNMKMHJMKLIHINFGHMJNMNMLJMJHM=<;:;:9:;;897989:;<;<;<;=<;:8:89:<;<;<=JMHGFHDCDHGFKIHGFGFJIJKIHGHJMNJGFHJO<;<;<;LJGLFHFĎ99Ž<ŽCOKLMLKLHJKLON>9>9JIHIHIM9:97898989:9:9:=;=JIMHGFGFGHIHFLHIGFIHGJMJHGFHINGAHIKLO;<;<;?9MLKHIJ99:97878989:9:9:=;<;NMNONKNKIHGJLHJLNLMLOIHJKNOMOMHCFLJKLKJGIHEGHMNLNMKMOLJM>=<;<;:;:;:;<;:98989:;<;<>=MLJHMIHGHJHKLHGFGHIJKIHGHNICFILMO;<;<;Ž̎ÎONKJKLKJINIGHJLM>==<;<;:;98:;;=:<;:;<;<>?>==<;ƎDKLMKLNOLIJLHDGIJM=<;:986789:=<;9;<;:;<><;:;<;<;<>?>=<;:;:;ǎFOMKHJGJM<:986789:;=<;:;<;=<><;:=?><;FHIM\IHFEGHIHIJMIHGHKJHIJGNMFDGHJMIJLMOM=<;<;9;:;ŽDCO=MNLKJIHIJIJM<;:98676789:=<;:;:9:9:;:;<=<;<=;<;<=>MHFHIMLJHGFEGKHIHIHGEIHJLOFDHGDFGHIJLKNM<;:;:9:ŽBD=<>=?>?=MHFHIMLJIGFGHKHIHIJIHGEBHKHIJHINKIHEGHINMOM<;:9:Î;<;M;<;:9896789:;JKMFHGHJKLNMKONM?MHFEHIKMNKJHGIHGHGHIJIHGFHLIFGHOLJHGEDFHGFHMOJNM<;:99:;M;<;<;9789:;JMHGIHIKLM:L:N<=MHFGHIKNMKIGFGHIJKJHIHFGFHMOLJHGEFGLMJKOJOM<;:9899:;:;:;<;:9789;JMJ:IJIJKL:<;M8;NON8K8J8JIJIHGIKM;:98989TT9:;<=MHGHIJLNKIHGFGFGHIKLM\KMIGFCHJGHMHMKLKJKONJINM;:98989798978:;:989;<;:8989:;MIH:I:IJMNO:;:OL8O8MLKIJKIJM<;:98987878T7T89:;=<;:;9:;<;<;:;:;<7<;::7:;<=MHJINMJIJILJMONONMONMLKLKFIJNMJHIKIJIJM?>=<;:;<;:<:<:;<;:;<;<;<979<;::7:;<=MJKINJKLMJLNLNMLMNMNLMOLMKLKJHGMKHIKJKIJKIJM?>=<;:;<:98:<;<<;:;<9<;:9897:;<=MHIOIGHIKMONLKMNJHKJIJIEGIJNKFJILJKLIJM?>=<;<<:;<<:9;<<;979:;<>MHJINJIJNMOLKJKNMHIKIHGJFINOMFJKIKIJLIJM?>=<<<<<<9;<=>?MINJIJLKINKLKJKLJIJKEHJHJKJNLJILJIJKIJKJM?>=<<<<<<<=>?MJKJKIHGJMLIHIFGFGJHJIGIJKNKJLKJIJKIJM?>=<<< ˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ ۧ{ǓS3[{ '_Gחc7k[[CC++?O kKScc++{_C۳kkkGGG###߿Oc#wGO/'www___GGG///׫wwc{_O[G;;/'s ###'''+++333777???CCCKKKOOOWWWjumpnbump-1.50.orig/data/menumask.pcx000066400000000000000000000110001107022553500176500ustar00rootroot00000000000000  ˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ ۧ{ǓS3[{ '_G3c3[[CC++?O kKScc++{_C۳kkkGGG###߿Oc#wGO/'www___GGG///׫wwc{_O[G;;/'sjumpnbump-1.50.orig/data/numbers.pcx000066400000000000000000000155741107022553500175270ustar00rootroot00000000000000 8 #+3;CKS[cks{˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ w+3c3[[CC++?O kKS333{7ccGCsO+ ۳kkkGGG###߿Oc#wGO/'www___GGG///׫wwc{_O[G;;/'sjumpnbump-1.50.orig/data/numbers.txt000066400000000000000000000012741107022553500175440ustar00rootroot00000000000000num_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 jumpnbump-1.50.orig/data/objects.pcx000066400000000000000000000161131107022553500174730ustar00rootroot00000000000000 FHFHFHFHFJHIJIJFJHIJIJFJHIJIJFJHIJIJFHÑFHIHFEFGLMIHFEFGLMIHFEFGLMIHFEFGLMFJHIJIJFJHIJIJIKMNONIKMNONIKMNONIKMNONIHFEFGLM“‘ѐ‘IHFEFGLMIKMNONÐ“Ó“‘“‘IKMNONӑ“’“ÓӓӓđēÓ’“’’“’“Ñ““ѓѓ““Ó‘‘“’‘“ÒēÒȓӑ“’“œÒ““““ēēҐ’““Ò“ÓŒ“őÓ’ē’“ÓÒӒ‘Ó’ÓƒÑƑ““‘‘Ó’Ó’“ÐђēĒđ‘Ǒ“Ñ‘ššØěŘĶ‘ÓÚ™Ś˜śŘ¶ב̙ŚŶĘ쐑ĚŶÑ““ÒēŶœ‘“ÑđÒʑœ“ƒÑ“’“œŒ‘ǑœƑÐÑĶĶšØšŘěĶĶĶžžÜğŜĶŘ¶ę¶™Ú˜Śś¶Ř¶Ř¶ęÞŞœşŜ¶Řšęš™ĚŚŶěʚؚęНŞŶĜğ˜ÚٚĚŶژšÙĞŶ™Ŷ™ŶĶĶžÜžŜğĶĶ͵ŝ¶ĝ¶ÞœŞş¶Ŝ¶ŝ¶ĝ³³ŝŸĝžĞŞŶğĜŸŝžĝµßݞĞŶߝžÝŶµʴµ³³µȴ³µʳʳ³ʳµ³ʵȳµ³ʴʵµҴµ³³µд³³µҳҳ³ҳµڳڳҵгµ³Ҵڵسҵڵڴ³µش²³³ڳ³µµ³ڴõµ #+3;CKS[cks{˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ w+3c3[[CC++?O kKS333{7ccGCsO+ ۳kkkGGG###߿Oc#wGO/'www___GGG///׫wwc{_O[G;;/'sjumpnbump-1.50.orig/data/objects.txt000066400000000000000000000126071107022553500175240ustar00rootroot00000000000000num_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 jumpnbump-1.50.orig/data/pack.bat000066400000000000000000000003731107022553500167350ustar00rootroot00000000000000cd %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 jumpnbump-1.50.orig/data/rabbit.pcx000066400000000000000000000461771107022553500173220ustar00rootroot00000000000000  #+3;CKS[cks{˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ w+3c3[[CC++?O kKS333{7ccGCsO+ ۳kkkGGG###߿Oc#wGO/'www___GGG///׫wwc{_O[G;;/'sjumpnbump-1.50.orig/data/rabbit.txt000066400000000000000000000120071107022553500173300ustar00rootroot00000000000000num_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 jumpnbump-1.50.orig/data/scores.mod000066400000000000000000002065661107022553500173420ustar00rootroot00000000000000Jump n Bump(c) 1998@Anders N / BrainChildf.@Mail:@equel@swipnet.sed Download the game{@now from http:\\www. "brainchild.home.ml.org@ [%F M.K.G~G PP UU __ kk  pp kG ʠGk@k@0<Gk@ k@kG qxGk@k@0ʣʬ<Gk@ ʬ k@kG ʠʬGk@k@0<Gk@ k@kG qx@G0G ʣG0q@ G0kG eʣGk@e k@0eC <ʣGk@e k@kG eC ʣGk@e k@0eC <ʣGk@e k@kG eC eGk@eek@0e<Gk@k@kG (pS@G0.G (|Gk@ q@Gk@kG Gk@k@0<Gk@k@kG Gk@k@0<Gk@k@kG Gk@k@0<Gk@k@kG @G0G G0q@G0kG Gk@k@0<Gk@k@kG Gk@k@0<Gk@k@kG Gk@ k@0 <Gk@k@kG S@G0.G Gk@ q@Gk@kG Gk@k@0p<Gk@k@kG Gk@k@0<Gk@ k@kG Gk@k@0p<Gk@k@kG @G0G G0q@ G0kG Gk@k@0p<Gk@k@kG Gk@k@0<Gk@ k@kG Gk@k@0p<Gk@k@kG S@G0.G Gk@ q@ G@kG ʠGk@k@0<Gk@ k@kG qxGk@k@0ʣʬ<Gk@ ʬ k@kG ʠʬGk@k@0<Gk@ k@kG e@eG0G eG0q@ G0 kG q\ex\Gk@q\ek@x\0q\<x\Gk@q\k@x\kG q\x\ Gk@q\"k@x\$0<Gk@ 0kG eqG0xk@0ek@<qGk@xk@G k0e"k@q$S0x%G0%.G Gk@ q0G0kG Gk@k@0p<Gk@k@kG C`Gk@k@0<Gk@ k@kG Gk@k@0p<Gk@k@kG e`@G0G G0q@ G0kG Gk@k@0p<Gk@k@kG e`Gk@k@0<Gk@ k@kG Gk@k@0p<Gk@k@kG C`S@G0.G G0 q0 G0_G ?k@k@0xx<?k@x k@_G exk?k@xk@0<?k@ k@_G ?k@k@0xx<?k@x k@_G exk@x?0qG ?0e@?0_G Z?k@Z k@0Z< <?k@Z k@x_G Z< ?k@Z k@0Z< <?k@Z k@x_G Z< Z?k@ZZk@0Z<?k@k@_G p.@?0 qG |?k@e0?0kG Gk@k@0<Gk@k@kG Gk@k@0<Gk@k@kG Gk@@k@0 <Gk@k@kG @@G0G G0q@G0kG Gk@@k@0 <Gk@k@kG Gk@@k@0 <Gk@k@kG Gk@@k@0 <Gk@k@kG S@@G0.G Gk@ q0GkKʿػ6-"Sna2Pte}YTL&`dO$*6,   ç)ͼ˾Ǽ ((*& Ļļ츱    $ %(362<@;00/:7)'23-,/)  $/# и $(,ANO)(9XVUXTI408QRH-''8;@JD9/2>aV?&%$+.$&+.*# #'%! $%  ߺĞʘǪ "!786DE>'";EH:71..*"$$       λöǵ).*096271!  ҿ ⵴ɼ' (, -6:863,03$&.,%"!     *533;97ENVN?:DC@PVP2/211573+ "      "&'      ſ$.121/.5;BB@@A<4-273,#        !     $++)(.4:FHG@==BEFD>7&"''           )2997458HPQC<9<<<71'      )0599978>>;9731.%!        '*-136:::98730-&#        !(+.24567874-*'"!    "*-/24456630-'%#       $'-/0233431,)&!     &),0123220.,&#!      "%(-/033321/*(%       #&),./100/.+&#!      "')+-....-*'%        #&)*+,--+*(#!      $&'*+,-,+'%#      "&()+,--+)%#!      !#%)**+,+)'%!     !%&(++,+)($"      "$&())++*'$"      #%&(()))'#!     "$&&'(('%#!     #$%&''%$#       !#$$%$$!     !"#%%%$"     !"#$%$"!      !#$$$#"     !!""!    !"""      """                                                           #1;JVguu1󵀀166׍ɿᧀ֔ 6-󡀀#k}>慀[g!֏;upM-ֹ-J]xxpeVM>6+!ǽ !#+-16;>CJMNNV[]egkkpuxx}}xxupkkgee][VNMJCC>;61-+#! ǿ!#+-6;>CMNV[egkpx}}xupkge][VNMC>;61-+# ɿ !#+-16;>CJMNV[]egkpux}}}xupkge][[VNMJC>;661-+#! ǿ !!#++-116;;>CCJMMNVV[]]eegkkppuuxx}}}}xxuppkkggee]][[VVNMMJJC>>;;611--++#!! ǿ !!##+++---1166;;;>>>CCJJJMMNNNVVV[[]]]eeeggggkkppppuuuxxxx}}}}}}}}xxxxuuuuupppkkkkgggeeee]]][[[[VVVVNNNMMMJJJCCC>>>>;;;666611---+++###!!! ǿ !!!!!!#####++++++------11111166666666;;;;;;;;>>>>>>>>>CCCCCCCCCCCCJJJJJJJJJJJJJJJJJMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJMMJJJJJJJJJJJJJJJJJJCCCCCCCCCCCCC>>>>>>>>>>;;;;;;;;66666666111111111---------+++++++########!!!!!!! ǿǿǿǿ   S$   6-ℯ³ "SD^MfyhxxxxxxwpvwwnxtuR]Ѻ "52:Q Yn)$+[H>I(*)-G>6#*) 4K &$)E1,&к&" ")14% K72,(:R6=GI L-+B-&16A"9S%I6# Ӝ٣೽(78 -G"*! 'JM 2>9+0 #S>F'! ), ĸ$ 8'  +%4$ -/!K 1IG@= - 8,!# * , 5 !0 +'(1< 0",08"", +."  ,   &     7#<  +$#'".3     "G06+$$   +( N" "" # + )  ! -" 0  &;    " ' ( . $'0! &  &    &1 #      *"  !    #       "  "                                                              !/]Cd-+RX 1fX6 7:}&G$Efb6%H-} a>?$QFs   =<? ݿB;E-94'û #1 & ?%+ <9a&=C9%=$'0(,A@%4,+U/ 3K8 %# $6  (%!Z2C4%*KE 0  &*'6 (W/"  7/* 4. I " !5$ .*5# $1C.  .$#ջ"I 4/4-0C%$/4  +1 " -"  8    "  5  .  #                                         !!  #!##$# $!" '&%(*)&)..)+14, 038/ۼ237044415810  5;//8=/- :>/+:@0+;@2- =@3- >@4,0+5<., 1:,+  ):+* "9)) 8') 4%* "1 + '/* //&   9. !@. #E4  #F@ "&AO  %'@X&*@^ &.C`2 )0EaF -2FdR 07Ef^.!  " 05)<(06#;, .7<, )6<."7;.  35/ ,.1 % (0  /"$/ %#$ . %!.* " 4% 8! 9 " 7 $0" !)%   $%   #" !     !  )  3 = D  H  I%  G0  C;  AC  AH   @L  @O =Q, <6>-&?:;/.@@702?H4/ 2 ;M5-!.6Q7*#)&0S;)$$,'U<+"/ T;,0&(7=*0-/>(/ / +;*,," )5/(&& *12&( )/3'& (/2'" $/3'  ".3'$'!,3*)(-1+)(.-. ($)"/*,&'+)/(*$'0-/'%!&24.& Ҿ$1:,'ٽ!".<*,&"",;7 -'!%)7?0%+'2B/&1'.@%+& 4*);0$'21&58%+;$09#$@(+7@0&4 @7&." =;*(% 7?.$& ,B0&#"C0)"B2+$ >3,'' 64,+,/5,/1 +4*11 +0)0/&-.(.!-, ./&)',/ ,2%%,+1 (5'!.,3 #6+,/1!6/(2.*54'3.. 29 &02+ ->!&.7'&A%#-:%ȿ  !A,-9%ո @4-9*߶=<):-;A%;/ 9D!:1 5D"93/C'73 'B+"61#ܾ #@+$5-% =+&7+% :+&:*! 6)%=+ 4$$?. 6!#?27 =6 :";9 ;'7; 8,12?#-?,(@4#?9 @; @< A: D:H8 L7 P8  $R;&S>"'T@$)TA*+PC .0LE 03HD /8!FB /=#E<!.>#D:/=$D6 2<$C5 5<#C2 8: C1 ;: C2 ?9?4 B8:4 E573 H24/ J/2+ K.1* H,1* E- 2+ C.1-@/0.:-..5- +.  3* (. "4' %-#5" $*&6 "&'8 !$ ): # ); # ,:## /9%"36$"44"! 23 -4  '4 !/  &% '$* ,,/ 000 33 3 52"531"80-!;  /(< 0!> 2?! 3>' 3>."1 ?4%/ @:%,?B$+ON?D      #.**70 )""#.-#,:E&-4# ̷  78    8;$.1;87:?I:K=HYESZi`Yz~gV &ʻ #"  0#$,.*3>HAD#"'*#"03#:E? )=KA-$  & &#5.A»   -48LI0-fc?NZ]`s# =A )NL1"4.H" DI?BU     "$DK>3;>.0'E   #0 #"7B10-,N>HDG "1)) 1&  &53ٻκ'*$)- =EKEB'-:,?=;_V?Ha -   "3  0?&5$-4&#ߺݽĹ,;454=4?L1,L '-4=A-55  'A=*17"    *D0-E?7"&=?Lc  "))#0?47;3Lm#&#&'$&#'50)5 "̴ۺ* #*&01.7-">EY]K    0)?,:00'.$NP   $#&$3 -'  ?)3E0,P`uRI    *, :V  #07EB>G-1&IB )" "# 0 & -.-B&4ֳ )' $*$";E;R7 .*$-8\# *"-"  -=:'  ',X.4)8 $$&"&?XG?0)): > 1.5>BR`78Y;.EN&غ ):HB,-  #0- &")GZ84=  $B");::?SVS;3A1*.4 :   &.  -*$")BN3'0"  $5#7?:BOXLU33047#  ,)*8&)7:BD*-B))  '$ 1505=ABPAEB.#$      '.0#$,   )*")=>;GHLOPKNB)100&))"   ()1 6=" AR7 8`L#%#2 *A51LI   ; +,''.79 C)!$(+,/1 ;J"&,.125 0l $*-/12 #x%(*,. ~' &+-/0sN#45.   gd .3.  Nw'!+// )dO#'*'HY/ &*( Gb>%(& :[G!&&,RP)$%  *PY6   5O=, 7NE $'*^U4&&)DeS $  1U]: 4LP<  /JQG$   /MWR3   +HHA/  GKG<"  FQKC4   1JD9$% !!DOH1   !=OQB! +8   +:E@!)"  *3++&+,! "#&67 23  "' ,F:% */=2 %)  -1370 %".'# 4."". +84*-."  /CD945*#11&!&$ '+#.<:-($   3EJD:1 47.#! *##$%4=8)  %2;DGG>) +7;124%(4;8#   -BCFOO6 " "//3:1  (8:! 07242"   *4?QUWN2  &9:41.!-72.");=/"".(' @gnX-$  %3:=A>?/ 02.-! 5LJ0#(#$&)4:Ob_K97.  ׿ '>MF70. 6??- +<<70,Ӿ ".8:CI[YK;3& ï,47?BF@2 #&/BX==?@??@@@?>>@CEGIJKKHIHHIJIGGGIGDCBECA<;;:8  !   '2BLQSQI?;@KM   꽳 )# '/# #7BB7%5FD޿-ݰ=#8EB<9;8019ELKKJNX   &$)ZC 7FI>. 'L@<˪ 50,,ͼdM $9@BKIG= 3HQW(#;*/9:;AJQNY_WE єʰ\k:XU2# *276/+ &DH%γ)D76.%+!)豻éUf*"4@F;" ,2& A88?FK=-&6LfR$$'2<@OVHOSJ:0 ًMyW( "'' .:89/ +MSDM6%D\\I ж»BuhC &3:1&")'%%" RZd\Z_;/A?4@`V! /Ql]>70#˭μIviD '8A4!$ ERHJK9'3S^P&ұ ҸMzlN(  +<=%#)(/' 7QZbjonI./JUjdN +- 9526. !8@A:.4UdN2%.?F/̀źǼMxcTHC?=8) -?GF@8*%4SiW;$+DPE5),6ǻſƸ0alZJ@7-"0:AEC9*&3O`R1 -BQTGDҀ ":enV@) 2?CIME95AS]V@ )?Veie]ʁ%1FlnL*1AGKMI=;FLUM:' -EVepw .59Ga}g7 '3>EIGA@EOTM<'#(0>O^pǹ$28:F\~~L!!$/::2050"!# +;FThs̀*496>\l9$/667>@:3..48::3/++*-09Le  )5;79GjR( #057<<::2+*-0)/376.,'09;DIS诀 *27>AIYrgH& "3:>=;:91-'"! '0353029E&&"'4=AEP^foyr^C+%06<>?A=:6.$(9?=;=;40.&$"$&')%"  ! !4(,.',0&#"  нǽº !(#%+()/103=@?GFBC@>@:53+((!'((-%$"    ! !32(,.',3%$#   оǾ ($%*')020/<@@GKBC?=>974,))#&'(.%%"    !)4& (-/+-5"    ʺſ'$+((.00/;?@GJAB?=>963+'("&''-,$!      "4' )-/,-6"    Ļ"'& )&'/3-/??>HFBC@??:61,*&#'((,)#     $3%)/.)+2,"$#  ž¾ $&*%.046,3>=DECD>8=<>510$&*)-+&$   #&/(12)&$,($'$ þǹƹǼż 0+'53:3.<;FL@JL59;=B21-..,-'"       !  $'&*31* *#!),&"ݿµǶ· $-)2::7349:JHBID59:@?33'"'00(!       $&+%)-".,(+%!-/("  ڸŲ˾  ),58?95<8>=5,)(/41-       ".# ,0#%+$&)&.2&  ׽ͭ  '2;=B78>47FAJF<95:?<=5*-*31+%      *("8; ("'.)13-  ŻԺ *:>D@<@:9>@DC<;74<=<=.02.67%       ! #(+(;:&!+/*/1& ĩԹDz  (=BE@FB;B?AHE:8::5:>50236.,#   ###(.$.4" '60.1+ ðмȤر %/AH?CI<@A7FB985<62::24377+)   ('#)/&-4,!(70,2*# ϾƯЯ    )1BFCIH@E<9>=975;209468694#!   +"(0.'#2( #4;/,0)!  ź#" )1CDELEIH@?=5788922114=<60%     # &01*!($ $&056-,' īɹ" ,4;,      " $!$/3)'$ '&/44))$ ӽ !&9=IKIMLDD71369655+*8?B>3    "'$#/0' !))*14(%"ؽ˻ϼ  &5:IJKQJGD90057443*,:AC:.   %%''+-&)*(01*»¼ȵ  &6:420.-379<7.*     %&$!&(%$$# ŵ¶$'%%#%)5=AIIEC?:83.,.28:70"    #%$ !"(*$"! ǹ''&&"&*3<@GGCBA:91*)/2993+&    $&'"$$&('" Ͼ$&))%$(+0;>BCCC@97-*+16751#  !$$$#'&%'%$()*+)((-/69;BBAA:30+/566.*   "$$! &''&&$#)*,--*)-/5:=860$  #&''&$ òǶ$/1422/(%&)5:;=?@?=3+    "()('# ſ±#(1543-&""&.78=@A@:+&    #$(*(&# ý½$)2421.&"$+57=AB?7("   %&(('#!÷п%)4760,$!"'25=CC>4.  !&&''&!Ļ $,/74-*" #,9=BA60!    !#'''&$Ļ̿ $,/53+($"*81"Dz(N<.ª )I9+ ҽ " H6(ϸ- C5&ʵ4& B2$Ʊ5'B1!ì*2& @.տ4$ B- Ӽ"4$>* й 4#!<(δ3"'6(Ͱ2"İ)1%1!)+& 2! %'$ & 2 "#* 5  !06տ  2 5Կ / 4Ծ  41Ծ   4 . Ի 5 1 .Ը02 * Թɷ1/ - Էǭ+#/ ' ӷȮ.,/1 'ӺȲ:.6.  ӽɶL.:0  ɶD/C1! ɵ G-E0! ʵ?.C1!  ɵ  @.H0!  ʵ$@/C1! ʶ.;/B2" ʵ;?/&D1" ˵I>0-@2" ˶J@/4C2# ̵N@/@D3#! ͶY=/E@3$% ͷT?.MD4$$ ζSC.YD4%% ηN>,UD5%" Ϸ@;+XF5&! Ϲ?.[E6&ϹG/XG6'йL1\H8'ѺC:YI8( ѻ2?UI8( һGXI:)ӻQZK;)ӼYXJ<* ԽcYK=*վ[YL=+ ֿA[L=+(_L>- _L?.¬bP@/ ¬ VN@/ "í:LA0 #ůM@0 *ů U@1 ,ǰ [@1 )ȱQA1! ,ɲ?D2"  *ʳ#B2"+˴+D5#-̵. F3#* Ͷ + F2#&+ η / 83#3, ϸ/ 4$7- ѹ ,9#:/ Ѻ .># A/Ӽ .B'A1 Խ /!+%B1!վ 5! $E1"ֿ 1#$A2" 4$)D2#4&. E3#«1&& C4$í4'D4$Į2(E5&ů<)D6&ư<)J7'DZF) $H7(DzC+ $N7)ɳH* (M9)ʳB-(M9*˴>-Ը#K:*̳;/շ*H;+ ͵ؿ80 ּ'F<+ δֿ61!(D>, ϴ12"*C=- и.3#+E>. һ$3$/?=/ ҽ3&):>/ 3%6?0 5(5<0 3'8@2"9)1@1";)#E1#?* B2$D, A3$A* D3$J, M2%>, K4&@,14%3.7&., 8&#0  8)/!5' 4! '$3"& 8"+8$3 ;$/ :&$ =&  9' :' 3(!# /((  '+*  *+ - - ! - ) ڻ( /, ./- .2, -0'/ο53 2.ϵ8 2 60 ж6 2=1!+#3 C1"".A3##* F4$&##F4%'#C5&*H5'0E7(5E8)=F8) $ IF9+ LI:, VI;- [J<. YJ1! JM?1"̾?M?2#ε3MA3$ϴ$LA3$кNC4%Ѿ NC5&PD5' ¬SE6( æTE6)  ŬZF8* ưXF8* DzZG9+ ɳPF9+ ʵPF:, ˶?G:- ̸ 7D;- ͹ 'H<.  ϻ C<."м J=/  %ѽ H=0! &ӿO=1! )P?1# )U>1# ) ®V@2$ ) įW=3$ ) ƱS@3% - DzL>3%# , ɲC@4&"0ʳ6@5'%-˵ü)@4'$.̵Ƚ B6($+ʹοB5(&'ηE6(#% ϷG7)%#"иíJ7)%&""ѻĮN8**% #ҽůM7*.(#ưP8+7(#ɲI6+6($ɳϼF7,8*% ʴͽ;7-=)' ̷27,9+( ͸(7-;,+ ϻž 7-&;,, мį:.*8- , ѿIJ:-1<.!, ŷ<-;<.!-ƺ=->/#.żɻH,M=0#.ƻʻH)K?1$0Ǻ˻C*QA2%/ ȹ̼*N@2%,ʸ˽*LA3&*!ʷξ1PA4&'! ̶Ϳ5NB5'%" ͷҿ4LC6'#$η(KC6(!$ϺLD7) $Ѻ´RC8*% ҼWE9+$ ӾĶPD9+& ԿŶ;E:,% ƶ!F;-) ȷD;-) ȸJ<-!- ɸM:.!, " ʻ E2$ *#B3& "C2& %@4' !(C4( $3B5) 5A6) >C6* FB7* IC8+OE9,QD:, OE:-ZF;.  UF;/! վRG;0!UG<0"KD<1"7F>1#F=1$ N=2%  Q=2& N@3' :?3' =4( A5( D4) F5*  :4*$7*9*  ;, <+  0+  +   +  2   6   2!   ! !  %  %!  #   "  #  "$ #,! Խ. " վ4 #$ ջ8 %# ־3,% 47$ -5$ ( % (  - ! *# $ &  '  , ! , ( 0$ 0 0- ( " jumpnbump-1.50.orig/data/splash.smp000066400000000000000000000203241107022553500173400ustar00rootroot00000000000000& #S 6MXݰXF3IXX#XLXA իX1BXUX$XXBXT5V1&XF,XX*⳩# BXBXBI4ݰGX1 ?% 1     #   $1 ھ,    -         &                     #                    &   $.,FEXXL*-:弲 HXXXXXXH87'鳩 #XXXXXXXS;. ѫǶ.:B1-'7JX'Ի ;  - '13K#X4$ѫ* F3XX 4L01 =#*7&I' Bؽ :7B/=#,,->X*  # )$ ﬩X$ '  ='ǻ 1  B$4,011    &       *4 ''&  #)  ?#4 &     57   &#,71#  4,               -40 44 /&/ #:KM#4P     /     &# #   4      #  -)   .                          jumpnbump-1.50.orig/data/spring.smp000066400000000000000000000171371107022553500173600ustar00rootroot000000000000004*'--'!' *' NJ\R'տ -NN:4!ؿ!*7D=*» !--4- !*'# *004:⬣#:==F ¿!0-00!0*##  DJFFϵ'7OF4-Ѹ#-4F=˿ *-07''*'#!--*--#D@DJ# 廸#7444!ſ'70'# @F@4Ǭ##:J7'! Ͽ*-4@--*-- !'!  #*'!#!#FFJJ' ⻵':774!» *:4*#  #7@7#ϯ ''7D***04# *'#! !# !!Ū#FJJF* ߿ *::74» -74-!  4:0˵ ''7=' **-- '#! !# ! ѵ4DFD:ϸ 4:70! ǻ*44-!  470˸ *-7=' ----!*'!!#!!  ¯*DD@:ջ-:70!¿#04- 474!ϻ'*4=- *---! *'# # !!ѻ =D@:' Ÿ#470#ǿ !*00!4:7' ѿ!*7=4# '-04'#*'#'#!! ŵ0@@=-Ͽ*70'!-0' -:7-ǵ'-==* !*-4*!''' ## ! ѵ'=DD:*Ÿ'::-'¿-4-#0-'ϻ '-7:'**-'!'#!!! 绯:JJD: DZ #4@7*!Ǹ #*77'!! **''#  ! ⿵*DD@4!ϻ!-:0˿'-0- !#    #*ŵ:JF=*˻'0:0 #40*!!#'!          7ˬ#J`\F*Ϭ#:JJ0ظ!4@:' #04*      00ۯ4Yoe:ś!@\\4߻0FJ4Ѹ*=:* !44'-7-#-*''    #챒OooYǎJoe-#R\=ظ :NJ*տ7=' ** !     ⸵DY=دDF0ϵ07!*#!      4-! # ##    #   ! *    !   !*!      '-4 #!      #'0:#!-!!  '7-۸=J774!!  #DD!ů'O\D#Ǭ-DJ:ǿ4:'#*# !     =D7ϵ 0JN='ſ0:7-#-*! ##   7:7'Ǹ#7@@7 '440#*'!!          !!         !'#          #** !!         !*' !         !*# !   ! !                          !                          jumpnbump-1.50.orig/dj.h000066400000000000000000000100141107022553500151550ustar00rootroot00000000000000/* * 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 #include #ifdef DOS #include #include #include #include #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); jumpnbump-1.50.orig/dos/000077500000000000000000000000001107022553500152005ustar00rootroot00000000000000jumpnbump-1.50.orig/dos/gfx.S000066400000000000000000000062071107022553500161150ustar00rootroot00000000000000[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 jumpnbump-1.50.orig/dos/gfx.c000066400000000000000000000250131107022553500161310ustar00rootroot00000000000000/* * 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, ®s); 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> 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; } jumpnbump-1.50.orig/dos/input.c000066400000000000000000000122661107022553500165120ustar00rootroot00000000000000/* * 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, ®s); 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, ®s); 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); } jumpnbump-1.50.orig/dos/interrpt.c000066400000000000000000000073651107022553500172260ustar00rootroot00000000000000/* * 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]; } jumpnbump-1.50.orig/filter.c000066400000000000000000000155471107022553500160600ustar00rootroot00000000000000/* * filter.c * Copyright (C) 2003 Florian Schulze * * 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]]; e++; f++; h++; d = &src[src_width]; // (src_width - 1) + 1 e0+=2; e1+=2; e2+=2; e3+=2; // normal case for (x=1; x<(src_width-1); x++) { rowColors[0] = *d; rowColors[1] = *e; rowColors[2] = *f; code = ( (*f == *h)<<1 | (*h == *d)<<2 ); *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]]; d++; e++; f++; h++; e0+=2; e1+=2; e2+=2; e3+=2; } // special right case - f is unknown rowColors[0] = *d; rowColors[1] = *e; rowColors[2] = *e; code = ( (*h == *d)<<2 ); *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]]; } // top and bottom always known for (y=1; y<(src_height-1); y++) { byte *b; byte *d; byte *e; byte *f; byte *h; e0 = &dst[y*dst_width*2]; e1 = &dst[y*dst_width*2 + 1]; e2 = &dst[y*dst_width*2 + dst_width]; e3 = &dst[y*dst_width*2 + dst_width + 1]; b = &src[y * src_width - src_width]; e = &src[y * src_width]; f = &src[y * src_width + 1]; h = &src[y * src_width + src_width]; // special left case - d is unknown rowColors[0] = *e; rowColors[1] = *e; rowColors[2] = *f; code = ( (*b == *f)<<0 | (*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]]; b++; e++; f++; h++; d = &src[y * src_width]; // (y * src_width - 1) + 1 e0+=2; e1+=2; e2+=2; e3+=2; // normal case for (x=1; x<(src_width-1); x++) { rowColors[0] = *d; rowColors[1] = *e; rowColors[2] = *f; code = ( (*b == *f)<<0 | (*f == *h)<<1 | (*h == *d)<<2 | (*d == *b)<<3 ); *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]]; b++; d++; e++; f++; h++; e0+=2; e1+=2; e2+=2; e3+=2; } // special right case - f is unknown rowColors[0] = *d; rowColors[1] = *e; rowColors[2] = *e; code = ( (*h == *d)<<2 | (*d == *b)<<3 ); *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]]; } // special bottom case - h is always unknown { byte *b; byte *d; byte *e; byte *f; e0 = &dst[y*dst_width*2]; e1 = &dst[y*dst_width*2 + 1]; e2 = &dst[y*dst_width*2 + dst_width]; e3 = &dst[y*dst_width*2 + dst_width + 1]; b = &src[y * src_width - src_width]; e = &src[y * src_width]; f = &src[y * src_width + 1]; // special left case - d is unknown rowColors[0] = *e; rowColors[1] = *e; rowColors[2] = *f; code = ( (*b == *f)<<0 ); *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]]; b++; e++; f++; d = &src[y * src_width]; // (y * src_width - 1) + 1 e0+=2; e1+=2; e2+=2; e3+=2; // normal case for (x=1; x<(src_width-1); x++) { rowColors[0] = *d; rowColors[1] = *e; rowColors[2] = *f; code = ( (*b == *f)<<0 | (*d == *b)<<3 ); *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]]; b++; d++; e++; f++; e0+=2; e1+=2; e2+=2; e3+=2; } // special right case - f is unknown rowColors[0] = *d; rowColors[1] = *e; rowColors[2] = *e; code = ( (*d == *b)<<3 ); *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]]; } } jumpnbump-1.50.orig/filter.h000066400000000000000000000021601107022553500160500ustar00rootroot00000000000000/* * config.h * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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 __FILTER_H__ #define __FILTER_H__ void do_scale2x(unsigned char *src, int src_width, int src_height, unsigned char *dst); #endif // __FILTER_H__ jumpnbump-1.50.orig/fireworks.c000066400000000000000000000172651107022553500166050ustar00rootroot00000000000000/* * fireworks.c * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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" extern unsigned int ban_map[17][22]; void fireworks(void) { char *handle; int c1, c2; int s1, s2, s3; char pal[768]; struct { int used, direction, colour; int x, y; int x_add, y_add; int timer; int anim, frame, frame_tick, image; } rabbits[20]; struct { int x, y; int old_x, old_y; int col; int back[2]; } stars[300]; register_background(NULL, NULL); if ((handle = dat_open("level.pcx")) == 0) { strcpy(main_info.error_str, "Error loading 'level.pcx', aborting...\n"); return; } read_pcx(handle, mask_pic, JNB_WIDTH*JNB_HEIGHT, pal); memset(mask_pic, 0, JNB_WIDTH*JNB_HEIGHT); register_mask(mask_pic); recalculate_gob(&rabbit_gobs, pal); recalculate_gob(&object_gobs, pal); memset(ban_map, 0, sizeof(ban_map)); fillpalette(0, 0, 0); draw_begin(); for (c2 = JNB_HEIGHT - 63; c2 < JNB_HEIGHT; c2++) { clear_lines(0, c2, 1, get_color((c2 - 192) >> 2, pal)); clear_lines(1, c2, 1, get_color((c2 - 192) >> 2, pal)); } draw_end(); setpalette(0, 256, pal); for (c1 = 0; c1 < 20; c1++) rabbits[c1].used = 0; rabbits[0].used = 1; rabbits[0].colour = rnd(4); rabbits[0].x = (int) (150 + rnd(100)) << 16; rabbits[0].y = 256 << 16; rabbits[0].x_add = ((int) rnd(65535) << 1) - 65536; if (rabbits[0].x_add > 0) rabbits[0].direction = 0; else rabbits[0].direction = 1; rabbits[0].y_add = -262144 + (rnd(16384) * 5); rabbits[0].timer = 30 + rnd(150); rabbits[0].anim = 2; rabbits[0].frame = 0; rabbits[0].frame_tick = 0; rabbits[0].image = player_anims[rabbits[0].anim].frame[rabbits[0].frame].image + rabbits[0].colour * 18 + rabbits[0].direction * 9; draw_begin(); for (c1 = 0; c1 < 300; c1++) { s1 = rnd(JNB_WIDTH); s2 = rnd(JNB_HEIGHT); s3 = 30 - rnd(7); stars[c1].x = stars[c1].old_x = (s1 << 16); stars[c1].y = stars[c1].old_y = (s2 << 16); stars[c1].col = s3; stars[c1].back[0] = stars[c1].back[1] = get_pixel(0, s1, s2); } draw_end(); dj_set_nosound(0); main_info.page_info[0].num_pobs = 0; main_info.page_info[1].num_pobs = 0; main_info.view_page = 0; main_info.draw_page = 1; while (key_pressed(1) == 0) { dj_mix(); intr_sysupdate(); for (c1 = 0; c1 < 300; c1++) { stars[c1].old_x = stars[c1].x; stars[c1].old_y = stars[c1].y; stars[c1].y -= (int) (31 - stars[c1].col) * 16384; if ((stars[c1].y >> 16) < 0) stars[c1].y += JNB_HEIGHT << 16; if ((stars[c1].y >> 16) >= JNB_HEIGHT) stars[c1].y -= JNB_HEIGHT << 16; } for (c1 = 0, c2 = 0; c1 < 20; c1++) { if (rabbits[c1].used == 1) c2++; } if ((c2 == 0 && rnd(10000) < 200) || (c2 == 1 && rnd(10000) < 150) || (c2 == 2 && rnd(10000) < 100) || (c2 == 3 && rnd(10000) < 50)) { for (c1 = 0; c1 < 20; c1++) { if (rabbits[c1].used == 0) { rabbits[c1].used = 1; rabbits[c1].colour = rnd(4); rabbits[c1].x = (int) (150 + rnd(100)) << 16; rabbits[c1].y = 256 << 16; rabbits[c1].x_add = ((int) rnd(65535) << 1) - 65536; if (rabbits[c1].x_add > 0) rabbits[c1].direction = 0; else rabbits[c1].direction = 1; rabbits[c1].y_add = -262144 + (rnd(16384) * 5); rabbits[c1].timer = 30 + rnd(150); rabbits[c1].anim = 2; rabbits[c1].frame = 0; rabbits[c1].frame_tick = 0; rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9; break; } } } dj_mix(); main_info.page_info[main_info.draw_page].num_pobs = 0; for (c1 = 0; c1 < 20; c1++) { if (rabbits[c1].used == 1) { rabbits[c1].y_add += 2048; if (rabbits[c1].y_add > 36864 && rabbits[c1].anim != 3) { rabbits[c1].anim = 3; rabbits[c1].frame = 0; rabbits[c1].frame_tick = 0; rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9; } rabbits[c1].x += rabbits[c1].x_add; rabbits[c1].y += rabbits[c1].y_add; if ((rabbits[c1].x >> 16) < 16 || (rabbits[c1].x >> 16) > JNB_WIDTH || (rabbits[c1].y >> 16) > JNB_HEIGHT) { rabbits[c1].used = 0; continue; } rabbits[c1].timer--; if (rabbits[c1].timer <= 0) { rabbits[c1].used = 0; for (c2 = 0; c2 < 6; c2++) add_object(OBJ_FUR, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 44 + rabbits[c1].colour * 8); for (c2 = 0; c2 < 6; c2++) add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 76); for (c2 = 0; c2 < 6; c2++) add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 77); for (c2 = 0; c2 < 8; c2++) add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 78); for (c2 = 0; c2 < 10; c2++) add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 79); dj_play_sfx(SFX_DEATH, SFX_DEATH_FREQ, 64, 0, 0, -1); continue; } rabbits[c1].frame_tick++; if (rabbits[c1].frame_tick >= player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].ticks) { rabbits[c1].frame++; if (rabbits[c1].frame >= player_anims[rabbits[c1].anim].num_frames) rabbits[c1].frame = player_anims[rabbits[c1].anim].restart_frame; rabbits[c1].frame_tick = 0; } rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9; if (rabbits[c1].used == 1) add_pob(main_info.draw_page, rabbits[c1].x >> 16, rabbits[c1].y >> 16, rabbits[c1].image, &rabbit_gobs); } } dj_mix(); update_objects(); draw_begin(); for (c1 = 0; c1 < 300; c1++) { stars[c1].back[main_info.draw_page] = get_pixel(main_info.draw_page, stars[c1].x >> 16, stars[c1].y >> 16); set_pixel(main_info.draw_page, stars[c1].x >> 16, stars[c1].y >> 16, get_color(stars[c1].col, pal)); } dj_mix(); draw_pobs(main_info.draw_page); draw_end(); main_info.draw_page ^= 1; main_info.view_page ^= 1; flippage(main_info.view_page); wait_vrt(1); draw_begin(); redraw_pob_backgrounds(main_info.draw_page); dj_mix(); intr_sysupdate(); for (c1 = 299; c1 >= 0; c1--) { set_pixel(main_info.draw_page, stars[c1].old_x >> 16, stars[c1].old_y >> 16, stars[c1].back[main_info.draw_page]); } draw_end(); } dj_set_nosound(1); } jumpnbump-1.50.orig/globals.pre000066400000000000000000000200121107022553500165410ustar00rootroot00000000000000/* * globals.h * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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 __GLOBALS_H #define __GLOBALS_H #ifdef __cplusplus extern "C" { #endif #include "config.h" #include #include #include #include #ifndef _MSC_VER #include #endif #include #include #include #ifdef DOS # include # include # include # include #endif #ifdef _MSC_VER # define WIN32_LEAN_AND_MEAN # include # include # include # include "SDL.h" # if USE_SDL_MIXER # include "SDL_mixer.h" # endif #else # ifdef USE_SDL # include # include "SDL.h" # if USE_SDL_MIXER # include "SDL_mixer.h" # endif # endif #endif #define JNB_MAX_PLAYERS 4 #define JNB_INETPORT 11111 extern int client_player_num; void tellServerPlayerMoved(int playerid, int movement_type, int newval); #define MOVEMENT_LEFT 1 #define MOVEMENT_RIGHT 2 #define MOVEMENT_UP 3 #define JNB_VERSION "1.50" #define JNB_WIDTH 400 #define JNB_HEIGHT 256 extern int screen_width; extern int screen_height; extern int screen_pitch; extern int scale_up; extern int ai[JNB_MAX_PLAYERS]; #ifndef USE_SDL #define KEY_PL1_LEFT 0xcb #define KEY_PL1_RIGHT 0xcd #define KEY_PL1_JUMP 0xc8 #define KEY_PL2_LEFT 0x1e #define KEY_PL2_RIGHT 0x20 #define KEY_PL2_JUMP 0x11 #else #define KEY_PL1_LEFT SDLK_LEFT #define KEY_PL1_RIGHT SDLK_RIGHT #define KEY_PL1_JUMP SDLK_UP #define KEY_PL2_LEFT SDLK_a #define KEY_PL2_RIGHT SDLK_d #define KEY_PL2_JUMP SDLK_w #define KEY_PL3_LEFT SDLK_j #define KEY_PL3_RIGHT SDLK_l #define KEY_PL3_JUMP SDLK_i #define KEY_PL4_LEFT SDLK_KP4 #define KEY_PL4_RIGHT SDLK_KP6 #define KEY_PL4_JUMP SDLK_KP8 #endif #define NUM_POBS 200 #define NUM_OBJECTS 200 #define NUM_FLIES 20 #define NUM_LEFTOVERS 50 #define OBJ_SPRING 0 #define OBJ_SPLASH 1 #define OBJ_SMOKE 2 #define OBJ_YEL_BUTFLY 3 #define OBJ_PINK_BUTFLY 4 #define OBJ_FUR 5 #define OBJ_FLESH 6 #define OBJ_FLESH_TRACE 7 #define OBJ_ANIM_SPRING 0 #define OBJ_ANIM_SPLASH 1 #define OBJ_ANIM_SMOKE 2 #define OBJ_ANIM_YEL_BUTFLY_RIGHT 3 #define OBJ_ANIM_YEL_BUTFLY_LEFT 4 #define OBJ_ANIM_PINK_BUTFLY_RIGHT 5 #define OBJ_ANIM_PINK_BUTFLY_LEFT 6 #define OBJ_ANIM_FLESH_TRACE 7 #define MOD_MENU 0 #define MOD_GAME 1 #define MOD_SCORES 2 #define SFX_JUMP 0 #define SFX_LAND 1 #define SFX_DEATH 2 #define SFX_SPRING 3 #define SFX_SPLASH 4 #define SFX_FLY 5 #define NUM_SFX 6 #define SFX_JUMP_FREQ 15000 #define SFX_LAND_FREQ 15000 #define SFX_DEATH_FREQ 20000 #define SFX_SPRING_FREQ 15000 #define SFX_SPLASH_FREQ 12000 #define SFX_FLY_FREQ 12000 #define BAN_VOID 0 #define BAN_SOLID 1 #define BAN_WATER 2 #define BAN_ICE 3 #define BAN_SPRING 4 #ifndef DATA_PATH #ifdef __APPLE__ #define DATA_PATH "data/jumpbump.dat" #elif _WIN32 #define DATA_PATH "data/jumpbump.dat" #else #define DATA_PATH "%%PREFIX%%/share/jumpnbump/jumpbump.dat" #endif #endif typedef struct { int num_images; int *width; int *height; int *hs_x; int *hs_y; void **data; void **orig_data; } gob_t; typedef struct { int joy_enabled, mouse_enabled; int no_sound, music_no_sound, no_gore, fireworks; char error_str[256]; int draw_page, view_page; struct { int num_pobs; struct { int x, y; int image; gob_t *pob_data; int back_buf_ofs; } pobs[NUM_POBS]; } page_info[2]; void *pob_backbuf[2]; } main_info_t; typedef struct { int action_left,action_up,action_right; int enabled, dead_flag; int bumps; int bumped[JNB_MAX_PLAYERS]; int x, y; int x_add, y_add; int direction, jump_ready, jump_abort, in_water; int anim, frame, frame_tick, image; } player_t; typedef struct { int num_frames; int restart_frame; struct { int image; int ticks; } frame[4]; } player_anim_t; typedef struct { int used, type; int x, y; int x_add, y_add; int x_acc, y_acc; int anim; int frame, ticks; int image; } object_t; typedef struct { int x, y; int raw_x, raw_y; int but1, but2; struct { int x1, x2, x3; int y1, y2, y3; } calib_data; } joy_t; typedef struct { int but1, but2, but3; } mouse_t; extern main_info_t main_info; extern player_t player[JNB_MAX_PLAYERS]; extern player_anim_t player_anims[7]; extern object_t objects[NUM_OBJECTS]; extern joy_t joy; extern mouse_t mouse; extern char datfile_name[2048]; extern char *background_pic; extern char *mask_pic; extern gob_t rabbit_gobs; extern gob_t font_gobs; extern gob_t object_gobs; extern gob_t number_gobs; /* fireworks.c */ void fireworks(void); /* main.c */ void steer_players(void); void position_player(int player_num); void fireworks(void); void add_object(int type, int x, int y, int x_add, int y_add, int anim, int frame); void update_objects(void); int add_pob(int page, int x, int y, int image, gob_t *pob_data); void draw_flies(int page); void draw_pobs(int page); void redraw_flies_background(int page); void redraw_pob_backgrounds(int page); int add_leftovers(int page, int x, int y, int image, gob_t *pob_data); void draw_leftovers(int page); int init_level(int level, char *pal); void deinit_level(void); int init_program(int argc, char *argv[], char *pal); void deinit_program(void); unsigned short rnd(unsigned short max); int read_level(void); unsigned char *dat_open(char *file_name); int dat_filelen(char *file_name); void write_calib_data(void); /* input.c */ void update_player_actions(void); void init_inputs(void); int calib_joy(int type); /* menu.c */ int menu(void); int menu_init(void); void menu_deinit(void); /* gfx.c */ void set_scaling(int scale); void open_screen(void); void wait_vrt(int mix); void draw_begin(void); void draw_end(void); void flippage(int page); void draw_begin(void); void draw_end(void); void clear_lines(int page, int y, int count, int color); int get_color(int color, char pal[768]); int get_pixel(int page, int x, int y); void set_pixel(int page, int x, int y, int color); void setpalette(int index, int count, char *palette); void fillpalette(int red, int green, int blue); #ifdef DOS void get_block(char page, short x, short y, short width, short height, char *buffer); void put_block(char page, short x, short y, short width, short height, char *buffer); #else void get_block(int page, int x, int y, int width, int height, void *buffer); void put_block(int page, int x, int y, int width, int height, void *buffer); #endif void put_text(int page, int x, int y, char *text, int align); void put_pob(int page, int x, int y, int image, gob_t *gob, int mask, void *mask_pic); int pob_width(int image, gob_t *gob); int pob_height(int image, gob_t *gob); int pob_hs_x(int image, gob_t *gob); int pob_hs_y(int image, gob_t *gob); int read_pcx(unsigned char * handle, void *buffer, int buf_len, char *pal); void register_background(char *pixels, char pal[768]); int register_gob(unsigned char *handle, gob_t *gob, int len); void recalculate_gob(gob_t *gob, char pal[768]); void register_mask(void *pixels); /* gfx.c */ #ifdef USE_SDL /* long filelength(int handle); */ void fs_toggle(); int intr_sysupdate(); #endif /* interrpt.c */ extern char last_keys[50]; int hook_keyb_handler(void); void remove_keyb_handler(void); int key_pressed(int key); int addkey(unsigned int key); /* sound-linux.c */ #ifdef LINUX #endif #ifdef __cplusplus } #endif #endif jumpnbump-1.50.orig/gob.txt000066400000000000000000000027121107022553500157250ustar00rootroot00000000000000 THE FORMAT OF GOBFILES Do YOU want to make your own GOB-files? Then you have to know the GOB format! Here you can find a brief desciption of it. (this is all about how the file is saved) Note: Everything is saved in Intel byteorder, ie the least significant byte first. THE HEADER Offset Size Description 0 2 Number of images in the file For I=1 to Number of images Offset Size Description 2+I*4 4 Offset in file to image data End repeat The above offsets are offsets from the beginning of the file. Each image has it's own image data. The image data is like this: THE IMAGE DATA Offset Size Description 0 2 Image width in pixels (W) 2 2 Image height in pixels (H) 4 2 Hotspot x 6 2 Hotspot y 8 W*H Bitmap data The offsets above are offsets in the image data (for each image). The Hotspot x/y of a specific image works like this: Whenever a sprite is drawn at (x, y) with that image, the image is drawn at (x - hotspot x, y - hotspot y), where hotspot x/y are the hotspots for that image. The bitmap data is just a block of colordata for each pixel. It scans the image horisontally left/down. This means that the first byte represents the upper left pixel, the second represents the pixel to the right of that and so on. If the width is 10 pixels then the 10th byte of bitmap data will represent the pixel (0, 1). jumpnbump-1.50.orig/indent.txt000066400000000000000000000000411107022553500164300ustar00rootroot00000000000000indent -kr -i8 -l1000 -lps -nhnl jumpnbump-1.50.orig/jnbmenu.pre000066400000000000000000000140251107022553500165630ustar00rootroot00000000000000#!/usr/bin/wish #!/usr/bin/wish8.0 ############################################################################# # Visual Tcl v1.20 Project # Author : Philippe Brochard ################################# # GLOBAL VARIABLES # global fireworks; global fullscreen; global nogore; global nosound; global mirror; global scaleup; global widget; ################################# # USER DEFINED PROCEDURES # proc init {argc argv} { } init $argc $argv proc {exec_file} {} { global fullscreen global nosound global mirror global scaleup global nogore global fireworks set str_fullscreen "" if { $fullscreen == 1 } { set str_fullscreen "-fullscreen" } set str_nosound "" if { $nosound == 1 } { set str_nosound "-nosound" } set str_scaleup "" if { $scaleup == 1 } { set str_scaleup "-scaleup" } set str_mirror "" if { $mirror == 1 } { set str_mirror "-mirror" } set str_nogore "" if { $nogore == 1 } { set str_nogore "-nogore" } set str_fireworks "" if { $fireworks == 1 } { set str_fireworks "-fireworks" } set file "" if { [ .top17.lis26 curselection ] != "" } then { set file "%%PREFIX%%/games/jumpnbump/[ .top17.lis26 get [.top17.lis26 curselection] ].dat" } exec jumpnbump $str_fullscreen $str_nosound $str_scaleup $str_mirror $str_nogore $str_fireworks -dat $file & } proc {fill_list_box} {} { if [ catch { exec ls %%PREFIX%%/share/jumpnbump/ } data ] { puts stderr "Error" } foreach p $data { .top17.lis26 insert end [ find_name $p ] } } proc {find_name} {path} { set alast [ string last "/" $path ]; incr alast; if { $alast != [ string length $path ] } { set name [ string range $path $alast end ]; } else { incr alast -2; set tmp [ string range $path 0 $alast ]; set alast [ string last "/" $tmp ]; incr alast; set name [ string range $tmp $alast end ]; } set fname [ split $name . ] set firstname [ lindex $fname 0 ] return $firstname; } proc {main} {argc argv} { fill_list_box bind .top17.lis26 { exec_file } } proc {Window} {args} { global vTcl set cmd [lindex $args 0] set name [lindex $args 1] set newname [lindex $args 2] set rest [lrange $args 3 end] if {$name == "" || $cmd == ""} {return} if {$newname == ""} { set newname $name } set exists [winfo exists $newname] switch $cmd { show { if {$exists == "1" && $name != "."} {wm deiconify $name; return} if {[info procs vTclWindow(pre)$name] != ""} { eval "vTclWindow(pre)$name $newname $rest" } if {[info procs vTclWindow$name] != ""} { eval "vTclWindow$name $newname $rest" } if {[info procs vTclWindow(post)$name] != ""} { eval "vTclWindow(post)$name $newname $rest" } } hide { if $exists {wm withdraw $newname; return} } iconify { if $exists {wm iconify $newname; return} } destroy { if $exists {destroy $newname; return} } } } ################################# # VTCL GENERATED GUI PROCEDURES # proc vTclWindow. {base} { if {$base == ""} { set base . } ################### # CREATING WIDGETS ################### wm focusmodel $base passive wm geometry $base 1x1+0+0 wm maxsize $base 1009 738 wm minsize $base 1 1 wm overrideredirect $base 0 wm resizable $base 1 1 wm resizable $base 0 0 wm withdraw $base wm title $base "vt.tcl" ################### # SETTING GEOMETRY ################### } proc vTclWindow.top17 {base} { if {$base == ""} { set base .top17 } if {[winfo exists $base]} { wm deiconify $base; return } ################### # CREATING WIDGETS ################### toplevel $base -class Toplevel wm focusmodel $base passive wm geometry $base 416x314+246+193 wm maxsize $base 1009 738 wm minsize $base 1 1 wm overrideredirect $base 0 wm resizable $base 1 1 wm resizable $base 0 0 wm deiconify $base wm title $base "Jump n Bump" label $base.lab18 \ -borderwidth 1 -relief raised -text {Jump n Bump} label $base.lab20 \ -borderwidth 1 -relief sunken checkbutton $base.che22 \ -text {full screen} -variable fullscreen checkbutton $base.che23 \ -text {no sound} -variable nosound checkbutton $base.che24 \ -text {no gore} -variable nogore checkbutton $base.che25 \ -text fireworks -variable fireworks checkbutton $base.che28 \ -text scaleup -variable scaleup checkbutton $base.che29 \ -text mirror -variable mirror listbox $base.lis26 \ -yscrollcommand {.top17.scr27 set} bind $base.lis26 { exec_file } scrollbar $base.scr27 \ -command {.top17.lis26 yview} button $base.but28 \ -command { exec_file } -text Start button $base.but29 \ -command { exit } -text Quit ################### # SETTING GEOMETRY ################### place $base.lab18 \ -x 25 -y 10 -width 366 -height 17 -anchor nw -bordermode ignore place $base.lab20 \ -x 190 -y 40 -width 196 -height 257 -anchor nw -bordermode ignore place $base.che22 \ -x 220 -y 54 -anchor nw -bordermode ignore place $base.che23 \ -x 220 -y 83 -anchor nw -bordermode ignore place $base.che24 \ -x 220 -y 112 -anchor nw -bordermode ignore place $base.che25 \ -x 220 -y 141 -anchor nw -bordermode ignore place $base.che28 \ -x 220 -y 170 -anchor nw -bordermode ignore place $base.che29 \ -x 220 -y 199 -anchor nw -bordermode ignore place $base.lis26 \ -x 30 -y 40 -width 103 -height 261 -anchor nw -bordermode ignore place $base.scr27 \ -x 145 -y 40 -width 21 -height 262 -anchor nw -bordermode ignore place $base.but28 \ -x 230 -y 230 -width 117 -height 25 -anchor nw -bordermode ignore place $base.but29 \ -x 230 -y 255 -width 117 -height 25 -anchor nw -bordermode ignore } Window show . Window show .top17 main $argc $argv jumpnbump-1.50.orig/jumpnbump-kdialog000077500000000000000000000026621107022553500177740ustar00rootroot00000000000000#!/bin/bash # User: Setup here the location of Jump'n Bump stuff in your system JUMPNBUMP_BINARY=/usr/local/games/jumpnbump JUMPNBUMP_LEVELS_DIR=/usr/local/share/jumpnbump/ # Show a welcome message kdialog --title "Jump 'n Bump" --msgbox "Welcome to the Jump 'n Bump dialog!\nby Ricardo Cruz \nA few options will be presented in the following dialog.\nThen, you may choose the level you want to play\n\n(In case this isn't working properly, open this file and edit JnB's locations.)" # Ask user for Options and parse them OPTIONS=`kdialog --title "Select Options - Jump 'n Bump" --checklist "Options:" 1 "Fullscreen" on 2 "Disable sound" off 3 "Disable gore" off 4 "Double resolution" off 5 "Mirror level" off` # cancel pressed, quit if [ $? != 0 ]; then exit 0 fi ARGUMENTS="" for OPT in $OPTIONS do case $OPT in '"1"') ARGUMENTS="$ARGUMENTS -fullscreen";; '"2"') ARGUMENTS="$ARGUMENTS -nosound";; '"3"') ARGUMENTS="$ARGUMENTS -nogore";; '"4"') ARGUMENTS="$ARGUMENTS -scaleup";; '"5"') ARGUMENTS="$ARGUMENTS -mirror";; *) echo "Warning: unknown option";; esac done # Ask user for a level # (Even after running the game, ask for levels, until user presses Cancel button or Esc key) while [ 1 ] do LEVEL_FILE=`kdialog --title "Choose a Level - Jump 'n Bump" --getopenfilename $JUMPNBUMP_LEVELS_DIR "*.dat | Levels"` if [ $LEVEL_FILE ]; then $JUMPNBUMP_BINARY $ARGUMENTS -dat $LEVEL_FILE else exit 0; fi done jumpnbump-1.50.orig/jumpnbump-xdialog000077500000000000000000000027131107022553500200060ustar00rootroot00000000000000#!/bin/bash # User: Setup here the location of Jump'n Bump stuff in your system JUMPNBUMP_BINARY=/usr/local/games/jumpnbump JUMPNBUMP_LEVELS_DIR=/usr/local/share/jumpnbump/ # Show a welcome message Xdialog --title "Jump 'n Bump" --msgbox "Welcome to the Jump 'n Bump dialog!\nby Ricardo Cruz \nA few options will be presented in the following dialog.\nThen, you may choose the level you want to play\n\n(In case this isn't working properly, open this file and edit JnB's locations.)" 0 0 # Ask user for Options and parse them OPTIONS=`Xdialog --title "Select Options - Jump 'n Bump" --separator " " --checklist "Options:" 0 0 0 1 "Fullscreen" on 2 "Disable sound" off 3 "Disable gore" off 4 "Double resolution" off 5 "Mirror level" off 2>&1` # cancel pressed, quit if [ $? != 0 ]; then exit 0 fi ARGUMENTS="" for OPT in $OPTIONS do case $OPT in '1') ARGUMENTS="$ARGUMENTS -fullscreen";; '2') ARGUMENTS="$ARGUMENTS -nosound";; '3') ARGUMENTS="$ARGUMENTS -nogore";; '4') ARGUMENTS="$ARGUMENTS -scaleup";; '5') ARGUMENTS="$ARGUMENTS -mirror";; *) echo "Warning: unknown option";; esac done # Ask user for a level # (Even after running the game, ask for levels, until user presses Cancel button or Esc key) while [ 1 ] do LEVEL_FILE=`Xdialog --title "Choose a Level - Jump 'n Bump" --fselect $JUMPNBUMP_LEVELS_DIR 0 0 2>&1` # "*.dat | Levels"` if [ $LEVEL_FILE ]; then $JUMPNBUMP_BINARY $ARGUMENTS -dat $LEVEL_FILE else exit 0; fi done jumpnbump-1.50.orig/jumpnbump.6000066400000000000000000000100701107022553500165150ustar00rootroot00000000000000.TH jumpnbump 6 "August 25th, 2002" .SH NAME jumpnbump \- Cute multiplayer platform game with bunnies .SH SYNOPSIS jumpnbump \fR[\fB-dat \fIlevelname\fR] [\fB-port \fIport \fB-net \fIplayer hostname rport\fR] [\fB-fireworks\fR] [\fB-fullscreen\fR] [\fB-nosound\fR] [\fB-musicnosound\fR] [\fB-nogore\fR] [\fB-noflies\fR] [\fB-mirror\fR] [\fB-scaleup\fR] [\fB-v\fR] [\fB-h\fR] .SH DESCRIPTION You, as a bunny, have to jump on your opponents to make them explode. It's a true multiplayer game, you can't play this alone. It has network support. .SH OPTIONS .IP "-dat \fIlevelname\fR" Load \fIlevelname\fR and use it as the level for this game. .IP "-port \fIport\fR" Use \fIport\fR as the port to listen on for a network game. Use this with -net. .IP "-net \fIplayer hostname rport" Connect (using a network) to another person running jump'n'bump on \fIhostname\fR, and listening on \fIrport\fR. You will be player number \fIplayer\fR. .IP "-fireworks" Run the program in "screensaver" mode. This is useful with -fullscreen. .IP "-fullscreen" Run jump'n'bump in fullscreen mode. .IP "-nosound" Run jump'n'bump without sound. .IP "-musicnosound" Run jump'n'bump with music but no sound effects. .IP "-nogore" Play without blood, familymode. .IP "-noflies" Disable flies. .IP "-mirror" Play with mirrored level. .IP "-scaleup" Play with doublesize resolution (800x512). .IP "-h" Print help. .IP "-v" Print version, compile time and if network code is compiled in. .SH USAGE The goal of the game is to jump on the other players. Each rabbit has three control keys. .IP "Player 1 (Dott)" Left - Left .br Right - Right .br Jump - Up .IP "Player 2 (Jiffy)" Left - A .br Right - D .br Jump - W .IP "Player 3 (Fizz)" Left - J .br Right - L .br Jump - I .IP "Player 4 (Mijji)" Left - 4 .br Right - 5 .br Jump - 8 .IP "In the game" Turn on/off computer play (AI) of bunny 1 - 1 .br Turn on/off computer play (AI) of bunny 2 - 2 .br Turn on/off computer play (AI) of bunny 3 - 3 .br Turn on/off computer play (AI) of bunny 4 - 4 .br .SH SECRET CODES You can type these while in the game .br jetpack - you can fly .br pogostick - the bunnies keep jumping .br bunniesinspace - gravity is lower, you can jump higher .br lordoftheflies - the flies are attracted .br bloodisthickerthanwater - water turns to blood .SH LEVELS There are two programs to help you make your own levels: jnbpack and jnbunpack. .PP jnbpack -o /tmp/newlevel.dat etc .PP or you can just put all the files in a dir, cd to that dir and do .PP jnbpack -o /tmp/newlevel.dat * .PP and it will put all the files in the current dir inside the packfile. Don't try things like jnbpack -o stuff.dat ../file.c because it will add "../file.c" as the filename in the packfile, which won't work. .PP jnbunpack level.dat .br will unpack it in the current directory. .PP With gobpack you can convert .gob files (which are sprites, described in gob.txt) into .pcx files which you can edit with gimp for example, then convert back to a .gob and use it in your own level. .PP gobpack -u font menu.pcx .PP will unpack font.gob using the color palette from menu.pcx and write the files font.pcx font.txt. The other gob files should use level.pcx for the correct palette. .PP gobpack font .PP will generate font.gob from font.pcx and the specifications in font.txt. The .pcx files should be resaved with another program, as they are not packed and are thus very large. .SH AUTHORS .PP Chuck Mason , Jon Atkins , Philippe Brochard , Grkan Sengn , Florian Schulze , Ricardo Cruz and "timecop" are the authors of jump'n'bump. .PP This program is a UNIX port of the old DOS game by brainchilddesign. .PP This manual page was written for the Debian GNU/Linux distribution because the original program does not have a manual page. .PP This manual page was written by Joe Wreschnig , for the Debian GNU/Linux system (but may be used by others). The manual page is kept up to date by Grkan Sengn . jumpnbump-1.50.orig/jumpnbump.fbcon000077500000000000000000000002721107022553500174450ustar00rootroot00000000000000#!/bin/sh #SDL_AUDIODRIVER can be dsp,dma,esd,artsc | dsound,waveout #SDL_VIDEODRIVER can be x11,dga,fbcon,directfb,svgalib,ggi,aalib | directx,windib SDL_VIDEODRIVER=fbcon jumpnbump $@ jumpnbump-1.50.orig/jumpnbump.html000066400000000000000000000120251107022553500173160ustar00rootroot00000000000000 jumpnbump(6) manual page Table of Contents

Name

jumpnbump - Cute multiplayer platform game with bunnies

Synopsis

jumpnbump [-dat levelname] [-port port -net player hostname rport] [-fireworks] [-fullscreen] [-nosound] [-musicnosound] [-nogore] [-mirror] [-scaleup] [-v] [-h]

Description

You, as a bunny, have to jump on your opponents to make them explode. It's a true multiplayer game, you can't play this alone. It has network support.

Options

-dat levelname
Load levelname and use it as the level for this game.
-port port
Use port as the port to listen on for a network game. Use this with -net.
-net player hostname rport
Connect (using a network) to another person running jump'n'bump on hostname, and listening on rport. You will be player number player.
-fireworks
Run the program in "screensaver" mode. This is useful with -fullscreen.
-fullscreen
Run jump'n'bump in fullscreen mode.
-nosound
Run jump'n'bump without sound.
-musicnosound
Run jump'n'bump with music but no sound effects.
-nogore
Play without blood, familymode.
-mirror
Play with mirrored level.
-scaleup
Play with doublesize resolution (800x512).
-h
Print help.
-v
Print version.

Usage

The goal of the game is to jump on the other players. Each rabbit has three control keys.
Player 1 (Dott)
Left - Left
Right - Right
Jump - Up
Player 2 (Jiffy)
Left - A
Right - D
Jump - W
Player 3 (Fizz)
Left - J
Right - L
Jump - I
Player 4 (Mijji)
Left - 4
Right - 5
Jump - 8

Secret Codes

You can type these while in the game
jetpack - you can fly
pogostick - the bunnies keep jumping
bunniesinspace - gravity is lower, you can jump higher
lordoftheflies - the flies are attracted
bloodisthickerthanwater - water turns to blood

Levels

There are two programs to help you make your own levels: jnbpack and jnbunpack.

jnbpack -o /tmp/newlevel.dat <file1> <file2> <file3> etc

or you can just put all the files in a dir, cd to that dir and do

jnbpack -o /tmp/newlevel.dat *

and it will put all the files in the current dir inside the packfile. Don't try things like jnbpack -o stuff.dat ../file.c because it will add "../file.c" as the filename in the packfile, which won't work.

jnbunpack level.dat
will unpack it in the current directory.

With gobpack you can convert .gob files (which are sprites, described in gob.txt) into .pcx files which you can edit with gimp for example, then convert back to a .gob and use it in your own level.

gobpack -u font menu.pcx

will unpack font.gob using the color palette from menu.pcx and write the files font.pcx font.txt. The other gob files should use level.pcx for the correct palette.

gobpack font

will generate font.gob from font.pcx and the specifications in font.txt. The .pcx files should be resaved with another program, as they are not packed and are thus very large.

Authors

Chuck Mason <cemason@users.sourceforge.net>, Jon Atkins <jcatki@home.com>, Philippe Brochard <phil.brochard@wanadoo.fr>, Grkan Sengn <gurkan@linuks.mine.nu>, Florian Schulze <crow@icculus.org> and "timecop" <timecop@japan.co.jp> are the authors of jump'n'bump.

This program is a UNIX port of the old DOS game by brainchilddesign.

This manual page was written for the Debian GNU/Linux distribution because the original program does not have a manual page.

This manual page was written by Joe Wreschnig <piman@sacredchao.net>, for the Debian GNU/Linux system (but may be used by others).


Table of Contents

jumpnbump-1.50.orig/jumpnbump.ico000066400000000000000000000042761107022553500171350ustar00rootroot00000000000000 ( @&*&*:6:.^:^4f2k4s:NjCACLLPWWXkmmjmtvvv>: BLN SV Y`AbTj`zai0|x{v42'<zGDUl        '%" #)))((# #)()(((((('%(()(((((((%%%%%)(((((((((((%( $'&%((((((%(((  %684& "%(((((( "2.8883 "%'(% !8,8885 %*63666885  +  %%))8888888* + +$$$$"))6888886# +,  $$$$$((()-686861' +,$ $$((('4660463) ++ ,861(/118 ++44.880.+. ,+,,-..-, ++-,1+ + ,,- +++,,?#>11jumpnbump-1.50.orig/jumpnbump.svgalib000077500000000000000000000002741107022553500200070ustar00rootroot00000000000000#!/bin/sh #SDL_AUDIODRIVER can be dsp,dma,esd,artsc | dsound,waveout #SDL_VIDEODRIVER can be x11,dga,fbcon,directfb,svgalib,ggi,aalib | directx,windib SDL_VIDEODRIVER=svgalib jumpnbump $@ jumpnbump-1.50.orig/levelmaking/000077500000000000000000000000001107022553500167115ustar00rootroot00000000000000jumpnbump-1.50.orig/levelmaking/jumpnbump_levelmaking.htm000066400000000000000000001175031107022553500240250ustar00rootroot00000000000000 Making levels

 

HOW TO MAKE A LEVEL

This is a tutorial where you can learn how to edit all files on a JnB level or solve your problems.

 

Linux updates: 9 Aug 2002. Tools to make levels on a UNIX, Linux system.

Last update: 16 Sep 2001. Added JnB level background for download

7 Sep 2001. Information about water-blood cheat in level.pcx and splash.smp.

6 Sep 2001. How to put blinking things in menu.pcx.

 

First of all unpack a level in this way:

"unpack.exe [levelname].dat"

"jnbunpack [levelname].dat" [Linux]

 

I recommend you to unpack jumpbump.dat, so, the files you not edit, are the default.

Required programs:

On Linux:
  • The Gimp - www.gimp.org
  • Soundtracker - www.soundtracker.org/
    play -traw -r22050 -sb the.smp to play sample files
  • Your favourite editor (vi, mcedit...)
  • Please contact your manual page for details about jnbpack, jnbunpack and gobpack (man jumpnbump)

These are the files to edit:

File Format

File Name

Description

PCX

level The zone where you play.
mask The mask of "level.pcx"
menu The screen where you select players.
menumask The mask of "menu.pcx"

DAT

calib The joystick/joypad calibration data.

TXT

levelmap The map of the zone.

GOB

font The font of the level.
numbers The displayed numbers on the scoreboard
objects The objects of the zone.
rabbit The movements of the rabbits.

SMP

death Sample played when a rabbit dies.
fly Sample played when you are near the flies.
jump Sample played when you jump.
splash Sample played when you fall into the water.
spring Sample played when you jump on a spring.

MOD

bump Music played when you play in the zone.
jump Music played on the select players screen.
scores Music played in the final scoreboard.

 

  • How to edit all of them:

level.pcx

Description: The zone where you play.

Program for edit it: Paint Shop Pro. The Gimp [Linux].

How to edit: Draw a nice image for make a level with PSP, and if you want to see the map, do this:

Click on File/Preferences/General Program Preferences. Then click on "Rulers and Units" and type, in Grid section, Width=16 and Height=16. Then Apply. And last, click on View/Grid.

Now you can see the map and will be useful for make levelmap.txt

The map is 16 rows and 22 columns, and another 3 columns at the right for scoreboard. The image size is 400x256 pixels and uses 256 colours. Download the original background here and use it for your own. Remember this: all the image files on the level (PCXs and GOBs) must have the same colour palette.

These are the colour numbers of the default palette that are changed when using BLOODISTHICKERTHANWATER cheat:

Water colour number
turns into
Blood colour number
145
turns into
176
146
turns into
177
147
turns into
178
148
turns into
179
149
turns into
180
150
turns into
181
151
turns into
182

 

mask.pcx

Description: The mask of "level.pcx"

Program for edit it: Paint Shop Pro. The Gimp [Linux].

How to edit: This is a black image file with white parts. The black zone is behind the rabbits and the white zone hides the rabbits. Be careful, don't make white the three columns at the right for can see the scoreboard. Here is an example:

This is a part of "level.pcx"

And this is a part of "mask.pcx"

Look! Dott is behind the box!

menu.pcx

Description: The screen where you select players.

Program for edit it: Paint Shop Pro. The Gimp [Linux].

How to edit: The easiest you can do here is this: Type on the top your Nick and your e-mail and the title of the level. But you can draw too a nice level entrance, but remember to draw an obstacle for jump it and select players. Something cool: Everywhere you use the colour No255, will be blinking like the credits letters. Remember this: all the image files on the level (PCXs and GOBs) must have the same colour palette. Look here at each of the rabbit's way for make the menu screen:

Get this image file in .PCX format here, put it in your level and it will guide you for where you must put thee obstacle and the floor where is supposed to run on the rabbits.

menumask.pcx

Description: The mask of "menu.pcx"

Program for edit it: Paint Shop Pro. The Gimp [Linux].

How to edit: This is a black image file with white parts. The black zone is behind the rabbits and the white zone hides the rabbits. Be careful, don't make white the bottom for can see the credits. Here is an example:

This is a part of "level.pcx"

And this is a part of "mask.pcx"

Look! Dott is behind the box!

calib.dat

Description: The joystick/joypad calibration data.

Program for edit it: None

How to edit: When you pack the .dat file, just play it, before playing, you calibrate your joystick/joypad.

levelmap.txt

Description: The map of the zone.

Program for edit it: Notepad.

How to edit: Just take a look in the PSP Grid of "level.pcx" and type:0 for air, 1 for ground, 2 for water, 3 for ice and 4 for a spring (just like "Number Code Land" level). Remember, is a 22x16 grid. Some useful information:

  • You can jump up to 3 blocks.
  • If you are using the "BUNNIESINSPACE" cheat, you can jump up to 6 blocks.
  • And jumping on a spring, 6 blocks too.
  • The water is useful for "fly".
  • If you alternate ground and air, you can run over there without falling.

font.gob

Description: The font of the level.

Program for edit it: Paint Shop Pro & GOBMaker. The Gimp and gobpack[Linux].

How to edit: With PSP edit "font.pcx" (found at GOBMaker Projects in BCD) drawing all letters, numbers and marks and save the image. Remember this: all the image files on the level (PCXs and GOBs) must have the same colour palette. Run GOBMaker, then open "font.gmp" (GOBMaker Project) and change the letters. These are the frames of "font.gob":

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

!

"

'

(

)

,

-

.

/

0

1

2

3

4

5

6

7

8

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

9

:

;

@

A

B

C

D

E

F

G

H

I

J

K

L

M

N

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

O

P

Q

R

S

T

U

V

W

X

Y

Z

a

b

c

d

e

f

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

73

74

75

76

77

78

79

80

81

y

z

~

ä

â

Ä

Â

ö

Ö

numbers.gob

Description: The displayed numbers on the scoreboard

Program for edit it: Paint Shop Pro & GOBMaker. The Gimp and gobpack [Linux].

How to edit: With PSP create a nice PCX image with the ten numbers starting by zero (each number can't be bigger than 16x22 pixels) and save it as "numbers.pcx". Remember this: all the image files on the level (PCXs and GOBs) must have the same colour palette. Run GOBMaker, open "numbers.pcx" and create "numbers.gmp". Then make "numbers.gob"

objects.gob

Description: The objects of the zone.

Program for edit it: Paint Shop Pro & GOBMaker. The Gimp and gobpack [Linux].

How to edit: With PSP edit "objects.pcx" (found at GOBMaker Projects in BCD) drawing all objects of the level. Remember this: all the image files on the level (PCXs and GOBs) must have the same colour palette. Run GOBMaker, then open "objects.gmp" (GOBMaker Project) and change the objects. These are the frames of "objects.gob":

Frames

Objects

1-6

Spring working

6

Spring stopped

7-15

Water Splashing

16-20

Dust

21-25

1st and 2nd butterfly looking at the right

27-32

1st and 2nd butterfly looking at the left

33-38

3rd and 4th butterfly looking at the right

39-44

3rd and 4th butterfly looking at the left

45-57

Pieces of Dott

53-60

Pieces of Jiffy

61-68

Pieces of Fizz

69-76

Pieces of Mijji

77-80

Blood

 

rabbit.gob

Description: The movements of the rabbits.

Program for edit it: Paint Shop Pro & GOBMaker. The Gimp and gobpack [Linux].

How to edit: With PSP edit "Rabbit.pcx" (found at GOBMaker Projects in BCD) drawing all the frames of the movements. Remember this: all the image files on the level (PCXs and GOBs) must have the same colour palette. Run GOBMaker, then open "rabbit.gmp" (GOBMaker Project) and change the objects. Be careful, if the frames are bigger than 16x16 pixels, you can't go up the screen because a frame of the rabbit will stay up blinking. These are the frames of "rabbit.gob":

Frames

Movements

Direction

Rabbits

1

Standing

Right

Dott

1, 2, 3, 4

Running

5, 6, 7, 8

Jumping/Swimming

9

Die

10

Standing

Left

10, 11, 12, 13

Running

14, 15, 16, 17

Jumping/Swimming

18

Die

19

Standing

Right

Jiffy

19, 20, 21, 22

Running

23, 24, 25, 26

Jumping/Swimming

27

Die

28

Standing

Left

28, 29, 30, 31

Running

32, 33, 34, 35

Jumping/Swimming

36

Die

37

Standing

Right

Fizz

37, 38, 39, 40

Running

41, 42, 43, 44

Jumping/Swimming

45

Die

46

Standing

Left

46, 47, 48, 49

Running

50, 51, 52, 53

Jumping/Swimming

54

Die

55

Standing

Right

Mijji

55, 56, 57, 58

Running

59, 60, 61, 62

Jumping/Swimming

63

Die

64

Standing

Left

64, 65, 66, 67

Running

68, 69, 70, 71

Jumping/Swimming

72

Die

 

death.smp

Description: Sample played when a rabbit dies.

Program for edit it: FastTracker II. Soundtracker [Linux].

How to edit: This editing information is the same for all SMP files. With FastTracker II open a WAV file for a death and save it as death.smp. It must be an 8-bit sound.

 

fly.smp

Description: Sample played when you are near the flies.

Program for edit it: FastTracker II. Soundtracker [Linux].

How to edit: This editing information is the same for all SMP files. With FastTracker II open a WAV file for the fliues and save it as fly.smp. It must be an 8-bit sound. You must be near the flies for hear them but if you run to them, they will fly away. For hear them the best, use the LORDOFTHEFLIES cheat.

 

jump.smp

Description: Sample played when you jump.

Program for edit it: FastTracker II. Soundtracker [Linux].

How to edit: This editing information is the same for all SMP files. With FastTracker II open a WAV file for jumping and save it as jump.smp. It must be an 8-bit sound.

 

splash.smp

Description: Sample played when you fall into the water.

Program for edit it: FastTracker II. Soundtracker [Linux].

How to edit: This editing information is the same for all SMP files. With FastTracker II open a WAV file for splashing and save it as splash.smp. It must be an 8-bit sound. This sound will be longer and slower if you use BLOODISTHICKERTHANWATER cheat.

 

 

spring.smp

Description: Sample played when you jump on a spring.

Program for edit it: FastTracker II. Soundtracker [Linux].

How to edit: This editing information is the same for all SMP files. With FastTracker II open a WAV file for a spring and save it as spring.smp. It must be an 8-bit sound. You can hear it also in POGOSTICK cheat.

 

bump.mod

Description: Music played when you play in the zone.

Program for edit it: FastTracker II. Soundtracker [Linux].

How to edit: You can compose your own playing music, but if you think it's too hard, the best you can do is downloading a nice one.

 

jump.mod

Description: Music played on the select players screen.

Program for edit it: FastTracker II. Soundtracker [Linux].

How to edit: You can compose your own intro music, but if you think it's too hard, the best you can do is downloading a nice one.

 

scores.mod

Description: Music played in the final scoreboard.

Program for edit it: FastTracker II. Soundtracker [Linux].

How to edit: You can compose your own scoreboard music, but if you think it's too hard, the best you can do is downloading a nice one.


Did you edit all the files you wanted? Type in DOS mode:

"pack.exe [mylevel].dat"

"jnbpack -o [mylevel].dat file1 file2 file3" [Linux]

 

If this isn't enough and you have problems e-mail me: bkronb@hotmail.com

For Linux related things contact me: gurkan@linuks.mine.nu

jumpnbump-1.50.orig/levelmaking/level.pcx000066400000000000000000000310451107022553500205370ustar00rootroot00000000000000 @@ #+3;CKS[cks{''''''##'#''''''#''''''''''''#''''''#''''''#''''''#'''''')')''''''')'''))''''''')''''''''')'''''''''')''''''''''''''''')'''''''')'''''''''')'''''''')''''''')''''''''#'''''''''788'''''''789'''''''78889''''''789''''''89''''''9'''''''''''''''''''''''''''''''''''''''''''''''''%''''''%&''''''%&''''''%&'''''#'%&''''''%&'''''#'%&''''''%&''''''%&''''''%&'''''#'%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&''''''%&'''''OO'%&'''''OOO'%&'''''OO'%&'''''OOO''%&'''''O'''%&'''''O'''O'%&'''''O'''%&'''''O'''%&'''''O'''%&'''''O''O'%&'''''O''''%&''''''O''''%&'''''O'''%&'''''O'78''%&'''''''788''%&'''''O7889'%&'''''78889'%&'''''789'%&'''''89'%&'''''@@BD@BD@BD@D'%&'''''BOBOBOBOBODO'%&'''''DODODODODDO'%&'''''DODODDDO'%&'''''DDODODODODO'%&'%'''''DODDODODO'%&'%&'''''OOOOO'%&'%&''''''%&'%&''''%'''%&'%&''''%&'''%&'%&''''%&'''%&'%&''''%&'''%&'%&''''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&'''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&''%&%&'''%&'%'%&%&'''%&'%'%&%&'''%&'%'%&%&'''%&'%&'%&%&'''%&'%&'%&%&'''%&'%&'%&%&'''%&'%&''''%&%&'''%&'%&''''%&%&'''%&'%&'''%&%&'''%&'%&'''%&%&'''%&'%&''''%&%&'''%&'%&'''%&%&'''%&'%&'''%&%&'''%&'%&'''%&%&'''%&'%&'''%&%&'''%&'%&'7'%&%&'''%&'%&'8''%&%&'''%&'%&'7889%&%&'''%&'%&7889%&%&''%&'%&789%&%&''%&'%&89%&%&''%&'%&9%&%&''%&'%&%&%&''%&'%&%&%&'%&'%&'%&%&%&'%&'%&'%&%&%&'%&'%&'%&%&%&'%&'%&'%&%&%&'%&'%&'%&%&%&&'%&'%&'%&%&%&&'%&'%&'%&%&%&&'%&'%&'%&%&%&&'%&'%&'%&%&%&&'%&'%&'%&%&%&&'%&'%&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&'%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%&%&&'%&'%&&%&%'%&&'%&'%&&%&%'%&&'%&'%&&%&%&&'%&'%&&%&%&&'%&'%&&%&%&&%&'%&&%&%&&%&'%&&%&%&&%&'%&&%&'''%&&%&'%&&%&''%&&%&'%&&%&''%&&%&%&&%&''%'%&&%&%&&%&''%'%&&%&%&&%&''%&&%&%&&%&''%&&%&%&&%&'7''%&&%&%&&%&''8'%&&%&%&&%&'7889%&&%&%&&%&7889%&&%&%&%&7889%&&%&%&&%&89%&&%&%&%&9%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%&%&&%&%&%& #+3;CKS[cks{˻wwwcccSSSCCC333_?o_SC7k'O3 뇻kS;'o_O{Cg7W+C3# חw_ߣCח+σk S?/kW7 ߟg3׳×kSsC[7C'+ w+3c3[[CC++?O kKS333{7ccGCsO+ ۳kkkGGG###߿Oc#wGO/'www___GGG///׫wwc{_O[G;;/'sjumpnbump-1.50.orig/levelmaking/making1.gif000066400000000000000000001035161107022553500207350ustar00rootroot00000000000000GIF89a1!J1kBRZkJRks{!1{!!!!)))))B)111111R99)!9B!BBBBcJ)J{JRRRRZ1ZB9ZZZZZcccckkkkksBsBsss{){)){ZJ{!R9sc9c!kRR{sBBkJƔ΄֔)ֵ֭ޥB޽Zs1cޜZZs,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8qٙMΟ@ ҧ@]'PFaՈSBxiN\$:D;mұLتլݹN+U/\f-(WcaU&xLJhY?u«>jl9pVK.]!ml҄sM9af>=dʼ^xʽ[_9j=::t;Nydށ[^|߯;q&ɵ]~={{w}Hh 6xy*(Hx^}FW[1ԡ$޶a2X"!zzŸb ɢ8ZLv7"dX5d>F$ ߑ36Y.ei襘馜vzm*ꨚjT yꬴR5Jkz&kk&6F+Vkf[G%ꭷ[u+~kå$,[+k]¿@ ED,/d{ 2"ܱr*2/3r7k\s93;s8k `$,NK7Q dİWl 3pS,U\<Ds>rם3@}77.Y$]8R8ԇ'nU86Wg^pb @EXvϰ;밿.n{Ǯn{{y;3<^=[=#O|GGdW!`D0>^9Vy]kb/,z `AǺ9n4 ,d`x3VP,Ao'cPd] E`~9?z.`({񮧼 z#gD%:q{E|D(N{M"> F8F1~0lAf/mΆ`Cov`GfY7H>ҏl!3"YB1Aa#׺i8^1;*XVfѕRd+gK-TN‡=  : ?[ָMrnKBW%u4QAnb4Y7MosdDg9yNӝ LNԇsc5A(T@0@>)3V2l& % ̌f3B FRPeVyKZ沣F1Q~#Ң Ƃc5p1 JFlfڲ) qo$RǤf0țSTBVՐWE 'F d]>k/s2s5cDI., @8j -H&0)KUIcAnqߔ`=rC }3 nKrqd8fM@{k`n3<G聍sc'8_Č3*шbޠa}]L\ve/-2;û& &@Q @jk˘zl@8>Ap] #؀f%ÌlM"cZ춡Uڄn 0Ly5 =jbAV5ﭳ;Bә+Al  8#,Ё\99PJ6;[*̚?,5fol fH̻tRqq;WݸR 2p!x% h;}@#"Blb\V^rHrKB8 9-[f[}<؁c,,ߍyOm,X Kzcf.:ȁmZ4b/£/^ "P :fALY ěe 2kĝ'c~z^VrkV : zGcGzU~e^5 @EF:BM:7na~YRקcVEeE=vշ`Q~&SFwGuu$zwp9(gEUPpXV}E.0y2~|ȇ17ǃ;z?͸;H"8 rC|l7qg_5;S0(sC&GFugߓ?8!>`ɶVPW9u,Cly~DHkkgyyJ8"Ǒ"W+p!鍚'pmcAeˆ,^oa숇 tYg[%HB=H4H#]ICOBjVyܥ1W $83~x< Ft}$K dFxљqITɝIHy)~~fdgٞi 0Q)2xF@enY5?>ʔaf˜ ڹEdPfPhJb@;ɏ'%g0p֖զuZG^);0ꑪ Yc7VlQYI=PKZ tYaZЧZC%Ddtsk5B-BWjl3zX݃Zb \VVp-jy$~R;2$l o:ʦl9AbIٞ^g{g|l:ťA|ب/o^ ^@{:Ju64F*W :0'6{qj4q(ՊU+CPJej&[V>PJlg ; h ;k7Jʶ;lk)b"7l0@_ulΖvڴL{cWU^2ELSwDt+ So׋Ix7;Q<ʱyc){+N>(zq 9KIЦ<@+uɧ 1 u lqV=WaF Pk@`ku%@@է/8[ZA9N$@V@'kgj-%FfA+K ך[eɑ\tqvkwаK[K1[HJ36JUPJ%@6 i9^(=ؚ=ى˱{;ŕ>ppZN`>J":*3l{V+-k{:ˈJ"q{{% jzŋPVJ>w[Åɨ#TEɠɞ<Hҙ9txTkۙaŔ|VYLfeV[l% h-%> 7Ak1,!!7i#̴l1+LØd̯ vcbɗ^ar,1M fʷ:Ej<`M,C˷|X˫ʲY2VoͲ-I-pkL~_v;ۚy"0+ƄLϕ` *L[׹o }z-jN1x7ru҈ GX|%|@LQոƇ7P9Z aK ۻxV֨ڔ9ϓS-`RjZ!K{)+: %0, ל]l,(PK< g*eW /n^ (丌7P潗HZ2 h7 8ӬٚGqŻlk w3>liռÓ.%}[@IU-״z-~TU]70~A# ecTSEV:ByQ 濽գ.^YZt_d㮦k~ő]n{{_i 2X1)ʑ7PpB0c'ЇP}OKKo: T:DF:A sSe/YOs $X@AH,dH .LHQD:؈@!E&! %4AːdΜ `&8ܩ!τ|$(Œ= Qa8@!:ЪUYu3QsFq8"У 57P0P}J9~R)[H`LQz"&B0cFԪOVݺءE.mo/'^ܸqɏ/gޜНO>uE*)%ߍ{^ym~,ga}{mDp"4tAp* p#R.$@ ꫰, &l y* 8%$X #JO@!/h"ϝDP0#i*4GCO?%UBTCND H+%0b jJЊ lx * $8<J0iM5TAcZ?-岊@`!m>ݨ$ӲLp* "5}MP7<;_3=r-ԡh"%*S?0K/5 Bl@K唥L!XapfqvKQ 2,`jY[l$YK#JIBp`+K0>L''nbH㟨7JJeS 5 % HQ@c} . Al˄\W2#u2<qIZSFl{m/N5zku7638jx7}a'AկPЀE\ b+ Ar(Fj,c >Уp@фe.f A 7TJ XuBr $8~e, U)^ l?Lf~L\D'&q5SCR0yN bhqzܢ5 t@y3^ $XfQ@W1f1`ahM>~>Y)iWkJD YBdE0 \32fXPpF?Pе q2:*K"8v"XTONBQ^X9o#LLm&Vho+@g4JaS-'<#%N3Sp[ YBGRVU+(U4p *WpFEQa L?z#W ,RO@SLY*ec_ v|E? >@T萯, *{oUwё^M- 4д)Af5˵h+4! `tµz \ܦQb/Ge*@lFIL B6 w88E8VbNAd*Ta>P=~@$0ak&bX?)Qwk]DYQFsk;koQIbt%EV*"Kxt@S$+4@pjyh^d˫bUU'9͹`jE}˓0B4DB]\Qsu  υa̚k=-dy H ^ɊJ&(۷(121*R\z+&<..80KlWi'pZ`4A8 #b%4;ժ4,@ FO:ǖhLd%ا[=H d$'x1(W,@/esݑp\ޒ<[Jh]4 Q6NXu+HJ Tqf[[m,kj$|D\`cAFt'׊/ٷs@ښ!'\a^~\|r>wdyY%SujEY!3Qb -e .&Ś<Vkحb护POh8./!h3''"Ǻkby$юEl&M`b>ւ`CHs>ĜZ7DwٷF,?Ak~C""A}ң:(  Y@X\@$@䀉 @d @,[qk-gY! =s5y2 QX ;Er(i 33 8Tʊ!x)>: qr AB(  K7"+t(9쨼CF 72PK6h˙f9 h3;ak)>Iq$HHK*;8d&(B #-cÀNoS)8Ca ( uI6Cјg+8h~+h.шɏ?7P `ٱ #׉pDdʟH84>Tx8{ZQKBԂ RjPӊo P-#m3 sڣ IYK?C8a`ս3`iѶ?52{udMh߃eêp&n/@HQ2mb`UZjeaEyId5Ҋi `)@ 47.ї !!EWQǨbI3)`cdâm{>贾ı>E)FZ_ @.h@Nh^hnhQ=,m# !l3b!~j]ְ``6bW .I*A[<~8Jj FjdݗIk%LCԥS@$]-VDZ7[ [!m܍J-Bi+؁@>"*p ؑ AfNi*jS*EG&ѮO!ݸN-H I^h` @fhb^[xOLADgt`=; kjhN4x5@0%+< ѣA*iU=cզ=A}ߗ$ _*hSe TS$50&PWvl@0Yc\F*{c)u7^~ E=. ժQ. 5^\UZHd[U^IF.9aEb $򬢊}pqِAn>\2C MCgԵ Ѡ^d6bx pP3ΠG&-FgmÆϪMM[۸mƌ@A!;(ō3*ы=ZdJ-_>Yns%Ct ZN8*T?5U__` xYPp9xIVA8``7 !>Axvg[hY+`Ye=pD=l 8$DE=PD$GU4u]I(!K݁e ә0uP` ^zCE Gp 뭀i5VVV`Br=iW Y D ^zuxy(aeF[n٠ =ʊjpGc  !߉B6;+mЦj a[BѶ}Dݷ)U]rɝLcf-" 4DU|0վaВbyUVU:VZb}HWnS]Ӫftׂ݅jqKUF#K*8#9#3k6l.ˁpvk=زL/g,[Х^-qu\cdި+ijB:+ ,}hAiv!zZbL&Ky>A8x].SuB r*8l3|B{!̰c ,0@Z0뮺kպ' uJ]_W.vޣbM5y~wF??2)p?7O&_2Sc L2zWK 7VA 8H+kՆdRL1&3.t,36 N8 +g HH˕kgQEYIM?ӤYj1a6A.&C JKhŸ * LDhB6`|:NC`= Pf$\]rs ?$64 25 wSbZG(G=Qm,lJӊhS`uLu0K<($" `|KSdM$TYL(d߰B`{ H0MT+\,] Y2j]Hu]01+ҥ&)˘(w$kw8&XR^ޝ0PjKN]6zG^OJA.U 0VYBrc{d& N D j@%LKF7D褬$0 !j.wZtLYL0s,bB$%vOK P# xEBpUuJ nPugi9= aK"YJ*TaU`EzC)@AntUlG&`N ,u) vQ䴽gP: mTZծ<X`=99A8!hgkXԢ! &Nh.ivdе&!ikP)GK L,π^ nh+daB x,Y4:)A4"XV+hufغ2UUӕ=&@:G3G>t;Y6юb܉?L+K]%sT#ke!cr2`Uzr}7f=)LQTa 07-+$zA]6ni p8Vui ޕ\28INvԞ6?S<(ehYVqv-(29w25m^ Ky79j&a(u9|+0V"|=Wf-adrvEHldZF덃|+?n[;o +v ESBp[L%^A/|`P.rV}jks'!/<#ě"Nif,8^Bc,ڞl~v%ܘ, zÜ=G6ꝟJjpOw!d=Vq{{1_B k:ĦxhGy.o\ x^w%G6iW|Ƀ][Js^E`Xhظ}քPuXIӵ89ˤ&щ1 h{(,ݤu`T|]U٬eWM ZxU•\ xDL׆a UE|Y  U Z԰}fMfa_TZ% Lq]TGMTĝ4}]Gh!Z`>1QbUϲMbT^X X!uV`P|`% LQK6f2}աiI@T<_ `e < : jb]W|IZ `a#eJlbtP %ϭY W_Ei^|Tfae".ɒ^"ƞyX9G L,5#Ma"fƣL!*iv%u_9ZIb$M^$I^=~= )cY" \)Jݒ(d+9[CBMIϞ]b#/0Ąى$u bM &VX`f MJ 6Y#[ɑ_acͣP=JV?PX+ͭ*#zh:!եgC"!i҄-TtQc}5 ]*VhL7ݎkMW:fN2^ta.q<&$awn'mUKOz'{{g|g=J&QnbQQ2e]A&Hfl۳08(l-h\(f腆E"nޑq!iMur$O&sD}}:Nn_>d>Vqlhf;u#Y%l%6i-Mhh吆^1Mq*F\5eQE`jܔLbɽ(eYLB )aA_@Qv(*XTb)j 鸕jʛ&((k!Gha])XShtpE8SQEQ818GdMZE[j*EDc 0)ef^5VDMVT5~X2)a n+0vfh).j"M"nsD8bNJY`%뾪Y͗.iG}Q.捴@Z' `+ A(ylXZ꺁֔H}jf cEl-ڝiB cFA^ ƚFY m z'2, $EceR)]eJ)D)eߑm$U`F]ئ%bܖd` --kº:# :Fef.QNEnf*9^hX9X-ЕEFڤGXQơ>` ):FmܩzW)gZ^f uyn dkڒm٪$n`n韗B+n鼨ǽ.[.v, p,Y((E/vm)1*O.9bޥ6 W GVvۦ Ɇ`oa4ppE0dc"nn+E;/H? *Vl:S] Ȋ S 48=Q1`Ua\3ܩ\5ÄAR he>2Y8urU3JK@(]0rQ2RU\9h᭢Kh (OYDs uxvLԨ4Yۅ $K*gߚI5;ZEa*tOvG^;5#@G>iKbjrZ}9}9w-';{;WA'x;D[ X@ @ĄC@ z8ɢSBe9LtOcҳ>ďAf08C`81x5rxEHVHt>|$F 6`8q4P-@K6Uj 9䰚cH&(NIM%d˘0o8zs" .]uo^t%<q‰&6@ XpԦn&9)%Ct L06:hAcW`*+0`:h MA o8Eŏ7v1&Q&IrM)|87C`(Q0͘@@jc=Np/2ϼc9ˮC 3MN\1YTEaѮiq,rF*PАJ#Em%hx> >XH4XdP8"."+"6f@L@ɢ8 h̐#$̛&B+\ IxJS:8~ DsRFOxBV:P>/lWzWĂkXvݑG(;21k:@ВR K&k[6&2h¤Q:c9uLNw(O=n@YԊBXO"LB4p 9N7Y@؆To=aq g-:Dnsvq{>gsD6Y0ƹTt"Զ6j7K$ܒ6t 358䖻hĺL("^ 1_'_=n` 48,pCYg/N P׏Da7@co[(A>Dʁj,ffܟevod)#Hk=;Iٶp6sw@9rvNJt!#?Qo+X* b0( [ $ 䗟~؁9/V,0p[%YƺFx)i9A͂#-xF#^0s<"U q iC۔6Th=0L1qb,*@ũ.>ɋrr9NOTK^LSGUH' AJq,g L 4tzg;ΒA EILOx CBJmf[ `jVc#.kFDAP,:32/*3Nu˙E=\x򘧌N}gVrЀ;N@YgT?.۠P88BD#4lЃ@C(`!EPCj3n$\` hR}H.4LRe`M. ^",a WQgBt5pkRQ KHq@H@04,VP3*Z&Q>%g p*WBdr#-sx5g zNtЛ5]BbДĠplbH@ @`eaTDQ ]tj*4tøѰ=ֲ]&f3SDs.geF<^ pvn T3HLb~uo%a-W{a48.)@ i 0$.H˺kddmHː\w߫ToC_cpTcV&~Tĕ).3/^XKv+6oSά 7Ww;!к;U];wf՛= @H1$B}'8O[@\^9=h Rhg*kD%Rt#&f^j2Xysl`vE=Us& ,Jp@tʝXLfl+G+pߚL\H6qQ*7lw2.wcDQAR?z)B,l;h\:ijL` .'rk؞Xi2 +2|)*4%-I8cofR.WK& ORnOJP$\cf܏2 @go2S`0^0 x.#8rԥJ 9cpNfn*}06>H xD/"g^=0kP/4S@HfB`.. 0r r^M Ob 'lJnn;8p<OnVofk܋@@q*"AoBR TB"VELLkLWtiD4*M1Ei!u;13jmPӎb 9~j yN Lx#\ &,U +>' iSt2UWlZKC8BUBZMw5I{Z݄* OQE!2YuS`NUhg@'~*h[Sv[Qq6^GR@Ua8?uJ'SYaTsPjnlĊ1n 9aeiOma441 Z;G5/cUl7o$Zv@eU[kkx#\k= +pmƒugu9JO1-u%Ub29J`/b/̞ˢl#ǪjuɾuKtKwjwvi_ uurww#;htnC664HnߠtzRzzg'Һ *).  QPuN.'osz.U eGM5,EwHW6&'{o1# h" "M M'+Ng$sW6Ub7) I6;s^K1Gj b*dN~xNB&G'F %`N RG&F Պb՚qGƶ!2Jw74dz ؇䍁3}x5WJ7^g&&T:_ÇZ`yNѨVg/Wma'37#6bX<Ӏ}r-Æ Y * (0du@7~7hB `,ԏhCJ o6]ϫcWT.nJ-AiUQ#yDZKM`NB;VxVW?)ZUliDU&/XSDO"09KL/f9Jp0n.Kn[yvء)c$f 1h:JiKf"R贋n9y奯g rtkAPY(.6q9!3gmh9t`}I4p5 6.6q&{֡!:ڭ=/7"v = gM [[o;w/tblCל)s2GFj;rS. ]2oiC}C%J$7tnB/+֚o6bz7-"p$MӰ }k9moz:!v%/2؜GT5eW6y)g\L:~oakJKOs bG"<6 5bsP;7 ܺU<||.B P.הټ\:I,zUq$2G1y8f7pG rnn`Ik\U&ܡ/5Ẑ7|\:5ϣ]\ٝYN"o jyTZy;[ yؗUcf1>SB{aC*nv[I\4A+Lt# &q o$!Em9Ӎd@*$g y߸š9T15ap@W(=6Xԟ< H`}<.ԧZ Mw} 5Kh].`\-la@vUN˹7x>=5"L> =?D[^3*,`$QP }C:a֣=N@UJ,$諠ߗ@P6F@)$5.nD O`0!  T ?YB@x#+VGa0HqbΝK)nʔS@.4Q4:UTXB%,9~и!0`8cF"EL4(ݸs7?0 bŃ0^1d2հ9+ a#4I@a J%)Rb[kTϪ+UGl~X$g`c*ܦ#Eu36`ҁ &.i '0`}$~G >HZ!pTpyep]MՙeBjp5^xe^,Xk!6Y>JY ]fL- 98 % 14YƠA@Q{An|E!m\qǹu%'$\P@C59UDewnwQF3\!,KC B؄L0hK44NdrKpZQGt܇ܑ!Jbe V[oy4C~˜ /cy .d @n*&n8{oB[-dM`= i|ȂgX`>p ZbLrhk!QCUU$&5 sS ,A }g]dYh\N`t=3Fqa4xUBBx2$恧7aH`0$nq״w}*mBKNdAɦc^~u}]pd@X +9 [X[>8JZiOeB`3GFVo}w>'TLcQm8C2k )j ߀=܉9@ (`n@&0jv+JW2&4*Z( $6Q/MAXR!-n\_Z:,!0au adZ0c.3ܵ(A |,I)hc< (f@iӘp)v|u2"*4,M+YShkሉlk{ vm' @)@PBpO~`PVo0HM8+4CLDt9nn"3`V(g-K_)LF9z$2CDV-vD+f@>hƒ%H\i=YdeK3WڣrĀ*FD"Ob~LFn>DN2 |$V~[EaPU!M0hG4,ǟH DPK̗8 {'H5 Dh:[A.vM|tΌmcy Y։iBFԴ1HdTcdzD@E| ! P@M^J!\`&-1#]I*F 4,$?$C Ur t\,d'N;UwYe1*f0\FlT0iNFj28LJMj$w XpTPPfg>6f"= A"2$MI ( ؔ@G!*a4Ig`H%%'O`Y|0YI6Ʃeg|B&6Y-4hS VMrhT]| Sx-; (Ҹ ]"E-B7hs[;X!'0uP:g퍰 OA(<$(AeZ]X 2@rH@ sֳ#mٙjr\hIm鵎TәƧvN.op=MoHѲU˪խƅl;2. Wx%Y!*x+ l"xК_7JVfpJ|ja%i#w`Z+MRN|!1@3:`3,I61=q d$ƳxS1 ݾu~|slѡQȹR)"'Jgs6X V(y)kE@uӰ| Gh۳ :b^0.|<*uqn <$xml 069=Ld+7:͝qB0 :sz=RLu+vbMR- ƃ@՝pkͽӀBX;E;f;XCK(4K|!x_ >Ӟ-G I|6pxwqui#ui}Gk&7b!qy rWF\s2gX1Dv3qz5'7#'g{6Me;;;ƃ<Ǘ|W|-^}qvg[cnFcX]W"Ņo t  h&0  q:y ׀"02R @C@xq!p&%R `x7 5RcVQ;[W&؁&7xsx`r{{̦tHKD%t7چ|9mf%1$a5ox,QbgFEOz$h"S\Qht~a\ 0q]i'b懥6Vaoiqxqx!Qqcpl8v6B>hdA( h!Hב-N0mߔ^K%H1%;Un BstphՒďeK{@`(%ro dVCՀ4 Wijuy+׎v8(xFYY؋ PnNj!:&Q'XӁlaC)qawwzmio(T-w Y @Ky FWk,yXوesY]yUFlN Vkuy>&R\$yhsbv=ӡ(GyaNf92Ra!1ZZ9i.#%ٜg'Z@IВj$8ePډ)٣IOrtr.GH#Ҥa./KJU:2U/rQja w.yɂ{t$pᦞND¦馓Tp`KVؘ=@89}54z{E9R᠊:# 9i8$:eyW>[C?gwt*LU֔UxRp=V KAVd=:nCS1J|_3z.zc:pZy-:A:J9@ox_="gc=`Ŗz 9Y"  i-d.fJxMNxMyhV'of8BF}W20JJ?!zc`=19@cy3B9Ao_#b~%ti&Xy3&lɐJ&Uc0M#Wvf,Ậ-ފW+2Sx;;KYoAZwu}!{KT iZ+[k"xsb g*{{׊z}J 5oһZDH +xyZ;QOmn)$QQkS+x[+L !X/ȱ;SJ,Ktpk[לU<|g1] +  ?!(LiP k6*ŌyjuZԫZ8-N$md#BzW։[@[`D.gkҹ]MX5mT,ѝb'P܈H' ݙ[&܌*vtr=]KQ0&,.E=s1̾k}ցi[<=h5~UC<-t˄\n~m}10Y ^]J1%3*kNx;ة6'7vl$(*.0<}gD' M]'fQͿDcn݂b16{m>V ÛS1yF?> p뮼̯ '%lR@Ĵ(P-5RiN1 W}xfsHs&Hns'̔,Ta Bpcf5]$iuu8<S(dm lr[3@[V?lҪ݂6:tӁ^U`b.GK, ^`>)4MD"͆PC9d 0*1}W"e\HCJ:%/sJhB:lga4<ݣ]q7xkEA [N[z-R(ԯFqob2 J __)#CH\ZrrE= RIBB[JD3ڛ&H'N'$"JՐ']^ڼů1oRSWNχ}Yؤ,=qF|෴-x_lhJ] ⸐c9\9㢱JR5s#S]T`U rsN%Y7Ts2Lwbukȣ!\/aחp0c XDU XKP|oP @[(4ɔ,(:}ы* B48\jApf+Yӎ38}ER9R'4a`KxXd KBڂPʅm3'F!<@5 mlyc-( pE,7 b0i&";*G4SPM5-C@$JiHqhTyBhN$x'y9-0wTZ| ԠWɫIrx&dІyjB)Vn┅B]t|EMIw+8Pc}9"3j%0,Ub#]!iOϜSUmh%$STJIϾٿg%{mQs j8>!dV6 B3걅a &=HV\S2,i( _|C$M0切zb*\b,  w͗;V\JSX8`Sz2SMZ GB ( C-aa{tBBLl` 0Zƿ /(w:k&ϙ3+MKy4)Moҗf{#΀ /姾 ~@d=kַ5u-Z" 5e]Wظe`c` `N  @O2L.`##6A"t< :^u'}>~]adfk^~q]ྊv@T# y; 0 0 Y=ys,|YvAFDI ()(XPCl#@B%,8Dlt:xX` B9{;i;~# DTD <"H2AxȈSĹ":ApWs0Yd>^E4>:Hb CF?IFE"C.#1pj;=ơƣGX4v}Cَ{ʓuzYy<# 3@X"Ȍ ˊ\ Y%8;"(ɒE5KIILEIIzxٚCa$"i4n.g#3Lrj Go,|'{{RTꧺ #8&t ĺļtH0OK̨H #>0IdElʤ:L]!l:$ y$bՒ ,+1J1'*HC mM 2U.:J: C)ܫ:EQȃZ7= `L"#D%M5fqHbT -Ă1r\ )EB?6`)Uè, Q%0/+5?%x< ?+̚J!QK/HL}=7Q9RUOURV5AYC,/-R$ )Y;b2q1\pLC8S5gZ Y* K DM\ xZ% sD`O\Қ{FG} 9׫TJHJ؈T"5OmRU[ۊU'm-]U&0[" 21Y|JSpp|ʠ[*Û *X (@5$;*֙2]![-޻2}N  AW5E^J<ŶE=[XTsXRߋS[ۋU_Y[[A*eRR0kܑ;áS\Y gН*ӵ;%Zj48 &"H[ YóqWEy!GuuKM[aJT:Xx[P^E%_c}X&E[)O 5^y10>-B,XFH` ۘI$S <xD X@jj2Q+` >]mu8w%V:? CWhG~HCTL^\ay/W^NSHTH0xt[[ _'v<')n_念AZVEFwa @&k@ϫ-@:$H 0}bp6E7k]"ע` h_ᩤB C3 y~gx=!ZӮa{9蔐^aȇ& hN=44;hO#&i94J4PIiΛ.ipir<OIi~5Y ZF$n^$]^__ߓ߃sn\tc{䓫d .A<%Lji뮯aِK" M20+x1Dhee^ f[6&5$em]AeC⪶rfޘg(2(ǻz!ff6yfG@f-d(s% Ih+ dH V ^ 3pyG L^, 0{|/3[ΆV[Hi^Ţ&ZV,RS]~^cbju6@DhmF3|kk-*4F6MYD cm$l6qfG7jJ F1h^ >oNlM\lN9(OJr/(B$l-^ma^^. .Ā6D8/V~e/Fb. #uSk"g|k/n`H7 cϸkzGSh+(U7HCdqEl" X)rfOV[QKOl2f"YAgjB x[p 櫱Uv:(KB1B, q _ND5 :{JSc HUWu3,/ +gy3v8s-{@wȽWH@kADtAhv/Coj 7]ߥkt e@N; L\gqTWuY @ &1x0>x?Cx,lIh0v*s3fpKCo(Lkz_w%fO5(z z AuFQB9VGl(\tdѫt @vD*#4zPNoHO^|)+~%UVWKIQPI=xG p!Æy`"ŊPl Ar$ɒ DLyReJ,I|9QF;6Pd!:~@O%4 J~X3!hP@ BXXuBI6U:cmYReIU%:*5lԟ>itPNH @3X@A> 29pys 28b2ϝuMW1ze0 ]{oxK!u>G|RP/Ljo 6 _l0?<3& +\s1Z&_\˅ G[c8ͻگ#/DC iM`DkI Sg-a4B LvCcni$F myvg TPME ' .1C@U\,nB`#XKt0N>@:QUu7ழ3]g,ZHݠHkZ x0lZhI!b'  ۺmM2Kt:`a!]'q0T!#ABp  V1 ``z#˂t!f ir7gV3ԍ ':K0B#7!QO4iӜ(zU|ξ薁  N"lĴOb?X7 @UCY )x'Š4C. 4z&@ ijiҒ1e`;jumpnbump-1.50.orig/levelmaking/making2.gif000066400000000000000000000030641107022553500207330ustar00rootroot00000000000000GIF89a2J)))JJJJ){{{s,2HLa #JE+(bAz(rよ#IX#ŋ8%Ɛ+fO*yL$P9U2NAļ<3VMDZVeQhFIs'۴>ViUݣUlQC wlޚR]ʓnYsi(3k\`[" MtΓPףQ3kئe5;mܤuxn6-e\woH]`;n]a[?ף@ǿ== _9G|ǡej!xr E(`fv ($h(,0(4h8H<aBrHd$J.iaNBHRYBb9r7$X&#&"&!' Y'@xfk9o:s"w2z ANv駠*ꨤjꩨ䦬FapyVjߥv+jiWbkǟsBl]ĖU,`ǒV{:%خSմX:U2hWzm}b]*h.ښֻUnW t-bK nggP "9_ 3ıQۮ ȗuBE#Pa%c2d.p>Fu@wZu@ goVL.'E'5؏ @h_z4@bk`N3}3zwA;jumpnbump-1.50.orig/levelmaking/making3.gif000066400000000000000000000056651107022553500207450ustar00rootroot00000000000000GIF89a!)))1)!BBBJ)RB1ZZZcccsBsZJssssZZsJ֥޽k,7H*\ȰÇ#JHŋ3jܘǏ CIɓ(S\ɲ˗0cʜI͛!7ϟ@ JїW<ʴӧPJeʥSjʵW: {׳hӪ]۔lJlʝK.H(˷_xKywF̸cI}LeGN̹gEnL閡s>ͺvM6dζͻ7cN0+_μУK.tw=ʦ-;il?}y OU{Ѥ~% %} ݀z V(i*nyቪ=!7"yrX`{h]v2X7!|=e$y2&dbH(xM HM(!IQ.$ 9(#f,A  2&le,#Rb&)޴e^pCN`@J*r&H%7z3<$UC^ed/ K T3&&7$  (@'%JE dτ ++*9PLa b4, "eIjE`ӞhhL Q6)L.̍Ӓ0 PS@AarMH g}@6ZчFSj6, XN_j kJɺͳ6KD)Uʵ`pkpx{/1J &`haS@, D?]VdƾsE,L* lI O.> \\i'V-2)@]`$p`S \ A*8A ؀^ۊn0R؈\*G d@Nl H`7axK͘(5kiKSx-QۍṈw+ѯ @C`7f`#; H4XftiD 1`L2yNfqe I(BY2gM\UπMB@۬dCQʩJ٘{,N{Ӡ-\h8 p a8m(!3s|T B.rHz&9yw.er"uqgąq7 GNponnwFNm8{ .C,{ nBkk!_.rBt񐏼'OW$ ;jumpnbump-1.50.orig/levelmaking/pack.gif000066400000000000000000000057241107022553500203260ustar00rootroot00000000000000GIF89aLG)!)!))1199BBB91J)JBBJRRRRRZ)ZJBZZZZZcZccccccckcksk1kcRkkksB!sR1sss{{9{Rc{cJ{kc{{{cBBZ)JRZ!sR!JRRZkRRZs9BBRRZc!RZcZckƌRcs!Υks!{9kkk{)ss1筄99s)9Zss{{11RΥ{!!19J9BJcBJRZRZ{cƌ޽!,LG H*\ȰÇaŋI\"DƏO$#ȓCaN.aL1Vr <4SVցWlAFPc Q肅&)Da޲FgQRUVxkDl(Ι9MBy* 7`P+"[DvD'tBfA*Ƞ0@(![X(P1q8 vakl RQ@ XadC`VvTy{ܑ9‡!i 4A1ԒPOĘzܩ} -"'Evܑ dћQU@p'0X^ǔȖB!!*gxAD0VGnp 3&}A ]zyk1O @xd U| pxFrVQ LfutAP+E @ @ .g<43 j킆 2(=jNBeY )Bx@PUPA-e4~$ j (܆!0 ,@~uЛb̮gQF#4NK5SW}u[wM) =r xE;D &2sau  @6$ $@ &źe| (!=Jr!` Q ^7R:/u\Ā:t<"FQl<-KPGL6)TaeF@P0,(Fa+uYIb`(Ђ",!yxH ~0. $VeA+V6 :`0da 0pr/0, F4b VhI k!VvB 8@ b†i $x@` X0=4dD >"`Z2!bYn` @u*!9 &GG yDꇲ).hPXBRV{Z[PԠ g8CPIJ!#'5IP4%RV: ,ky\CF`2 1LP4x `bHQ*8+ O'^^UD\@apX\^(4 KX O #xʠFe p@I3h0j՜PH@Qe" jLq@T*L7 ZhB**^<)T_ P/ S15 Tp ~aFx“BTT 1Q"UrC~`C p O~)_TV fnf@R3d+aOYGcV!ls) TaHz/ֆJP[kp\,qPY&07% *{La6tS~hA/Nj@t#K/8LbYƼ@9]w=Uc$RRz$<&x=+ p,> W z%~C 7lWHk WoCOқ!;jumpnbump-1.50.orig/main.c000066400000000000000000003043121107022553500155060ustar00rootroot00000000000000/* * main.c * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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" #include #ifndef _MSC_VER #include #endif #ifdef USE_NET #include "SDL_net.h" #endif /* USE_NET */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif gob_t rabbit_gobs = { 0 }; gob_t font_gobs = { 0 }; gob_t object_gobs = { 0 }; gob_t number_gobs = { 0 }; main_info_t main_info; player_t player[JNB_MAX_PLAYERS]; player_anim_t player_anims[7]; object_t objects[NUM_OBJECTS]; joy_t joy; mouse_t mouse; char datfile_name[2048]; char *background_pic; char *mask_pic; int flip = 0; int ai[JNB_MAX_PLAYERS]; unsigned int ban_map[17][22] = { {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 1, 1}, {2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} }; struct { int num_frames; int restart_frame; struct { int image; int ticks; } frame[10]; } object_anims[8] = { { 6, 0, { { 0, 3}, { 1, 3}, { 2, 3}, { 3, 3}, { 4, 3}, { 5, 3}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0} } }, { 9, 0, { { 6, 2}, { 7, 2}, { 8, 2}, { 9, 2}, { 10, 2}, { 11, 2}, { 12, 2}, { 13, 2}, { 14, 2}, { 0, 0} } }, { 5, 0, { { 15, 3}, { 16, 3}, { 16, 3}, { 17, 3}, { 18, 3}, { 19, 3}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0} } }, { 10, 0, { { 20, 2}, { 21, 2}, { 22, 2}, { 23, 2}, { 24, 2}, { 25, 2}, { 24, 2}, { 23, 2}, { 22, 2}, { 21, 2} } }, { 10, 0, { { 26, 2}, { 27, 2}, { 28, 2}, { 29, 2}, { 30, 2}, { 31, 2}, { 30, 2}, { 29, 2}, { 28, 2}, { 27, 2} } }, { 10, 0, { { 32, 2}, { 33, 2}, { 34, 2}, { 35, 2}, { 36, 2}, { 37, 2}, { 36, 2}, { 35, 2}, { 34, 2}, { 33, 2} } }, { 10, 0, { { 38, 2}, { 39, 2}, { 40, 2}, { 41, 2}, { 42, 2}, { 43, 2}, { 42, 2}, { 41, 2}, { 40, 2}, { 39, 2} } }, { 4, 0, { { 76, 4}, { 77, 4}, { 78, 4}, { 79, 4}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0} } } }; int flies_enabled = 1; struct { int x, y; int old_x, old_y; int old_draw_x, old_draw_y; int back[2]; int back_defined[2]; } flies[NUM_FLIES]; struct { struct { short num_pobs; struct { int x, y; int image; gob_t *pob_data; } pobs[NUM_LEFTOVERS]; } page[2]; } leftovers; int pogostick, bunnies_in_space, jetpack, lord_of_the_flies, blood_is_thicker_than_water; #ifndef _MSC_VER int filelength(int handle) { struct stat buf; if (fstat(handle, &buf) == -1) { perror("filelength"); exit(EXIT_FAILURE); } return buf.st_size; } #endif /* networking shite. */ int client_player_num = -1; int is_server = 1; int is_net = 0; #ifdef USE_NET TCPsocket sock = NULL; SDLNet_SocketSet socketset = NULL; typedef struct { TCPsocket sock; IPaddress addr; SDLNet_SocketSet socketset; } NetInfo; NetInfo net_info[JNB_MAX_PLAYERS]; #endif typedef struct { unsigned long cmd; long arg; long arg2; long arg3; long arg4; } NetPacket; #define NETPKTBUFSIZE (4 + 4 + 4 + 4 + 4) #define NETCMD_NACK (0xF00DF00D + 0) #define NETCMD_ACK (0xF00DF00D + 1) #define NETCMD_HELLO (0xF00DF00D + 2) #define NETCMD_GREENLIGHT (0xF00DF00D + 3) #define NETCMD_MOVE (0xF00DF00D + 4) #define NETCMD_BYE (0xF00DF00D + 5) #define NETCMD_POSITION (0xF00DF00D + 6) #define NETCMD_ALIVE (0xF00DF00D + 7) #define NETCMD_KILL (0xF00DF00D + 8) #ifdef USE_NET void bufToPacket(const char *buf, NetPacket *pkt) { SDLNet_Write32(*((Uint32*) (buf + 0)), &pkt->cmd); SDLNet_Write32(*((Uint32*) (buf + 4)), &pkt->arg); SDLNet_Write32(*((Uint32*) (buf + 8)), &pkt->arg2); SDLNet_Write32(*((Uint32*) (buf + 12)), &pkt->arg3); SDLNet_Write32(*((Uint32*) (buf + 16)), &pkt->arg4); /* pkt->cmd = ntohl(*((unsigned long *) (buf + 0))); pkt->arg = (long) ntohl(*((unsigned long *) (buf + 4))); pkt->arg2 = (long) ntohl(*((unsigned long *) (buf + 8))); pkt->arg3 = (long) ntohl(*((unsigned long *) (buf + 12))); pkt->arg4 = (long) ntohl(*((unsigned long *) (buf + 16))); */ } void packetToBuf(const NetPacket *pkt, char *buf) { *((Uint32*) (buf + 0)) = SDLNet_Read32(&pkt->cmd); *((Uint32*) (buf + 4)) = SDLNet_Read32(&pkt->arg); *((Uint32*) (buf + 8)) = SDLNet_Read32(&pkt->arg2); *((Uint32*) (buf + 12)) = SDLNet_Read32(&pkt->arg3); *((Uint32*) (buf + 16)) = SDLNet_Read32(&pkt->arg4); /* *((unsigned long *) (buf + 0)) = htonl(pkt->cmd); *((unsigned long *) (buf + 4)) = htonl((unsigned long) pkt->arg); *((unsigned long *) (buf + 8)) = htonl((unsigned long) pkt->arg2); *((unsigned long *) (buf + 12)) = htonl((unsigned long) pkt->arg3); *((unsigned long *) (buf + 16)) = htonl((unsigned long) pkt->arg4); */ } void sendPacketToSock(TCPsocket s, NetPacket *pkt) { int bytes_left = NETPKTBUFSIZE; int bw; char buf[NETPKTBUFSIZE]; char *ptr = buf; packetToBuf(pkt, buf); while (bytes_left > 0) { bw = SDLNet_TCP_Send(s, ptr, bytes_left); if (bw < 0) { fprintf(stderr, "SERVER: SDLNet_TCP_Send(): %s\n", SDLNet_GetError()); SDLNet_TCP_Close(s); exit(42); } else if (bw == 0) { SDL_Delay(1); } else { bytes_left -= bw; ptr += bw; } } } void sendPacket(int playerid, NetPacket *pkt) { if ( (playerid < JNB_MAX_PLAYERS) && (playerid >= 0)) { if ((player[playerid].enabled) && (playerid != client_player_num)) { sendPacketToSock(net_info[playerid].sock, pkt); } } } void sendPacketToAll(NetPacket *pkt) { int i; for (i = 0; i < JNB_MAX_PLAYERS; i++) { sendPacket(i, pkt); } } /** read a packet from the given TCPsocket Returns -1 if some error occured, 0 if there was no data available and 1 if a packet was successfully read. Note: the socket has to be in the supplied socketset. TODO: this function will bomb if a packet arrives in pieces, there is no inherent guarantee that the next call will be made on the same socket. */ int grabPacket(TCPsocket s, SDLNet_SocketSet ss, NetPacket *pkt) { static char buf[NETPKTBUFSIZE]; static int buf_count = 0; int rc; if (SDLNet_CheckSockets(ss, 0) <= 0) return 0; if(!SDLNet_SocketReady(s)) return 0; rc = SDLNet_TCP_Recv(s, &buf[buf_count], NETPKTBUFSIZE - buf_count); if (rc <= 0) { /* closed connection? */ return -1; } else if (rc != NETPKTBUFSIZE) { /* we got a partial packet. Store what we got in the static buffer and return so that the next call can read the rest. Hopefully. */ buf_count = rc; return 0; } else { buf_count = 0; bufToPacket(buf, pkt); return 1; } } int serverRecvPacket(NetPacket *pkt) { int rc; int i; assert(is_server); for (i = 0; i < JNB_MAX_PLAYERS; i++) { TCPsocket s = net_info[i].sock; if ((i == client_player_num) || (!player[i].enabled)) continue; rc = grabPacket(s, net_info[i].socketset, pkt); if (rc < 0) { NetPacket pkt; player[i].enabled = 0; SDLNet_TCP_Close(s); pkt.cmd = NETCMD_BYE; pkt.arg = i; pkt.arg2 = 0; pkt.arg3 = 0; pkt.arg4 = 0; sendPacketToAll(&pkt); } else if (rc > 0) { return(i); /* it's all good. */ } } return(-1); /* no packets available currently. */ } void wait_for_greenlight(void) { NetPacket pkt; int i; printf("CLIENT: Waiting for greenlight...\n"); do { int rc; while ((rc = grabPacket(sock, socketset, &pkt)) == 0) { SDL_Delay(100); /* nap and then try again. */ } if (rc < 0) { printf("CLIENT: Lost connection.\n"); SDLNet_TCP_Close(sock); exit(42); } } while (pkt.cmd != NETCMD_GREENLIGHT); printf("CLIENT: Got greenlight.\n"); for (i = 0; i < JNB_MAX_PLAYERS; i++) { if (pkt.arg & (1 << i)) { printf("CLIENT: There is a player #%d.\n", i); player[i].enabled = 1; } } } static int buggered_off = 0; void tellServerGoodbye(void) { NetPacket pkt; if (!buggered_off) { buggered_off = 1; pkt.cmd = NETCMD_BYE; pkt.arg = client_player_num; pkt.arg2 = 0; pkt.arg3 = 0; pkt.arg4 = 0; sendPacketToSock(sock, &pkt); } } #endif /* USE_NET */ void processMovePacket(NetPacket *pkt) { int playerid = pkt->arg; int movetype = ((pkt->arg2 >> 16) & 0xFF); int newval = ((pkt->arg2 >> 0) & 0xFF); if (movetype == MOVEMENT_LEFT) { player[playerid].action_left = newval; } else if (movetype == MOVEMENT_RIGHT) { player[playerid].action_right = newval; } else if (movetype == MOVEMENT_UP) { player[playerid].action_up = newval; } else { printf("bogus MOVE packet!\n"); } player[playerid].x = pkt->arg3; player[playerid].y = pkt->arg4; } void tellServerPlayerMoved(int playerid, int movement_type, int newval) { NetPacket pkt; pkt.cmd = NETCMD_MOVE; pkt.arg = playerid; pkt.arg2 = ( ((movement_type & 0xFF) << 16) | ((newval & 0xFF) << 0) ); pkt.arg3 = player[playerid].x; pkt.arg4 = player[playerid].y; if (is_server) { processMovePacket(&pkt); #ifdef USE_NET if (is_net) sendPacketToAll(&pkt); } else { sendPacketToSock(sock, &pkt); #endif } } #ifdef USE_NET void tellServerNewPosition(void) { NetPacket pkt; pkt.cmd = NETCMD_POSITION; pkt.arg = client_player_num; pkt.arg2 = player[client_player_num].x; pkt.arg3 = player[client_player_num].y; if (is_server) { sendPacketToAll(&pkt); } else { sendPacketToSock(sock, &pkt); } } #endif /* USE_NET */ void processKillPacket(NetPacket *pkt) { int c1 = pkt->arg; int c2 = pkt->arg2; int x = pkt->arg3; int y = pkt->arg4; int c4 = 0; int s1 = 0; player[c1].y_add = -player[c1].y_add; if (player[c1].y_add > -262144L) player[c1].y_add = -262144L; player[c1].jump_abort = 1; player[c2].dead_flag = 1; if (player[c2].anim != 6) { player[c2].anim = 6; player[c2].frame = 0; player[c2].frame_tick = 0; player[c2].image = player_anims[player[c2].anim].frame[player[c2].frame].image + player[c2].direction * 9; if (main_info.no_gore == 0) { for (c4 = 0; c4 < 6; c4++) add_object(OBJ_FUR, (x >> 16) + 6 + rnd(5), (y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 44 + c2 * 8); for (c4 = 0; c4 < 6; c4++) add_object(OBJ_FLESH, (x >> 16) + 6 + rnd(5), (y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 76); for (c4 = 0; c4 < 6; c4++) add_object(OBJ_FLESH, (x >> 16) + 6 + rnd(5), (y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 77); for (c4 = 0; c4 < 8; c4++) add_object(OBJ_FLESH, (x >> 16) + 6 + rnd(5), (y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 78); for (c4 = 0; c4 < 10; c4++) add_object(OBJ_FLESH, (x >> 16) + 6 + rnd(5), (y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 79); } dj_play_sfx(SFX_DEATH, (unsigned short)(SFX_DEATH_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); player[c1].bumps++; player[c1].bumped[c2]++; s1 = player[c1].bumps % 100; add_leftovers(0, 360, 34 + c1 * 64, s1 / 10, &number_gobs); add_leftovers(1, 360, 34 + c1 * 64, s1 / 10, &number_gobs); add_leftovers(0, 376, 34 + c1 * 64, s1 - (s1 / 10) * 10, &number_gobs); add_leftovers(1, 376, 34 + c1 * 64, s1 - (s1 / 10) * 10, &number_gobs); } } #ifdef USE_NET void processPositionPacket(NetPacket *pkt) { int playerid = pkt->arg; player[playerid].x = pkt->arg2; player[playerid].y = pkt->arg3; } void processAlivePacket(NetPacket *pkt) { int playerid = pkt->arg; player[playerid].dead_flag = 0; player[playerid].x = pkt->arg2; player[playerid].y = pkt->arg3; } void serverTellEveryoneGoodbye(void) { int i; if (!buggered_off) { buggered_off = 1; for (i = 0; i < JNB_MAX_PLAYERS; i++) { if (player[i].enabled) { NetPacket pkt; pkt.cmd = NETCMD_BYE; pkt.arg = i; pkt.arg2 = 0; pkt.arg3 = 0; pkt.arg4 = 0; sendPacketToAll(&pkt); } } } } int server_said_bye = 0; int update_players_from_server(void) { NetPacket pkt; int rc; assert(!is_server); while ((rc = grabPacket(sock, socketset, &pkt)) != 0) { if (rc < 0) { printf("CLIENT: Lost connection.\n"); pkt.cmd = NETCMD_BYE; pkt.arg = client_player_num; } if (pkt.cmd == NETCMD_BYE) { if (pkt.arg == client_player_num) { SDLNet_FreeSocketSet(socketset); SDLNet_TCP_Close(sock); sock = NULL; server_said_bye = 1; return(0); } else { player[pkt.arg].enabled = 0; } } else if (pkt.cmd == NETCMD_MOVE) { processMovePacket(&pkt); } else if (pkt.cmd == NETCMD_ALIVE) { processAlivePacket(&pkt); } else if (pkt.cmd == NETCMD_POSITION) { processPositionPacket(&pkt); } else if (pkt.cmd == NETCMD_KILL) { processKillPacket(&pkt); } else { printf("CLIENT: Got an unknown packet: 0x%lX.\n", pkt.cmd); } } return(1); } void serverSendAlive(int playerid) { NetPacket pkt; assert(is_server); pkt.cmd = NETCMD_ALIVE; pkt.arg = playerid; pkt.arg2 = player[playerid].x; pkt.arg3 = player[playerid].y; sendPacketToAll(&pkt); } #endif /* USE_NET */ void serverSendKillPacket(int killer, int victim) { NetPacket pkt; assert(is_server); pkt.cmd = NETCMD_KILL; pkt.arg = killer; pkt.arg2 = victim; pkt.arg3 = player[victim].x; pkt.arg4 = player[victim].y; processKillPacket(&pkt); #ifdef USE_NET if (is_net) sendPacketToAll(&pkt); #endif } #ifdef USE_NET void update_players_from_clients(void) { int i; NetPacket pkt; int playerid; assert(is_server); while ((playerid = serverRecvPacket(&pkt)) >= 0) { if (pkt.cmd == NETCMD_BYE) { pkt.arg = playerid; /* just in case. */ sendPacketToAll(&pkt); player[playerid].enabled = 0; SDLNet_FreeSocketSet(net_info[playerid].socketset); SDLNet_TCP_Close(net_info[playerid].sock); } else if (pkt.cmd == NETCMD_POSITION) { pkt.arg = playerid; /* just in case. */ processPositionPacket(&pkt); for (i = 0; i < JNB_MAX_PLAYERS; i++) { if (i != playerid) { sendPacket(i, &pkt); } } } else if (pkt.cmd == NETCMD_MOVE) { pkt.arg = playerid; /* just in case. */ /* pkt.arg3 = player[playerid].x; pkt.arg4 = player[playerid].y; */ processMovePacket(&pkt); sendPacketToAll(&pkt); } else { printf("SERVER: Got unknown packet (0x%lX).\n", pkt.cmd); } } } void init_server(const char *netarg) { NetPacket pkt; IPaddress addr; int i; int wait_for_clients = ((netarg == NULL) ? 0 : atoi(netarg)); char *ipstr; /** assign player number zero as default for the server */ if(-1 == client_player_num) client_player_num = 0; if ((wait_for_clients >= JNB_MAX_PLAYERS) || (wait_for_clients < 0)) { printf("SERVER: Waiting for bogus client count (%d).\n", wait_for_clients); exit(42); } if (SDLNet_Init() < 0) { exit(42); } atexit(SDLNet_Quit); SDLNet_ResolveHost(&addr, NULL, JNB_INETPORT); ipstr = SDLNet_ResolveIP(&addr); SDLNet_ResolveHost(&addr, ipstr, JNB_INETPORT); printf("SERVER: we are %s (%i.%i.%i.%i:%i).\n", ipstr, (addr.host >> 0) & 0xff, (addr.host >> 8) & 0xff, (addr.host >> 16) & 0xff, (addr.host >> 24) & 0xff, addr.port); net_info[client_player_num].addr = addr; addr.host = INADDR_ANY; sock = SDLNet_TCP_Open(&addr); if (sock == NULL) { fprintf(stderr, "SERVER: SDLNet_TCP_Open(): %s\n", SDLNet_GetError()); exit(42); } player[client_player_num].enabled = 1; printf("SERVER: waiting for (%d) clients...\n", wait_for_clients); socketset = SDLNet_AllocSocketSet(JNB_MAX_PLAYERS + 1); SDLNet_TCP_AddSocket(socketset, sock); while (wait_for_clients > 0) { char buf[NETPKTBUFSIZE]; IPaddress *from; int negatory = 1; int br; TCPsocket s; /* Wait for events */ SDLNet_CheckSockets(socketset, ~0); if ( SDLNet_SocketReady(sock) ) { s = SDLNet_TCP_Accept(sock); if (s == NULL) { fprintf(stderr, "SERVER: SDLNet_TCP_Accept(): %s", SDLNet_GetError()); SDLNet_TCP_Close(sock); exit(42); } } else continue; br = SDLNet_TCP_Recv(s, buf, NETPKTBUFSIZE); if (br < 0) { fprintf(stderr, "SERVER: SDLNet_TCP_Recv(): %s\n", SDLNet_GetError()); SDLNet_TCP_Close(s); SDLNet_TCP_Close(sock); exit(42); } from = SDLNet_TCP_GetPeerAddress(s); ipstr = SDLNet_ResolveIP(from); printf("SERVER: Got data from %s (%i.%i.%i.%i:%i).\n", ipstr, (from->host >> 0) & 0xff, (from->host >> 8) & 0xff, (from->host >> 16) & 0xff, (from->host >> 24) & 0xff, from->port); if (br != NETPKTBUFSIZE) { printf("SERVER: Bogus packet.\n"); continue; } bufToPacket(buf, &pkt); if (pkt.cmd != NETCMD_HELLO) { printf("SERVER: Bogus packet.\n"); continue; } printf("SERVER: Client claims to be player #%ld.\n", pkt.arg); if (-1 == pkt.arg) { int i; for(i=0; i!=JNB_MAX_PLAYERS; ++i) { if(!player[i].enabled) { printf("SERVER: assigning %d as player number\n", i); pkt.arg = i; break; } } } if ((pkt.arg>=JNB_MAX_PLAYERS)||(pkt.arg<0)) { printf("SERVER: (that's an invalid player number.)\n"); } else if (player[pkt.arg].enabled) { printf("SERVER: (that player number is already taken.)\n"); } else { negatory = 0; } if (negatory) { printf("SERVER: Forbidding connection.\n"); pkt.cmd = NETCMD_NACK; sendPacketToSock(s, &pkt); SDLNet_TCP_Close(s); } else { player[pkt.arg].enabled = 1; net_info[pkt.arg].sock = s; net_info[pkt.arg].addr = *from; net_info[pkt.arg].socketset = SDLNet_AllocSocketSet(1); SDLNet_TCP_AddSocket(net_info[pkt.arg].socketset, net_info[pkt.arg].sock); wait_for_clients--; printf("SERVER: Granting connection. (%d) to go.\n", wait_for_clients); pkt.cmd = NETCMD_ACK; sendPacket(pkt.arg, &pkt); } } SDLNet_TCP_Close(sock); /* done with the listen socket. */ SDLNet_FreeSocketSet(socketset); sock = NULL; socketset = NULL; printf("SERVER: Got all our connections. Greenlighting clients...\n"); pkt.cmd = NETCMD_GREENLIGHT; pkt.arg = 0; for (i = 0; i < JNB_MAX_PLAYERS; i++) { if (player[i].enabled) { pkt.arg |= (1 << i); } } sendPacketToAll(&pkt); } void connect_to_server(char *netarg) { NetPacket pkt; char buf[NETPKTBUFSIZE]; char *ipstr; IPaddress hent; IPaddress addr; int br; if (netarg == NULL) { printf("CLIENT: Need to specify host to connect to.\n"); exit(42); } if (SDLNet_Init() < 0) { exit(42); } atexit(SDLNet_Quit); SDLNet_ResolveHost(&addr, NULL, JNB_INETPORT); ipstr = SDLNet_ResolveIP(&addr); SDLNet_ResolveHost(&addr, ipstr, JNB_INETPORT); printf("CLIENT: we are %s (%i.%i.%i.%i:%i).\n", ipstr, (addr.host >> 0) & 0xff, (addr.host >> 8) & 0xff, (addr.host >> 16) & 0xff, (addr.host >> 24) & 0xff, addr.port); if (SDLNet_ResolveHost(&hent, netarg, JNB_INETPORT) < 0) { fprintf(stderr, "CLIENT: couldn't find host: %s\n", SDLNet_GetError()); exit(42); } sock = SDLNet_TCP_Open(&hent); if (sock == NULL) { fprintf(stderr, "CLIENT: SDLNet_TCP_Open(): %s\n", SDLNet_GetError()); exit(42); } socketset = SDLNet_AllocSocketSet(1); SDLNet_TCP_AddSocket(socketset, sock); printf("CLIENT: connected to %s...\n", SDLNet_ResolveIP(&hent)); printf("CLIENT: Sending HELLO packet...\n"); pkt.cmd = NETCMD_HELLO; pkt.arg = client_player_num; sendPacketToSock(sock, &pkt); printf("CLIENT: Waiting for ACK from server...\n"); br = SDLNet_TCP_Recv(sock, buf, NETPKTBUFSIZE); if (br < 0) { fprintf(stderr, "CLIENT: recv(): %s\n", SDLNet_GetError()); SDLNet_FreeSocketSet(socketset); SDLNet_TCP_Close(sock); exit(42); } if (br != NETPKTBUFSIZE) { printf("CLIENT: Bogus packet size (%d of %d). FIXME.\n", br, NETPKTBUFSIZE); SDLNet_FreeSocketSet(socketset); SDLNet_TCP_Close(sock); exit(42); } bufToPacket(buf, &pkt); if (pkt.cmd == NETCMD_NACK) { printf("CLIENT: Server forbid us from playing.\n"); SDLNet_FreeSocketSet(socketset); SDLNet_TCP_Close(sock); exit(42); } if (pkt.cmd != NETCMD_ACK) { printf("CLIENT: Unexpected packet (cmd=0x%lX).\n", pkt.cmd); SDLNet_FreeSocketSet(socketset); SDLNet_TCP_Close(sock); exit(42); } client_player_num = pkt.arg; player[client_player_num].enabled = 1; net_info[client_player_num].addr = addr; printf("CLIENT: Server accepted our connection.\n"); wait_for_greenlight(); } #endif /* USE_NET */ static void flip_pixels(unsigned char *pixels) { int x,y; unsigned char temp; assert(pixels); for (y = 0; y < JNB_HEIGHT; y++) { for (x = 0; x < (352/2); x++) { temp = pixels[y*JNB_WIDTH+x]; pixels[y*JNB_WIDTH+x] = pixels[y*JNB_WIDTH+(352-x)-1]; pixels[y*JNB_WIDTH+(352-x)-1] = temp; } } } int main(int argc, char *argv[]) { unsigned char *handle; int c1 = 0, c2 = 0, c3 = 0, c4 = 0; int l1; int s1, s2, s3, s4; int closest_player = 0, dist, cur_dist = 0; int end_loop_flag = 0, fade_flag = 0; int mod_vol, sfx_vol, mod_fade_direction; char str1[100]; char pal[768]; char cur_pal[768]; int update_count; int i; if (init_program(argc, argv, pal) != 0) deinit_program(); if (main_info.fireworks == 1) { fireworks(); deinit_program(); } for(i = 0; i < JNB_MAX_PLAYERS; i++) // reset player values { ai[i] = 0; } while (1) { if (!is_net) if (menu() != 0) deinit_program(); if (key_pressed(1) == 1) { break; } if (init_level(0, pal) != 0) { deinit_level(); deinit_program(); } memset(cur_pal, 0, 768); setpalette(0, 256, cur_pal); recalculate_gob(&rabbit_gobs, pal); recalculate_gob(&object_gobs, pal); recalculate_gob(&number_gobs, pal); flippage(1); register_background(background_pic, pal); flippage(0); if (flies_enabled) { s1 = rnd(250) + 50; s2 = rnd(150) + 50; for (c1 = 0; c1 < NUM_FLIES; c1++) { while (1) { flies[c1].x = s1 + rnd(101) - 50; flies[c1].y = s2 + rnd(101) - 50; if (ban_map[flies[c1].y >> 4][flies[c1].x >> 4] == BAN_VOID) break; } flies[c1].back_defined[0] = 0; flies[c1].back_defined[1] = 0; } } mod_vol = sfx_vol = 10; mod_fade_direction = 1; dj_ready_mod(MOD_GAME); dj_set_mod_volume((char)mod_vol); dj_set_sfx_volume((char)mod_vol); dj_start_mod(); if (flies_enabled) dj_play_sfx(SFX_FLY, SFX_FLY_FREQ, 0, 0, 0, 4); dj_set_nosound(0); lord_of_the_flies = bunnies_in_space = jetpack = pogostick = blood_is_thicker_than_water = 0; end_loop_flag = 0; main_info.page_info[0].num_pobs = 0; main_info.page_info[1].num_pobs = 0; main_info.view_page = 0; main_info.draw_page = 1; update_count = 1; while (1) { while (update_count) { if (key_pressed(1) == 1) { #ifdef USE_NET if (is_net) { if (is_server) { serverTellEveryoneGoodbye(); } else { tellServerGoodbye(); } } #endif end_loop_flag = 1; memset(pal, 0, 768); mod_fade_direction = 0; } if (strncmp(last_keys, "kcitsogop", strlen("kcitsogop")) == 0) { pogostick ^= 1; last_keys[0] = 0; } if (strncmp(last_keys, "ecapsniseinnub", strlen("ecapsniseinnub")) == 0) { bunnies_in_space ^= 1; last_keys[0] = 0; } if (strncmp(last_keys, "kcaptej", strlen("kcaptej")) == 0) { jetpack ^= 1; last_keys[0] = 0; } if (strncmp(last_keys, "seilfehtfodrol", strlen("seilfehtfodrol")) == 0) { lord_of_the_flies ^= 1; last_keys[0] = 0; } if (strncmp(last_keys, "retawnahtrekcihtsidoolb", strlen("retawnahtrekcihtsidoolb")) == 0) { blood_is_thicker_than_water ^= 1; if (blood_is_thicker_than_water == 1) { pal[432] = 63; pal[433] = 32; pal[434] = 32; pal[435] = 53; pal[436] = 17; pal[437] = 17; pal[438] = 42; pal[439] = 7; pal[440] = 7; pal[441] = 28; pal[442] = 0; pal[443] = 0; pal[444] = 24; pal[445] = 0; pal[446] = 0; pal[447] = 19; pal[448] = 0; pal[449] = 0; pal[450] = 12; pal[451] = 0; pal[452] = 0; pal[453] = 7; pal[454] = 0; pal[455] = 0; } else { pal[432] = 63; pal[433] = 63; pal[434] = 63; pal[435] = 40; pal[436] = 53; pal[437] = 62; pal[438] = 19; pal[439] = 42; pal[440] = 60; pal[441] = 0; pal[442] = 33; pal[443] = 60; pal[444] = 3; pal[445] = 32; pal[446] = 46; pal[447] = 3; pal[448] = 26; pal[449] = 33; pal[450] = 3; pal[451] = 19; pal[452] = 21; pal[453] = 1; pal[454] = 8; pal[455] = 8; } register_background(background_pic, pal); recalculate_gob(&object_gobs, pal); last_keys[0] = 0; } #ifdef USE_NET if (is_net) { if (is_server) { update_players_from_clients(); } else { if (!update_players_from_server()) { break; /* got a BYE packet */ } } } #endif steer_players(); dj_mix(); for (c3 = 0; c3 < 6; c3++) { if (c3 == 0) { c1 = 0; c2 = 1; } else if (c3 == 1) { c1 = 0; c2 = 2; } else if (c3 == 2) { c1 = 0; c2 = 3; } else if (c3 == 3) { c1 = 1; c2 = 2; } else if (c3 == 4) { c1 = 1; c2 = 3; } else if (c3 == 5) { c1 = 2; c2 = 3; } if (player[c1].enabled == 1 && player[c2].enabled == 1) { if (labs(player[c1].x - player[c2].x) < (12L << 16) && labs(player[c1].y - player[c2].y) < (12L << 16)) { if ((labs(player[c1].y - player[c2].y) >> 16) > 5) { if (player[c1].y < player[c2].y) { if (player[c1].y_add >= 0) { if (is_server) serverSendKillPacket(c1, c2); } else { if (player[c2].y_add < 0) player[c2].y_add = 0; } } else { if (player[c2].y_add >= 0) { if (is_server) serverSendKillPacket(c2, c1); } else { if (player[c1].y_add < 0) player[c1].y_add = 0; } } } else { if (player[c1].x < player[c2].x) { if (player[c1].x_add > 0) player[c1].x = player[c2].x - (12L << 16); else if (player[c2].x_add < 0) player[c2].x = player[c1].x + (12L << 16); else { player[c1].x -= player[c1].x_add; player[c2].x -= player[c2].x_add; } l1 = player[c2].x_add; player[c2].x_add = player[c1].x_add; player[c1].x_add = l1; if (player[c1].x_add > 0) player[c1].x_add = -player[c1].x_add; if (player[c2].x_add < 0) player[c2].x_add = -player[c2].x_add; } else { if (player[c1].x_add > 0) player[c2].x = player[c1].x - (12L << 16); else if (player[c2].x_add < 0) player[c1].x = player[c2].x + (12L << 16); else { player[c1].x -= player[c1].x_add; player[c2].x -= player[c2].x_add; } l1 = player[c2].x_add; player[c2].x_add = player[c1].x_add; player[c1].x_add = l1; if (player[c1].x_add < 0) player[c1].x_add = -player[c1].x_add; if (player[c2].x_add > 0) player[c2].x_add = -player[c2].x_add; } } } } } dj_mix(); main_info.page_info[main_info.draw_page].num_pobs = 0; for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { if (player[c1].enabled == 1) main_info.page_info[main_info.draw_page].num_pobs++; } update_objects(); dj_mix(); if (flies_enabled) { /* get center of fly swarm */ s1 = s2 = 0; for (c1 = 0; c1 < NUM_FLIES; c1++) { s1 += flies[c1].x; s2 += flies[c1].y; } s1 /= NUM_FLIES; s2 /= NUM_FLIES; if (update_count == 1) { /* get closest player to fly swarm */ dist = 0x7fff; for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { if (player[c1].enabled == 1) { cur_dist = (int)sqrt((s1 - ((player[c1].x >> 16) + 8)) * (s1 - ((player[c1].x >> 16) + 8)) + (s2 - ((player[c1].y >> 16) + 8)) * (s2 - ((player[c1].y >> 16) + 8))); if (cur_dist < dist) { closest_player = c1; dist = cur_dist; } } } /* update fly swarm sound */ s3 = 32 - dist / 3; if (s3 < 0) s3 = 0; dj_set_sfx_channel_volume(4, (char)(s3)); } for (c1 = 0; c1 < NUM_FLIES; c1++) { /* get closest player to fly */ dist = 0x7fff; for (c2 = 0; c2 < JNB_MAX_PLAYERS; c2++) { if (player[c2].enabled == 1) { cur_dist = (int)sqrt((flies[c1].x - ((player[c2].x >> 16) + 8)) * (flies[c1].x - ((player[c2].x >> 16) + 8)) + (flies[c1].y - ((player[c2].y >> 16) + 8)) * (flies[c1].y - ((player[c2].y >> 16) + 8))); if (cur_dist < dist) { closest_player = c2; dist = cur_dist; } } } flies[c1].old_x = flies[c1].x; flies[c1].old_y = flies[c1].y; s3 = 0; if ((s1 - flies[c1].x) > 30) s3 += 1; else if ((s1 - flies[c1].x) < -30) s3 -= 1; if (dist < 30) { if (((player[closest_player].x >> 16) + 8) > flies[c1].x) { if (lord_of_the_flies == 0) s3 -= 1; else s3 += 1; } else { if (lord_of_the_flies == 0) s3 += 1; else s3 -= 1; } } s4 = rnd(3) - 1 + s3; if ((flies[c1].x + s4) < 16) s4 = 0; if ((flies[c1].x + s4) > 351) s4 = 0; if (ban_map[flies[c1].y >> 4][(flies[c1].x + s4) >> 4] != BAN_VOID) s4 = 0; flies[c1].x += s4; s3 = 0; if ((s2 - flies[c1].y) > 30) s3 += 1; else if ((s2 - flies[c1].y) < -30) s3 -= 1; if (dist < 30) { if (((player[closest_player].y >> 16) + 8) > flies[c1].y) { if (lord_of_the_flies == 0) s3 -= 1; else s3 += 1; } else { if (lord_of_the_flies == 0) s3 += 1; else s3 -= 1; } } s4 = rnd(3) - 1 + s3; if ((flies[c1].y + s4) < 0) s4 = 0; if ((flies[c1].y + s4) > 239) s4 = 0; if (ban_map[(flies[c1].y + s4) >> 4][flies[c1].x >> 4] != BAN_VOID) s4 = 0; flies[c1].y += s4; } } dj_mix(); s1 = 0; for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { if (player[c1].enabled == 1) { main_info.page_info[main_info.draw_page].pobs[s1].x = player[c1].x >> 16; main_info.page_info[main_info.draw_page].pobs[s1].y = player[c1].y >> 16; main_info.page_info[main_info.draw_page].pobs[s1].image = player[c1].image + c1 * 18; main_info.page_info[main_info.draw_page].pobs[s1].pob_data = &rabbit_gobs; s1++; } } if (update_count == 1) { draw_begin(); draw_pobs(main_info.draw_page); dj_mix(); if (flies_enabled) draw_flies(main_info.draw_page); draw_end(); } if (mod_fade_direction == 1) { if (mod_vol < 30) { mod_vol++; dj_set_mod_volume((char)mod_vol); } } else { if (mod_vol > 0) { mod_vol--; dj_set_mod_volume((char)mod_vol); } } if (mod_fade_direction == 1) { if (sfx_vol < 64) { sfx_vol++; dj_set_sfx_volume((char)sfx_vol); } } else { if (sfx_vol > 0) { sfx_vol--; dj_set_sfx_volume((char)sfx_vol); } } fade_flag = 0; for (c1 = 0; c1 < 768; c1++) { if (cur_pal[c1] < pal[c1]) { cur_pal[c1]++; fade_flag = 1; } else if (cur_pal[c1] > pal[c1]) { cur_pal[c1]--; fade_flag = 1; } } if (fade_flag == 0 && end_loop_flag == 1) break; if (update_count == 1) { main_info.draw_page ^= 1; main_info.view_page ^= 1; flippage(main_info.view_page); wait_vrt(1); } if (fade_flag == 1) setpalette(0, 256, cur_pal); if (update_count == 1) { draw_begin(); if (flies_enabled) redraw_flies_background(main_info.draw_page); redraw_pob_backgrounds(main_info.draw_page); draw_leftovers(main_info.draw_page); draw_end(); } update_count--; } #ifdef USE_NET if (is_net) { if ( (player[client_player_num].dead_flag == 0) && ( (player[client_player_num].action_left) || (player[client_player_num].action_right) || (player[client_player_num].action_up) || (player[client_player_num].jump_ready == 0) ) ) { tellServerNewPosition(); } } #endif update_count = intr_sysupdate(); #ifdef USE_NET if (is_net) { if ((server_said_bye) || ((fade_flag == 0) && (end_loop_flag == 1))) break; } else #endif if ((fade_flag == 0) && (end_loop_flag == 1)) break; } #ifdef USE_NET if (is_net) { if (is_server) { serverTellEveryoneGoodbye(); SDLNet_TCP_Close(sock); sock = NULL; } else { if (!server_said_bye) { tellServerGoodbye(); } SDLNet_TCP_Close(sock); sock = NULL; } } #endif main_info.view_page = 0; main_info.draw_page = 1; dj_stop_sfx_channel(4); deinit_level(); memset(mask_pic, 0, JNB_WIDTH*JNB_HEIGHT); register_mask(mask_pic); register_background(NULL, NULL); draw_begin(); put_text(main_info.view_page, 100, 50, "DOTT", 2); put_text(main_info.view_page, 160, 50, "JIFFY", 2); put_text(main_info.view_page, 220, 50, "FIZZ", 2); put_text(main_info.view_page, 280, 50, "MIJJI", 2); put_text(main_info.view_page, 40, 80, "DOTT", 2); put_text(main_info.view_page, 40, 110, "JIFFY", 2); put_text(main_info.view_page, 40, 140, "FIZZ", 2); put_text(main_info.view_page, 40, 170, "MIJJI", 2); for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { for (c2 = 0; c2 < JNB_MAX_PLAYERS; c2++) { if (c2 != c1) { sprintf(str1, "%d", player[c1].bumped[c2]); put_text(main_info.view_page, 100 + c2 * 60, 80 + c1 * 30, str1, 2); } else put_text(main_info.view_page, 100 + c2 * 60, 80 + c1 * 30, "-", 2); } sprintf(str1, "%d", player[c1].bumps); put_text(main_info.view_page, 350, 80 + c1 * 30, str1, 2); } put_text(main_info.view_page, 200, 230, "Press ESC to continue", 2); draw_end(); flippage(main_info.view_page); if ((handle = dat_open("menu.pcx")) == 0) { strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); return 1; } if (read_pcx(handle, background_pic, JNB_WIDTH*JNB_HEIGHT, pal) != 0) { strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); return 1; } /* fix dark font */ for (c1 = 0; c1 < 16; c1++) { pal[(240 + c1) * 3 + 0] = c1 << 2; pal[(240 + c1) * 3 + 1] = c1 << 2; pal[(240 + c1) * 3 + 2] = c1 << 2; } memset(cur_pal, 0, 768); setpalette(0, 256, cur_pal); mod_vol = 0; dj_ready_mod(MOD_SCORES); dj_set_mod_volume((char)mod_vol); dj_start_mod(); dj_set_nosound(0); while (key_pressed(1) == 0) { if (mod_vol < 35) mod_vol++; dj_set_mod_volume((char)mod_vol); for (c1 = 0; c1 < 768; c1++) { if (cur_pal[c1] < pal[c1]) cur_pal[c1]++; } dj_mix(); intr_sysupdate(); wait_vrt(0); setpalette(0, 256, cur_pal); flippage(main_info.view_page); } while (key_pressed(1) == 1) { dj_mix(); intr_sysupdate(); } memset(pal, 0, 768); while (mod_vol > 0) { mod_vol--; dj_set_mod_volume((char)mod_vol); for (c1 = 0; c1 < 768; c1++) { if (cur_pal[c1] > pal[c1]) cur_pal[c1]--; } dj_mix(); wait_vrt(0); setpalette(0, 256, cur_pal); flippage(main_info.view_page); } fillpalette(0, 0, 0); dj_set_nosound(1); dj_stop_mod(); if (is_net) break; /* don't go back to menu if in net game. */ } deinit_program(); return 0; } int map_tile(int pos_x, int pos_y) { int tile; pos_x = pos_x >> 4; pos_y = pos_y >> 4; if(pos_x < 0 || pos_x >= 17 || pos_y < 0 || pos_y >= 22) return BAN_VOID; tile = ban_map[pos_y][pos_x]; return tile; } void cpu_move(void) { int lm, rm, jm; int i, j; int cur_posx, cur_posy, tar_posx, tar_posy; int players_distance; player_t* target = NULL; int nearest_distance = -1; for (i = 0; i < JNB_MAX_PLAYERS; i++) { nearest_distance = -1; if(ai[i] && player[i].enabled) // this player is a computer { // get nearest target for (j = 0; j < JNB_MAX_PLAYERS; j++) { int deltax, deltay; if(i == j || !player[j].enabled) continue; deltax = player[j].x - player[i].x; deltay = player[j].y - player[i].y; players_distance = deltax*deltax + deltay*deltay; if (players_distance < nearest_distance || nearest_distance == -1) { target = &player[j]; nearest_distance = players_distance; } } if(target == NULL) continue; cur_posx = player[i].x >> 16; cur_posy = player[i].y >> 16; tar_posx = target->x >> 16; tar_posy = target->y >> 16; /** nearest player found, get him */ /* here goes the artificial intelligence code */ /* X-axis movement */ if(tar_posx > cur_posx) // if true target is on the right side { // go after him lm=0; rm=1; } else // target on the left side { lm=1; rm=0; } if(cur_posy - tar_posy < 32 && cur_posy - tar_posy > 0 && tar_posx - cur_posx < 32+8 && tar_posx - cur_posx > -32) { lm = !lm; rm = !rm; } else if(tar_posx - cur_posx < 4+8 && tar_posx - cur_posx > -4) { // makes the bunnies less "nervous" lm=0; lm=0; } /* Y-axis movement */ if(map_tile(cur_posx, cur_posy+16) != BAN_VOID && ((i == 0 && key_pressed(KEY_PL1_JUMP)) || (i == 1 && key_pressed(KEY_PL2_JUMP)) || (i == 2 && key_pressed(KEY_PL3_JUMP)) || (i == 3 && key_pressed(KEY_PL4_JUMP)))) jm=0; // if we are on ground and jump key is being pressed, //first we have to release it or else we won't be able to jump more than once else if(map_tile(cur_posx, cur_posy-8) != BAN_VOID && map_tile(cur_posx, cur_posy-8) != BAN_WATER) jm=0; // don't jump if there is something over it else if(map_tile(cur_posx-(lm*8)+(rm*16), cur_posy) != BAN_VOID && map_tile(cur_posx-(lm*8)+(rm*16), cur_posy) != BAN_WATER && cur_posx > 16 && cur_posx < 352-16-8) // obstacle, jump jm=1; // if there is something on the way, jump over it else if(((i == 0 && key_pressed(KEY_PL1_JUMP)) || (i == 1 && key_pressed(KEY_PL2_JUMP)) || (i == 2 && key_pressed(KEY_PL3_JUMP)) || (i == 3 && key_pressed(KEY_PL4_JUMP))) && (map_tile(cur_posx-(lm*8)+(rm*16), cur_posy+8) != BAN_VOID && map_tile(cur_posx-(lm*8)+(rm*16), cur_posy+8) != BAN_WATER)) jm=1; // this makes it possible to jump over 2 tiles else if(cur_posy - tar_posy < 32 && cur_posy - tar_posy > 0 && tar_posx - cur_posx < 32+8 && tar_posx - cur_posx > -32) // don't jump - running away jm=0; else if(tar_posy <= cur_posy) // target on the upper side jm=1; else // target below jm=0; /** Artificial intelligence done, now apply movements */ if(lm) { SDLKey key; if(i == 0) key = KEY_PL1_LEFT; else if(i == 1) key = KEY_PL2_LEFT; else if(i == 2) key = KEY_PL3_LEFT; else key = KEY_PL4_LEFT; key &= 0x7f; addkey(key); } else { SDLKey key; if(i == 0) key = KEY_PL1_LEFT; else if(i == 1) key = KEY_PL2_LEFT; else if(i == 2) key = KEY_PL3_LEFT; else key = KEY_PL4_LEFT; key &= 0x7f; addkey(key | 0x8000); } if(rm) { SDLKey key; if(i == 0) key = KEY_PL1_RIGHT; else if(i == 1) key = KEY_PL2_RIGHT; else if(i == 2) key = KEY_PL3_RIGHT; else key = KEY_PL4_RIGHT; key &= 0x7f; addkey(key); } else { SDLKey key; if(i == 0) key = KEY_PL1_RIGHT; else if(i == 1) key = KEY_PL2_RIGHT; else if(i == 2) key = KEY_PL3_RIGHT; else key = KEY_PL4_RIGHT; key &= 0x7f; addkey(key | 0x8000); } if(jm) { SDLKey key; if(i == 0) key = KEY_PL1_JUMP; else if(i == 1) key = KEY_PL2_JUMP; else if(i == 2) key = KEY_PL3_JUMP; else key = KEY_PL4_JUMP; key &= 0x7f; addkey(key); } else { SDLKey key; if(i == 0) key = KEY_PL1_JUMP; else if(i == 1) key = KEY_PL2_JUMP; else if(i == 2) key = KEY_PL3_JUMP; else key = KEY_PL4_JUMP; key &= 0x7f; addkey(key | 0x8000); } } } } void steer_players(void) { int c1, c2; int s1 = 0, s2 = 0; cpu_move(); update_player_actions(); for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { if (player[c1].enabled == 1) { if (player[c1].dead_flag == 0) { if (player[c1].action_left && player[c1].action_right) { if (player[c1].direction == 0) { if (player[c1].action_right) { s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_ICE) { if (player[c1].x_add < 0) player[c1].x_add += 1024; else player[c1].x_add += 768; } else if ((ban_map[(s2 + 16) >> 4][s1 >> 4] != BAN_SOLID && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == BAN_ICE) || (ban_map[(s2 + 16) >> 4][s1 >> 4] == BAN_ICE && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != BAN_SOLID)) { if (player[c1].x_add > 0) player[c1].x_add += 1024; else player[c1].x_add += 768; } else { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if (player[c1].x_add < 98304L && player[c1].in_water == 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_SOLID) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add += 12288; } if (player[c1].x_add > 98304L) player[c1].x_add = 98304L; player[c1].direction = 0; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } } else { if (player[c1].action_left) { s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_ICE) { if (player[c1].x_add > 0) player[c1].x_add -= 1024; else player[c1].x_add -= 768; } else if ((ban_map[(s2 + 16) >> 4][s1 >> 4] != BAN_SOLID && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == BAN_ICE) || (ban_map[(s2 + 16) >> 4][s1 >> 4] == BAN_ICE && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != BAN_SOLID)) { if (player[c1].x_add > 0) player[c1].x_add -= 1024; else player[c1].x_add -= 768; } else { if (player[c1].x_add > 0) { player[c1].x_add -= 16384; if (player[c1].x_add > -98304L && player[c1].in_water == 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_SOLID) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add -= 12288; } if (player[c1].x_add < -98304L) player[c1].x_add = -98304L; player[c1].direction = 1; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } } } else if (player[c1].action_left) { s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_ICE) { if (player[c1].x_add > 0) player[c1].x_add -= 1024; else player[c1].x_add -= 768; } else if ((ban_map[(s2 + 16) >> 4][s1 >> 4] != BAN_SOLID && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == BAN_ICE) || (ban_map[(s2 + 16) >> 4][s1 >> 4] == BAN_ICE && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != BAN_SOLID)) { if (player[c1].x_add > 0) player[c1].x_add -= 1024; else player[c1].x_add -= 768; } else { if (player[c1].x_add > 0) { player[c1].x_add -= 16384; if (player[c1].x_add > -98304L && player[c1].in_water == 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_SOLID) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add -= 12288; } if (player[c1].x_add < -98304L) player[c1].x_add = -98304L; player[c1].direction = 1; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } else if (player[c1].action_right) { s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_ICE) { if (player[c1].x_add < 0) player[c1].x_add += 1024; else player[c1].x_add += 768; } else if ((ban_map[(s2 + 16) >> 4][s1 >> 4] != BAN_SOLID && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == BAN_ICE) || (ban_map[(s2 + 16) >> 4][s1 >> 4] == BAN_ICE && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != BAN_SOLID)) { if (player[c1].x_add > 0) player[c1].x_add += 1024; else player[c1].x_add += 768; } else { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if (player[c1].x_add < 98304L && player[c1].in_water == 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_SOLID) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add += 12288; } if (player[c1].x_add > 98304L) player[c1].x_add = 98304L; player[c1].direction = 0; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } else if ((!player[c1].action_left) && (!player[c1].action_right)) { s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_SOLID || ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_SPRING || (((ban_map[(s2 + 16) >> 4][s1 >> 4] == BAN_SOLID || ban_map[(s2 + 16) >> 4][s1 >> 4] == BAN_SPRING) && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != BAN_ICE) || (ban_map[(s2 + 16) >> 4][s1 >> 4] != BAN_ICE && (ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == BAN_SPRING)))) { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if (player[c1].x_add > 0) player[c1].x_add = 0; } else { player[c1].x_add -= 16384; if (player[c1].x_add < 0) player[c1].x_add = 0; } if (player[c1].x_add != 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == BAN_SOLID) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } if (player[c1].anim == 1) { player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } if (jetpack == 0) { if (pogostick == 1 || (player[c1].jump_ready == 1 && player[c1].action_up)) { s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (s2 < -16) s2 = -16; if (ban_map[(s2 + 16) >> 4][s1 >> 4] == BAN_SOLID || ban_map[(s2 + 16) >> 4][s1 >> 4] == BAN_ICE || ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == BAN_ICE) { player[c1].y_add = -280000L; player[c1].anim = 2; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; player[c1].jump_ready = 0; player[c1].jump_abort = 1; if (pogostick == 0) dj_play_sfx(SFX_JUMP, (unsigned short)(SFX_JUMP_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); else dj_play_sfx(SFX_SPRING, (unsigned short)(SFX_SPRING_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); } if ((ban_map[(s2 + 7) >> 4][s1 >> 4] == BAN_VOID || ban_map[(s2 + 7) >> 4][(s1 + 15) >> 4] == BAN_VOID) && (ban_map[(s2 + 8) >> 4][s1 >> 4] == BAN_WATER || ban_map[(s2 + 8) >> 4][(s1 + 15) >> 4] == BAN_WATER)) { player[c1].y_add = -196608L; player[c1].in_water = 0; player[c1].anim = 2; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; player[c1].jump_ready = 0; player[c1].jump_abort = 1; if (pogostick == 0) dj_play_sfx(SFX_JUMP, (unsigned short)(SFX_JUMP_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); else dj_play_sfx(SFX_SPRING, (unsigned short)(SFX_SPRING_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); } } if (pogostick == 0 && (!player[c1].action_up)) { player[c1].jump_ready = 1; if (player[c1].in_water == 0 && player[c1].y_add < 0 && player[c1].jump_abort == 1) { if (bunnies_in_space == 0) player[c1].y_add += 32768; else player[c1].y_add += 16384; if (player[c1].y_add > 0) player[c1].y_add = 0; } } } else { if (player[c1].action_up) { player[c1].y_add -= 16384; if (player[c1].y_add < -400000L) player[c1].y_add = -400000L; if ((ban_map[(s2 + 7) >> 4][s1 >> 4] == BAN_VOID || ban_map[(s2 + 7) >> 4][(s1 + 15) >> 4] == BAN_VOID) && (ban_map[(s2 + 8) >> 4][s1 >> 4] == BAN_WATER || ban_map[(s2 + 8) >> 4][(s1 + 15) >> 4] == BAN_WATER)) player[c1].in_water = 0; if (rnd(100) < 50) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 6 + rnd(5), (player[c1].y >> 16) + 10 + rnd(5), 0, 16384 + rnd(8192), OBJ_ANIM_SMOKE, 0); } } player[c1].x += player[c1].x_add; if ((player[c1].x >> 16) < 0) { player[c1].x = 0; player[c1].x_add = 0; } if ((player[c1].x >> 16) + 15 > 351) { player[c1].x = 336L << 16; player[c1].x_add = 0; } if (player[c1].y > 0) { s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (ban_map[s2 >> 4][s1 >> 4] == BAN_SOLID || ban_map[s2 >> 4][s1 >> 4] == BAN_ICE || ban_map[s2 >> 4][s1 >> 4] == BAN_SPRING || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SOLID || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_ICE || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SPRING) { player[c1].x = (((s1 + 16) & 0xfff0)) << 16; player[c1].x_add = 0; } s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_ICE || ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_SPRING || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_ICE || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SPRING) { player[c1].x = (((s1 + 16) & 0xfff0) - 16) << 16; player[c1].x_add = 0; } } else { s1 = (player[c1].x >> 16); s2 = 0; if (ban_map[s2 >> 4][s1 >> 4] == BAN_SOLID || ban_map[s2 >> 4][s1 >> 4] == BAN_ICE || ban_map[s2 >> 4][s1 >> 4] == BAN_SPRING || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SOLID || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_ICE || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SPRING) { player[c1].x = (((s1 + 16) & 0xfff0)) << 16; player[c1].x_add = 0; } s1 = (player[c1].x >> 16); s2 = 0; if (ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_ICE || ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_SPRING || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_ICE || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SPRING) { player[c1].x = (((s1 + 16) & 0xfff0) - 16) << 16; player[c1].x_add = 0; } } player[c1].y += player[c1].y_add; s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (ban_map[(s2 + 15) >> 4][(s1 + 8) >> 4] == BAN_SPRING || ((ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SPRING && ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] != BAN_SOLID) || (ban_map[(s2 + 15) >> 4][s1 >> 4] != BAN_SOLID && ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SPRING))) { player[c1].y = ((player[c1].y >> 16) & 0xfff0) << 16; player[c1].y_add = -400000L; player[c1].anim = 2; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; player[c1].jump_ready = 0; player[c1].jump_abort = 0; for (c2 = 0; c2 < NUM_OBJECTS; c2++) { if (objects[c2].used == 1 && objects[c2].type == OBJ_SPRING) { if (ban_map[(s2 + 15) >> 4][(s1 + 8) >> 4] == BAN_SPRING) { if ((objects[c2].x >> 20) == ((s1 + 8) >> 4) && (objects[c2].y >> 20) == ((s2 + 15) >> 4)) { objects[c2].frame = 0; objects[c2].ticks = object_anims[objects[c2].anim].frame[objects[c2].frame].ticks; objects[c2].image = object_anims[objects[c2].anim].frame[objects[c2].frame].image; break; } } else { if (ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SPRING) { if ((objects[c2].x >> 20) == (s1 >> 4) && (objects[c2].y >> 20) == ((s2 + 15) >> 4)) { objects[c2].frame = 0; objects[c2].ticks = object_anims[objects[c2].anim].frame[objects[c2].frame].ticks; objects[c2].image = object_anims[objects[c2].anim].frame[objects[c2].frame].image; break; } } else if (ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SPRING) { if ((objects[c2].x >> 20) == ((s1 + 15) >> 4) && (objects[c2].y >> 20) == ((s2 + 15) >> 4)) { objects[c2].frame = 0; objects[c2].ticks = object_anims[objects[c2].anim].frame[objects[c2].frame].ticks; objects[c2].image = object_anims[objects[c2].anim].frame[objects[c2].frame].image; break; } } } } } dj_play_sfx(SFX_SPRING, (unsigned short)(SFX_SPRING_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); } s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (s2 < 0) s2 = 0; if (ban_map[s2 >> 4][s1 >> 4] == BAN_SOLID || ban_map[s2 >> 4][s1 >> 4] == BAN_ICE || ban_map[s2 >> 4][s1 >> 4] == BAN_SPRING || ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_ICE || ban_map[s2 >> 4][(s1 + 15) >> 4] == BAN_SPRING) { player[c1].y = (((s2 + 16) & 0xfff0)) << 16; player[c1].y_add = 0; player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } s1 = (player[c1].x >> 16); s2 = (player[c1].y >> 16); if (s2 < 0) s2 = 0; if (ban_map[(s2 + 8) >> 4][(s1 + 8) >> 4] == BAN_WATER) { if (player[c1].in_water == 0) { player[c1].in_water = 1; player[c1].anim = 4; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; if (player[c1].y_add >= 32768) { add_object(OBJ_SPLASH, (player[c1].x >> 16) + 8, ((player[c1].y >> 16) & 0xfff0) + 15, 0, 0, OBJ_ANIM_SPLASH, 0); if (blood_is_thicker_than_water == 0) dj_play_sfx(SFX_SPLASH, (unsigned short)(SFX_SPLASH_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); else dj_play_sfx(SFX_SPLASH, (unsigned short)(SFX_SPLASH_FREQ + rnd(2000) - 5000), 64, 0, 0, -1); } } player[c1].y_add -= 1536; if (player[c1].y_add < 0 && player[c1].anim != 5) { player[c1].anim = 5; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } if (player[c1].y_add < -65536L) player[c1].y_add = -65536L; if (player[c1].y_add > 65535L) player[c1].y_add = 65535L; if (ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SOLID || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_ICE || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_ICE) { player[c1].y = (((s2 + 16) & 0xfff0) - 16) << 16; player[c1].y_add = 0; } } else if (ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SOLID || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_ICE || ban_map[(s2 + 15) >> 4][s1 >> 4] == BAN_SPRING || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SOLID || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_ICE || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == BAN_SPRING) { player[c1].in_water = 0; player[c1].y = (((s2 + 16) & 0xfff0) - 16) << 16; player[c1].y_add = 0; if (player[c1].anim != 0 && player[c1].anim != 1) { player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } else { if (player[c1].in_water == 0) { if (bunnies_in_space == 0) player[c1].y_add += 12288; else player[c1].y_add += 6144; if (player[c1].y_add > 327680L) player[c1].y_add = 327680L; } else { player[c1].y = (player[c1].y & 0xffff0000) + 0x10000; player[c1].y_add = 0; } player[c1].in_water = 0; } if (player[c1].y_add > 36864 && player[c1].anim != 3 && player[c1].in_water == 0) { player[c1].anim = 3; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } player[c1].frame_tick++; if (player[c1].frame_tick >= player_anims[player[c1].anim].frame[player[c1].frame].ticks) { player[c1].frame++; if (player[c1].frame >= player_anims[player[c1].anim].num_frames) { if (player[c1].anim != 6) player[c1].frame = player_anims[player[c1].anim].restart_frame; else position_player(c1); } player[c1].frame_tick = 0; } player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } } void position_player(int player_num) { int c1; int s1, s2; while (1) { while (1) { s1 = rnd(22); s2 = rnd(16); if (ban_map[s2][s1] == BAN_VOID && (ban_map[s2 + 1][s1] == BAN_SOLID || ban_map[s2 + 1][s1] == BAN_ICE)) break; } for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { if (c1 != player_num && player[c1].enabled == 1) { if (abs((s1 << 4) - (player[c1].x >> 16)) < 32 && abs((s2 << 4) - (player[c1].y >> 16)) < 32) break; } } if (c1 == JNB_MAX_PLAYERS) { player[player_num].x = (long) s1 << 20; player[player_num].y = (long) s2 << 20; player[player_num].x_add = player[player_num].y_add = 0; player[player_num].direction = 0; player[player_num].jump_ready = 1; player[player_num].in_water = 0; player[player_num].anim = 0; player[player_num].frame = 0; player[player_num].frame_tick = 0; player[player_num].image = player_anims[player[player_num].anim].frame[player[player_num].frame].image; if (is_server) { #ifdef USE_NET if (is_net) serverSendAlive(player_num); #endif player[player_num].dead_flag = 0; } break; } } } void add_object(int type, int x, int y, int x_add, int y_add, int anim, int frame) { int c1; for (c1 = 0; c1 < NUM_OBJECTS; c1++) { if (objects[c1].used == 0) { objects[c1].used = 1; objects[c1].type = type; objects[c1].x = (long) x << 16; objects[c1].y = (long) y << 16; objects[c1].x_add = x_add; objects[c1].y_add = y_add; objects[c1].x_acc = 0; objects[c1].y_acc = 0; objects[c1].anim = anim; objects[c1].frame = frame; objects[c1].ticks = object_anims[anim].frame[frame].ticks; objects[c1].image = object_anims[anim].frame[frame].image; break; } } } void update_objects(void) { int c1; int s1 = 0; for (c1 = 0; c1 < NUM_OBJECTS; c1++) { if (objects[c1].used == 1) { switch (objects[c1].type) { case OBJ_SPRING: objects[c1].ticks--; if (objects[c1].ticks <= 0) { objects[c1].frame++; if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) { objects[c1].frame--; objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; } else { objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } } if (objects[c1].used == 1) add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, &object_gobs); break; case OBJ_SPLASH: objects[c1].ticks--; if (objects[c1].ticks <= 0) { objects[c1].frame++; if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) objects[c1].used = 0; else { objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } } if (objects[c1].used == 1) add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, &object_gobs); break; case OBJ_SMOKE: objects[c1].x += objects[c1].x_add; objects[c1].y += objects[c1].y_add; objects[c1].ticks--; if (objects[c1].ticks <= 0) { objects[c1].frame++; if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) objects[c1].used = 0; else { objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } } if (objects[c1].used == 1) add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, &object_gobs); break; case OBJ_YEL_BUTFLY: case OBJ_PINK_BUTFLY: objects[c1].x_acc += rnd(128) - 64; if (objects[c1].x_acc < -1024) objects[c1].x_acc = -1024; if (objects[c1].x_acc > 1024) objects[c1].x_acc = 1024; objects[c1].x_add += objects[c1].x_acc; if (objects[c1].x_add < -32768) objects[c1].x_add = -32768; if (objects[c1].x_add > 32768) objects[c1].x_add = 32768; objects[c1].x += objects[c1].x_add; if ((objects[c1].x >> 16) < 16) { objects[c1].x = 16 << 16; objects[c1].x_add = -objects[c1].x_add >> 2; objects[c1].x_acc = 0; } else if ((objects[c1].x >> 16) > 350) { objects[c1].x = 350 << 16; objects[c1].x_add = -objects[c1].x_add >> 2; objects[c1].x_acc = 0; } if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 0) { if (objects[c1].x_add < 0) { objects[c1].x = (((objects[c1].x >> 16) + 16) & 0xfff0) << 16; } else { objects[c1].x = ((((objects[c1].x >> 16) - 16) & 0xfff0) + 15) << 16; } objects[c1].x_add = -objects[c1].x_add >> 2; objects[c1].x_acc = 0; } objects[c1].y_acc += rnd(64) - 32; if (objects[c1].y_acc < -1024) objects[c1].y_acc = -1024; if (objects[c1].y_acc > 1024) objects[c1].y_acc = 1024; objects[c1].y_add += objects[c1].y_acc; if (objects[c1].y_add < -32768) objects[c1].y_add = -32768; if (objects[c1].y_add > 32768) objects[c1].y_add = 32768; objects[c1].y += objects[c1].y_add; if ((objects[c1].y >> 16) < 0) { objects[c1].y = 0; objects[c1].y_add = -objects[c1].y_add >> 2; objects[c1].y_acc = 0; } else if ((objects[c1].y >> 16) > 255) { objects[c1].y = 255 << 16; objects[c1].y_add = -objects[c1].y_add >> 2; objects[c1].y_acc = 0; } if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 0) { if (objects[c1].y_add < 0) { objects[c1].y = (((objects[c1].y >> 16) + 16) & 0xfff0) << 16; } else { objects[c1].y = ((((objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; } objects[c1].y_add = -objects[c1].y_add >> 2; objects[c1].y_acc = 0; } if (objects[c1].type == OBJ_YEL_BUTFLY) { if (objects[c1].x_add < 0 && objects[c1].anim != OBJ_ANIM_YEL_BUTFLY_LEFT) { objects[c1].anim = OBJ_ANIM_YEL_BUTFLY_LEFT; objects[c1].frame = 0; objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } else if (objects[c1].x_add > 0 && objects[c1].anim != OBJ_ANIM_YEL_BUTFLY_RIGHT) { objects[c1].anim = OBJ_ANIM_YEL_BUTFLY_RIGHT; objects[c1].frame = 0; objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } } else { if (objects[c1].x_add < 0 && objects[c1].anim != OBJ_ANIM_PINK_BUTFLY_LEFT) { objects[c1].anim = OBJ_ANIM_PINK_BUTFLY_LEFT; objects[c1].frame = 0; objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } else if (objects[c1].x_add > 0 && objects[c1].anim != OBJ_ANIM_PINK_BUTFLY_RIGHT) { objects[c1].anim = OBJ_ANIM_PINK_BUTFLY_RIGHT; objects[c1].frame = 0; objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } } objects[c1].ticks--; if (objects[c1].ticks <= 0) { objects[c1].frame++; if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) objects[c1].frame = object_anims[objects[c1].anim].restart_frame; else { objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } } if (objects[c1].used == 1) add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, &object_gobs); break; case OBJ_FUR: if (rnd(100) < 30) add_object(OBJ_FLESH_TRACE, objects[c1].x >> 16, objects[c1].y >> 16, 0, 0, OBJ_ANIM_FLESH_TRACE, 0); if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 0) { objects[c1].y_add += 3072; if (objects[c1].y_add > 196608L) objects[c1].y_add = 196608L; } else if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 2) { if (objects[c1].x_add < 0) { if (objects[c1].x_add < -65536L) objects[c1].x_add = -65536L; objects[c1].x_add += 1024; if (objects[c1].x_add > 0) objects[c1].x_add = 0; } else { if (objects[c1].x_add > 65536L) objects[c1].x_add = 65536L; objects[c1].x_add -= 1024; if (objects[c1].x_add < 0) objects[c1].x_add = 0; } objects[c1].y_add += 1024; if (objects[c1].y_add < -65536L) objects[c1].y_add = -65536L; if (objects[c1].y_add > 65536L) objects[c1].y_add = 65536L; } objects[c1].x += objects[c1].x_add; if ((objects[c1].y >> 16) > 0 && (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 1 || ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 3)) { if (objects[c1].x_add < 0) { objects[c1].x = (((objects[c1].x >> 16) + 16) & 0xfff0) << 16; objects[c1].x_add = -objects[c1].x_add >> 2; } else { objects[c1].x = ((((objects[c1].x >> 16) - 16) & 0xfff0) + 15) << 16; objects[c1].x_add = -objects[c1].x_add >> 2; } } objects[c1].y += objects[c1].y_add; if ((objects[c1].x >> 16) < -5 || (objects[c1].x >> 16) > 405 || (objects[c1].y >> 16) > 260) objects[c1].used = 0; if ((objects[c1].y >> 16) > 0 && (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 0)) { if (objects[c1].y_add < 0) { if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 2) { objects[c1].y = (((objects[c1].y >> 16) + 16) & 0xfff0) << 16; objects[c1].x_add >>= 2; objects[c1].y_add = -objects[c1].y_add >> 2; } } else { if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 1) { if (objects[c1].y_add > 131072L) { objects[c1].y = ((((objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; objects[c1].x_add >>= 2; objects[c1].y_add = -objects[c1].y_add >> 2; } else objects[c1].used = 0; } else if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 3) { objects[c1].y = ((((objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; if (objects[c1].y_add > 131072L) objects[c1].y_add = -objects[c1].y_add >> 2; else objects[c1].y_add = 0; } } } if (objects[c1].x_add < 0 && objects[c1].x_add > -16384) objects[c1].x_add = -16384; if (objects[c1].x_add > 0 && objects[c1].x_add < 16384) objects[c1].x_add = 16384; if (objects[c1].used == 1) { s1 = (int)(atan2(objects[c1].y_add, objects[c1].x_add) * 4 / M_PI); if (s1 < 0) s1 += 8; if (s1 < 0) s1 = 0; if (s1 > 7) s1 = 7; add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].frame + s1, &object_gobs); } break; case OBJ_FLESH: if (rnd(100) < 30) { if (objects[c1].frame == 76) add_object(OBJ_FLESH_TRACE, objects[c1].x >> 16, objects[c1].y >> 16, 0, 0, OBJ_ANIM_FLESH_TRACE, 1); else if (objects[c1].frame == 77) add_object(OBJ_FLESH_TRACE, objects[c1].x >> 16, objects[c1].y >> 16, 0, 0, OBJ_ANIM_FLESH_TRACE, 2); else if (objects[c1].frame == 78) add_object(OBJ_FLESH_TRACE, objects[c1].x >> 16, objects[c1].y >> 16, 0, 0, OBJ_ANIM_FLESH_TRACE, 3); } if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 0) { objects[c1].y_add += 3072; if (objects[c1].y_add > 196608L) objects[c1].y_add = 196608L; } else if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 2) { if (objects[c1].x_add < 0) { if (objects[c1].x_add < -65536L) objects[c1].x_add = -65536L; objects[c1].x_add += 1024; if (objects[c1].x_add > 0) objects[c1].x_add = 0; } else { if (objects[c1].x_add > 65536L) objects[c1].x_add = 65536L; objects[c1].x_add -= 1024; if (objects[c1].x_add < 0) objects[c1].x_add = 0; } objects[c1].y_add += 1024; if (objects[c1].y_add < -65536L) objects[c1].y_add = -65536L; if (objects[c1].y_add > 65536L) objects[c1].y_add = 65536L; } objects[c1].x += objects[c1].x_add; if ((objects[c1].y >> 16) > 0 && (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 1 || ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 3)) { if (objects[c1].x_add < 0) { objects[c1].x = (((objects[c1].x >> 16) + 16) & 0xfff0) << 16; objects[c1].x_add = -objects[c1].x_add >> 2; } else { objects[c1].x = ((((objects[c1].x >> 16) - 16) & 0xfff0) + 15) << 16; objects[c1].x_add = -objects[c1].x_add >> 2; } } objects[c1].y += objects[c1].y_add; if ((objects[c1].x >> 16) < -5 || (objects[c1].x >> 16) > 405 || (objects[c1].y >> 16) > 260) objects[c1].used = 0; if ((objects[c1].y >> 16) > 0 && (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 0)) { if (objects[c1].y_add < 0) { if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 2) { objects[c1].y = (((objects[c1].y >> 16) + 16) & 0xfff0) << 16; objects[c1].x_add >>= 2; objects[c1].y_add = -objects[c1].y_add >> 2; } } else { if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 1) { if (objects[c1].y_add > 131072L) { objects[c1].y = ((((objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; objects[c1].x_add >>= 2; objects[c1].y_add = -objects[c1].y_add >> 2; } else { if (rnd(100) < 10) { s1 = rnd(4) - 2; add_leftovers(0, objects[c1].x >> 16, (objects[c1].y >> 16) + s1, objects[c1].frame, &object_gobs); add_leftovers(1, objects[c1].x >> 16, (objects[c1].y >> 16) + s1, objects[c1].frame, &object_gobs); } objects[c1].used = 0; } } else if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 3) { objects[c1].y = ((((objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; if (objects[c1].y_add > 131072L) objects[c1].y_add = -objects[c1].y_add >> 2; else objects[c1].y_add = 0; } } } if (objects[c1].x_add < 0 && objects[c1].x_add > -16384) objects[c1].x_add = -16384; if (objects[c1].x_add > 0 && objects[c1].x_add < 16384) objects[c1].x_add = 16384; if (objects[c1].used == 1) add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].frame, &object_gobs); break; case OBJ_FLESH_TRACE: objects[c1].ticks--; if (objects[c1].ticks <= 0) { objects[c1].frame++; if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) objects[c1].used = 0; else { objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; } } if (objects[c1].used == 1) add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, &object_gobs); break; } } } } int add_pob(int page, int x, int y, int image, gob_t *pob_data) { if (main_info.page_info[page].num_pobs >= NUM_POBS) return 1; main_info.page_info[page].pobs[main_info.page_info[page].num_pobs].x = x; main_info.page_info[page].pobs[main_info.page_info[page].num_pobs].y = y; main_info.page_info[page].pobs[main_info.page_info[page].num_pobs].image = image; main_info.page_info[page].pobs[main_info.page_info[page].num_pobs].pob_data = pob_data; main_info.page_info[page].num_pobs++; return 0; } void draw_flies(int page) { int c2; for (c2 = 0; c2 < NUM_FLIES; c2++) { flies[c2].back[main_info.draw_page] = get_pixel(main_info.draw_page, flies[c2].x, flies[c2].y); flies[c2].back_defined[main_info.draw_page] = 1; if (mask_pic[(flies[c2].y * JNB_WIDTH) + flies[c2].x] == 0) set_pixel(main_info.draw_page, flies[c2].x, flies[c2].y, 0); } } void draw_pobs(int page) { int c1; int back_buf_ofs; back_buf_ofs = 0; for (c1 = main_info.page_info[page].num_pobs - 1; c1 >= 0; c1--) { main_info.page_info[page].pobs[c1].back_buf_ofs = back_buf_ofs; get_block(page, main_info.page_info[page].pobs[c1].x - pob_hs_x(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), main_info.page_info[page].pobs[c1].y - pob_hs_y(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), pob_width(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), pob_height(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), (unsigned char *)main_info.pob_backbuf[page] + back_buf_ofs); if (scale_up) back_buf_ofs += pob_width(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data) * pob_height(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data) * 4; else back_buf_ofs += pob_width(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data) * pob_height(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data); put_pob(page, main_info.page_info[page].pobs[c1].x, main_info.page_info[page].pobs[c1].y, main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data, 1, mask_pic); } } void redraw_flies_background(int page) { int c2; for (c2 = NUM_FLIES - 1; c2 >= 0; c2--) { if (flies[c2].back_defined[page] == 1) set_pixel(page, flies[c2].old_draw_x, flies[c2].old_draw_y, flies[c2].back[page]); flies[c2].old_draw_x = flies[c2].x; flies[c2].old_draw_y = flies[c2].y; } } void redraw_pob_backgrounds(int page) { int c1; for (c1 = 0; c1 < main_info.page_info[page].num_pobs; c1++) put_block(page, main_info.page_info[page].pobs[c1].x - pob_hs_x(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), main_info.page_info[page].pobs[c1].y - pob_hs_y(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), pob_width(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), pob_height(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), (unsigned char *)main_info.pob_backbuf[page] + main_info.page_info[page].pobs[c1].back_buf_ofs); } int add_leftovers(int page, int x, int y, int image, gob_t *pob_data) { if (leftovers.page[page].num_pobs >= NUM_LEFTOVERS) return 1; leftovers.page[page].pobs[leftovers.page[page].num_pobs].x = x; leftovers.page[page].pobs[leftovers.page[page].num_pobs].y = y; leftovers.page[page].pobs[leftovers.page[page].num_pobs].image = image; leftovers.page[page].pobs[leftovers.page[page].num_pobs].pob_data = pob_data; leftovers.page[page].num_pobs++; return 0; } void draw_leftovers(int page) { int c1; for (c1 = leftovers.page[page].num_pobs - 1; c1 >= 0; c1--) put_pob(page, leftovers.page[page].pobs[c1].x, leftovers.page[page].pobs[c1].y, leftovers.page[page].pobs[c1].image, leftovers.page[page].pobs[c1].pob_data, 1, mask_pic); leftovers.page[page].num_pobs = 0; } int init_level(int level, char *pal) { unsigned char *handle; int c1, c2; int s1, s2; if ((handle = dat_open("level.pcx")) == 0) { strcpy(main_info.error_str, "Error loading 'level.pcx', aborting...\n"); return 1; } if (read_pcx(handle, background_pic, JNB_WIDTH*JNB_HEIGHT, pal) != 0) { strcpy(main_info.error_str, "Error loading 'level.pcx', aborting...\n"); return 1; } if (flip) flip_pixels(background_pic); if ((handle = dat_open("mask.pcx")) == 0) { strcpy(main_info.error_str, "Error loading 'mask.pcx', aborting...\n"); return 1; } if (read_pcx(handle, mask_pic, JNB_WIDTH*JNB_HEIGHT, 0) != 0) { strcpy(main_info.error_str, "Error loading 'mask.pcx', aborting...\n"); return 1; } if (flip) flip_pixels(mask_pic); register_mask(mask_pic); for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { if (player[c1].enabled == 1) { player[c1].bumps = 0; for (c2 = 0; c2 < JNB_MAX_PLAYERS; c2++) player[c1].bumped[c2] = 0; position_player(c1); } } for (c1 = 0; c1 < NUM_OBJECTS; c1++) objects[c1].used = 0; for (c1 = 0; c1 < 16; c1++) { for (c2 = 0; c2 < 22; c2++) { if (ban_map[c1][c2] == BAN_SPRING) add_object(OBJ_SPRING, c2 << 4, c1 << 4, 0, 0, OBJ_ANIM_SPRING, 5); } } while (1) { s1 = rnd(22); s2 = rnd(16); if (ban_map[s2][s1] == BAN_VOID) { add_object(OBJ_YEL_BUTFLY, (s1 << 4) + 8, (s2 << 4) + 8, (rnd(65535) - 32768) * 2, (rnd(65535) - 32768) * 2, 0, 0); break; } } while (1) { s1 = rnd(22); s2 = rnd(16); if (ban_map[s2][s1] == BAN_VOID) { add_object(OBJ_YEL_BUTFLY, (s1 << 4) + 8, (s2 << 4) + 8, (rnd(65535) - 32768) * 2, (rnd(65535) - 32768) * 2, 0, 0); break; } } while (1) { s1 = rnd(22); s2 = rnd(16); if (ban_map[s2][s1] == BAN_VOID) { add_object(OBJ_PINK_BUTFLY, (s1 << 4) + 8, (s2 << 4) + 8, (rnd(65535) - 32768) * 2, (rnd(65535) - 32768) * 2, 0, 0); break; } } while (1) { s1 = rnd(22); s2 = rnd(16); if (ban_map[s2][s1] == BAN_VOID) { add_object(OBJ_PINK_BUTFLY, (s1 << 4) + 8, (s2 << 4) + 8, (rnd(65535) - 32768) * 2, (rnd(65535) - 32768) * 2, 0, 0); break; } } return 0; } void deinit_level(void) { dj_set_nosound(1); dj_stop_mod(); } #ifndef PATH_MAX #define PATH_MAX 1024 #endif #ifndef O_BINARY #define O_BINARY 0 #endif unsigned char *datafile_buffer = NULL; static void preread_datafile(const char *fname) { int fd = 0; int len; #ifdef ZLIB_SUPPORT char *gzfilename = alloca(strlen(fname) + 4); int bufsize = 0; int bufpos = 0; gzFile gzf; strcpy(gzfilename, fname); strcat(gzfilename, ".gz"); gzf = gzopen(gzfilename, "rb"); if (gzf != NULL) { unsigned char *ptr; do { int br; if (bufpos >= bufsize) { bufsize += 1024 * 1024; datafile_buffer = (unsigned char *) realloc(datafile_buffer, bufsize); if (datafile_buffer == NULL) { perror("realloc()"); exit(42); } } br = gzread(gzf, datafile_buffer + bufpos, bufsize - bufpos); if (br == -1) { fprintf(stderr, "gzread failed.\n"); exit(42); } bufpos += br; } while (!gzeof(gzf)); /* try to shrink buffer... */ ptr = (unsigned char *) realloc(datafile_buffer, bufpos); if (ptr != NULL) datafile_buffer = ptr; gzclose(gzf); return; } /* drop through and try for an uncompressed datafile... */ #endif fd = open(fname, O_RDONLY | O_BINARY); if (fd == -1) { fprintf(stderr, "can't open %s:", fname); perror(""); exit(42); } len = filelength(fd); datafile_buffer = (unsigned char *) malloc(len); if (datafile_buffer == NULL) { perror("malloc()"); close(fd); exit(42); } if (read(fd, datafile_buffer, len) != len) { perror("read()"); close(fd); exit(42); } close(fd); } int init_program(int argc, char *argv[], char *pal) { char *netarg = NULL; unsigned char *handle = (unsigned char *) NULL; int c1 = 0, c2 = 0; int load_flag = 0; int force2, force3; sfx_data fly; int player_anim_data[] = { 1, 0, 0, 0x7fff, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, 4, 2, 4, 3, 4, 1, 0, 4, 0x7fff, 0, 0, 0, 0, 0, 0, 4, 2, 5, 8, 6, 10, 7, 3, 6, 3, 1, 0, 6, 0x7fff, 0, 0, 0, 0, 0, 0, 2, 1, 5, 8, 4, 0x7fff, 0, 0, 0, 0, 1, 0, 8, 5, 0, 0, 0, 0, 0, 0 }; #ifdef USE_NET memset(&net_info, 0, sizeof(net_info)); #endif #ifdef DOS if (__djgpp_nearptr_enable() == 0) return 1; #endif srand(time(NULL)); if (hook_keyb_handler() != 0) return 1; memset(&main_info, 0, sizeof(main_info)); strcpy(datfile_name, DATA_PATH); force2 = force3 = 0; if (argc > 1) { for (c1 = 1; c1 < argc; c1++) { if (stricmp(argv[c1], "-nosound") == 0) main_info.no_sound = 1; else if (stricmp(argv[c1], "-musicnosound") == 0) main_info.music_no_sound = 1; else if (stricmp(argv[c1], "-nogore") == 0) main_info.no_gore = 1; else if (stricmp(argv[c1], "-noflies") == 0) flies_enabled = 0; else if (stricmp(argv[c1], "-nojoy") == 0) main_info.joy_enabled = 0; else if (stricmp(argv[c1], "-fireworks") == 0) main_info.fireworks = 1; #ifdef USE_SDL else if (stricmp(argv[c1], "-fullscreen") == 0) fs_toggle(); #endif else if (stricmp(argv[c1], "-scaleup") == 0) set_scaling(1); else if (stricmp(argv[c1], "-mirror") == 0) flip = 1; else if (stricmp(argv[c1], "-dat") == 0) { if (c1 < (argc - 1)) { FILE *f; if ((f = fopen(argv[c1 + 1], "rb")) != NULL) { fclose(f); strcpy(datfile_name, argv[c1 + 1]); } } } else if (stricmp(argv[c1], "-player") == 0) { if (c1 < (argc - 1)) { if (client_player_num < 0) client_player_num = atoi(argv[c1 + 1]); } #ifdef USE_NET } else if (stricmp(argv[c1], "-server") == 0) { if (c1 < (argc - 1)) { is_server = 1; is_net = 1; netarg = argv[c1 + 1]; } } else if (stricmp(argv[c1], "-connect") == 0) { if (c1 < (argc - 1)) { is_server = 0; is_net = 1; netarg = argv[c1 + 1]; } #endif } else if (stricmp(argv[c1], "-mouse") == 0) { if (c1 < (argc - 1)) { if (stricmp(argv[c1 + 1], "2") == 0) force2 = 1; if (stricmp(argv[c1 + 1], "3") == 0) force3 = 1; } } else if (strstr(argv[1],"-v")) { printf("jumpnbump %s compiled %s at %s with",JNB_VERSION,__DATE__,__TIME__); #ifndef USE_NET printf("out"); #endif printf(" network support.\n"); return 1; } else if (strstr(argv[1],"-h")) { printf("Usage: jumpnbump [OPTION]...\n"); printf("\n"); printf(" -h this help\n"); printf(" -v print version\n"); printf(" -dat level.dat play a different level\n"); #ifdef USE_NET printf(" -server playercount start as server waiting for players\n"); printf(" -connect host connect to server\n"); #endif printf(" -player num set main player to num (0-3). Needed for networking\n"); printf(" -fireworks screensaver mode\n"); printf(" -fullscreen run in fullscreen mode\n"); printf(" -nosound play without sound\n"); printf(" -nogore play without blood\n"); printf(" -noflies disable flies\n"); printf(" -mirror play with mirrored level\n"); printf(" -scaleup play with doubled resolution (800x512)\n"); printf(" -musicnosound play with music but without sound\n"); printf("\n"); return 1; } } } preread_datafile(datfile_name); #if 0 /** It should not be necessary to assign a default player number here. The server assigns one in init_server, the client gets one assigned by the server, all provided the user didn't choose one on the commandline. */ if (is_net) { if (client_player_num < 0) client_player_num = 0; player[client_player_num].enabled = 1; } #endif main_info.pob_backbuf[0] = malloc(screen_pitch*screen_height); main_info.pob_backbuf[1] = malloc(screen_pitch*screen_height); for (c1 = 0; c1 < 7; c1++) { player_anims[c1].num_frames = player_anim_data[c1 * 10]; player_anims[c1].restart_frame = player_anim_data[c1 * 10 + 1]; for (c2 = 0; c2 < 4; c2++) { player_anims[c1].frame[c2].image = player_anim_data[c1 * 10 + c2 * 2 + 2]; player_anims[c1].frame[c2].ticks = player_anim_data[c1 * 10 + c2 * 2 + 3]; } } if ((handle = dat_open("menu.pcx")) == 0) { strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); return 1; } if (read_pcx(handle, background_pic, JNB_WIDTH*JNB_HEIGHT, pal) != 0) { strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); return 1; } if ((handle = dat_open("rabbit.gob")) == 0) { strcpy(main_info.error_str, "Error loading 'rabbit.gob', aborting...\n"); return 1; } if (register_gob(handle, &rabbit_gobs, dat_filelen("rabbit.gob"))) { /* error */ return 1; } if ((handle = dat_open("objects.gob")) == 0) { strcpy(main_info.error_str, "Error loading 'objects.gob', aborting...\n"); return 1; } if (register_gob(handle, &object_gobs, dat_filelen("objects.gob"))) { /* error */ return 1; } if ((handle = dat_open("font.gob")) == 0) { strcpy(main_info.error_str, "Error loading 'font.gob', aborting...\n"); return 1; } if (register_gob(handle, &font_gobs, dat_filelen("font.gob"))) { /* error */ return 1; } if ((handle = dat_open("numbers.gob")) == 0) { strcpy(main_info.error_str, "Error loading 'numbers.gob', aborting...\n"); return 1; } if (register_gob(handle, &number_gobs, dat_filelen("numbers.gob"))) { /* error */ return 1; } if (read_level() != 0) { strcpy(main_info.error_str, "Error loading 'levelmap.txt', aborting...\n"); return 1; } dj_init(); if (main_info.no_sound == 0) { dj_autodetect_sd(); dj_set_mixing_freq(20000); dj_set_stereo(0); dj_set_auto_mix(0); dj_set_dma_time(8); dj_set_num_sfx_channels(5); dj_set_sfx_volume(64); dj_set_nosound(1); dj_start(); if ((handle = dat_open("jump.mod")) == 0) { strcpy(main_info.error_str, "Error loading 'jump.mod', aborting...\n"); return 1; } if (dj_load_mod(handle, 0, MOD_MENU) != 0) { strcpy(main_info.error_str, "Error loading 'jump.mod', aborting...\n"); return 1; } if ((handle = dat_open("bump.mod")) == 0) { strcpy(main_info.error_str, "Error loading 'bump.mod', aborting...\n"); return 1; } if (dj_load_mod(handle, 0, MOD_GAME) != 0) { strcpy(main_info.error_str, "Error loading 'bump.mod', aborting...\n"); return 1; } if ((handle = dat_open("scores.mod")) == 0) { strcpy(main_info.error_str, "Error loading 'scores.mod', aborting...\n"); return 1; } if (dj_load_mod(handle, 0, MOD_SCORES) != 0) { strcpy(main_info.error_str, "Error loading 'scores.mod', aborting...\n"); return 1; } if ((handle = dat_open("jump.smp")) == 0) { strcpy(main_info.error_str, "Error loading 'jump.smp', aborting...\n"); return 1; } if (dj_load_sfx(handle, 0, dat_filelen("jump.smp"), DJ_SFX_TYPE_SMP, SFX_JUMP) != 0) { strcpy(main_info.error_str, "Error loading 'jump.smp', aborting...\n"); return 1; } if ((handle = dat_open("death.smp")) == 0) { strcpy(main_info.error_str, "Error loading 'death.smp', aborting...\n"); return 1; } if (dj_load_sfx(handle, 0, dat_filelen("death.smp"), DJ_SFX_TYPE_SMP, SFX_DEATH) != 0) { strcpy(main_info.error_str, "Error loading 'death.smp', aborting...\n"); return 1; } if ((handle = dat_open("spring.smp")) == 0) { strcpy(main_info.error_str, "Error loading 'spring.smp', aborting...\n"); return 1; } if (dj_load_sfx(handle, 0, dat_filelen("spring.smp"), DJ_SFX_TYPE_SMP, SFX_SPRING) != 0) { strcpy(main_info.error_str, "Error loading 'spring.smp', aborting...\n"); return 1; } if ((handle = dat_open("splash.smp")) == 0) { strcpy(main_info.error_str, "Error loading 'splash.smp', aborting...\n"); return 1; } if (dj_load_sfx(handle, 0, dat_filelen("splash.smp"), DJ_SFX_TYPE_SMP, SFX_SPLASH) != 0) { strcpy(main_info.error_str, "Error loading 'splash.smp', aborting...\n"); return 1; } if ((handle = dat_open("fly.smp")) == 0) { strcpy(main_info.error_str, "Error loading 'fly.smp', aborting...\n"); return 1; } if (dj_load_sfx(handle, 0, dat_filelen("fly.smp"), DJ_SFX_TYPE_SMP, SFX_FLY) != 0) { strcpy(main_info.error_str, "Error loading 'fly.smp', aborting...\n"); return 1; } dj_get_sfx_settings(SFX_FLY, &fly); fly.priority = 10; fly.default_freq = SFX_FLY_FREQ; fly.loop = 1; fly.loop_start = 0; fly.loop_length = fly.length; dj_set_sfx_settings(SFX_FLY, &fly); } if ((background_pic = malloc(JNB_WIDTH*JNB_HEIGHT)) == NULL) return 1; if ((mask_pic = malloc(JNB_WIDTH*JNB_HEIGHT)) == NULL) return 1; memset(mask_pic, 0, JNB_WIDTH*JNB_HEIGHT); register_mask(mask_pic); /* fix dark font */ for (c1 = 0; c1 < 16; c1++) { pal[(240 + c1) * 3 + 0] = c1 << 2; pal[(240 + c1) * 3 + 1] = c1 << 2; pal[(240 + c1) * 3 + 2] = c1 << 2; } setpalette(0, 256, pal); init_inputs(); recalculate_gob(&font_gobs, pal); if (main_info.joy_enabled == 1 && main_info.fireworks == 0) { load_flag = 0; put_text(0, 200, 40, "JOYSTICK CALIBRATION", 2); put_text(0, 200, 100, "Move the joystick to the", 2); put_text(0, 200, 115, "UPPER LEFT", 2); put_text(0, 200, 130, "and press button A", 2); put_text(0, 200, 200, "Or press ESC to use", 2); put_text(0, 200, 215, "previous settings", 2); if (calib_joy(0) != 0) load_flag = 1; else { register_background(NULL, NULL); main_info.view_page = 1; flippage(1); wait_vrt(0); put_text(1, 200, 40, "JOYSTICK CALIBRATION", 2); put_text(1, 200, 100, "Move the joystick to the", 2); put_text(1, 200, 115, "LOWER RIGHT", 2); put_text(1, 200, 130, "and press button A", 2); put_text(1, 200, 200, "Or press ESC to use", 2); put_text(1, 200, 215, "previous settings", 2); if (calib_joy(1) != 0) load_flag = 1; else { register_background(NULL, NULL); flippage(0); wait_vrt(0); put_text(0, 200, 40, "JOYSTICK CALIBRATION", 2); put_text(0, 200, 100, "Move the joystick to the", 2); put_text(0, 200, 115, "CENTER", 2); put_text(0, 200, 130, "and press button A", 2); put_text(0, 200, 200, "Or press ESC to use", 2); put_text(0, 200, 215, "previous settings", 2); if (calib_joy(2) != 0) load_flag = 1; else { if (joy.calib_data.x1 == joy.calib_data.x2) joy.calib_data.x1 -= 10; if (joy.calib_data.x3 == joy.calib_data.x2) joy.calib_data.x3 += 10; if (joy.calib_data.y1 == joy.calib_data.y2) joy.calib_data.y1 -= 10; if (joy.calib_data.y3 == joy.calib_data.y2) joy.calib_data.y3 += 10; write_calib_data(); } } } if (load_flag == 1) { if ((handle = dat_open("calib.dat")) == 0) { strcpy(main_info.error_str, "Error loading 'calib.dat', aborting...\n"); return 1; } joy.calib_data.x1 = (handle[0]) + (handle[1] << 8) + (handle[2] << 16) + (handle[3] << 24); handle += 4; joy.calib_data.x2 = (handle[0]) + (handle[1] << 8) + (handle[2] << 16) + (handle[3] << 24); handle += 4; joy.calib_data.x3 = (handle[0]) + (handle[1] << 8) + (handle[2] << 16) + (handle[3] << 24); handle += 4; joy.calib_data.y1 = (handle[0]) + (handle[1] << 8) + (handle[2] << 16) + (handle[3] << 24); handle += 4; joy.calib_data.y2 = (handle[0]) + (handle[1] << 8) + (handle[2] << 16) + (handle[3] << 24); handle += 4; joy.calib_data.y3 = (handle[0]) + (handle[1] << 8) + (handle[2] << 16) + (handle[3] << 24); handle += 4; } } #ifdef USE_NET if (is_net) { if (is_server) { init_server(netarg); } else { connect_to_server(netarg); } } #endif return 0; } void deinit_program(void) { #ifdef DOS __dpmi_regs regs; #endif dj_stop(); dj_free_mod(MOD_MENU); dj_free_mod(MOD_GAME); dj_free_sfx(SFX_DEATH); dj_free_sfx(SFX_SPRING); dj_free_sfx(SFX_SPLASH); dj_deinit(); if (background_pic != 0) free(background_pic); if (mask_pic != 0) free(mask_pic); remove_keyb_handler(); #ifdef DOS regs.x.ax = 0x3; __dpmi_int(0x10, ®s); #endif if (main_info.error_str[0] != 0) { printf(main_info.error_str); #ifdef _MSC_VER MessageBox(0, main_info.error_str, "Jump'n'Bump", 0); #endif exit(1); } else exit(0); } unsigned short rnd(unsigned short max) { #if (RAND_MAX < 0x7fff) #error "rand returns too small values" #elif (RAND_MAX == 0x7fff) return (unsigned short)((rand()*2) % (int)max); #else return (unsigned short)(rand() % (int)max); #endif } int read_level(void) { unsigned char *handle; int c1, c2; int chr; if ((handle = dat_open("levelmap.txt")) == 0) { strcpy(main_info.error_str, "Error loading 'levelmap.txt', aborting...\n"); return 1; } for (c1 = 0; c1 < 16; c1++) { for (c2 = 0; c2 < 22; c2++) { while (1) { chr = (int) *(handle++); if (chr >= '0' && chr <= '4') break; } if (flip) ban_map[c1][21-c2] = chr - '0'; else ban_map[c1][c2] = chr - '0'; } } for (c2 = 0; c2 < 22; c2++) ban_map[16][c2] = BAN_SOLID; return 0; } unsigned char *dat_open(char *file_name) { int num; int c1; char name[21]; int ofs; unsigned char *ptr; if (datafile_buffer == NULL) return 0; memset(name, 0, sizeof(name)); num = ( (datafile_buffer[0] << 0) + (datafile_buffer[1] << 8) + (datafile_buffer[2] << 16) + (datafile_buffer[3] << 24) ); ptr = datafile_buffer + 4; for (c1 = 0; c1 < num; c1++) { memcpy(name, ptr, 12); ptr += 12; if (strnicmp(name, file_name, strlen(file_name)) == 0) { ofs = ( (ptr[0] << 0) + (ptr[1] << 8) + (ptr[2] << 16) + (ptr[3] << 24) ); return (datafile_buffer + ofs); } ptr += 8; } return 0; } int dat_filelen(char *file_name) { unsigned char *ptr; int num; int c1; char name[21]; int len; memset(name, 0, sizeof(name)); num = ( (datafile_buffer[0] << 0) + (datafile_buffer[1] << 8) + (datafile_buffer[2] << 16) + (datafile_buffer[3] << 24) ); ptr = datafile_buffer + 4; for (c1 = 0; c1 < num; c1++) { memcpy(name, ptr, 12); ptr += 12; if (strnicmp(name, file_name, strlen(file_name)) == 0) { ptr += 4; len = ( (ptr[0] << 0) + (ptr[1] << 8) + (ptr[2] << 16) + (ptr[3] << 24) ); return len; } ptr += 8; } return 0; } void write_calib_data(void) { FILE *handle; int c1; int len, num; char *mem; int ofs; if ((handle = fopen(datfile_name, "rb")) == NULL) return; len = filelength(fileno(handle)); if ((mem = malloc(len)) == NULL) return; fread(mem, 1, len, handle); fclose(handle); ofs = 4; num = *(int *) (&mem[0]); for (c1 = 0; c1 < num; c1++) { if (strnicmp(&mem[ofs], "calib.dat", strlen("calib.dat")) == 0) { ofs = *(int *) (&mem[ofs + 12]); break; } ofs += 20; } mem[ofs] = joy.calib_data.x1 & 0xff; mem[ofs + 1] = (joy.calib_data.x1 >> 8) & 0xff; mem[ofs + 2] = (joy.calib_data.x1 >> 16) & 0xff; mem[ofs + 3] = (joy.calib_data.x1 >> 24) & 0xff; mem[ofs + 4] = joy.calib_data.x2 & 0xff; mem[ofs + 5] = (joy.calib_data.x2 >> 8) & 0xff; mem[ofs + 6] = (joy.calib_data.x2 >> 16) & 0xff; mem[ofs + 7] = (joy.calib_data.x2 >> 24) & 0xff; mem[ofs + 8] = joy.calib_data.x3 & 0xff; mem[ofs + 9] = (joy.calib_data.x3 >> 8) & 0xff; mem[ofs + 10] = (joy.calib_data.x3 >> 16) & 0xff; mem[ofs + 11] = (joy.calib_data.x3 >> 24) & 0xff; mem[ofs + 12] = joy.calib_data.y1 & 0xff; mem[ofs + 13] = (joy.calib_data.y1 >> 8) & 0xff; mem[ofs + 14] = (joy.calib_data.y1 >> 16) & 0xff; mem[ofs + 15] = (joy.calib_data.y1 >> 24) & 0xff; mem[ofs + 16] = joy.calib_data.y2 & 0xff; mem[ofs + 17] = (joy.calib_data.y2 >> 8) & 0xff; mem[ofs + 18] = (joy.calib_data.y2 >> 16) & 0xff; mem[ofs + 19] = (joy.calib_data.y2 >> 24) & 0xff; mem[ofs + 20] = joy.calib_data.y3 & 0xff; mem[ofs + 21] = (joy.calib_data.y3 >> 8) & 0xff; mem[ofs + 22] = (joy.calib_data.y3 >> 16) & 0xff; mem[ofs + 23] = (joy.calib_data.y3 >> 24) & 0xff; if ((handle = fopen(datfile_name, "wb")) == NULL) return; fwrite(mem, 1, len, handle); fclose(handle); } jumpnbump-1.50.orig/menu.c000066400000000000000000000512311107022553500155250ustar00rootroot00000000000000/* * menu.c * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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" char *menu_background; char menu_pal[768]; char menu_cur_pal[768]; char *message[] = { "Jump 'n Bump "JNB_VERSION, "by Brainchild Design in 1998.", "Code by Mattias Brynervall.", "Graphics by Martin Magnusson", "and Andreas Brynervall.", "Music by Anders Nilsson.", "Linux port by Chuck Mason.", "New SDL port by Florian Schulze.", "http://www.icculus.org/jumpnbump/", "Ryan C. Gordon made networking possible again!", "Visit our homepage at:", "http://www.algonet.se/~mattiasb", "Jump 'n Bump is e-mailware.", "That means you're supposed to send us an e-mail!", "Write for example where you're from", "and what you thought about this game.", "If you do that, you will greatly encourage us", "to make more games for you!", "Send your e-mail to: matbr656@student.liu.se", "Oh, and by the way, there're a lot of secrets!", "If you can't find them, you'd better ask us...", "If you'd like to contact a specific member of BCD,", "these are their e-mail addresses:", "Andreas Brynervall: andreasb@acc.umu.se", "Mattias Brynervall: matbr656@student.liu.se", "Martin Magnusson: marma102@student.liu.se", "Anders Nilsson: equel@swipnet.se", "" }; #define NUM_MESSAGES (sizeof(message)/sizeof(char *)) int menu(void) { int c1; int esc_pressed; int end_loop_flag, new_game_flag, fade_flag; int mod_vol = 0, mod_fade_direction = 0; int cur_message; int fade_dir, fade_count, fade_tick; char fade_pal[48]; int update_count; if (menu_init() != 0) return 1; /* After a game, we have to release the keys, cause AI player can still be using them */ addkey((KEY_PL1_LEFT & 0x7f) | 0x8000); addkey((KEY_PL2_LEFT & 0x7f) | 0x8000); addkey((KEY_PL3_LEFT & 0x7f) | 0x8000); addkey((KEY_PL4_LEFT & 0x7f) | 0x8000); addkey((KEY_PL1_RIGHT & 0x7f) | 0x8000); addkey((KEY_PL2_RIGHT & 0x7f) | 0x8000); addkey((KEY_PL3_RIGHT & 0x7f) | 0x8000); addkey((KEY_PL4_RIGHT & 0x7f) | 0x8000); addkey((KEY_PL1_JUMP & 0x7f) | 0x8000); addkey((KEY_PL2_JUMP & 0x7f) | 0x8000); addkey((KEY_PL3_JUMP & 0x7f) | 0x8000); addkey((KEY_PL4_JUMP & 0x7f) | 0x8000); mod_vol = 0; mod_fade_direction = 1; dj_ready_mod(MOD_MENU); dj_set_mod_volume((char)mod_vol); dj_set_sfx_volume(64); dj_start_mod(); dj_set_nosound(0); memset(fade_pal, 0, 48); setpalette(240, 16, fade_pal); fade_dir = 0; fade_count = 0; fade_tick = 0; cur_message = NUM_MESSAGES - 1; main_info.page_info[0].num_pobs = 0; main_info.page_info[1].num_pobs = 0; main_info.view_page = 0; main_info.draw_page = 1; esc_pressed = key_pressed(1); end_loop_flag = new_game_flag = 0; update_count = 1; while (1) { dj_mix(); for(c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) // set AI to false ai[c1] = 0; while (update_count) { if (key_pressed(1) == 1 && esc_pressed == 0) { end_loop_flag = 1; new_game_flag = 0; memset(menu_pal, 0, 768); mod_fade_direction = 0; } else if (key_pressed(1) == 0) esc_pressed = 0; update_player_actions(); for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { if (end_loop_flag == 1 && new_game_flag == 1) { if ((player[c1].x >> 16) > (165 + c1 * 2)) { if (player[c1].x_add < 0) player[c1].x_add += 16384; else player[c1].x_add += 12288; if (player[c1].x_add > 98304L) player[c1].x_add = 98304L; player[c1].direction = 0; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } player[c1].enabled = 1; } if (!player[c1].action_up) { if (player[c1].y_add < 0) { player[c1].y_add += 32768; if (player[c1].y_add > 0) player[c1].y_add = 0; } } player[c1].y_add += 12288; if (player[c1].y_add > 36864 && player[c1].anim != 3) { player[c1].anim = 3; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } player[c1].y += player[c1].y_add; if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) { if ((player[c1].y >> 16) > (160 + c1 * 2)) { player[c1].y = (160L + c1 * 2) << 16; player[c1].y_add = 0; if (player[c1].anim != 0 && player[c1].anim != 1) { player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } } else { if ((player[c1].y >> 16) > (138 + c1 * 2)) { player[c1].y = (138L + c1 * 2) << 16; player[c1].y_add = 0; if (player[c1].anim != 0 && player[c1].anim != 1) { player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } if (!player[c1].action_up) player[c1].jump_ready = 1; } } player[c1].x += player[c1].x_add; if ((player[c1].y >> 16) > (138 + c1 * 2)) { if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (190 + c1 * 2)) { player[c1].x = (165L + c1 * 2) << 16; player[c1].x_add = 0; } if ((player[c1].x >> 16) > (190 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) { player[c1].x = (208L + c1 * 2) << 16; player[c1].x_add = 0; } } } else { if (player[c1].action_left && player[c1].action_right) { if (player[c1].direction == 1) { if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) { if (player[c1].x_add > 0) { player[c1].x_add -= 16384; if ((player[c1].y >> 16) >= (160 + c1 * 2)) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add -= 12288; } if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) { if (player[c1].x_add > 0) { player[c1].x_add -= 16384; if ((player[c1].y >> 16) >= (138 + c1 * 2)) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add -= 12288; } if (player[c1].x_add < -98304L) player[c1].x_add = -98304L; player[c1].direction = 1; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } else { if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if ((player[c1].y >> 16) >= (160 + c1 * 2)) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add += 12288; } if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if ((player[c1].y >> 16) >= (138 + c1 * 2)) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add += 12288; } if (player[c1].x_add > 98304L) player[c1].x_add = 98304L; player[c1].direction = 0; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } } else if (player[c1].action_left) { if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) { if (player[c1].x_add > 0) { player[c1].x_add -= 16384; if ((player[c1].y >> 16) >= (160 + c1 * 2)) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add -= 12288; } if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) { if (player[c1].x_add > 0) { player[c1].x_add -= 16384; if ((player[c1].y >> 16) >= (138 + c1 * 2)) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add -= 12288; } if (player[c1].x_add < -98304L) player[c1].x_add = -98304L; player[c1].direction = 1; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } else if (player[c1].action_right) { if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if ((player[c1].y >> 16) >= (160 + c1 * 2)) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add += 12288; } if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if ((player[c1].y >> 16) >= (138 + c1 * 2)) add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else player[c1].x_add += 12288; } if (player[c1].x_add > 98304L) player[c1].x_add = 98304L; player[c1].direction = 0; if (player[c1].anim == 0) { player[c1].anim = 1; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } else { if (((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) && (player[c1].y >> 16) >= (160 + c1 * 2)) { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if (player[c1].x_add > 0) player[c1].x_add = 0; add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else if (player[c1].x_add > 0) { player[c1].x_add -= 16384; if (player[c1].x_add < 0) player[c1].x_add = 0; add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } } if ((((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) && (player[c1].y >> 16) >= (138 + c1 * 2))) { if (player[c1].x_add < 0) { player[c1].x_add += 16384; if (player[c1].x_add > 0) player[c1].x_add = 0; add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } else if (player[c1].x_add > 0) { player[c1].x_add -= 16384; if (player[c1].x_add < 0) player[c1].x_add = 0; add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); } } if (player[c1].anim == 1) { player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } if ((player[c1].jump_ready == 1) && player[c1].action_up) { if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) { if ((player[c1].y >> 16) >= (160 + c1 * 2)) { player[c1].y_add = -280000L; player[c1].anim = 2; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; player[c1].jump_ready = 0; dj_play_sfx(SFX_JUMP, (unsigned short)(SFX_JUMP_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); } } else { if ((player[c1].y >> 16) >= (138 + c1 * 2)) { player[c1].y_add = -280000L; player[c1].anim = 2; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; player[c1].jump_ready = 0; dj_play_sfx(SFX_JUMP, (unsigned short)(SFX_JUMP_FREQ + rnd(2000) - 1000), 64, 0, 0, -1); } } } if (!player[c1].action_up) { if (player[c1].y_add < 0) { player[c1].y_add += 32768; if (player[c1].y_add > 0) player[c1].y_add = 0; } } if (!player[c1].action_up) player[c1].jump_ready = 1; player[c1].y_add += 12288; if (player[c1].y_add > 36864 && player[c1].anim != 3) { player[c1].anim = 3; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } player[c1].y += player[c1].y_add; if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) { if ((player[c1].y >> 16) > (160 + c1 * 2)) { player[c1].y = (160L + c1 * 2) << 16; player[c1].y_add = 0; if (player[c1].anim != 0 && player[c1].anim != 1) { player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } } else { if ((player[c1].y >> 16) > (138 + c1 * 2)) { player[c1].y = (138L + c1 * 2) << 16; player[c1].y_add = 0; if (player[c1].anim != 0 && player[c1].anim != 1) { player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } } } player[c1].x += player[c1].x_add; if ((player[c1].x >> 16) < 0) { player[c1].x = 0; player[c1].x_add = 0; } if ((player[c1].x >> 16) > JNB_WIDTH) { end_loop_flag = 1; new_game_flag = 1; memset(menu_pal, 0, 768); mod_fade_direction = 0; } if ((player[c1].y >> 16) > (138 + c1 * 2)) { if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (190 + c1 * 2)) { player[c1].x = (165L + c1 * 2) << 16; player[c1].x_add = 0; } if ((player[c1].x >> 16) > (190 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) { player[c1].x = (208L + c1 * 2) << 16; player[c1].x_add = 0; } } } player[c1].frame_tick++; if (player[c1].frame_tick >= player_anims[player[c1].anim].frame[player[c1].frame].ticks) { player[c1].frame++; if (player[c1].frame >= player_anims[player[c1].anim].num_frames) player[c1].frame = player_anims[player[c1].anim].restart_frame; player[c1].frame_tick = 0; } player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; } dj_mix(); main_info.page_info[main_info.draw_page].num_pobs = 0; for (c1 = 3; c1 >= 0; c1--) add_pob(main_info.draw_page, player[c1].x >> 16, player[c1].y >> 16, player[c1].image + c1 * 18, &rabbit_gobs); update_objects(); if (update_count == 1) { draw_begin(); draw_pobs(main_info.draw_page); draw_end(); dj_mix(); if (mod_fade_direction == 1) { if (mod_vol < 35) { mod_vol++; dj_set_mod_volume((char)mod_vol); } } else { if (mod_vol > 0) { mod_vol--; dj_set_mod_volume((char)mod_vol); } } } fade_flag = 0; for (c1 = 0; c1 < 720; c1++) { if (menu_cur_pal[c1] < menu_pal[c1]) { menu_cur_pal[c1]++; fade_flag = 1; } else if (menu_cur_pal[c1] > menu_pal[c1]) { menu_cur_pal[c1]--; fade_flag = 2; } } if (fade_flag == 0 && end_loop_flag == 1) { menu_deinit(); if (new_game_flag == 1) return 0; else return 1; } switch (fade_dir) { case 0: if (fade_count < 30) { for (c1 = 0; c1 < 48; c1++) { if (fade_pal[c1] > 0) fade_pal[c1]--; } fade_count++; } else { draw_begin(); clear_lines(0, 220, 20, 0); clear_lines(1, 220, 20, 0); cur_message++; if (cur_message >= NUM_MESSAGES) cur_message -= NUM_MESSAGES; put_text(0, 200, 220, message[cur_message], 2); put_text(1, 200, 220, message[cur_message], 2); fade_dir = 1; fade_count = 0; fade_tick = 0; draw_end(); } break; case 1: if (fade_count < 100) { for (c1 = 0; c1 < 48; c1++) { if (fade_pal[c1] < menu_pal[c1 + 720]) fade_pal[c1]++; } fade_count++; } else { fade_dir = 0; fade_count = 0; fade_tick = 0; } break; } for (c1 = 0; c1 < 48; c1++) { if (fade_pal[c1] > menu_pal[c1 + 720]) fade_pal[c1]--; } if (update_count == 1) { main_info.draw_page ^= 1; main_info.view_page ^= 1; flippage(main_info.view_page); wait_vrt(1); } if (fade_flag != 0) { setpalette(0, 240, menu_cur_pal); } if (update_count == 1) { setpalette(240, 16, fade_pal); dj_mix(); draw_begin(); redraw_pob_backgrounds(main_info.draw_page); draw_end(); } update_count--; } update_count = intr_sysupdate(); } menu_deinit(); return 0; } int menu_init(void) { char *handle; int c1; fillpalette(0, 0, 0); if ((handle = dat_open("menu.pcx")) == 0) { strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); return 1; } if (read_pcx(handle, background_pic, JNB_WIDTH*JNB_HEIGHT, menu_pal) != 0) { strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); return 1; } if ((handle = dat_open("menumask.pcx")) == 0) { strcpy(main_info.error_str, "Error loading 'menumask.pcx', aborting...\n"); return 1; } if (read_pcx(handle, mask_pic, JNB_WIDTH*JNB_HEIGHT, 0) != 0) { strcpy(main_info.error_str, "Error loading 'menumask.pcx', aborting...\n"); return 1; } memset(menu_cur_pal, 0, 768); /* fix dark font */ for (c1 = 0; c1 < 16; c1++) { menu_pal[(240 + c1) * 3 + 0] = c1 << 2; menu_pal[(240 + c1) * 3 + 1] = c1 << 2; menu_pal[(240 + c1) * 3 + 2] = c1 << 2; } recalculate_gob(&rabbit_gobs, menu_pal); recalculate_gob(&font_gobs, menu_pal); recalculate_gob(&object_gobs, menu_pal); register_background(background_pic, menu_pal); register_mask(mask_pic); for (c1 = 0; c1 < JNB_MAX_PLAYERS; c1++) { player[c1].enabled = 0; player[c1].x = (long) rnd(150) << 16; player[c1].y = (160L + c1 * 2) << 16; player[c1].x_add = 0; player[c1].y_add = 0; player[c1].direction = rnd(2); player[c1].jump_ready = 1; player[c1].anim = 0; player[c1].frame = 0; player[c1].frame_tick = 0; player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image; } for (c1 = 0; c1 < NUM_OBJECTS; c1++) objects[c1].used = 0; main_info.page_info[0].num_pobs = 0; main_info.page_info[1].num_pobs = 0; return 0; } void menu_deinit(void) { dj_set_nosound(1); } jumpnbump-1.50.orig/modify/000077500000000000000000000000001107022553500157025ustar00rootroot00000000000000jumpnbump-1.50.orig/modify/Makefile000066400000000000000000000010631107022553500173420ustar00rootroot00000000000000CFLAGS = -Wall -ansi -pedantic -O2 -ffast-math -funroll-loops \ -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -DNDEBUG \ -I. -I.. -DUSE_NET -D_BSD_SOURCE LIBS = -lm SRCS = gobpack.c jnbpack.c jnbunpack.c OBJS = gobpack.o jnbpack.o jnbunpack.o TARGETS = ../gobpack ../jnbpack ../jnbunpack all: $(TARGETS) ../gobpack: gobpack.c $(CC) $(CFLAGS) -o ../gobpack $(LIBS) gobpack.c ../jnbpack: jnbpack.c $(CC) $(CFLAGS) -o ../jnbpack $(LIBS) jnbpack.c ../jnbunpack: jnbunpack.c $(CC) $(CFLAGS) -o ../jnbunpack $(LIBS) jnbunpack.c clean: rm -f $(TARGETS) $(OBJS) jumpnbump-1.50.orig/modify/gobpack.c000066400000000000000000000231151107022553500174560ustar00rootroot00000000000000#include #include #include typedef struct { int num_images; int *width; int *height; int *hs_x; int *hs_y; void **data; void **orig_data; } gob_t; static void read_pcx(FILE * handle, void *buf, int buf_len, char *pal) { unsigned char *buffer=buf; 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 && ofs1 < buf_len; c1++) buffer[ofs1++] = (char) b; } else buffer[ofs1++] = (char) a; } if (pal != 0) { fseek(handle, 1, SEEK_CUR); for (c1 = 0; c1 < 768; c1++) pal[c1] = fgetc(handle) >> 2; } } } static void write_pcx(FILE *pcxfile, unsigned char *data, int width, int height, unsigned char *palette) { int i; fputc(0x0a, pcxfile); /* manufacturer */ fputc(5, pcxfile); /* version */ fputc(1, pcxfile); /* encoding */ fputc(8, pcxfile); /* bits_per_pixel */ fputc(0, pcxfile); /* xmin */ fputc(0, pcxfile); fputc(0, pcxfile); /* ymin */ fputc(0, pcxfile); fputc((width - 1) & 0xff, pcxfile); /* xmax */ fputc(((width - 1) >> 8) & 0xff, pcxfile); fputc((height - 1) & 0xff, pcxfile); /* ymax */ fputc(((height - 1) >> 8) & 0xff, pcxfile); fputc(width & 0xff, pcxfile); /* hres */ fputc((width >> 8) & 0xff, pcxfile); fputc(height & 0xff, pcxfile); /* vres */ fputc((height >> 8) & 0xff, pcxfile); for (i = 0; i < 48; i++) /* palette */ fputc(0, pcxfile); fputc(0, pcxfile); /* reserved */ fputc(1, pcxfile); /* color_planes */ fputc(width & 0xff, pcxfile); /* bytes_per_line */ fputc((width >> 8) & 0xff, pcxfile); fputc(1 & 0xff, pcxfile); /* palette_type */ fputc((1 >> 8) & 0xff, pcxfile); for (i = 0; i < 58; i++) /* filler */ fputc(0, pcxfile); /* pack the image */ for (i = 0 ; i < width*height ; i++) if ( (*data & 0xc0) != 0xc0) fputc(*data++, pcxfile); else { fputc(0xc1, pcxfile); fputc(*data++, pcxfile); } /* write the palette */ fputc(0x0c, pcxfile); /* palette ID byte */ if (palette) for (i = 0 ; i < 768 ; i++) fputc(*palette++, pcxfile); else for (i = 0 ; i < 768 ; i++) fputc(i / 3, pcxfile); } int read_gob(FILE *handle, gob_t *gob, int len) { unsigned char *gob_data; int i; gob_data = malloc(len); fread(gob_data, 1, len, handle); gob->num_images = (short)((gob_data[0]) + (gob_data[1] << 8)); gob->width = malloc(gob->num_images*sizeof(int)); gob->height = malloc(gob->num_images*sizeof(int)); gob->hs_x = malloc(gob->num_images*sizeof(int)); gob->hs_y = malloc(gob->num_images*sizeof(int)); gob->data = malloc(gob->num_images*sizeof(void *)); gob->orig_data = malloc(gob->num_images*sizeof(void *)); for (i=0; inum_images; i++) { int image_size; int offset; offset = (gob_data[i*4+2]) + (gob_data[i*4+3] << 8) + (gob_data[i*4+4] << 16) + (gob_data[i*4+5] << 24); gob->width[i] = (short)((gob_data[offset]) + (gob_data[offset+1] << 8)); offset += 2; gob->height[i] = (short)((gob_data[offset]) + (gob_data[offset+1] << 8)); offset += 2; gob->hs_x[i] = (short)((gob_data[offset]) + (gob_data[offset+1] << 8)); offset += 2; gob->hs_y[i] = (short)((gob_data[offset]) + (gob_data[offset+1] << 8)); offset += 2; image_size = gob->width[i] * gob->height[i]; gob->orig_data[i] = malloc(image_size); memcpy(gob->orig_data[i], &gob_data[offset], image_size); gob->data[i] = (unsigned short *)gob->orig_data[i]; } free(gob_data); return 0; } int write_gob(FILE *handle, gob_t *gob) { int i; int offset; fputc((gob->num_images >> 0) & 0xff, handle); fputc((gob->num_images >> 8) & 0xff, handle); offset = 2 + (gob->num_images * 4); for (i=0; inum_images; i++) { fputc((offset >> 0) & 0xff, handle); fputc((offset >> 8) & 0xff, handle); fputc((offset >> 16) & 0xff, handle); fputc((offset >> 24) & 0xff, handle); offset += 8; offset += gob->width[i] * gob->height[i]; } for (i=0; inum_images; i++) { fputc((gob->width[i] >> 0) & 0xff, handle); fputc((gob->width[i] >> 8) & 0xff, handle); fputc((gob->height[i] >> 0) & 0xff, handle); fputc((gob->height[i] >> 8) & 0xff, handle); fputc((gob->hs_x[i] >> 0) & 0xff, handle); fputc((gob->hs_x[i] >> 8) & 0xff, handle); fputc((gob->hs_y[i] >> 0) & 0xff, handle); fputc((gob->hs_y[i] >> 8) & 0xff, handle); fwrite(gob->data[i], 1, gob->width[i] * gob->height[i], handle); } return 0; } int main(int argc, char **argv) { int usage = 0; int unpack = 0; FILE *f; int len; gob_t gob; char *filename = NULL; if (argc < 2) usage = 1; if (argc > 1) if (argv[1][0] == '-') { if (argv[1][1] == 'u') { if (argc < 3) usage = 1; unpack = 1; } else usage = 1; } if (usage) { printf("Usage: gobpack [-u] [palette.pcx]\n\t-u to unpack the gob\n"); return 1; } if (unpack) { int width, height; int x_count, y_count; int xi, yi; int i; unsigned char *data; unsigned char *dst; unsigned char palette[768]; unsigned char *pal = NULL; if (argc > 3) { f = fopen(argv[3], "rb"); if (f) { fseek(f, -769, SEEK_END); i = fgetc(f); if (i == 0x0c) { pal = palette; fread(pal, 1, 768, f); } fclose(f); } } filename = malloc(strlen(argv[2]) + 5); if (!filename) { printf("Not enough memory!\n"); return -1; } strcpy(filename, argv[2]); strcat(filename, ".gob"); f = fopen(filename, "rb"); if (!f) { printf("Couldn't open file %s\n", filename); return -1; } fseek(f, 0, SEEK_END); len = ftell(f); fseek(f, 0, SEEK_SET); read_gob(f, &gob, len); fclose(f); width = 0; height = 0; for (i = 0; i < gob.num_images; i++) { if (gob.height[i] > height) height = gob.height[i]; if (gob.width[i] > width) width = gob.width[i]; } width+=2; height+=2; data = malloc(400*256); if (!data) { printf("Not enough memory!\n"); return -1; } memset(data, 0, 400*256); x_count = 400 / width; y_count = 256 / width; for (yi = 0; yi < y_count; yi++) { for (xi = 0; xi < x_count; xi++) { int x,y; unsigned char *src; i = yi * x_count + xi; if (i >= gob.num_images) continue; src = gob.data[i]; dst = &data[(yi * height) * 400 + (xi * width)]; for (y = 0; y < gob.height[i]; y++) { for (x = 0; x < gob.width[i]; x++) { dst[y * 400 + x] = src[y * gob.width[i] + x]; } } } } strcpy(filename, argv[2]); strcat(filename, ".pcx"); f = fopen(filename, "wb"); if (!f) { printf("Couldn't open file %s\n", filename); return -1; } write_pcx(f, data, 400, 256, pal); fclose(f); strcpy(filename, argv[2]); strcat(filename, ".txt"); f = fopen(filename, "w"); if (!f) { printf("Couldn't open file %s\n", filename); return -1; } fprintf(f, "num_images: %i\n\n", gob.num_images); for (yi = 0; yi < y_count; yi++) { for (xi = 0; xi < x_count; xi++) { i = yi * x_count + xi; if (i >= gob.num_images) continue; fprintf(f, "image: %i\n", i + 1); fprintf(f, "x: %i\n", (xi * width)); fprintf(f, "y: %i\n", (yi * height)); fprintf(f, "width: %i\n", gob.width[i]); fprintf(f, "height: %i\n", gob.height[i]); fprintf(f, "hotspot_x: %i\n", gob.hs_x[i]); fprintf(f, "hotspot_y: %i\n", gob.hs_y[i]); fprintf(f, "\n"); } } fclose(f); } else { unsigned char *data; int i = 0; int x_pos = 0, y_pos = 0; data = malloc(400*256); if (!data) { printf("Not enough memory!\n"); return -1; } filename = malloc(strlen(argv[1]) + 5); if (!filename) { printf("Not enough memory!\n"); return -1; } strcpy(filename, argv[1]); strcat(filename, ".pcx"); f = fopen(filename, "rb"); if (!f) { printf("Couldn't open file %s\n", filename); return -1; } read_pcx(f, data, 400*256, NULL); fclose(f); strcpy(filename, argv[1]); strcat(filename, ".txt"); f = fopen(filename, "r"); if (!f) { printf("Couldn't open file %s\n", filename); return -1; } gob.num_images = 0; while (!feof(f)) { char buffer[1024]; int value; fscanf(f, "%s %i\n", buffer, &value); if (strcmp(buffer, "num_images:") == 0) { if (gob.num_images != 0) { printf("Parse error in %s\n", filename); return -1; } gob.num_images = value; gob.width = malloc(gob.num_images*sizeof(int)); gob.height = malloc(gob.num_images*sizeof(int)); gob.hs_x = malloc(gob.num_images*sizeof(int)); gob.hs_y = malloc(gob.num_images*sizeof(int)); gob.data = malloc(gob.num_images*sizeof(void *)); gob.orig_data = malloc(gob.num_images*sizeof(void *)); } else if (strcmp(buffer, "image:") == 0) { i = value - 1; } else if (strcmp(buffer, "x:") == 0) { x_pos = value; } else if (strcmp(buffer, "y:") == 0) { y_pos = value; } else if (strcmp(buffer, "width:") == 0) { gob.width[i] = value; } else if (strcmp(buffer, "height:") == 0) { gob.height[i] = value; } else if (strcmp(buffer, "hotspot_x:") == 0) { gob.hs_x[i] = value; } else if (strcmp(buffer, "hotspot_y:") == 0) { int x, y; unsigned char *dst; gob.hs_y[i] = value; gob.orig_data[i] = malloc(gob.width[i] * gob.height[i]); gob.data[i] = gob.orig_data[i]; dst = gob.data[i]; for (y = 0; y < gob.height[i]; y++) { for (x = 0; x < gob.width[i]; x++) { dst[y * gob.width[i] + x] = data[(y_pos + y) * 400 + (x_pos + x)]; } } } } fclose(f); strcpy(filename, argv[1]); strcat(filename, ".gob"); f = fopen(filename, "wb"); if (!f) { printf("Couldn't open file %s\n", filename); return -1; } write_gob(f, &gob); fclose(f); printf("%s build\n", filename); } return 0; } jumpnbump-1.50.orig/modify/jnbpack.c000066400000000000000000000105171107022553500174620ustar00rootroot00000000000000/* * pack.c * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 "timecop" * * Copyright (C) 2002 Florian Schulze * * 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 #include #include #include #include #include #ifdef LINUX #include #endif #ifndef _MSC_VER #include #else #include #endif typedef struct { char filename[12]; unsigned int offset; unsigned int size; } DirEntry; #ifndef O_BINARY #define O_BINARY 0 #endif int main(int argc, char **argv) { int fd; DirEntry *datafile; int num_entries, i; int c; char *outfile = NULL; int offset = 0; #ifdef LINUX while ((c = getopt(argc, argv, "o:")) != EOF) { switch (c) { case 'o': if (optarg) { outfile = strdup(optarg); } break; } } argc -= optind; argv += optind; #else c = 1; while (c 12) { fprintf(stderr, "filename %s is longer than 12 chars\n", argv[i]); exit(1); } strncpy(datafile[i].filename, argv[i], 12); datafile[i].size = dummy.st_size; /* num_entries * (12 + 8) */ datafile[i].offset = offset; offset += datafile[i].size; } /* here, we checked that all files are ok, and ready to roll the packfile */ fd = open(outfile, O_RDWR | O_CREAT | O_BINARY, 0644); if (fd == -1) { perror("opening packfile"); exit(1); } printf("Opened %s\n", outfile); /* write number of entries in this data file */ { char temp; temp = (num_entries >> 0) & 0xff; write(fd, &temp, 1); temp = (num_entries >> 8) & 0xff; write(fd, &temp, 1); temp = (num_entries >> 16) & 0xff; write(fd, &temp, 1); temp = (num_entries >> 24) & 0xff; write(fd, &temp, 1); } /* write the directory structure */ for (i = 0; i < num_entries; i++) { char temp; write(fd, &datafile[i].filename, 12); temp = (datafile[i].offset >> 0) & 0xff; write(fd, &temp, 1); temp = (datafile[i].offset >> 8) & 0xff; write(fd, &temp, 1); temp = (datafile[i].offset >> 16) & 0xff; write(fd, &temp, 1); temp = (datafile[i].offset >> 24) & 0xff; write(fd, &temp, 1); temp = (datafile[i].size >> 0) & 0xff; write(fd, &temp, 1); temp = (datafile[i].size >> 8) & 0xff; write(fd, &temp, 1); temp = (datafile[i].size >> 16) & 0xff; write(fd, &temp, 1); temp = (datafile[i].size >> 24) & 0xff; write(fd, &temp, 1); } /* write in the actual files */ for (i = 0; i < num_entries; i++) { int infd; char *buf; printf("adding %s ", argv[i]); infd = open(argv[i], O_RDONLY | O_BINARY); if (infd == -1) { perror("opening file"); exit(1); } buf = malloc(datafile[i].size + 16); read(infd, buf, datafile[i].size); close(infd); write(fd, buf, datafile[i].size); free(buf); printf(" OK\n"); } close(fd); return 0; } jumpnbump-1.50.orig/modify/jnbunpack.c000066400000000000000000000050711107022553500200240ustar00rootroot00000000000000/* * unpack.c * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 "timecop" * * Copyright (C) 2002 Florian Schulze * * 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 #include #include #include #include #ifndef _MSC_VER #include #else #include #endif typedef struct { char filename[12]; unsigned int offset; unsigned int size; } DirEntry; #ifndef O_BINARY #define O_BINARY 0 #endif int main(int argc, char **argv) { int fd; DirEntry *datafile; int num_entries, i; if (argc < 2) { printf("dumbass, specify filename to unpack\n"); exit(1); } fd = open(argv[1], O_RDONLY | O_BINARY); if (fd == -1) { perror("open datafile"); exit(1); } /* get number of entries */ read(fd, &num_entries, 4); printf("%d entries in datafile\n", num_entries); datafile = calloc(num_entries, sizeof(DirEntry)); read(fd, datafile, num_entries * sizeof(DirEntry)); printf("Directory Listing:\n"); for (i = 0; i < num_entries; i++) { char filename[14]; memset(filename, 0, sizeof(filename)); strncpy(filename, datafile[i].filename, 12); printf("%02d:\t%s (%u bytes)\n", i, filename, datafile[i].size); } for (i = 0; i < num_entries; i++) { int outfd; char filename[14]; char *buf; memset(filename, 0, sizeof(filename)); strncpy(filename, datafile[i].filename, 12); printf("Extracting %s ", filename); outfd = open(filename, O_RDWR | O_CREAT | O_BINARY, 0644); if (!outfd) { perror("cant open file"); exit(1); } lseek(fd, datafile[i].offset, SEEK_SET); buf = calloc(1, datafile[i].size + 16); read(fd, buf, datafile[i].size); write(outfd, buf, datafile[i].size); close(outfd); free(buf); printf("OK\n"); } close(fd); return 0; } jumpnbump-1.50.orig/readme-win32.txt000066400000000000000000000004051107022553500173500ustar00rootroot00000000000000This port is done by Florian Schulze (crow@icculus.org). Homepage: http://www.icculus.org/jumpnbump/ There is a new scaled up graphics mode. To use it add -scaleup to the command line. The sound is now much better than in the old SDL versions. Florian Schulzejumpnbump-1.50.orig/readme.txt000066400000000000000000000043611107022553500164150ustar00rootroot00000000000000 JUMP 'N BUMP by Brainchild Design in 1998 Jump 'n Bump is e-mailware. That means you're supposed to send us an e-mail. Write for example where you're from and what you thought about this game. If you do that, you will greatly encourage us to make more games for you! We encourage you to spread this game to all your friends! You are also allowed to put this game on your homepage, on CD:s and magazines. You may even charge money for it. It would be nice though, if you sent us a copy of your article, so we know about it. Code by Mattias Brynervall Graphics by Andreas Brynervall and Martin Magnusson Music by Anders Nilsson INSTRUCTIONS Leap over the log, and bound off to the right to play. The different rabbits are controlled with: DOTT LEFT/RIGHT/UP JIFFY A/D/W FIZZ Mouse Buttons MIJJI Joystick Jump around like crazy and try to get on top of the others. HOMEPAGE http://www.algonet.se/~mattiasb BRAINCHILD DESIGN Brainchild Design tries to make games with great gameplay. "Simple but yet addictive" is something of a guideline. Brainchild Designs members are: Andreas Brynervall andreasb@acc.umu.se Mattias Brynervall matbr656@student.liu.se Martin Magnusson marma102@student.liu.se Anders Nilsson equel@swipnet.se Andreas, Mattias and Martin are old friends from school in Nybro, in the south of Sweden. Anders joined a bit later. He's from Malm, and we met eachother over the internet. Now we really don't know where he is, and we have no contact with him. Where are you, Anders? SECRETS Oh, there are some secrets in Jump 'n Bump. Try and see if you can find them! If you can't, you could always write and ask us... TECHNICAL INFO Program code in C and ASM. Compiled with DJGPP and NASM. Graphics drawn in Deluxe Paint 2 and Paint Shop Pro 5. Music made with Fasttracker 2. Readme written in Notepad. DON'T FORGET TO SEND AN E-MAIL!jumpnbump-1.50.orig/sdl/000077500000000000000000000000001107022553500151755ustar00rootroot00000000000000jumpnbump-1.50.orig/sdl/Makefile000066400000000000000000000005631107022553500166410ustar00rootroot00000000000000SDL_CFLAGS = `sdl-config --cflags` CFLAGS = -Wall -ansi -pedantic -O2 -ffast-math -funroll-loops \ -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -DNDEBUG \ -I. -I.. $(SDL_CFLAGS) -DUSE_SDL -DUSE_NET OBJS = gfx.o interrpt.o sound.o input.o TARGET = ../sdl.a all: $(TARGET) $(TARGET): $(OBJS) ar cru $(TARGET) $(OBJS) ranlib $(TARGET) clean: rm -f $(TARGET) $(OBJS) jumpnbump-1.50.orig/sdl/gfx.c000066400000000000000000000414531107022553500161340ustar00rootroot00000000000000/* * gfx.c * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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" #include "SDL_endian.h" #include "filter.h" #ifdef _MSC_VER #include "jumpnbump32.xpm" #elif __APPLE__ #include "jumpnbump128.xpm" #else #include "jumpnbump64.xpm" #endif SDL_Surface *icon; int screen_width=400; int screen_height=256; int screen_pitch=400; int scale_up=0; int dirty_block_shift=4; static SDL_Surface *jnb_surface; static int fullscreen = 0; static int vinited = 0; static void *screen_buffer[2]; static int drawing_enable = 0; static void *background = NULL; static int background_drawn; static void *mask = NULL; static int dirty_blocks[2][25*16*2]; static SDL_Surface *load_xpm_from_array(char **xpm) { #define NEXT_TOKEN { \ while ((*p != ' ') && (*p != '\t')) p++; \ while ((*p == ' ') || (*p == '\t')) p++; } SDL_Surface *surface; char *p; int width; int height; int colors; int images; int color; int pal[256]; int x,y; p = *xpm++; width = atoi(p); if (width <= 0) return NULL; NEXT_TOKEN; height = atoi(p); if (height <= 0) return NULL; NEXT_TOKEN; colors = atoi(p); if (colors <= 0) return NULL; NEXT_TOKEN; images = atoi(p); if (images <= 0) return NULL; surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000); if (!surface) return NULL; SDL_SetColorKey(surface, SDL_SRCCOLORKEY, SDL_MapRGBA(surface->format, 0, 0, 0, 0)); while (colors--) { p = *xpm++; color = *p++; NEXT_TOKEN; if (*p++ != 'c') { SDL_FreeSurface(surface); return NULL; } NEXT_TOKEN; if (*p == '#') pal[color] = strtoul(++p, NULL, 16) | 0xff000000; else pal[color] = 0; } y = 0; while (y < height) { int *pixels; p = *xpm++; pixels = (int *)&((char *)surface->pixels)[y++ * surface->pitch]; x = 0; while (x < width) { Uint8 r,g,b,a; if (*p == '\0') { SDL_FreeSurface(surface); return NULL; } r = (pal[(int)*p] >> 16) & 0xff; b = (pal[(int)*p] & 0xff); g = (pal[(int)*p] >> 8) & 0xff; a = (pal[(int)*p] >> 24) & 0xff; pixels[x] = SDL_MapRGBA(surface->format, r, g, b, a); x++; p++; } } return surface; } unsigned char *get_vgaptr(int page, int x, int y) { assert(drawing_enable==1); return (unsigned char *)screen_buffer[page] + (y*screen_pitch)+(x); } void set_scaling(int scale) { if (scale==1) { screen_width=800; screen_height=512; scale_up=1; dirty_block_shift=5; screen_pitch=screen_width; } else { screen_width=400; screen_height=256; scale_up=0; dirty_block_shift=4; screen_pitch=screen_width; } } void open_screen(void) { int lval = 0; int flags; lval = SDL_Init(SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); if (lval < 0) { fprintf(stderr, "SDL ERROR: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } flags = SDL_SWSURFACE; if (fullscreen) flags |= SDL_FULLSCREEN; jnb_surface = SDL_SetVideoMode(screen_width, screen_height, 8, flags); if (!jnb_surface) { fprintf(stderr, "SDL ERROR: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } if(fullscreen) SDL_ShowCursor(0); else SDL_ShowCursor(1); SDL_WM_SetCaption("Jump'n'Bump",""); icon=load_xpm_from_array(jumpnbump_xpm); if (icon==NULL) { printf("Couldn't load icon\n"); } else { SDL_WM_SetIcon(icon,NULL); } vinited = 1; memset(dirty_blocks, 0, sizeof(dirty_blocks)); screen_buffer[0]=malloc(screen_width*screen_height); screen_buffer[1]=malloc(screen_width*screen_height); /* dirty_blocks[0]=malloc(sizeof(int)*25*16+1000); dirty_blocks[1]=malloc(sizeof(int)*25*16+1000); */ return; } void fs_toggle() { if (!vinited) { fullscreen ^= 1; return; } if (SDL_WM_ToggleFullScreen(jnb_surface)) fullscreen ^= 1; } void wait_vrt(int mix) { return; } void clear_page(int page, int color) { int i,j; unsigned char *buf = get_vgaptr(page, 0, 0); assert(drawing_enable==1); for (i=0; i<(25*16); i++) dirty_blocks[page][i] = 1; for (i=0; i>dirty_block_shift) - (y>>dirty_block_shift) + 1; y >>= dirty_block_shift; for (i=0; iformat, (Uint8)(pal[color*3+0]<<2), (Uint8)(pal[color*3+1]<<2), (Uint8)(pal[color*3+2]<<2)); } int get_pixel(int page, int x, int y) { assert(drawing_enable==1); if (scale_up) { x *= 2; y *= 2; } assert(x>dirty_block_shift)*25+(x>>dirty_block_shift)] = 1; *(unsigned char *)get_vgaptr(page, x, y) = color; } void flippage(int page) { int x,y; unsigned char *src; unsigned char *dest; assert(drawing_enable==0); SDL_LockSurface(jnb_surface); if (!jnb_surface->pixels) { for (x=0; x<(25*16); x++) { dirty_blocks[0][x] = 1; dirty_blocks[1][x] = 1; } return; } dest=(unsigned char *)jnb_surface->pixels; src=screen_buffer[page]; for (y=0; y>dirty_block_shift)*25+test_x]) ) { count++; test_x++; } if (count) { memcpy( &dest[y*jnb_surface->pitch+(x<>4)*count); } x = test_x; } } memset(&dirty_blocks[page], 0, sizeof(int)*25*16); SDL_UnlockSurface(jnb_surface); SDL_Flip(jnb_surface); } void draw_begin(void) { assert(drawing_enable==0); drawing_enable = 1; if (background_drawn == 0) { if (background) { put_block(0, 0, 0, JNB_WIDTH, JNB_HEIGHT, background); put_block(1, 0, 0, JNB_WIDTH, JNB_HEIGHT, background); } else { clear_page(0, 0); clear_page(1, 0); } background_drawn = 1; } } void draw_end(void) { assert(drawing_enable==1); drawing_enable = 0; } void setpalette(int index, int count, char *palette) { SDL_Color colors[256]; int i; assert(drawing_enable==0); for (i = 0; i < count; i++) { colors[i+index].r = palette[i * 3 + 0] << 2; colors[i+index].g = palette[i * 3 + 1] << 2; colors[i+index].b = palette[i * 3 + 2] << 2; } SDL_SetColors(jnb_surface, &colors[index], index, count); } void fillpalette(int red, int green, int blue) { SDL_Color colors[256]; int i; assert(drawing_enable==0); for (i = 0; i < 256; i++) { colors[i].r = red << 2; colors[i].g = green << 2; colors[i].b = blue << 2; } SDL_SetColors(jnb_surface, colors, 0, 256); } void get_block(int page, int x, int y, int width, int height, void *buffer) { unsigned char *buffer_ptr, *vga_ptr; int h; assert(drawing_enable==1); if (scale_up) { x *= 2; y *= 2; width *= 2; height *= 2; } if (x < 0) x = 0; if (y < 0) y = 0; if (y + height >= screen_height) height = screen_height - y; if (x + width >= screen_width) width = screen_width - x; if (width<=0) return; if(height<=0) return; vga_ptr = get_vgaptr(page, x, y); buffer_ptr = buffer; for (h = 0; h < height; h++) { memcpy(buffer_ptr, vga_ptr, width); vga_ptr += screen_pitch; buffer_ptr += width; } } void put_block(int page, int x, int y, int width, int height, void *buffer) { int h; unsigned char *vga_ptr, *buffer_ptr; assert(drawing_enable==1); if (scale_up) { x *= 2; y *= 2; width *= 2; height *= 2; } if (x < 0) x = 0; if (y < 0) y = 0; if (y + height >= screen_height) height = screen_height - y; if (x + width >= screen_width) width = screen_width - x; if (width<=0) return; if(height<=0) return; vga_ptr = get_vgaptr(page, x, y); buffer_ptr = buffer; for (h = 0; h < height; h++) { memcpy(vga_ptr, buffer_ptr, width); vga_ptr += screen_pitch; buffer_ptr += width; } width = ((x+width)>>dirty_block_shift) - (x>>dirty_block_shift) + 1; height = ((y+height)>>dirty_block_shift) - (y>>dirty_block_shift) + 1; x >>= dirty_block_shift; y >>= dirty_block_shift; while (width--) for (h=0; h= 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; default: cur_x = 0; /* this should cause error? -Chuck */ 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(int page, int x, int y, int image, gob_t *gob, int use_mask, void *mask_pic) { int c1, c2; int pob_x, pob_y; int width, height; int draw_width, draw_height; int colour; unsigned char *vga_ptr; unsigned char *pob_ptr; unsigned char *mask_ptr; assert(drawing_enable==1); assert(gob); assert(image>=0); assert(imagenum_images); if (scale_up) { x *= 2; y *= 2; width = draw_width = gob->width[image]*2; height = draw_height = gob->height[image]*2; x -= gob->hs_x[image]*2; y -= gob->hs_y[image]*2; } else { width = draw_width = gob->width[image]; height = draw_height = gob->height[image]; x -= gob->hs_x[image]; y -= gob->hs_y[image]; } if ((x + width) <= 0 || x >= screen_width) return; if ((y + height) <= 0 || y >= screen_height) return; pob_x = 0; pob_y = 0; if (x < 0) { pob_x -= x; draw_width += x; x = 0; } if ((x + width) > screen_width) draw_width -= x + width - screen_width; if (y < 0) { pob_y -= y; draw_height += y; y = 0; } if ((y + height) > screen_height) draw_height -= y + height - screen_height; vga_ptr = get_vgaptr(page, x, y); pob_ptr = ((unsigned char *)gob->data[image]) + ((pob_y * width) + pob_x); mask_ptr = ((unsigned char *)mask) + ((y * screen_pitch) + (x)); for (c1 = 0; c1 < draw_height; c1++) { for (c2 = 0; c2 < draw_width; c2++) { colour = *mask_ptr; if (use_mask == 0 || (use_mask == 1 && colour == 0)) { colour = *pob_ptr; if (colour != 0) { *vga_ptr = colour; } } vga_ptr++; pob_ptr++; mask_ptr++; } pob_ptr += width - c2; vga_ptr += (screen_width - c2); mask_ptr += (screen_width - c2); } draw_width = ((x+draw_width)>>dirty_block_shift) - (x>>dirty_block_shift) + 1; draw_height = ((y+draw_height)>>dirty_block_shift) - (y>>dirty_block_shift) + 1; x >>= dirty_block_shift; y >>= dirty_block_shift; while (draw_width--) for (c1=0; c1=0); assert(imagenum_images); return gob->width[image]; } int pob_height(int image, gob_t *gob) { assert(gob); assert(image>=0); assert(imagenum_images); return gob->height[image]; } int pob_hs_x(int image, gob_t *gob) { assert(gob); assert(image>=0); assert(imagenum_images); return gob->hs_x[image]; } int pob_hs_y(int image, gob_t *gob) { assert(gob); assert(image>=0); assert(imagenum_images); return gob->hs_y[image]; } int read_pcx(unsigned char * handle, void *buf, int buf_len, char *pal) { unsigned char *buffer=buf; short c1; short a, b; long ofs1; if (buffer != 0) { handle += 128; ofs1 = 0; while (ofs1 < buf_len) { a = *(handle++); if ((a & 0xc0) == 0xc0) { b = *(handle++); a &= 0x3f; for (c1 = 0; c1 < a && ofs1 < buf_len; c1++) buffer[ofs1++] = (char) b; } else buffer[ofs1++] = (char) a; } if (pal != 0) { handle++; for (c1 = 0; c1 < 768; c1++) pal[c1] = *(handle++) /*fgetc(handle)*/ >> 2; } } return 0; } void register_background(char *pixels, char pal[768]) { if (background) { free(background); background = NULL; } background_drawn = 0; if (!pixels) return; assert(pal); if (scale_up) { background = malloc(screen_pitch*screen_height); assert(background); do_scale2x((unsigned char *)pixels, JNB_WIDTH, JNB_HEIGHT, (unsigned char *)background); } else { background = malloc(JNB_WIDTH*JNB_HEIGHT); assert(background); memcpy(background, pixels, JNB_WIDTH*JNB_HEIGHT); } } int register_gob(unsigned char *handle, gob_t *gob, int len) { unsigned char *gob_data; int i; gob_data = malloc(len); memcpy(gob_data, handle, len); gob->num_images = (short)((gob_data[0]) + (gob_data[1] << 8)); gob->width = malloc(gob->num_images*sizeof(int)); gob->height = malloc(gob->num_images*sizeof(int)); gob->hs_x = malloc(gob->num_images*sizeof(int)); gob->hs_y = malloc(gob->num_images*sizeof(int)); gob->data = malloc(gob->num_images*sizeof(void *)); gob->orig_data = malloc(gob->num_images*sizeof(void *)); for (i=0; inum_images; i++) { int image_size; int offset; offset = (gob_data[i*4+2]) + (gob_data[i*4+3] << 8) + (gob_data[i*4+4] << 16) + (gob_data[i*4+5] << 24); gob->width[i] = (short)((gob_data[offset]) + (gob_data[offset+1] << 8)); offset += 2; gob->height[i] = (short)((gob_data[offset]) + (gob_data[offset+1] << 8)); offset += 2; gob->hs_x[i] = (short)((gob_data[offset]) + (gob_data[offset+1] << 8)); offset += 2; gob->hs_y[i] = (short)((gob_data[offset]) + (gob_data[offset+1] << 8)); offset += 2; image_size = gob->width[i] * gob->height[i]; gob->orig_data[i] = malloc(image_size); memcpy(gob->orig_data[i], &gob_data[offset], image_size); if (scale_up) { image_size = gob->width[i] * gob->height[i] * 4; gob->data[i] = malloc(image_size); do_scale2x((unsigned char *)gob->orig_data[i], gob->width[i], gob->height[i], (unsigned char *)gob->data[i]); } else { gob->data[i] = (unsigned short *)gob->orig_data[i]; } } free(gob_data); return 0; } void recalculate_gob(gob_t *gob, char pal[768]) { } void register_mask(void *pixels) { if (mask) { free(mask); mask = NULL; } assert(pixels); if (scale_up) { mask = malloc(screen_pitch*screen_height); assert(mask); do_scale2x((unsigned char *)pixels, JNB_WIDTH, JNB_HEIGHT, (unsigned char *)mask); } else { mask = malloc(JNB_WIDTH*JNB_HEIGHT); assert(mask); memcpy(mask, pixels, JNB_WIDTH*JNB_HEIGHT); } } jumpnbump-1.50.orig/sdl/input.c000066400000000000000000000076201107022553500165050ustar00rootroot00000000000000/* * input.c * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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_joys=0; static SDL_Joystick *joys[4]; /* assumes joysticks have at least one button, could check numbuttons first? */ #define JOY_LEFT(num) (num_joys>num && SDL_JoystickGetAxis(joys[num], 0)<-3200) #define JOY_RIGHT(num) (num_joys>num && SDL_JoystickGetAxis(joys[num], 0)>3200) /* I find using the vertical axis to be annoying -- dnb */ #define JOY_JUMP(num) (num_joys>num && SDL_JoystickGetButton(joys[num], 0)) int calib_joy(int type) { return 1; } void update_player_actions(void) { int tmp; if (client_player_num < 0) { tmp = (key_pressed(KEY_PL1_LEFT) == 1) || JOY_LEFT(3); if (tmp != player[0].action_left) tellServerPlayerMoved(0, MOVEMENT_LEFT, tmp); tmp = (key_pressed(KEY_PL1_RIGHT) == 1) || JOY_RIGHT(3); if (tmp != player[0].action_right) tellServerPlayerMoved(0, MOVEMENT_RIGHT, tmp); tmp = (key_pressed(KEY_PL1_JUMP) == 1) || JOY_JUMP(3); if (tmp != player[0].action_up) tellServerPlayerMoved(0, MOVEMENT_UP, tmp); tmp = (key_pressed(KEY_PL2_LEFT) == 1) || JOY_LEFT(2); if (tmp != player[1].action_left) tellServerPlayerMoved(1, MOVEMENT_LEFT, tmp); tmp = (key_pressed(KEY_PL2_RIGHT) == 1) || JOY_RIGHT(2); if (tmp != player[1].action_right) tellServerPlayerMoved(1, MOVEMENT_RIGHT, tmp); tmp = (key_pressed(KEY_PL2_JUMP) == 1) || JOY_JUMP(2); if (tmp != player[1].action_up) tellServerPlayerMoved(1, MOVEMENT_UP, tmp); tmp = (key_pressed(KEY_PL3_LEFT) == 1) || JOY_LEFT(1); if (tmp != player[2].action_left) tellServerPlayerMoved(2, MOVEMENT_LEFT, tmp); tmp = (key_pressed(KEY_PL3_RIGHT) == 1) || JOY_RIGHT(1); if (tmp != player[2].action_right) tellServerPlayerMoved(2, MOVEMENT_RIGHT, tmp); tmp = (key_pressed(KEY_PL3_JUMP) == 1) || JOY_JUMP(1); if (tmp != player[2].action_up) tellServerPlayerMoved(2, MOVEMENT_UP, tmp); tmp = (key_pressed(KEY_PL4_LEFT) == 1) || JOY_LEFT(0); if (tmp != player[3].action_left) tellServerPlayerMoved(3, MOVEMENT_LEFT, tmp); tmp = (key_pressed(KEY_PL4_RIGHT) == 1) || JOY_RIGHT(0); if (tmp != player[3].action_right) tellServerPlayerMoved(3, MOVEMENT_RIGHT, tmp); tmp = (key_pressed(KEY_PL4_JUMP) == 1) || JOY_JUMP(0); if (tmp != player[3].action_up) tellServerPlayerMoved(3, MOVEMENT_UP, tmp); } else { tmp = (key_pressed(KEY_PL1_LEFT) == 1) || JOY_LEFT(0); if (tmp != player[client_player_num].action_left) tellServerPlayerMoved(client_player_num, MOVEMENT_LEFT, tmp); tmp = (key_pressed(KEY_PL1_RIGHT) == 1) || JOY_RIGHT(0); if (tmp != player[client_player_num].action_right) tellServerPlayerMoved(client_player_num, MOVEMENT_RIGHT, tmp); tmp = (key_pressed(KEY_PL1_JUMP) == 1) || JOY_JUMP(0); if (tmp != player[client_player_num].action_up) tellServerPlayerMoved(client_player_num, MOVEMENT_UP, tmp); } } void init_inputs(void) { int i; num_joys = SDL_NumJoysticks(); for(i = 0; i < 4 && i < num_joys; ++i) joys[i] = SDL_JoystickOpen(i); main_info.mouse_enabled = 0; main_info.joy_enabled = 0; } jumpnbump-1.50.orig/sdl/interrpt.c000066400000000000000000000230311107022553500172070ustar00rootroot00000000000000/* * interrpt.c * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/ * * Copyright (C) 2001 Chuck Mason * * Copyright (C) 2002 Florian Schulze * * 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 #include #include #ifndef _MSC_VER #include #endif #include "globals.h" #ifdef USE_KAILLERA #include "SDL_thread.h" #include "SDL_mutex.h" #include char local_keyb[256]; #endif /* USE_KAILLERA */ char keyb[256]; char last_keys[50]; #ifdef USE_KAILLERA /* information about the party in this session */ static int my_player = -1; static int my_numplayers = -1; /* semaphore for controlling kaillera thread */ static SDL_sem *game_start_sem = NULL; /* keys supported on my end */ static int my_player_up = -1; static int my_player_left = -1; static int my_player_right = 1; /* values for the kaillera client interface */ static char kaillera_app_name[] = "Jump 'n Bump"; static char kaillera_game_name[] = "Jump 'n Bump\0\0"; static int player_keys[4][3] = { { KEY_PL1_LEFT, KEY_PL1_RIGHT, KEY_PL1_JUMP }, { KEY_PL2_LEFT, KEY_PL2_RIGHT, KEY_PL2_JUMP }, { KEY_PL3_LEFT, KEY_PL3_RIGHT, KEY_PL3_JUMP }, { KEY_PL4_LEFT, KEY_PL4_RIGHT, KEY_PL4_JUMP } }; static int WINAPI kaillera_game_callback(char *game, int player, int numplayers) { int length; int urand; unsigned char random[8]; if (strcmp(game, kaillera_game_name) != 0) { printf("unknown game selected: %s\n", game); my_player = -1; goto release; } printf("start network game with %d players\n", numplayers); printf("I am player %d\n", player); my_player = player; my_numplayers = numplayers; my_player_up = player_keys[player-1][0] & 0xff; my_player_left = player_keys[player-1][1] & 0xff; my_player_right = player_keys[player-1][2] & 0xff; /* initialize randomizer agreed by all players */ random[0] = time(0) & 0xff; random[1] = random[2] = random[3] = 0x00; length = kailleraModifyPlayValues(&random, sizeof(random[0])); if (length < 0) { goto release; } urand = random[3] << 24 | random[2] << 16 | random[1] << 8 | random[0]; srand(urand); release: SDL_SemPost(game_start_sem); return 0; } static kailleraInfos kaillera_data = { kaillera_app_name, kaillera_game_name, kaillera_game_callback, NULL, NULL, NULL }; static void print_version() { char version[16]; kailleraGetVersion(version); printf("using kaillera version %s\n", version); } static int kaillera_thread(void *arg) { kailleraInit(); /* print_version(); */ kailleraSetInfos(&kaillera_data); kailleraSelectServerDialog(0); if (SDL_SemValue(game_start_sem) == 0) { /* server dialog returned and game didnt start */ /* release blocking thread */ my_player = -1; SDL_SemPost(game_start_sem); } return 0; } static int start_kaillera_thread(void) { SDL_Thread *thread; game_start_sem = SDL_CreateSemaphore(0); thread = SDL_CreateThread(kaillera_thread, NULL); if (!thread) { printf("SDL_CreateThread failed\n"); return -1; } return 0; } int addkey(unsigned int key) { /* it doesnt matter if a player presses keys * that control other bunnies. whatever is sent * is packed by pack_keys() */ if (!(key & 0x8000)) { local_keyb[key & 0x7fff] = 1; } else local_keyb[key & 0x7fff] = 0; return 0; } void remove_keyb_handler(void) { kailleraShutdown(); } int pack_keys(void) { int rv; rv = local_keyb[my_player_up]; rv |= local_keyb[my_player_left] << 1; rv |= local_keyb[my_player_right] << 2; rv |= local_keyb[1] << 3; return rv; } void unpack_keys(int player, char value) { keyb[player_keys[player][0] & 0xff] = (value >> 0) & 1; keyb[player_keys[player][1] & 0xff] = (value >> 1) & 1; keyb[player_keys[player][2] & 0xff] = (value >> 2) & 1; /* escape key is shared among all users */ keyb[1] |= (value >> 3) & 1; } int update_kaillera_keys(void) { char keys[8]; int length; int player; keys[0] = pack_keys(); length = kailleraModifyPlayValues(&keys, sizeof(keys[0])); if (length < 0) { /* terminate session */ printf("** LOST CONNECTION **\n"); kailleraEndGame(); my_player = -1; return -1; } for (player=0; player 0; c1--) last_keys[c1] = last_keys[c1 - 1]; last_keys[0] = key & 0x7fff; } else keyb[key & 0x7fff] = 0; return 0; } void remove_keyb_handler(void) { } int hook_keyb_handler(void) { SDL_EnableUNICODE(1); memset((void *) last_keys, 0, sizeof(last_keys)); return 0; } int key_pressed(int key) { return keyb[(unsigned char) key]; } #endif /* USE_KAILLERA */ int intr_sysupdate() { SDL_Event e; int i = 0; static int last_time = 0; int now, time_diff; while (SDL_PollEvent(&e)) { switch (e.type) { case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: if(e.button.state == SDL_PRESSED && ((key_pressed(KEY_PL3_LEFT) && e.button.button == SDL_BUTTON_RIGHT) || (key_pressed(KEY_PL3_RIGHT) && e.button.button == SDL_BUTTON_LEFT) || (e.button.button == SDL_BUTTON_LEFT && e.button.button == SDL_BUTTON_RIGHT) || e.button.button == SDL_BUTTON_MIDDLE)) { addkey(KEY_PL3_JUMP & 0x7f); } else if(e.button.state == SDL_RELEASED && ((key_pressed(KEY_PL3_LEFT) && e.button.button == SDL_BUTTON_RIGHT) || (key_pressed(KEY_PL3_RIGHT) && e.button.button == SDL_BUTTON_LEFT) || e.button.button == SDL_BUTTON_MIDDLE)) { addkey((KEY_PL3_JUMP & 0x7f) | 0x8000); } if(e.button.button == SDL_BUTTON_LEFT) { SDLKey sym = KEY_PL3_LEFT; sym &= 0x7f; if(e.button.state == SDL_RELEASED) { if(key_pressed(KEY_PL3_JUMP) && (SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(SDL_BUTTON_RIGHT))) addkey(KEY_PL3_RIGHT & 0x7f); else sym |= 0x8000; } addkey(sym); } else if(e.button.button == SDL_BUTTON_RIGHT) { SDLKey sym = KEY_PL3_RIGHT; sym &= 0x7f; if (e.button.state == SDL_RELEASED) { if(key_pressed(KEY_PL3_JUMP) && (SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(SDL_BUTTON_LEFT))) addkey(KEY_PL3_LEFT & 0x7f); else sym |= 0x8000; } addkey(sym); } break; case SDL_KEYDOWN: case SDL_KEYUP: switch (e.key.keysym.sym) { case SDLK_F12: if (e.type == SDL_KEYDOWN) { SDL_Quit(); exit(1); } break; case SDLK_F10: if (e.type == SDL_KEYDOWN) { fs_toggle(); } break; case SDLK_1: if (e.type == SDL_KEYUP) ai[0] = !ai[0]; /* Release keys, otherwise it will continue moving that way */ addkey((KEY_PL1_LEFT & 0x7f) | 0x8000); addkey((KEY_PL1_RIGHT & 0x7f) | 0x8000); addkey((KEY_PL1_JUMP & 0x7f) | 0x8000); break; case SDLK_2: if (e.type == SDL_KEYUP) ai[1] = !ai[1]; /* Release keys, otherwise it will continue moving that way */ addkey((KEY_PL2_LEFT & 0x7f) | 0x8000); addkey((KEY_PL2_RIGHT & 0x7f) | 0x8000); addkey((KEY_PL2_JUMP & 0x7f) | 0x8000); break; case SDLK_3: if (e.type == SDL_KEYUP) ai[2] = !ai[2]; /* Release keys, otherwise it will continue moving that way */ addkey((KEY_PL3_LEFT & 0x7f) | 0x8000); addkey((KEY_PL3_RIGHT & 0x7f) | 0x8000); addkey((KEY_PL3_JUMP & 0x7f) | 0x8000); break; case SDLK_4: if (e.type == SDL_KEYUP) ai[3] = !ai[3]; /* Release keys, otherwise it will continue moving that way */ addkey((KEY_PL4_LEFT & 0x7f) | 0x8000); addkey((KEY_PL4_RIGHT & 0x7f) | 0x8000); addkey((KEY_PL4_JUMP & 0x7f) | 0x8000); break; case SDLK_ESCAPE: if (e.type == SDL_KEYUP) addkey(1 | 0x8000); else addkey(1 & 0x7f); break; default: e.key.keysym.sym &= 0x7f; if (e.type == SDL_KEYUP) e.key.keysym.sym |= 0x8000; addkey(e.key.keysym.sym); break; } break; default: break; } i++; } SDL_Delay(1); now = SDL_GetTicks(); time_diff = now - last_time; if (time_diff>0) { i = time_diff / (1000 / 60); if (i) { last_time = now; } else { int tmp; tmp = (1000/60) - i - 10; if (tmp>0) SDL_Delay(tmp); } } /* if (!then) SDL_Delay(1); else { then = (1000 / 60) - (now - then); if (then > 0 && then < 1000) SDL_Delay(then); } then = now; */ #ifdef USE_KAILLERA if (my_player >= 0) { update_kaillera_keys(); i=1; } #endif /* USE_KAILLERA */ return i; } jumpnbump-1.50.orig/sdl/jumpnbump128.xpm000066400000000000000000000430111107022553500201720ustar00rootroot00000000000000/* XPM */ static char * jumpnbump_xpm[] = { "128 128 65 1", " c None", ". c #06070A", "+ c #B6B6B6", "@ c #F60202", "# c #727272", "$ c #B60202", "% c #5A5C5D", "& c #FC8622", "* c #3A1602", "= c #C6C6C6", "- c #A6221A", "; c #8E8E8E", "> c #D6D6D6", ", c #FB8E24", "' c #4A2A1A", ") c #E6E6E6", "! c #CE7222", "~ c #505252", "{ c #A15A1F", "] c #F79B37", "^ c #FEB666", "/ c #AE5A0A", "( c #D66C16", "_ c #DE6A18", ": c #EFEEEE", "< c #7A0202", "[ c #FEA640", "} c #664833", "| c #CCA085", "1 c #2A2A32", "2 c #895F38", "3 c #3C3A3F", "4 c #EAAE7C", "5 c #A8805B", "6 c #9E9E9E", "7 c #FEC68E", "8 c #BB5E0F", "9 c #EE3A3A", "0 c #AF5207", "a c #FEAE42", "b c #5A2A02", "c c #F8F6F9", "d c #636262", "e c #CB6312", "f c #E67215", "g c #8E4202", "h c #1D1C20", "i c #6A3202", "j c #7A685D", "k c #A4500C", "l c #F5781A", "m c #7A7A7A", "n c #F6CEA6", "o c #4A4242", "p c #FEDEBF", "q c #FDFEFD", "r c #D67A3A", "s c #FDA64D", "t c #7A3A02", "u c #B64242", "v c #FE7A12", "w c #6A6A6A", "x c #DE7A2A", "y c #150D0C", "z c #FEAE4C", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " 6;;66 ", " 6;;66 ", " 6;;;## ", " mm 6;;;#### ", " ##m mm;#dwmm ", " ##m mm;mw#mm ", " %%%~ m;;;#~% ", " mm#=66 ~~~3 ;66#dmm ", " ;;m+6666 ~~~3 #6;;%w66 ", " ;;m+;666 + ~~~~3 #;;;%w66 ", " ;;m+66;6 + ~~~~3 #6;;~w66 ", " 666+++::66 66d6 ~%~~o m;6~%d6 ", " 6>;;==qq6 +##~; ~%~%3w #6m~~; ", " 6:++mm::6 +;ddw6 ~~dd1~ ;;m6#mm6 ", " 6)++mm::6 +;ddw6 ~~dd1~ ;;m6wmm6 ", " 6c::##==q6 ==;mddm+ ~%ww33 ;;;;;w666 ", " ;)qq++66q6 ++6mmm+= %%##%o mmm6;m66; ", " 6=qq))66:6 7744=+++666+ %%###m66 mm#6;;66 ", " 6=qq))66)6 7744=+++666+ %%###m66 mmm6m;66 ", " 6qqcc==)q66[]]]||===>=++= %om#m;;;;mmm6;;6; ", " 4;::qq))>q66z[4z==>)))===> 33wwmmmmd;;;6;;;; ", " 4;::qq))>q66a[44==>)))===> 3w#mmmmd;;;6;;;; ", " 4;::qq))>q66s[44==>)))===> 3wwmmmmd;;;6;;;; ", " za[[]5))cccc:cqq^[==>>)cc>=>>n^ 1%%mmmm#;;;m;m55 ", " xszz[[[[[[[aa[|++ccqqcqqqn4==))c))>>==^]77|.oo#mmm##mm;;m55r{}2 ", " e8zzaz[aa[s[sss[]jj==qqqqqqp=))::c)))>44s[[s,y11w###m;;;66666m1y.ii&&, ", " 8ezzaas[a[sa[^sz]#j==qqqqqqp=))::c)))>44ss[s,.11d###m;;;66666m1.yii&&& ", " 22]z[[z[[aas[^^77r|++ccqqqq:>))ccq::>=^4s[,,lb..ow##m;666;;666#yhxx&&&lvv, ", " /zzzzzz[[z^zsn:ppccqqqcqqq:ccqqc))=^ss]&!!!*hh~w##;66666hw#+633tt,&&&&&&&&,,, ", " txsszszsz^z77pcqqqqqqqqqqqqqqqqc))n]fffe88}}%ddw##;666661.y66mm''&&&&&&&&&&&&&&&] ", " ta[zzz^^^7ppcqqqqqqqqqqqqqqqqqcqq4r_((822~~~~%w##m;m;6+w..d+66~}ff&&v&v&&&v&&v&&vlv ", " t[[zza^^^7ppcqqqqqqqqcqqqqqqqqcqq4!((!822}~~~%d##m;;;6+w..%+66~}lf&&&&&v&&&&&&&&vvv ", " 'ee^aaazs^:cqqqqqqqqqqqqqqqqqqqqqc^!!e0}t11oo%d##m;;;;6611166;ddflv&&,&&&v&&&&,&vs] ", " '!!^zzzss^::qqqqqqqqqqqqqcqqqqqqqc^!!ekt}11oo%d##m;;;66611h6662j_l&&,,&&&&&&,,]&x ", " bb,zszzs^::qqqqqqqqqqqqqqqqqqcqqqn!!e{''yh33%dwwm;;;;;6%dh666jjxx&&,&&v&&&&&&&& ", " bb]zzzzz^::qqqqqqqqcqqqqqqqqqqqqqn!!ek''yy33%dwwm;m;;;6ddy666#jxxv&&,&&,,x&,&&& ", " gzzs^s=))qqcc::qqqqccqqqqqqqccqq]]e{**yy33~%dd#mmm;;;mm3;;;mmrr],&&&,]]&,&&] ", " *//lfr=::cq6666qqqqqqcqqqqqqqqqc44eg...h33o~%%wmm#m#;;;;;;;mm''g_&&,&&,vvss ", " ikkffx+>>))hh66qqq:;;=qqqqqcqqqq77!g.y.13oo~~%w####mm;;;m55uubb**bb{8eess ", " ik0ffr+>>))hy66qqq:;;=qqqqqcqqqq77!gy..1ooo~%%d####m#;;;;;5uubby*bbkeeess ", " g00_fllvvvvlvr++);..::qqq;..>qqqqqqqqqqnnx0*y.1333o%%%ddww##w#m#99@@tttibb*b00&x ", " kgkl&vvvvlvlvv&lvlrr|~yyccqqq~yhcqqqqqqqqqqnnx8**11*h13oo~%%%ddwwd%2--$$bbgkeef,]]]]zz ", " t8vvvvvvvvvvvvvv&l822ppccc.ddqqqqqqqqqc:44!eii*yyyh133o~~~%~~oo~o<>>|!feekg*.....y*t!x!l,]s[sz[[[[[[s][[][[[[[[[[]z ", " {{(vlvvvvll&vvvllvvlv&&^ccccc:>>>|r!eekk*.....*ytf!fl,][[[z[[[[[[[s[[[[[][[[[[]z ", " ikklf&v&lvvvlvvlvvlvvl,44===>>|!ee__ib..**gevv][sszz[zz[[[[s][[[[[[][[[[[[[[[, ", " ibi**/&&&vvvl&vllvvvvllvv&l4|4re_(e_gg{l]][saazss[a[z[[s[s]zs[]s[[[[[[[[][[[[[]] ", " iiiiiiiiiff&,&&lv&vlvllv&lll&l(_((fff&[[aszzasaas[aasa[sz[z[[[[s[[[[[[[[[[[[[[[[[[[ ", " iiiiiiiiiff&&&&vlvvvvv&v&lllll__f_ffl&[[asazzsaasaaasa[zz[z[[[[[[[]s[[][[[[[[[[[[[[ ", " iiiiiiiii**i8&&lv&&&&vlvf00ttbbb0e!fazssazzzs[ssaaa[sasaaszs][[azs[[[[s[[s][[[[[[[[ ", " iiiiiiiiibiiiii((vvfe{kbiiiiiibbkekk]zzzzzasaz[[z[[[a[[zs[[zzs[sz[as]z[[]zs[s[[[[[[[ ", " iiiiiiiiiiiiiiiiibb*iiiiiiiiiiii/_kk!zzzsszzzsaszzzz[z[aaaszs[[aaszss[sza[][[][][[], ", " iiiiiiiiiiiiiiiiibb*iiiiiiiiiiii8_kkezzzssazzszazszs[z[aaz[zz[[aasass[saa[s[[s[][[]] ", " iiiiiiiiiiiiiiiiibi*iiiiiiiiiiii/_kk!zzzzszzzzzzzazz]z[aaz[zzs]a[sas][saa[[[[[[]]] ", " iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiitt8f//0sszzzzzzszzzzzz[sassas[assaaz]zas[[ass][&! ", " iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiitte(eek!^^szzzsz[szazzzzs[[saaz[[zz[za]za[sx,!5d# ", " iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiitte(eek!^aaazzzzs]szzzzasaasazz[[zz[z[[sa[[,r58dw ", " iiib-iiiiiiiiiiiiiiiiiiiiiiiiiitt_fee/k]]szzzzzzzszzazzz[[asaas]aazz[[]r5m#www#wd ", " iiiiiibiiiiiiiiiiiiiiiiiiiiiiiigke__(/k//zszzzszzzss]szzssz[zszz[[,!88k2dd#mwww ", " iiiiiib-iiiiiiiiiiiiiiiiiiiiiiikg(e((8kkk!^szzzsszszzzazzszz[[xx08kk00kwm#ww ", " iiiiiiiibiiiiiiiiiiiiiiiiiiiiii0k_(((e0k0k]z^[zzzzzzzszszz,!/8k/k00000{w##ww ", " iiiiiiiiiiib-iiiib-iiib-iiiiiiik0_(((8000g]^^szazzszzzzzzz]!80kk000000{w##ww ", " iiiiiiiiiiiiibiiiiibiiiiibiiiii08(e((e0//k/[[zsszzzzz],r880k00000000002#m#wwmm ", " iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiie8(e((e0//0k88s^]]x8//k0k00000000000000######w#w ", " iiiiiiiiiiiiiiiiiiiiiiiiii-biii88(e((e///0k8ezz]]r08/00/000/000k000000j##m##www; ", " iiiiiib-iiiiiiiiiiiiiiiiiiiiiii8e_e((e0//0ge8sz]]x/8/0kkk0k0k0000k0000######w#w; ", " iiiiiibi-biiiiiiiiiiiiiiiiit!!(e((e/k/0/kk{e{0k000000000000k0000k{/w#w######w# ", " iiiiiiiiiiiib-iiiiiiiiiiiit8e(ee(e/k0/{k0kkkk/kkk00/0k000k/0000022#w#########ww ", " iiiiiiiiiibiiiiibiiiiikeeeeeee8//k/00/k//00000k0000k0000k0{2jj#############w ", " iiiiiiiiib-iiiiiiiiiiigeeeeeee8//k/00/k//00k00000000000000{2jj#w############ ", " iiiiiiiiiiibiiiiiiiiik__!eeee8kk//kk/0/0//kk00k0k/k00{{2jw#m######w#ww#wwwww ", " b-iiiiiiiii-iiiiiiii0e(eeeeeekk/k00/k0k0kkk000000{22jj##################ww# ", " iiiiiiiiibiiiiiiii/eeeeee8e00k/kk0k00k/k00/k{{jw##wwww############www;; ", " iiiiiiiiiiiiiiiiii8ee8ee(8e00//kk0kk0k00k000{{jw#mwwww##m#########w#w;; ", " iiiiiiiiiiiiiiii0eeee88ee000/kk/k0/k000k2jww#w##w#######ww#####w# ", " iiiiiiiiiiiiii!eee8!8(888kk/00000k2j2j##ww#www###www#w#mw#dw ", " iiiiiii-biiiieeee8eee888kk0k000/k2j2###ww#ww###wwwwww#m ", " iiiibiiiiiiii!eee8eeee88kk000k0k{222j##wwmwww##w#wwwwwm ", " iiiiiiibtte88!888/80000kk{222#www#ww##ww##wwdd#; ", " iiiibbgk88e88e880!e{jjjw#ww##wwwmwww#wdd## ", " tbbbkg!88/0//x wwww#www##mww##wdm ", " tbbkk088! wwww##wwww#dw;; ", " }bbk/088! wwww##w#ww#dw;; ", " 88 ww#wwddd# ", " www# ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; jumpnbump-1.50.orig/sdl/jumpnbump32.xpm000066400000000000000000000042071107022553500201100ustar00rootroot00000000000000/* XPM */ static char * jumpnbump_xpm[] = { "32 32 65 1", " c None", ". c #261814", "+ c #B3B3B2", "@ c #EC7818", "# c #747373", "$ c #B83A18", "% c #6D6D6B", "& c #C8C1BB", "* c #6B3203", "= c #DB8434", "- c #E28A32", "; c #DCCEC6", "> c #CA7C30", ", c #A05618", "' c #2A262A", ") c #999998", "! c #F59239", "~ c #9B4E10", "{ c #EFE8E4", "] c #FDB055", "^ c #AB530B", "/ c #3A363A", "( c #8F8E8D", "_ c #CE6915", ": c #6A4E3A", "< c #BEB8B2", "[ c #EF9A47", "} c #F4F1F0", "| c #C0691C", "1 c #661834", "2 c #C8A68C", "3 c #434143", "4 c #894209", "5 c #C2610F", "6 c #F79E3F", "7 c #848482", "8 c #504C4C", "9 c #5E2E06", "0 c #823E06", "a c #F6C29E", "b c #EAB68A", "c c #967A60", "d c #D6A67A", "e c #8B6241", "f c #B66016", "g c #FDA542", "h c #FCFCFD", "i c #846A54", "j c #E6A86C", "k c #ABA7A5", "l c #BA590C", "m c #F8DCC2", "n c #AE9276", "o c #864C1E", "p c #585757", "q c #E0DDDB", "r c #733403", "s c #5E3A1E", "t c #7B7B7B", "u c #FEAA48", "v c #F68627", "w c #F97B13", "x c #746D6A", "y c #DAB69E", "z c #B45A0F", " ", " ", " )) ", " x (7# ", " )k p8 (## ", " k)& ((p3 (%) ", " }k<< kt(p8 7t( ", " qq+h b+(+p%)7() ", " )}{&6y;& 8#t7( ", " vuuu[q}}bq{;]ppt7(|: ", " >ugu]kqh{}{&[~3t((tsvwv ", " ,=]]{hhhhh{-f8p7)px#@vvvvv ", " ,]]}hhhhhhjo'8t(tp7@vvvvv ", " ~>j{&{{}hhms.8%t7%cf|w!! ", " ~__w@@nt})}hhm4./p%%#$*05! ", " ^@www@=ac ", " ***9*****~_^-]]]u6=zfi% ", " ***r**9**l_^^[!=|^^^^x%% ", " 9********l5z^||^^^^^,##x% ", " ******r5_l^^^^^^^ex%%x%% ", " ***r*055fz^^,^e%x####t# ", " ****0_5l^^,exx%%#%%% ", " **4555ex%%%%% ", " *~l %x%## ", " ", " ", " "}; jumpnbump-1.50.orig/sdl/jumpnbump64.xpm000066400000000000000000000124071107022553500201160ustar00rootroot00000000000000/* XPM */ static char * jumpnbump_xpm[] = { "64 64 65 1", " c None", ". c #171010", "+ c #B2B2B2", "@ c #E61E1A", "# c #6E6C6B", "$ c #C20606", "% c #D0C6C4", "& c #FA7A12", "* c #411A05", "= c #D06D19", "- c #DA8636", "; c #5B5B5B", "> c #979696", ", c #F18A2D", "' c #D9D6D4", ") c #7D0A5E", "! c #BD752F", "~ c #E8DED9", "{ c #BABABA", "] c #8B8A88", "^ c #F28E39", "/ c #724E32", "( c #5A2A02", "_ c #CA6410", ": c #E7E3DF", "< c #FEB256", "[ c #AB5309", "} c #D69256", "| c #EEEAEA", "1 c #563216", "2 c #828282", "3 c #C26210", "4 c #6A3202", "5 c #875F3D", "6 c #D5B5A0", "7 c #832907", "8 c #D9711E", "9 c #EF9E49", "0 c #F2F2F2", "a c #302C2F", "b c #7A7A7A", "c c #C6AA92", "d c #434043", "e c #FECA96", "f c #BA5A0A", "g c #A64911", "h c #FB8321", "i c #E5A673", "j c #AD621E", "k c #505150", "l c #7E6552", "m c #A9A6A3", "n c #F5B683", "o c #843F05", "p c #FAA23A", "q c #9E5A26", "r c #FAD6BA", "s c #92765A", "t c #974C0A", "u c #FCFCFD", "v c #F07616", "w c #FEA847", "x c #727272", "y c #F5993F", "z c #222026", " ", " ", " ", " ", " ", " >>> ", " >>2b ", " #x ]2b#x ", " k;k 2]2x# ", " 2+m ;dd ]>b#b ", " ]mm>> ;ka >>#;> ", " %>++0 ]] kkkd 22xx ", " :+>m|> mx] ;k;a 2xx2 ", " 0:bb': m2#> k;;d ]2b2> ", " |u+m+u {m2b+ ;;#k 222>> ", " %0''m0 n6++m> ;;#b> b]>>> ", " m000%~mpyi6%%%+ ;k#2]]x]>> ", " >:uu:%cww6%':'% d#bxb]]>] ", " www!'u000|>>]k.4-h ", " j-wwww>2b]2dj&h&&, ", " q-w>#z;>]dv,,hhhhhhh ", " t9<<]dd]c;8hhh,h,h^hh ", " o-<>;ax>#8&,,hhhh^h, ", " 4!ww>#dx>x8h,,&hh,^h ", " t-ww6:u0u0uuuuuuuuu09j*..d;#b22>bkb>b8^hh,^,hhy ", " t8,c'0b+{u0{:uuuuuuej..zdk;#xx22xb]jooot=&yy ", " f8&v=v&-cmz%:u'k:uuuuuur=*.zdd;;###xsxf@41((4_^^ ", " t[vvv&&&&&v-#.|0u'k0uuuuu0r=*.aaakk;;##x5g$4otf=^yp ", " [&&&&&&&&&f5~|0'buuuuuu0%=4*..zdkkk;kdk)7t8hpypppp ", " 3&&&&&&&&&v&&nr+uuuuuu|}=o***.zaaadd/q3vpwwpppwwy ", " t=&&&&&&&&&&v^ru0uu|:'}_ft*.)..z1q8h^wwwpwwppppww ", " j8&&&&&&&&&&^n||0:'683g*)))(j8,^py * * Copyright (C) 2002 Florian Schulze * * 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" #include #ifndef _MSC_VER #include #endif #include "SDL.h" #ifndef NO_SDL_MIXER #include "SDL_mixer.h" static Mix_Music *current_music = (Mix_Music *) NULL; #endif sfx_data sounds[NUM_SFX]; static int SAMPLECOUNT = 512; #define MAX_CHANNELS 32 typedef struct { /* loop flag */ int loop; /* The channel step amount... */ unsigned int step; /* ... and a 0.16 bit remainder of last step. */ unsigned int stepremainder; unsigned int samplerate; /* The channel data pointers, start and end. */ signed short* data; signed short* startdata; signed short* enddata; /* Hardware left and right channel volume lookup. */ int leftvol; int rightvol; } channel_info_t; channel_info_t channelinfo[MAX_CHANNELS]; /* Sample rate in samples/second */ int audio_rate = 44100; int global_sfx_volume = 0; /* // This function loops all active (internal) sound // channels, retrieves a given number of samples // from the raw sound data, modifies it according // to the current (internal) channel parameters, // mixes the per channel samples into the given // mixing buffer, and clamping it to the allowed // range. // // This function currently supports only 16bit. */ static void stopchan(int i) { if (channelinfo[i].data) { memset(&channelinfo[i], 0, sizeof(channel_info_t)); } } /* // This function adds a sound to the // list of currently active sounds, // which is maintained as a given number // (eight, usually) of internal channels. // Returns a handle. */ int addsfx(signed short *data, int len, int loop, int samplerate, int channel) { stopchan(channel); /* We will handle the new SFX. */ /* Set pointer to raw data. */ channelinfo[channel].data = data; channelinfo[channel].startdata = data; /* Set pointer to end of raw data. */ channelinfo[channel].enddata = channelinfo[channel].data + len - 1; channelinfo[channel].samplerate = samplerate; channelinfo[channel].loop = loop; channelinfo[channel].stepremainder = 0; return channel; } static void updateSoundParams(int slot, int volume) { int rightvol; int leftvol; /* // Set stepping // MWM 2000-12-24: Calculates proportion of channel samplerate // to global samplerate for mixing purposes. // Patched to shift left *then* divide, to minimize roundoff errors // as well as to use SAMPLERATE as defined above, not to assume 11025 Hz */ channelinfo[slot].step = ((channelinfo[slot].samplerate<<16)/audio_rate); leftvol = volume; rightvol= volume; /* Sanity check, clamp volume. */ if (rightvol < 0) rightvol = 0; if (rightvol > 127) rightvol = 127; if (leftvol < 0) leftvol = 0; if (leftvol > 127) leftvol = 127; channelinfo[slot].leftvol = leftvol; channelinfo[slot].rightvol = rightvol; } void mix_sound(void *unused, Uint8 *stream, int len) { /* Mix current sound data. */ /* Data, from raw sound, for right and left. */ register int sample; register int dl; register int dr; /* Pointers in audio stream, left, right, end. */ signed short* leftout; signed short* rightout; signed short* leftend; /* Step in stream, left and right, thus two. */ int step; /* Mixing channel index. */ int chan; /* Left and right channel */ /* are in audio stream, alternating. */ leftout = (signed short *)stream; rightout = ((signed short *)stream)+1; step = 2; /* Determine end, for left channel only */ /* (right channel is implicit). */ leftend = leftout + (len/4)*step; /* Mix sounds into the mixing buffer. */ /* Loop over step*SAMPLECOUNT, */ /* that is 512 values for two channels. */ while (leftout != leftend) { /* Reset left/right value. */ dl = *leftout * 256; dr = *rightout * 256; /* Love thy L2 chache - made this a loop. */ /* Now more channels could be set at compile time */ /* as well. Thus loop those channels. */ for ( chan = 0; chan < MAX_CHANNELS; chan++ ) { /* Check channel, if active. */ if (channelinfo[chan].data) { /* Get the raw data from the channel. */ /* no filtering */ /* sample = *channelinfo[chan].data; */ /* linear filtering */ sample = (int)(((int)channelinfo[chan].data[0] * (int)(0x10000 - channelinfo[chan].stepremainder)) + ((int)channelinfo[chan].data[1] * (int)(channelinfo[chan].stepremainder))) >> 16; /* Add left and right part */ /* for this channel (sound) */ /* to the current data. */ /* Adjust volume accordingly. */ dl += sample * (channelinfo[chan].leftvol * global_sfx_volume) / 128; dr += sample * (channelinfo[chan].rightvol * global_sfx_volume) / 128; /* Increment index ??? */ channelinfo[chan].stepremainder += channelinfo[chan].step; /* MSB is next sample??? */ channelinfo[chan].data += channelinfo[chan].stepremainder >> 16; /* Limit to LSB??? */ channelinfo[chan].stepremainder &= 0xffff; /* Check whether we are done. */ if (channelinfo[chan].data >= channelinfo[chan].enddata) { if (channelinfo[chan].loop) { channelinfo[chan].data = channelinfo[chan].startdata; } else { stopchan(chan); } } } } /* Clamp to range. Left hardware channel. */ /* Has been char instead of short. */ /* if (dl > 127) *leftout = 127; */ /* else if (dl < -128) *leftout = -128; */ /* else *leftout = dl; */ dl = dl / 256; dr = dr / 256; if (dl > SHRT_MAX) *leftout = SHRT_MAX; else if (dl < SHRT_MIN) *leftout = SHRT_MIN; else *leftout = (signed short)dl; /* Same for right hardware channel. */ if (dr > SHRT_MAX) *rightout = SHRT_MAX; else if (dr < SHRT_MIN) *rightout = SHRT_MIN; else *rightout = (signed short)dr; /* Increment current pointers in stream */ leftout += step; rightout += step; } } /* misc handling */ char dj_init(void) { Uint16 audio_format = MIX_DEFAULT_FORMAT; int audio_channels = 2; int audio_buffers = 4096; open_screen(); if (main_info.no_sound) return 0; audio_buffers = SAMPLECOUNT*audio_rate/11025; memset(channelinfo, 0, sizeof(channelinfo)); memset(sounds, 0, sizeof(sounds)); #ifndef NO_SDL_MIXER if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) < 0) { fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); main_info.no_sound = 1; return 1; } Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels); printf("Opened audio at %dHz %dbit %s, %d bytes audio buffer\n", audio_rate, (audio_format & 0xFF), (audio_channels > 1) ? "stereo" : "mono", audio_buffers); Mix_SetMusicCMD(getenv("MUSIC_CMD")); Mix_SetPostMix(mix_sound, NULL); #else main_info.no_sound = 1; return 1; #endif return 0; } void dj_deinit(void) { if (main_info.no_sound) return; #ifndef NO_SDL_MIXER Mix_HaltMusic(); if (current_music) Mix_FreeMusic(current_music); current_music = NULL; Mix_CloseAudio(); #endif SDL_Quit(); } void dj_start(void) { } void dj_stop(void) { } char dj_autodetect_sd(void) { return 0; } char dj_set_stereo(char flag) { return 0; } void dj_set_auto_mix(char flag) { } unsigned short dj_set_mixing_freq(unsigned short freq) { return freq; } void dj_set_dma_time(unsigned short time) { } void dj_set_nosound(char flag) { } /* mix handling */ void dj_mix(void) { } /* sfx handling */ char dj_set_num_sfx_channels(char num_channels) { return num_channels; } void dj_set_sfx_volume(char volume) { if (main_info.no_sound) return; SDL_LockAudio(); global_sfx_volume = volume*2; SDL_UnlockAudio(); } void dj_play_sfx(unsigned char sfx_num, unsigned short freq, char volume, char panning, unsigned short delay, char channel) { int slot; if (main_info.music_no_sound || main_info.no_sound) return; if (channel<0) { for (slot=0; slot=MAX_CHANNELS) return; } else slot = channel; SDL_LockAudio(); addsfx((short *)sounds[sfx_num].buf, sounds[sfx_num].length, sounds[sfx_num].loop, freq, slot); updateSoundParams(slot, volume*2); SDL_UnlockAudio(); } char dj_get_sfx_settings(unsigned char sfx_num, sfx_data *data) { if (main_info.no_sound) return 0; memcpy(data, &sounds[sfx_num], sizeof(sfx_data)); return 0; } char dj_set_sfx_settings(unsigned char sfx_num, sfx_data *data) { if (main_info.no_sound) return 0; memcpy(&sounds[sfx_num], data, sizeof(sfx_data)); return 0; } void dj_set_sfx_channel_volume(char channel_num, char volume) { if (main_info.no_sound) return; SDL_LockAudio(); updateSoundParams(channel_num, volume*2); SDL_UnlockAudio(); } void dj_stop_sfx_channel(char channel_num) { if (main_info.no_sound) return; SDL_LockAudio(); stopchan(channel_num); SDL_UnlockAudio(); } char dj_load_sfx(unsigned char * file_handle, char *filename, int file_length, char sfx_type, unsigned char sfx_num) { unsigned int i; unsigned char *src; unsigned short *dest; if (main_info.no_sound) return 0; sounds[sfx_num].buf = malloc(file_length); memcpy(sounds[sfx_num].buf, file_handle, file_length); sounds[sfx_num].length = file_length / 2; src = sounds[sfx_num].buf; dest = (unsigned short *)sounds[sfx_num].buf; for (i=0; iLibraries. Write 'dj' on the first row, and put an X to the left of it. Now you should be able to compile. Oh, and please don't write to me and ask about the code. It was almost a year since I wrote it, and I really don't remember anything about it. Of course, I don't take any responsibility whatsoever to what might happen to you, your computer or your social life if you choose to use this. 'Nuff said! Mattias Brynervall, Brainchild Design http://www.brainchilddesign.com