Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

initial commit

  • Loading branch information...
commit 02e97a3480646bd8e3bb3543b6e84d984b7bcdea 0 parents
daneel authored
Showing with 13,042 additions and 0 deletions.
  1. +8 −0 README
  2. BIN  bofh.cfg
  3. BIN  bofh.hsc
  4. +301 −0 bofh.txt
  5. +39 −0 bofhedit.txt
  6. BIN  data/arrowhit.smp
  7. BIN  data/bazload.smp
  8. BIN  data/bazooka1.smp
  9. BIN  data/bder-hit.smp
  10. BIN  data/bder-off.smp
  11. BIN  data/bder-on.smp
  12. BIN  data/bder-run.smp
  13. BIN  data/bigfnt.spr
  14. BIN  data/blackfnt.spr
  15. BIN  data/bofh.pal
  16. BIN  data/closet.spr
  17. BIN  data/crossbow.smp
  18. BIN  data/die1.smp
  19. BIN  data/die2.smp
  20. BIN  data/die3.smp
  21. BIN  data/editor.spr
  22. BIN  data/explode.smp
  23. BIN  data/fist1.smp
  24. BIN  data/fist2.smp
  25. BIN  data/fist3.smp
  26. BIN  data/fist4.smp
  27. BIN  data/fistman.spr
  28. BIN  data/glass.smp
  29. BIN  data/gunload.smp
  30. BIN  data/gunman.spr
  31. BIN  data/hit1.smp
  32. BIN  data/hit2.smp
  33. BIN  data/hit3.smp
  34. BIN  data/hit4.smp
  35. BIN  data/hit5.smp
  36. BIN  data/hit6.smp
  37. BIN  data/klonk.smp
  38. BIN  data/leader.spr
  39. BIN  data/liftstop.smp
  40. BIN  data/liftstrt.smp
  41. BIN  data/machine.spr
  42. BIN  data/pistol.smp
  43. BIN  data/player.spr
  44. BIN  data/ricoch1.smp
  45. BIN  data/ricoch2.smp
  46. BIN  data/sadist.spr
  47. BIN  data/sdriver.xm
  48. BIN  data/shell1.smp
  49. BIN  data/shell2.smp
  50. BIN  data/shining.xm
  51. BIN  data/shotgman.spr
  52. BIN  data/shotgun.smp
  53. BIN  data/smallfnt.spr
  54. BIN  data/splash.pal
  55. +554 −0 data/splash.raw
  56. BIN  data/swish.smp
  57. BIN  data/taunt1.smp
  58. BIN  data/taunt2.smp
  59. BIN  data/taunt3.smp
  60. BIN  data/taunt4.smp
  61. BIN  data/taunt5.smp
  62. BIN  data/taunt6.smp
  63. BIN  data/tech.spr
  64. BIN  data/title.spr
  65. BIN  data/uzi.smp
  66. BIN  data/uziman.spr
  67. BIN  data/weapon.spr
  68. +25 −0 license.txt
  69. BIN  missions/original.blk
  70. BIN  missions/original.inf
  71. BIN  missions/original.map
  72. BIN  missions/original.mis
  73. BIN  missions/test.blk
  74. BIN  missions/test.inf
  75. BIN  missions/test.map
  76. BIN  missions/test.mis
  77. +3,217 −0 src/actor.c
  78. BIN  src/bgedit.cfg
  79. BIN  src/bigfnt.lbm
  80. BIN  src/blackfnt.lbm
  81. +20 −0 src/bme.h
  82. +17 −0 src/bme_cfg.h
  83. +23 −0 src/bme_err.h
  84. +51 −0 src/bme_gfx.h
  85. +19 −0 src/bme_io.h
  86. +9 −0 src/bme_joy.h
  87. +15 −0 src/bme_kbd.h
  88. +226 −0 src/bme_main.h
  89. +24 −0 src/bme_map.h
  90. +12 −0 src/bme_mou.h
  91. +58 −0 src/bme_snd.h
  92. +11 −0 src/bme_tbl.h
  93. +15 −0 src/bme_txt.h
  94. +32 −0 src/bme_win.h
  95. +2,114 −0 src/bofh.c
  96. +518 −0 src/bofh.h
  97. BIN  src/bofhblk.lbm
  98. +3,329 −0 src/bofhedit.c
  99. +231 −0 src/bomb.c
  100. BIN  src/closet.lbm
  101. BIN  src/editor.lbm
  102. +72 −0 src/endian.c
  103. +8 −0 src/endian.h
  104. +1,037 −0 src/enemy.c
  105. +82 −0 src/extern.h
  106. BIN  src/fistman.lbm
  107. BIN  src/gunman.lbm
  108. +160 −0 src/hiscore.c
  109. +506 −0 src/init.c
  110. +21 −0 src/invert.bat
  111. BIN  src/leader.lbm
  112. BIN  src/libbme.a
  113. BIN  src/machine.lbm
  114. +47 −0 src/makefile
  115. +48 −0 src/makefile.win
  116. BIN  src/player.lbm
  117. BIN  src/sadist.lbm
  118. +42 −0 src/samples.h
  119. BIN  src/shotgman.lbm
  120. +149 −0 src/sincos.c
  121. +2 −0  src/sincos.h
  122. BIN  src/smallfnt.lbm
  123. BIN  src/splash.lbm
  124. BIN  src/tech.lbm
  125. BIN  src/title.lbm
  126. BIN  src/uziman.lbm
  127. BIN  src/weapon.lbm
8 README
@@ -0,0 +1,8 @@
+This is my modification of the original game "BOFH: Servers Under Siege".
+I just changed the keys (ctrl=shoot) and other minor things.
+I advise to play the game in 'insane' because it's challenging.
+
+I dont know if the original game license is GPL-compatible, I think it is.
+More information in bofh.txt.
+
+Original webpage: http://covertbitops.c64.org/
BIN  bofh.cfg
Binary file not shown
BIN  bofh.hsc
Binary file not shown
301 bofh.txt
@@ -0,0 +1,301 @@
+ -------------------------
+ B O F H :
+ Servers Under Siege V1.61
+ -------------------------
+ An action game
+
+
+LICENSE/DISCLAIMER:
+
+See LICENSE.TXT. If you come across earlier versions
+of BOFH consider them now being under the same
+license too.
+
+
+HOW TO RUN:
+
+Simply run BOFH.EXE. It is a 32-bit Windows program
+that will run on Windows 95/98/NT4/2000/ME. In theory
+it runs on a 386 but at least a fast 486 or Pentium
+is required for reasonably smooth gameplay. DirectX
+version 2 or better is required.
+
+BOFH requires about 5MB of memory to run.
+
+To save high scores & screenmode configuration,
+BOFH.EXE needs to be able to create files called
+BOFH.HSC & BOFH.CFG in the directory from where
+it was run.
+
+
+THE STORY:
+
+A group of insane activists called the "Internet
+Salvation Force" has invaded a school, taking
+all servers and workstations as hostages. They
+don't care of human hostages so all the personnel
+have been told to leave. As the BOFH, you arrive
+late at work, and find the building unusually
+quiet...
+
+
+THE MISSION:
+
+Enraged that the computers have been taken away
+from your command, you decide to fight the
+activists alone. Your goal is to reclaim the
+server room at the sixth floor, but first you
+must defuse the bombs the activists have placed
+at network closets around the building. Search
+the activists you have killed for extra weapons,
+first aid kits and bomb defusing instructions.
+Also seek useful tools from the building.
+
+
+HOW TO PLAY:
+
+You see your BOFH, and the surroundings from an
+overhead view. Use cursor keys or mouse movement
+to move forwards/backwards and to turn left/right.
+
+Press ALT + CURSOR LEFT/RIGHT or END/PAGEDOWN to
+move sideways (strafe).
+Press SHIFT + CURSOR UP/DOWN to move slowly.
+Press SPACE or LEFT MOUSE BUTTON to attack.
+Press ENTER or RIGHT MOUSE BUTTON to change weapon.
+
+Other keys:
+P - Pause game
+ESC - Quit game
+S - Sight line on/off
+M - Music on/off
+V - View bomb defusing instructions
+R,G,B,Y - Cut Red, Green, Blue, Yellow wire
+ (when at a closet that contains a bomb)
+0-5 - Select floor to go to (when at a lift)
+F1-F10 - Select weapon directly:
+ F1 = Fists
+ F2 = CAT-5 Whip
+ F3 = Drill
+ F4 = Pistol
+ F5 = Shotgun
+ F6 = Uzi
+ F7 = Grenade
+ F8 = Bazooka
+ F9 = Crossbow
+ F10 = Scanner
+F11 - Toggle between Waveout & DirectSound
+F12 - Toggle screenmode between 320x200,
+ 640x400 scanlines and 640x400 doublesize
+ALT-ENTER - Toggle between fullscreen and windowed mode
+
+
+STATUS:
+
+The status line at the bottom of screen shows your
+score, health, time until the bombs explode, number
+of bombs/activists/computers remaining, and your
+current weapon and ammunition left.
+
+
+DEFEAT/VICTORY:
+
+The game is lost if your BOFH dies, or if the bombs
+explode. You have won if all bombs have been defused,
+the leaders hiding in the server room have been
+defeated and you're still alive.
+
+
+HINTS:
+
+* Technicians (with a distinctive uniform) carry the
+ bomb defusing instructions. As they see you they
+ try to run away - it might be hard to find them
+ again if you let them go!
+
+* Try to sneak up on an enemy from behind.
+
+* Conserve ammunition by punching or whipping unarmed
+ activists. Silent methods of attack will not attract
+ enemies as much as gunfire & explosions.
+
+* The crossbow is at its best when enemies haven't
+ noticed you yet.
+
+* Use grenades & bazooka with caution: they can cause
+ much damage, also to you!
+
+* The scanner (if you find it) will show nearby
+ activists (RED color), computers (GREEN color)
+ and collectable items (YELLOW colors). You can
+ not use any weapons while using it, and its battery
+ will deplete quickly when used.
+
+* If an enemy drops a first aid kit and you're already
+ at full health, try to remember the place - you'll
+ need it later... Same goes for ammunition (there's
+ a certain maximum of bullets you can carry.)
+
+* Every time you go up/down stairs reduces time by
+ 10 seconds. So try to plan your route with minimal
+ floor changes, or use lifts.
+
+* Be prepared when you enter the server room - the
+ leaders might have powerful weaponry.
+
+* If you win, bonus is awarded for survived computers.
+ Servers are considered valuable, so try to persuade
+ the leaders to exit the server room and combat them
+ outside.
+
+* If you defuse a bomb without instructions (by
+ guessing) you receive a large bonus. However, this
+ is not recommended...
+
+
+CREDITS:
+
+Main Design & Programming:
+Lasse ��rni (Cadaver)
+
+Additional Design & Programming
+Kalle Niemitalo
+Olli Niemitalo (Yehar)
+
+Graphics
+Lasse ��rni
+Olli Niemitalo
+
+Voices, Gun, Fist, Whip & Explosion Sounds
+Lasse ��rni
+
+Drill, Shell, Shotgun Loading & Ricochet Sounds
+Olli Niemitalo
+
+Music
+Olli Niemitalo
+Tuomas M�kel� (Kuunvarjo)
+
+
+VERSION HISTORY:
+
+V1.0
+
+* Original, not released
+
+V1.01
+
+* Walls with floor number block vision like
+ normal walls
+* Computers made weaker
+* Computers spawn more chunks when exploding
+* When bombs explode, distant explosions don't
+ cloud the nearby explosions
+* Some messages added
+* Game over text removed
+* Small bug in background graphics removed
+
+V1.02
+
+* Group name changed to more religious :-)
+
+V1.1
+
+* More underground locations
+* More possible enemy locations
+* Difficulty levels adjusted: more activists now
+ but shotgun-men are weaker, medikits more probable
+ (and equally probable on all difficulty levels)
+* Direct selection of weapons with function keys
+* Lifts added
+* Activists use stairs too
+* Both lift & stair-movement reduce time in a
+ "fast-forward" mode
+* End-text changed a bit
+* Bonus for remaining servers (when you have won)
+ is greater now
+* Bullet movement debugged
+* Shell movement improved
+* Grenades added
+* Bazookas added
+* Interpolated fire-effect in the title screen :-)
+* Added a splash screen to the beginning
+
+V1.2
+
+* Only the necessary number of actors are gone
+ thru in the routines
+* All datafiles are now separate, in their own
+ subdirectory
+* Closet & bomb defusing instructions use now
+ fonts instead of text strings inside sprites
+* Drill is more powerful
+* Whip is a bit weaker
+* Changed the door closing sound
+* Enemies getting alerted rewritten: now different
+ sounds (gunfire, grunts, speech) alert enemies
+ from different distances
+* The threshold distance where enemies' move routines
+ are still processed is increased
+* Enemies will give up and go back patrolling if they
+ haven't seen the BOFH for a while
+* Fist-man bug of standing with arm extended fixed
+ (attack animation got stuck)
+* Added a new weapon: crossbow
+* Added a new enemy: the crossbow-wielding sadist
+* Added a scanner, which shows nearby terrorists,
+ computers and collectable items.
+* Also other random weapons (besides the bazookas)
+ and medikits can now be found from storage rooms
+ (however, all of them aren't in use in the
+ original mission)
+* Very slight background graphics changes
+* Mission files from which almost every parameter
+ can be adjusted.
+* A level editor to create mission files and
+ edit the map
+
+V1.2W
+
+* Ported the game to Windows
+* C64-music at the end replaced by hiscore music
+
+V1.3W
+
+* Corrected a bug in the JUDAS library graphics
+ functions which caused memory corruption
+* Loading & saving more user-friendly in the editor
+
+V1.4W
+
+* Ported to BME (Blasphemous Multimedia Engine,
+ replaces JUDAS library)
+* Fullscreen & windowed output
+* Scanline & doublesize mode available
+* Configuration file saves screen mode & sight-line
+ on/off preference
+* Hiscore music continues playing until new game is
+ started
+* Editor instructions back after being forgotten for
+ for some time...
+
+V1.5
+
+* Now with BSD license
+* Ported to the SDL-using version of BME
+* Weapon damage like in C64 version
+
+V1.6
+
+* Improvements from Kalle Niemitalo integrated
+ (including bugfixes and improved sadist AI)
+
+V1.61
+
+* arctan lookup table fixed
+
+
+OFFICIAL "HOMEPAGE":
+
+http://covertbitops.c64.org/misc
+
39 bofhedit.txt
@@ -0,0 +1,39 @@
+BOFH EDITOR
+-----------
+
+F1 = Map editor
+F2 = Blockinfo editor
+F3 = Exact Actor editor
+F4 = Random Actor editor
+F5 = Stairs editor
+F6 = Network Closet editor
+F7 = Lift editor
+F8 = Mission parameters editor
+F9 = Message editor
+F10 = Helpscreen for each of the editors
+F11 = Load mission
+F12 = Save mission
+ESC = Quit
+
+To make a new mission, copy the files ORIGINAL.BLK and ORIGINAL.INF
+to <yourmission>.BLK and <yourmission>.INF in the MISSIONS subdirectory.
+Then use Load mission (F11) in the editor, it will load the blocks and
+blockinfo and then you can begin to draw your own map.
+
+Press O for Layer Options to enlarge the map. You must do this for
+both layers 1 & 2. To layer 1 you should draw floors, stairs etc.
+and to layer 2 walls, tables, doors etc. Look at the original mission
+to see how it all is done.
+
+You can also make your own blocks (and blockinfos): Create a LBM picture
+with Deluxe Paint which uses the same colors as the original BOFH
+blocks and run this commandline: (BMECONV.EXE is found from the TOOLS
+subdirectory)
+
+bmeconv -b -t255 -r254 -h253 <yourblocks>.lbm missions\<yourmission>.blk
+
+Then Load Mission in the editor and begin to create your own map, blockinfos
+and mission.
+
+Important: never place anything to location (0,0) because it is used to
+mark non-existent in the mission data!
BIN  data/arrowhit.smp
Binary file not shown
BIN  data/bazload.smp
Binary file not shown
BIN  data/bazooka1.smp
Binary file not shown
BIN  data/bder-hit.smp
Binary file not shown
BIN  data/bder-off.smp
Binary file not shown
BIN  data/bder-on.smp
Binary file not shown
BIN  data/bder-run.smp
Binary file not shown
BIN  data/bigfnt.spr
Binary file not shown
BIN  data/blackfnt.spr
Binary file not shown
BIN  data/bofh.pal
Binary file not shown
BIN  data/closet.spr
Binary file not shown
BIN  data/crossbow.smp
Binary file not shown
BIN  data/die1.smp
Binary file not shown
BIN  data/die2.smp
Binary file not shown
BIN  data/die3.smp
Binary file not shown
BIN  data/editor.spr
Binary file not shown
BIN  data/explode.smp
Binary file not shown
BIN  data/fist1.smp
Binary file not shown
BIN  data/fist2.smp
Binary file not shown
BIN  data/fist3.smp
Binary file not shown
BIN  data/fist4.smp
Binary file not shown
BIN  data/fistman.spr
Binary file not shown
BIN  data/glass.smp
Binary file not shown
BIN  data/gunload.smp
Binary file not shown
BIN  data/gunman.spr
Binary file not shown
BIN  data/hit1.smp
Binary file not shown
BIN  data/hit2.smp
Binary file not shown
BIN  data/hit3.smp
Binary file not shown
BIN  data/hit4.smp
Binary file not shown
BIN  data/hit5.smp
Binary file not shown
BIN  data/hit6.smp
Binary file not shown
BIN  data/klonk.smp
Binary file not shown
BIN  data/leader.spr
Binary file not shown
BIN  data/liftstop.smp
Binary file not shown
BIN  data/liftstrt.smp
Binary file not shown
BIN  data/machine.spr
Binary file not shown
BIN  data/pistol.smp
Binary file not shown
BIN  data/player.spr
Binary file not shown
BIN  data/ricoch1.smp
Binary file not shown
BIN  data/ricoch2.smp
Binary file not shown
BIN  data/sadist.spr
Binary file not shown
BIN  data/sdriver.xm
Binary file not shown
BIN  data/shell1.smp
Binary file not shown
BIN  data/shell2.smp
Binary file not shown
BIN  data/shining.xm
Binary file not shown
BIN  data/shotgman.spr
Binary file not shown
BIN  data/shotgun.smp
Binary file not shown
BIN  data/smallfnt.spr
Binary file not shown
BIN  data/splash.pal
Binary file not shown
554 data/splash.raw
@@ -0,0 +1,554 @@
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>======/=8=====>=>=>=>=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==AAAAAA=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=>>>>>>>>>>=>>=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>==========================A=============================///8///8======>A>=>A>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=>=>=>=>>>=>=>===============AAAAAAAAAA=A==>>>>>>>>=>>>>>>=>>=>>>=>>=>=>==>=>==============A=A==A=====A==A====A========================>=>=>=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=A=A=AAAAAAAAAAAAAAAAAAAAAAA=AAAAA======================888/3...///8======A==>=>>>>>>>>>>>>>>>>>>>>>>>>>>>>=>=>=>=>=>=>=>=>=>=>=>=>==>=========AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA========A===A=AA=A=A=A=AA=A=A=A==A=AA==A==A=AAAAAAA=AAAAAAAAA=AAAAAA=A=A8A8A88=88888888AA=A=A=A=A=A===A============>=>=>=>====A=AAAAAA?A?888888888888888888888?888888888=8=8=8=8=8=8=8=8888/....#..3//8=====>=>==>>>>>>>>>>>>>>>>>>>>>>>>>=====>A>A>A>A>A>A>A>A>A>A>A>==========A=A=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?A?????=8==A=8=8=A=8AA8A8A8A8A8A8A8A8=8=8=8=8=8=?=?=8A8A8A?A=A==A=A=AA=AA=A===88888888888383838888888A=8A8AAAAAA=AA=A========A=A=A=AAAAAAAAAA?8?8838383333383383838383833838383883383388388888383883...,,$,$,..3//88==8======>=>=>>>>>>>>>>>>>>>>>>=>A>A>A>=>=>=>=>=>=>A>=>=>A===========8888888=88A????????A??A??A????????????????88888838888888888888888888888888888888883888388888888888888=========>====8888/8/3/./.........//888888888888888888888888888888?8?8?8?8??88888333.......3..3.33.33333333.3.....,......3..3..3333....,,,(($(,,,.333/33/8///////=/=>>>>>>>>>>>>>>==A>A>A>A>A=A>A=A>A=A>A=A=AAA===8==/////////88888888888888?88?8????????????????8833333.3.3.......3.33333333333333333333........3...33333333/8/8/=====>=======////.........#####.....//////////8/8/8/8888888888888888888888883333,,,,,$,,$,,,,,,,,,,,.,.,,,,,,,,,,,,,,,,,.,.,.....,.,,,,($(($,,,,.,......3///////>>>>>>>>>>>>>==>>=>A>==A>=>A===AA=AAA=A==8=8888/////#/#......../3/3333333333333333333333333333,3,,,,,,,,,,,,,,,,,.,,..,.....,.,,,,,,,,,,,,,,,#,............//////======//////#.########$$$$$$$$####.#.......././././././.3.3.3333333333333..,$,$$$$,$,,,,,,,,,,(($,,,,,,.,,,,,,,,,,(((((($,$,,,$,,,,$,####/>===/=8=======>A=>=>=========AAA=AA=8A88888333...##$#$#$#$$#$##,,,,....,.,.,.,,,,,,,,,,,,,,,,(,(,(((((($(,,,,,,,,,,,,,,$$$$$$$$$$$$$###########./////////////.##.#####$$$$$$$$$$$$$$$$$#$##,..#.########,#..#..............#.$$$$$$$$$$$$,,..,......,,,$$(($$$$#$#==88333./88AAAAAAA=A====8888888888888883333....,,,$$$$$$$$$,,((,(((((((((((((((,$,$,$($$$$$#$$$$$$,../////./......,$,$$$$$$$$$$$$$$$$$$$$$$$$$#$$$$$$##$#$,$,#####$$$$$$$$$$#,.......,.,,,$$$$$/8...,,,.388?AAAA==8=88888888333333333.3....,,,,$    $$$$$$#$$$$$$.,...,....#,$$,$$$$$$$$$$$$$$$$$$$$$$$$#$$$$$$$$$$$$##...55555555,,,$$8.,,,,.88A8A8888/833.3.....3/8/3...#,,$$$$        #$$$#$$$$,/'&++>/,,$,,$,$$$$$$$$$$$$$$$$$ $#.5?EDACCC@?D?8.,$  $$$..$,.38883....38&C=838'+:/,#$$         $:#$#$$$$/+�2YP72+.,$$$ $$    $,3C�RYYR:� $$#.$ $,.....,,,,&�������&$$$         #'�'$$$#$$$'��M%%%<%�.,$$      $$&��   $0C\lknZoZZOD�', $$#,$ $$$$(((3�CDC:T�&$$        $&�$$$$$$$#+�)<<%%%%%%7-3, #      $$$#&�   $0:DZooooZZLD250  $$#$   *@�LOOOLLE:�:'$ ! $#'-:&($+�&  -��$/:��w<w))))Q)M%/( !! &+$    $$$&�RC� (02lZoooZO\2@0(   $#   **&@OZZZOL:�'. ! ! ! .T9F;6P-'5+�2F20 '   !  (&�\LT-( #+&'��Qy~�)))))%�' &-��:+      $$$#'&�TLL&   (E:aZZZZO2�0** && $   !0�LZOZZZ@:5 $/C�9&F;H:߭RF;;;:5&�:�' ! ! ! ! ! # "8�aOm�" &�&�)<<��
+����)�)� ���+'  #$$$$#$$$$#+'$��CLOOY+(  ! & 0CLZZZO@0*  :�&  $   **�aZZoOY�3( (,&::>C@2XHFRCHIK߭F;G�,&+, ! ! !  #&�  5&�EZZa-!!!":��'&�:)<%��
+W�W�B�:���&(  03&:-::�:########'+�&�:##''+�RELOOkT: ! (+'# (--&& 3�EOOOLY�5* +��:(   $   *6:\oomT�'( �+-.#.8=8A>+:9FFY2FF:G+:GKII;Y�:B' '' (#-����  (&�TaZooT! &�+ '�2�^^ �������� ���� ( &��T�:&&$#/##/'-�-:+$'���YakZZZma�&$ &�-��+/:�&+��-�+&/&#,C96D\C:+0 +���:  �&(&�+ !  5:moL::50 $-���#.////>+�:C-�NIKG�:FIIIKIIIP�HJK�'>'$ ��:-�'  0@�YLOZooZY!'�&����������������W�&+& &�lmtmYE*/++'&��-'$:��TakmmuoooZkY��:-# &���������ߦ��-:+#.�2�2850 :�\E�:   #+�+�- ! /�@mZa�+50 # $$$#-��amY�$###///38====EGPHIIKFR-YIJF�KIIG)+/#+���:#("5@amZZZZovm0:��� �W�������� 
+���+'-��+�$'�DOooo\:L6'�-&--�++-:�:\mtovvoooOlT��#����RR��&&'�'0" (:�YlnZY-+'  �2' ! (2'ED�:5,$$&�+W��kov\�$$$####/./=&C2-RHIKFR:RFH:TH�GIIKKQze)-&&���:&@C�anoZZZoookT2�-+-� �ԇ�����������:�--'�DOoook�E*$+&&��--�-�COZovoooooa����+'���2�HIIF���--�:� �2LZotY�'&��' +aE�&( $-��+'.$$$#+�-�'$##'+��:moova�#$$$$$#,C9GHHF��FNIIIIFKIH�FT��<%%)9���\knooooooomY�����B^� ����
+��+/-�Looul�@60/&-�&+��-::�LOoooovovn��������PHR�GIHHHP:��+-� # &�\OZonY��-+++&' ('+2aka������&- $::'/#$$#'#�+#8-ꦦ���koovnT&$$$52::&&'#/+99�RGKI2RJHGIP�))M%U7��Ynvvoooooovn���eU�������W�+/&��\ou\�aL=�---�:&-��\Zovovvvvo\����G9��GIIIF-�:W�����-(  TLZook:�-:��RFLkmml����++##$$$$#+�+&'+����kovvmT:0'-:+''##$#/8D&9�XN9If7���))%z<�����mvooZooooovk���
+{B ��������-+->+:Oa�EL-����+&-��T2movvvvoovm����S1IFHIIKKIH����+ !! (:�\Ook\C���' :@OOZonR���� $'�-�����:kovvn�C/-����歭:+# &,3DR�Q2S:�
+����Ux{�������loooooovovoom������
+ ����������W���+E�\D������-\Ytvovvvvvva�����KIIIF�HIGGHFR�+''! ! ! &�YLZZa���::���'0:�LZook������-&$#$###'�����\nvvoo\���������$/ '�&-�++&8C����������Uy�^ �����kooovvvvovooZL������������������ �
+�������'::C��������TRkoovvvovovn����HIP�KIIIHY������������!! !(+\amZna����:@�YLZooa����W�:#+��������kooooom������:�CT�\-��+:���������������{y
+��YltvooooovovoooO@��W������W�  ����
+
+� ���-W&����������mZZooovooook����GFHIIKYIHHIIT�����������# �RlOZoZk������aZooonW����4�4-�-+������W�����W��moooooZT�������atm���W��������z��y �ClmZoovvvovvvovl����������� ��
+
+
+ ����� ������W�TTZZoovooooovoa@-���2HH�2KIKIIP�X�YKIF�W�����'�aZoooZ\���懇-�mvvoovk���-�-+�������W���koooovva���W-��2mvn�����a�������� {��y���Clmtvvvvvvv\\T�������� ���� ���������������kvvovvvvvvuks+�2�RIIIHII2IIH����FKHW���W�-�&@2�kooooo\����anZl�Tnvvvvvm:�W���������WaT�������aovovvnl:�������Yltova������Yn�����������y{���~w�V9T\lkntovla\���U���� W���������������W\ovvvvutml\-�9jQIH�HIIIIKR��HIIP��SQ��������-�:TanooZZvm�aovtR���\tvvonm\��W������W��߇mk-���W�Tuvovvm��W��Wꇇ��TmvvvovY����W��tk����������W�wy~��`_QVTrakkY����������������������������W��������YtvtmkaW�S_`ccUJH�KIIIIH:HG�KIN2����������kZvooZovt2�����mooouT��TauvulY��������������:ml��������nvvvvk��������auvvvvvvT����YttT��W�����  }yyUU���cM[
+�2�������� 
+� ���� �����W��W��Gkk\p��V_c��cU^ �_JIIIIIIK�FIKH������Ynvvooooovn����\kakvvovvnakuvvva�ߦ������W����T\kvm���mvvovm������TkZootnntnna��TaTmvl����W����� ���Ue<|<ee^[ ������
+  �������������-W��j^c�~{~yUi���iJIIIIIIIGKIKF���YuvovvvvvovnT�kvvvvovvvovvvvvv\��W�W���������Takmtuvvva����\nooovoY�YkY��knk\C:--���rssT�\mmk��������4 [}�|yx����������������������������� w�{{~ye^} V��_YTGHGVV:HIIX����WW�:noovvvvoooovk\\ktuvovvvvvoovovvvvk������W��������atvovvovvuT�����amoZooovm�\toY���\vl��XXQ^^  ���2���� ������������� �}}Ux�{����
+����������������������W���������� x����z� ��������ꦦ��PKHT��������TLZZvvvovoooovvvvvvvvvooooovvvvvovuT�����W���W�����auvvovvvvn\����YLZooooovv\�lvoa����mvva�j�XP
+ ��� �� U� �����������  �
+ ���������������WW�������������� x����{yU �������������������W��-LOZovvvvvvoovovooooovooooovvvvvvvvk�4��������߭kvvovooona���Tmooooooovvva\nvv\���Yoova�h�� � ��
+
+
+ �yw���������
+�������
+  ��W�����W������������������ �wy{��zxwU����W��������������2R���lZZovvovvvvvvvvovvvvvvvoovvvvvvvvul���W������T\anvooovvm\��--�YOvvooooovvvvvvvouT���Ytvovk�jf
+x 
+
+ � 
+
+
+
+�y�����������������������������������������  �Uwy{����{�{�w ���������� UUU^^c``M�����TaZoovvvvvvvvvvovvvvvvvvvvvvvvvvvvm�������Tknoovvvoovvk���-W��Ttvvvoovvvvvovvoooa��Tluvoook�VfB|  
+ ���
+x  ������������������������������������������������� UUUw�x�zzz� ���������� �
+�V``�R�alkmuovovvvvvvvvvvovvvvvvvvvvvvvvvvvvn�W��������OovvvovvoZna������mvvvvovovvvvvvooon�atovvoZok�h�xxxxx|xxxx�x�x�� w�����������������W�������������������������������� �
+B���������������
+
+ [i^MV`�PZvvvovvvvvvvv��vvvvvvvvvvvvvvvvvvovoo\�������ZovovvvmYT����avvovovvvnkllas\\\T�������-TTT\s\C:�fTwww������
+w�
+  �W������W��W�����W������W������������������������������������������W����
+�
+
+
+ U��� RUQ�f�X�mvvvovvvvvv�����vvvvvovovvvvv��qvvoooY��������ooovvvm����\uvovovvoua�Y�� 
+ j� V ��
+B hP� �� 
+ ���W�����������W����W�W���������W��������������������W����������� U �MQ�Q�g�lvoovvvvvvv������vovovvvvvqq�����qooZY�W����Zovvua�����tvooovvooooa�gh �
+
+�
+ ��efhS U��
+ 
+
+
+�x�  �U���������������������������������W�������������������� �   � UUwweBj���S�fGovvvvvvv����������������h���������ooY\�������+Zoovk�������mvvvoovvvovva�gg�
+�
+
+ �fgRxxx��wyxx �� � �����������W�������W���W���������������������� �wx��}�9�P`fYZvovvvv���������������������������qvl��������Zovv\������Tmvvovovovvvun\�g9���ww�w�x�hg� ��xx   
+ y�������������W��������������W����W�W�����    ��chTTZovovvvv���������������~~~~~�~�~����u\��������YmZovuT���\m���:anvvovovvvvvkY�fX�x�e�e�wU �fK� ��wx�� 
+  �������������������W�����W���������W���������
+w  �
+ � UUweeQUc`Rfbbbbbbbhf`MM___QQQ[Q[[[�}iMc������vvk����\movoovva��EZn�T�aOovvvvovvvvvk��hX�x���ee��e�|
+� ��gh�
+xx�x|wwx� w � �������������W����������W���������������W���������������  �
+wڑ|x����ee�e[�}c�G�T2
+������� B [ic�����vvvm���atvvooZovvumkOZok��amovvooovovovvva��hg�yxx|x|xx�� �g�f��x��   }����������������������������������W��������������e����|[� chX�B^QVV ��   wcRP`�����vvvk���������Tltvvoooooovovvvook�\novvovvvoovovovt��:hf�  �
+
+
+���gh`���x^� 
+
+��W���W���������������������������������������   x �w�ee�e��e�|�j`�a�jc �� �� �  �fg�f����vvvvqmlmmmma\mtvvvovvovovovoootl��Yvvooovovoovovvovm��-lf[ � 
+
+ �:'��g�`�UUw� w ����������W-��4-:::����������������������W�����������  
+ xw�xwUwww� c�g� }iUU�weee|||�|���x�Xf�g���vvvvvvvvvvvvvvvvvvovoovvvovoovtY��nvvvvovvvvvvvvooonR���W2�
+ �
+����2!!!!&��gh`x�������  w w w���W��������:CTCCCAEEEP���W����������W��������  ��yw��hk��x�eeee�����w�Xf�lvvvvvvvvvvvvvvoovvvoovovvvoovvvvu\���kvvooooovq��q�qvoootlaR�:L��-++-C'@D55E66666!! &����� e�
+U �w  �����@C-�:?D-W�p@EEFW�������W����������������W��������Ux  
+x 
+
+
+ � �`f�je�e�e��e�Xf�gvvvvvvvvvvvvvooZoovvvvvvvvvovovvk���lvvooooo��������vvooovvZC�Kf�-(!!66OOOOOOOZbZ6!!! '� �  ��x ��W�-GC�ADC�:-�TEED� U����������W�W�����������������������  � ��xx�xyy�xxxxx|x`f�wwwwwwwwwUw\f�avovvvvvvvvvvvvoooovvvvvvvvvoovvt�2kooooZq����������qoooZovu\�Kh2w�'*66OZbIJ`���hb666!!!!&�Ux�� � �  
+������YT�:DA-�:��-�CEET� �����������������������W���� �U w
+�xx�yy��x���`f2  �_h\qovvvvvvvvvvvvvvvvvvvvvvvv�ovvoa�atvoZZo������������oooZooooa�g�Q B�- !6O��~�{{������h!!�ew�x�ww��x��x�����T:�:E&�-���DEC��������������|xw
+��������������������
+ x� 
+���x�U ������ ��chX�  �w�i�R�boovvvvvvvvvvvovvvvvvvvvv��ovvk�loooZob������������vvoooooooa�K�e���"!6Oh�~����{����!!���e��
+  ��x����W�TT�:D+����:EE����������� �e���������������� x Bww �w ������������ Uxx�`�g�^x�wwx�y�|�j�Xboovvvvvvvvvvvvvvvvvvvv����ooZ\aooooo������~������vvvvvooovok�ghc���� !6O�����������1!!!&���e
+�� ���x�x��x�����G-�@E�������WDE:�
+��������� �w�w�����������
+x ���w ��ꌍ������������ yz�chg����e����X�bZovvvvvvvvvvvvvvvvvvv�����ooZnZoovo������������vvvvvvvvvvovm�\he��x �&!!6b�~��������hO66!P
+��� ���x x w � wwx����:ED�������W�DEC������W�� e�����  ��W��W���w ����� �������������K� y � ww �����e��eB�X�KZovvvvvvvvvvvvvvvvvv������oooovvvvv����������vvvv�����vvoovm�\bc��'!!O��{�����~���hI1%�xe�ex�w��
+���x � w����TE@����WY��:-��DED�
+������ � ������ � �����w�� w�
+w��w
+��������ic� w�xxw�x��e�www �g�KZZovvvvvvvvvvvvvvvvv������oovvvvvvvv�������vvvv�������vvvovn@he�� �"!;�������{��{{~{ www��w �x� w �w�w�w�|U����� xx �7LC����-���DED ��xx ����we�������  ������ �觧�� �wxx��x|w������ x
+B�f�gZq����vvvvvvvvvvvvv�������voovvvvvvvvvvvvvvvvv��������vvovvtCbc��x���
+�!!;Zbh���������������xxe � w ^x��x���wGEC�����C�-:�CED|� �w���W���������ۧ{<JJ`�x�xy����x�
+������xw� ���whf�Fh�������vvvvvvvvv����~~~��oovvvvvvvvvvvvvvvv����������vvvvooTThcw�x�+(*6!6;IbbbOZOOIF��W����� wx
+ � w��w�DE-���C:��::?ED�www��e� ���������444�
+y�`IIIIJ<��
+�x ���� w  x|x 
+`fP��{{~~���vvvvvv�����{{{~��ooooovvvvvvvvv�������~~����vvvoooZYb`w�x�զ-&"!!*6666!!!!!1 ������� w���|�� � ��x�xw �DD��R�CC�:�CEE@� �x}�w����� �����d���� z`IIIIIIJ_ �x ��ꌏ��w �
+x w � ch�P�~{���{��qvv�����~�����{~�hoooooovovvqq������~{{~���vvvvvooZ\�Kf�  ��!!! &++&%z����� xx� Ue DD�YC��CC@--E5ET�X�N� �
+��e�w����
+��
+
+
+
+
+
+
+�4�����ó9JIIIIIIJP��
+�U� xx��� w ����ch�P�{����{��������~{������~���boooooooqq�������~{��~��qoooooooZX�SR�w�wxx�" &��� ��w������� y�� � �e� ��F@-�C��CD::�:EEE-2H�HS����x ��� ����W������Ŀ�HIIIIIJN����� x�捣�� �yxx�ww��chTc{�����������~{{�����{~����hqooooovq�������~{���~��oooooooZZNզ���U�x���� ��w�w ���� �� �Uw �� �SET::-TD:T:-�:E5EC�PKFR��e�w��
+
+�W����������̦YJIIKKH9�� �xx
+�
+��� �e}� �
+
+
+
+�chY�`~{���{����~{{{����{~��������qooovq�������~{����~�qooooooZZZa��e�wU�� �w���������� � �w�PL@�-CDDTC::CDEED��HK�HM��x�w}w�|������ Wʺ�������ĭ��ǭGCW4Շ��wx�x� �����ےw� ۱�ch\�f�~{�{~~~~�����{{{~����q������qvvqq�������~����{��qoovooooOY�^�}� �wxU� ������� 
+��� xw�}�ww��FE:@E?@+T@T@E5DT�KHHM� ��e�� ��  W�µ����������ج����� ��
+U�x��
+� ���U� � ��c�X�f��~{{{{����{{~{~~����vq������������������~���{~��vvooooZkT�w� x � �� U_MM���wy �w� w�  FECTEEDTCDDC:E5ED�9JH�HM��xw��w�� 4µ�����������Ӭ���d w
+ U�xy�x 
+e �������w���c�g�N��~{{{�����~~~�~����vv�������������������{���{���vooooooa�w�}wwwxU�x�� 
+���cIIIJMM
+� �
+�  �RFECDEEDD?CD5EE@�NIH�H^� �  
+
+
+
+
+ U�w W�׾��������������̭��ꭸ
+ ������
+��� }� �chf�Q��~{{�����{~~������vvv�������~{~��������~{{�{~���vvvooZol� w�e x�yw � �4YKIIII`����� � ����  � UצPFEEDEEDDDDEEDC�RNIIX��x�����������������º������������������d�W ^
+� �| � ���   ��chf�S�~{{������{{~~����vvvv�����~��{{��������~{{{{����voooooZm�w��U ��w ��� �w �
+�KIIIIIM� ��
+ �� wx� ��WGHC�+T+DDAD>��MMKI2 �
+��������W4�ʺ���������������������  ��wwx� �ww
+��
+w�w� chh�S�~{��������{~~�����vvv����{����{���vv���~{{{~����vvvoooZZ�U�U� ������U
+�x� �
+�U<JIIIIIJ^x� ����������������x}��2C@C@@:�QXHS �e�������������4�ٴ�������������������ˬW �� ��
+ �U ��
+w �x�chh�V�~{��������{~�������vv���{{����~���vv���{{{{������qoooooZY�x ������ xxW����7IIIIIX ��� ����
+REDDE5D5EGNc^��
+7[�
+
+ � W�׾�����������������������WweU�x ���xw��� ��
+ �w �x��chhT��{��������~�������������{����{���vv����{{�{~~~~���vvvoooa����   �xw�
+UJJIJP�ʽ������� w FLEELLHJIJI`�� -�ʺ������������������������� |���x �����������  �� } � �����
+��chhY`�{�������~�������������~����~����q����~{��{{{{{~��qvvoook� �
+��� xw�<``<ޯ���������� ��� � NIIIIIJJIIII<���U ��Wվ��������������������������4
+ww x��B������
+
+ � �����������������chhP`�{������{�������������~{���~��h������~{�������{~���vvvooZ 
+ �x �w^�����W��B���ü�����������������w�GJIIIIIIIIIII`
+  ��x
+4�ս���������������������������4�
+Uw��� ��w�� w� � ������ꋤ���������
+�ch�GM�{�����{�������������{{���{��������~{��������{~����qvvoooY��U��x� xw�W�
+����������������������׹����MJIIIIIIIIIIIJ~��ܱ
+-�´���������������������������� ��
+��  � �
+��
+�`�X�_�{�����{�������~{~~~{���{{~���~~{�����������{~������qqoooa��|������ �����4��ً����������������������������w��WSNJIIIIIIIIIII<���� ���µ�����������������������������24}w �
+����x � ����w��chX�N�~{���{~�����~����������{{~~~{������������{{���������qvook�
+��}�}�}�ew}��� z{x��W������������������������������x�W��4XJJIIIIIIIIKRd-����ՇR��پ�������������������������������4
+�x �
+�x� � �������g�_�~{���{�����{����������{����������������{{������������qoon�e�U����x�xU��������������������������������
+W��
+�������RMcJIIIIKGWd�÷����4�ż��������������������������������4�}wx��� ���e�`g�j~{����{~��~�����������~����������������{~�������������qooZT�w�� w�� �xw���������������������������������������-����������ʾ�i\-��ſ�������������������������������������4�
+ wxyx� � �� ���w�`g�}{{{����{{�����������{~���������{{{�����{��������������qooo\�� �w���
+wwwww
+���������������������������������������޴��������������������֭�ʻ��������������������������������WW���w�U � y� � ����`g��{�����������������{~���������{�������{~������~{{~����ooooa�  �x �W���������������������������������������������������������ˇ׵�������������������������������֭d ���  U
+ � ����� w�`g��{{���������������{{����������������{{{������~{{{~���qooook���wU�����������������������������ļ����������������������������ż�������������������������������d�x^�� �� �
+��� �w�`f�^{{{�������������{{{~�������������{{{~~~������{���~���qoooon 
+� �U -������������������������������������������������������������������������������������֭W |� x � 
+
+��U|�� x�������`g�_~{{��������{{{~~~~~������������{{~~~~~������{{��{~���oooooZC�w�� 
+Ux ���������������������������������������������������������������������������ɿ����WWw �
+���w  �� �w��
+y��x�`XWM�~��������{�{~���~~����{������{{{{{~~�������{���~���qoooZm\� �  �w ��} W����������������������������������������������������������������������пɿ���4W  �  ��|�
+ 
+w��� �yx�`XWh�~����������{~�������~{������{{{{{{{~������~{���~����vZmT��
+^w��
+� � w�
+�we��w�W�������������������������������������������������������������������ǿ��W�  } wxw��
+ � �� ��  x�x�`\:I`~������������{��~~~~{�������{{{{��{~������{���{~��hblT���w ��� w  �U��wU� 2W������������������������������������������������������������������֬W���w�
+   �w� ����   w|x`TTI�{�������������{{~{{{�������{~~~{���{�����{����{�`NP��
+� ���
+w
+��U��� ���������������������������������������������������������������WW���w�Uw�w  ��  �����   cYJ�������������������{��������{��~{���{{��~{{{�{~cQ����w�  �wx   �}�� ����������������������������������������������������������˭d����w�e�� U� ���w :I<{�{�������������������{���{~��{������{{~~~~�UP�wxw 
+ wxw� ��^w�� W������������������������������������������������������W4ʱ�}w w�w  �w  �xw ��� ����� w �GM~���������������������{���{��~{�������{{�c_R� �wU ��� �w}� R���������������������������������������������������έ��U�w��
+
+wU  ������� 
+�
+�  ww�7U~{����������������������{~~{���������eB���w�} �ww��-W������������������������������������������������4}�w��  ww ����� �
+ �� �iU~{{������������������{{{��������{� �xU��x�w���4�������������������ǿ���������������������Ǽ���d��w���}
+� U��ew����}��wxxU W2Q�~{�����������������������������Uxxw��xewUw� ]����������������������������������������ɷ������}}�  � �x�e ���� x��S�~{��������������������������� ���U�x���� -��������������������������������������ɷ����w�  � �w�������}���x �PM~�������������{{���{{������{|���� �|�}WW�����������������������������������ɷ�����w��wU������
+�wQ~������������{{{���{������zyy|} �e�U�� -�����������������������������������ɷ��}�e �x ���}w���j{�����������~{{{��{������yz�x�w� �����������������������������������ɷ��4��}U�
+� ����� wwx�B�����������{{{{���������w zz�����4����������������������������������ɷ������w�x� �xx� ���������y�����������{{{����������U�
+�zxe� �� �����������������������������������ɷ����}U�|� �w������ ��}wxx�{����������������������� {zy� �
+�U^��W���������������������������������ɷ������x�
+U
+�������}���������������������������{�y���www��wwwU}��W���������������������������������ɲ�Ԭ���wxU�
+�����������U{����������������������^� {�y�}�w��Uwxx�yyyyy�x�wwwwwww���������������������������������ɷ������������������ ^j{����������������������U� �zy��}���x�yz{zzzzzz�yyx||w4��������������������������������ɷ��}�}��������������� �����w[�����������������������xyzy��^�����
+�B��Uwxyz{������{{zzyyy�xxxxxxwU4��������������������������������Ż�������������������� ���U�U�w_{����������������������{ yzyx�UUU^ � Uwww�xyz{���������{zz��y��yyy�x ����������������]��W�������������p������������ ����� ��������� ���������� w}��UwwwwwUUUU^�w_{������������������������x{�xU�Uwwwwwwwwwwwww�wwwwUUUUUx�wUwwxx�xyyyz{�����������{zx}� �� ��������������������������������������������������������������������������������������
+x����w�xxxxxwwwwwwwwwwUUx�_~{������������������������z�ww�|||xxx��y�xx�wwwwwww� yy�wxyy�zz�{zzz���������{ze �������������������������WWW�������W���-:RVVR-4-���������������������������������������������������������� w�x�xxwwxxyzzzzzzy���|x�x�y��xx�wwwxy_{{�������������������������{�z�www�x�yyyy�yy�yyyyyy�y�zzzz{�zz�yxx�xx�xyxxxzz�yxx�y�z{{�{�{�{zz{���{�w}���R��������������W�������������������������������լ���������������������������������� wxyz�x� ��yxUwww�|�y�z{�{���{�zyyyyy��yyyy��zzzz{zzz���yy�xxyx�y�i{������������������������ ���yx|�y�z{�{�{{{�{{�{z�{{�{{������{{{z�yyyyy�zzzzzzzz{�{{zyyzzz{{���������{�|������������ �wxx�z�z�zw-�����������п�ǿ���������-̿��Ǽ��  � ��
+� �wUyy�y�yz{ �w{yywUw�xxxx|x|�xxxyy�z�{����������{zz{{{{�{�{{�{�������{{{{�{z�yy�yyz{i������������������������yy���{zzy�zz{{�����������{��{���������������{{�{�{{{�{�{��{�����{�{�{��������{y�������������yzz�{�{zzz{�z�{�{����������������������������]����ɲ�����|yz{����{zzyyyyyy�xyxxxxxxxx�wyyzzz�{���{�wxy�zzzzzzzzzzzzz�{�{�����������������������������������������{�{{zz{�z��������������������������z�����{�{���������������������������������������������������������������{x�����������yz��{�zzyyyy�y��y�yy�z{���z4�����������RP¾����������-���ɷ����wyz��������{�{zzzz{zzzzzz��yyy�y��z��yy�xyzzz{{{����{zyxyz{�{��������������������������������������������������������������{���z������������������������������������������������������������������������������������������������x �������������z{����{{{zz�yzyyyxxxxxxx�yy�z{���4�����R�9297��� 4�������ά����þՠy��{�{����������������������{{���{{�{{{{{�{�zz{�{�����{yz��{z{�����������������������������������������������������������������������z����������������������������������������������������������������������������������������������z�� ���������� z������{{�{zzzzzyyyyyyxxxx|xxxy�z{� d�����4��������������������������
+y�����������������������������������������������������������������������������������������������������������������������������������y���������������������������������������������������������������������������������������������������������y���������{�{{{{zzzzzyyy�xxx|�|xxy�zz4�����֏���������-��֬�W�+"-�����٦ ����������������������������������������������������������������������������������������������������������������������������������y
+w���������������������������������������������������{{{zz{{{{������������������������������|��ꝛ��������y����������{�{�{��{�{{zzzzyyyyxxx|xxyz4�����؏�v����������������* �����4�ҭW��������������������������������������������������������������������������������������{�{{{{�{���������������������������������������������������������������������������������������{{z��yyyy�z{{��������������������������z�ꝛ�������y������{�{{�{��������{{�{{{zzzzyyy�xx|xz�ꭇW�又v����������������'WW���4���d�����������������������������������������������������������������������������������{��{��{�{�{{������������������������������������������������������������������������������������{zz�yy�y�yyy�z{{�����������������������^�������� w{����{{{{{{�{�{{{���������{�{{zzzzzyyxx|xy�������֝�mX�����������ج�����������]̿ˬ�յ����������������������������������������������������������������{�{�{�{�{��������{�{{�{�{{�{{�����������������������������������������������������{{{{{{{���������������������{zzyyxx|x|xxyy�z����������������������w
+������� e����{{{{zzzzzzz{{�������������{�{zzzyyy�xe|�x�������嬬��������4��������������������4ʻ�����������������������������{�{�{��������{�{{{{{{{{{{{{{{{{{{{{{{�{{�{����������{�{{{{�{{���������������������������������������������������{{{{�z�{�{{{�����������������{{zzyyxxx��||xxyyz{������������������z���������{�{{{{{zzz�yy�yzzz{{{������������{{{zzzyyyx|��y������������������W���]���������������W�������W��{���������������������{{{{{zz{z{z{{{{{z{zzzz�z�����y���y�y����zzz{�{�{�������{{�{{zzzzz{{{������������������������������������������������{�{zzzzzzzzz{{{�������������{{�z�yy�xx||xxy�z{����������������w������y{�{{�zzzz�yyyyyyyyzzz�{�����������{�{{zzzyyxx�e���4���������������W���d�����������������������4Ѩ������������������{{�zz��zy�y�y�y�y�yyyyyyy�yyyyyyyyyyyyyyyyyzzzz{{�{�{��{��{{�{zzzzzz�{{{����������������������������������������������{{zzzzzyzy��zz{{{����������{�zzzyyyxx|��xx�yz�{�������������{������ {�zzzzzzzzyyyy�yxxyyyzz{{��������������{{zzzyxxx 4��d���������������W���d��������������������������y���������������{{�zzzyyyyyyyyyyyyy�yy�xxxxxxxxxxxx||||||xxyyyyzzz{{�{�{{�{{�{zzzy�yz�zz�{{{������������������������������������������{{{�zzzzyzyyyyy�zz�{�{�{�{{{{zzzyyyyx|x�|xx�yz{�������������� z{z��zy�yyyyyyyxx|xyxxxyy�z{{{{{{{{{{{{{zzzyyyyy|x W��4���������������W������������������������������ҭո�{{{{{{{�����{{{zyyyy�yxyx�xxxxx|x|eee�|xx||x�yyyzzz{z{{�{zzzzyyyyyyyyyy�zz�{{{{�����������������������������������{�{�{�{zzzyyyyyyyyyyyzzz{z{zzzz�yyyy�x||�e|xyy�{��������������zzyyyyyyyyyyyyxx|�x�B������������������������^xww�����������������������������������������������������������{{{�y �����歭� ex������������|��|xxyyyy�z�yzyyyy��xx||||xxyyyyz�zz�{{{{{{{{{��������������������������{�{{�{zzzyzyy�xx|xxxyyyy�yy�yyyyy�xxx||eeeee�|xyz{�������{�����y�x�xxy�yyyyxxx||drsrrsrrrsssssrrrsrrsrrssp
+xww]rssssrsssssssssrsssssrdd���������]rssrssssssssssssssssssr ���{��psrsrsrsrsrs| psrsrsrsrss]}|wwwww�||xxyxy�yxyxx||e�e||xxyyyyyz�zzzzzz�{{{{{{{�������������������{{�{{{zzzyyyyxx|��x|xxxy�yx�xxxxxx||ewxxy�{{�����������xzyxx|xxxxxxxxxxxx rmovvvvvvvvtmnnnvvvvvvvvvvvl www �rmvvvvvvvvvtnnnnvvvvvvvvvn���������rmuvvvvvvvvtnnnnnnnnnnnnnk ��{{{x�mvvvvvvvvvvn�U�dnvvvvvvvvvupwwwwwww|�ewwwwwwwwwwe|xx�xyyyyyyz�zzzz�{�{{{{{�{������������z�{{zzzzyyyxx|�e||�|�|||||||�wwwwwwwwwwwwx�yz�{�z��z�|e�|||x||�e ]mvvvvvvvvvul��svvvvvvvvvvn�� ]mvvvovvovvts�lvvvvovovvvr�������dkvvvvvvvvvvs��������d� �{{z{svvvvvvvvvvvllvvvvvvvvvvmwwUUwwwwwwwwwwwUUUwwwwe�xxxyxyyyy�zzzzzz�z{�{{{{��������zzzzzzzyyy�xx�ee��e��wwwwwUUw�x�yzzB���y��e�e� ptvvvovoovovldtvvoovoovovlw
+ruvvvvvovvovl��puvvovvovovtd�������ptvvvoooooovm�������������4w{{�z��nvvooooooovt��puvvoooovovu]wUUUUUUU^^�Uwwwwee|xxyyyyyyzyz�zzzzz�{{������yzzz�yyyyxxx��eewwwUUwxyw��w�wwwwwwwwU�mvvovovvovvu]
+lvvovvovvovu]}�nvvovovoovvvp��lvvovovvovvl������mvvovvvvvvvup��������������4�{z{�rvvovvvvvvvvslvvovvvovovkU^����^UUwwwe||xxyyyyyyyyyyz�zz{{�����xyyyyyyyxxx|ewwwwwUUww���xwwwwwwwwwwww�svvovovoovovmdtvovvovvovvkU rvvovovovovvk��dnvovovoovvt]�����rvvovooooovvm����������������d{zykvovvooooovt]dtvovvovovvup����������}Uww�|xxxxy�yyyyyyy�zz�{����|xxx�xxx||ewwwwwwwwww����wwUUUUU�mvvvovovvvvup svvvvoovovvup^��nvvvovovovvup��lvvvvovovvvk�2����mvovvovvvvvup�����������������4z}rvvvvoovvvvvslvovvoovovvk�}}�Uwwe|xxxxxxxyyyyyyzz�{����|�||ewwwwwwwwwwwwwwwwwUU�����wU�UUU�rvvovvovooovk�]tvvoovvovovlsvvovvovovovl��]tvvoovovovvp �svvvoovoooovk�������������������d�mvvoovvoovvt] puvvoovvovvvp ���www|xxx�xxxyyyyyzz{{��wwwwwwwwwwwwwwwwwwwwwwwwwwwwU���� ��^��mvvvovvovvvt] lvvovvovovvop �dnvvvovvovvvu]��kvvovvovovvk[mvvovvovvvvvr��������������������-rvvovvovvovvkmvvvvvovvovk��������Uww�||xxxxxx�yyyzz{{�Uwwwwwwwwwwwwwwwwwwwwwwwwwwwww�
+ꍏ�}��
+rvvoovoovovvk ]tvovovovovvm�svvoovoovovvm��dtvovvovovvvr wU�pvvovvovvovvk����������������������kvvvoovoovvu] ]uvvooovoovvr
+�����Uww||||x|xxyy�z�{UUU������}�mvovvovvovvvp lvvvvovovovvr �mvvvvovvovvur��svvvvovovvvmUUkvovvoovoovvp����������������������ptvvovvvovvvl kvovovvovvvk �}Uwwwe�e�||xyyzz�UUUUUUUUUUUUUUUUUU�����rvvvovvovvovl dnvvoovovovvmsvvoovvovvovk���]uvvoovovovop  rvvvoovvovvvl�����������������������kvvovooovovt]
+rvvvovovvovop �  ��Uwwwwwwww�xyy����  kvvovovoovvup lvvovvovovvvr �mvvvoovoovvup��lvvovvovovvn�kvvovvovvovup�����������������������pvvvovvvvovvl�
+�mvvovovovvvm�  �UUwww|x��
+���  pvvovovovovvl dtvovvovovvvm�B rvvvovvovovvk���]uvvovovovvvs  rvvovoovoovvm�����������������������kvvovoooovvvrrvvovovovovvr�  ���UUUUUUww��������������  � kvvvovovovvu] lvovvoovvovvs �nvvoovovovvvr��lvvovovovvvn�kvvvovvovvvup���������������������]uvovovvvvvvk� �mvovvvovovvm� ������^�^w}}}�} �� �� � rvvvovovovovk
+]uvvoovvovvvnd� rvvovvovovovm��dnvvovvovovvs
+^ ptvvovovvovvk ������������������lvvvovoooovvprvvvoovvovvup
+  ���}}����   �� � � � �kvvovovvvovu] svvvvvovoovvs � �kvvvovovvovvr��lvvovovvovvn�kvvovovovovt] ������������������]uvovvovvvvvk �nvovvoovvovm�� ����������������^�  �� � B � 
+]tvovovoovvvk ]uvvooovovvvm�� rvvoovovoovvm��dtvovovoovvvl ]uvovovovovvk� ��������������lvvvoovvoovvpsvvvoovvovvvr dsssssssssss�� ����   ����  � �� � kvvvvvovvovtd��lvovovvvvvvm] � �mvvvvovovvvvr��lvovovovvovt]�kvovvvovovvup���������W�����������]uvvovvvovvvm�]nvvovvvoovvm�� �lvvvvvvvvvvm �� � � � � �  ����
+
+
+
+
+
+
+� pvvvoovvovvvnlklknvvvovovotkr �rvvoovvovoovm��duvvvvovovvvl�
+]uvvoovvovovtkklllllllks����������lvvovooovoovnlklktvvovooovvvvr� ]uvvvvvvvvvup ������  B  �  �  ��� ���
+�
+
+
+
+
+
+
+ �mvovvoovoovommmmmnvovvovouk]�
+ �kvvvoovvovvvs��svvoovvovovt] lvvvvoovvovummmmmmmmmmml -������nvvovvvovvvtmmmmmuvovovvvoovm� lvvovovovovl �� � � � �� � � ��  ��
+
+
+
+
+
+
+
+
+
+ ]tvvoovvovvvkmvvoovovvvm� ]uvoovvoovvvn���dtvovvoovovvl  ]tvvoovvoovvl
+����lvvovooovovvrptvvovvoovvvr 
+]uvvovovovvv]    �� ��� �� � �  �
+
+
+
+
+
+
+
+
+
+
+ lvvovvvovovvprovovvvvovvm kvovvvovvvovs��lvovvovvovvu]�lvovovvovvvt] � � � �  � ��dnvvvovvvovvm���lvvovvoovvvn�  �lvvovvovovvk �� �   ��� ��   �� �
+
+ �
+
+
+puvovooovovvl �nvvvooovvovs ruvvooovooovm���]uvvoovoovovk�  puvvovoovoovl�� �B �
+�lvvovvoovvovs��pvvvovovvovvr rvvvovovovvt] �� ��� � �
+
+
+
+�
+
+
+
+
+
+
+
+
+
+ � 
+
+
+ lvvvovvovvvvpsvvovvvoovvtd�
+
+
+�mvvvvvovvvvvs��lvvovvovvovvp lvvovovvovvn  �
+
+
+dtvvoovvoovvnd���lvvovovovovm� �kvvovovovovl � �  � �
+
+
+
+
+
+ �
+�
+
+
+
+� � � � ��
+
+ ]uvvovvovoovn���nvvvooovovvs
+
+
+]uvvooovooovtd���nvovvovvovvm� �nvovovvovvvs
+
+
+rvvovvoovvvvs��dtvovovovovvs puvvvvvvvvvtd� � �   �� � � � � �
+
+
+�
+
+ � �
+
+
+ �
+�
+� � �� �
+
+ ��lvovovovovvvsrvvvovvvovvt]
+ lvovovvovvvvs��svvvvoovovvur lvvvovvoovvm� �
+
+�nvvovovvvovnd���lvovvvovovvm� pllslslslslr�� � � �  � � �
+
+
+
+
+�
+
+
+
+
+
+
+
+
+
+ �  � �
+
+ dtvvovovovovm� �nvvovoovvovs� puvvovovvovvn����dtvvoovvovovk�
+dtvvovoovvvvp�� �
+�svvovovooovvr��]tvvoovvovvvs
+
+
+����������� � �� ��� �
+
+ 
+
+
+
+
+
+
+
+
+�
+
+
+ �� � � �
+ �lvvovovovovvssvvovovvovvu] �lvvovovovovvr��lvvovvovovvvs lvvovovvoovk� � �nvvovovvvvvtd��kvvvvoovvovn�
+
+
+ �� �� � � �
+
+
+ ��
+
+
+
+
+� �
+�
+
+
+
+
+
+
+
+
+�
+� dnvovvvovovvn��dtvovovovovvm� pvvovovovovvtd���tvvvoovovovn��
+ �tvovovvovvu]  svvovovooovvl��dtvvoovvoovvs
+
+
+
+ � 
+
+
+
+ �
+
+
+
+
+
+ 
+
+
+
+
+  � � � 
+
+
+
+
+ �lvvvvoovovvvssvvvovvovovvr �lvovovvovovvl��svovovvovovvs
+
+ svvvovvovvvs�
+�mvvvovovvvvt]��svovovvovvvn�� ���
+ �  � �
+�   �
+
+
+
+
+
+ �
+
+
+
+� 
+
+
+
+
+�
+
+ dtvvoovvovovt]nvvovoovovvm���dtvvvvoovovvn����dtvvovovvovvn� �dnvvovoovovnd �� � rvvovvovooovl���]tvvovoovovvr
+ �d�d�d�dd�dd�
+ �
+�
+
+�
+
+ �� ��
+
+ 
+
+
+
+
+
+
+� 
+
+
+ 
+
+ �svvovvovvovvlsvvovovvovvvr����lvvoovvvovovl��svvvovoovvvvrsvvovovvovvs  �mvvvovvovvvt���svvvvovvovvn�
+�rttttttttttnd
+
+
+
+
+
+
+
+
+ �
+
+
+
+
+�
+
+ � 
+
+
+
+
+
+  �nvovoovoovvud�tvvvovvovvvm-���dtvovvooovvvn����]tvvovovvoovtddnvvvovvovvn�   rvvoovoovovvl���]tvvoovovovvl�
+ �kvvvvvvvvvvl
+
+  � �
+
+
+
+
+
+
+
+
+� 
+
+
+
+
+
+ ��svvvovvvovvvl��lvovovvovovvs�����lvovvovvvovvl��svvovovvovvvl�svvvovvovvur  �� �mvovvovvovvvp��svvovvovovvn��� puvovooooovnd � ������ ��������]tvvovooovovt]�dtvvovoovovvtd����dtvvoovoovvvu]���nvvovvoovovtdmvvovoovovk� pvvvovvovvovl��nvvvovvovvvs���mvvvovvvvvvl ���������������������������svvovovvvovvk��svvvovvovovvs�����svvvvovvoovvl��svvovovvovvvl�svvvovvovvvp ��  ��kvvovovoovvvp�svvovoovvovn����4rvvovvoooovtd ����������������������������mvvvovvoovvt]�dtvvovovovvvm�������dnvvoovoovvvn����tvovovovovvnmvvovovovvl � pvvovovovovvk��nvvvovvoovvs����mvvvoovvvvvs ������������������������������������������������svvvovvovvom]lvvovovovvvm]�����svvovvovvvomd��lvvvovovovum]����svvovovovvt] � ���������������kvovovovovvopsvvvovvovvvt]�����rvvvoovvoovnd �������������������������������������������������]llllllllllllllmvvvvvvvvvvtlllllnvvvvvvvvvnr�������rvvvvvvvvvtlllllmvvvvvvvvvvnllllllllmvvvvvvvvvor � rllllllllllllllnvvvvvvvvvvvm�dtvvvvvvvvvvs�����mvvvvvvvvvvr �����������������������������������������rmnmmmmmmmmmmmnmmmmmmmmmmmmmmnmmmmmmmmmmlr����������rkmmmmmmmmmmnmmnmmmmmmmmmmmmmmnmmmmmmmmmmmmklp�
+
+
+ snmmmmmmmmmmmmnmmmmmmmmmmmmr�pmmmmmmmmmmkd�����rtnnnnnnnntm����������������������������������������
+
+ ���������������� ������������������������������ �������������������������
+�
+
+
+
+
+
+
+ �����������W�����������������ҭ4�W�������������������������������� �����������������������٬
+ �
+
+
+ 
+
+ �
+
+ �������������������������� ������������������������������ jR��������������������؇
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+ �������������������������������������������������������GEDC�������������������-
+�
+
+
+
+
+
+
+
+
+ 
+
+ �����������������������- ������������������������������������CTDEEC����������������: �
+�
+  �
+ �
+ ��������������������������������������������������������������������RDEDE5ED:���p���������-   �����������
+
+
+�
+�����������������������Ϭ�������CCCCCCYYC2@Y��������������������]]]p]p]]����������W�����@EDCDADDE@��������֬-����������������������
+d]]]]p]p��������������������]d]d>EE@\DEEED@@@��������������������snuvvvvvvk�������������Y@DEDR@CD@ED����-�����W ������������������� �rnuuuuuumsd����-��������������louvsWTC@D@@DC@DEDY������������������������pvvvt]����������������@E@CDDCTCD@EE:�ά���W �������������puvvup��������������]tvvtd+CT:C@@@DCC@C�������������������mvvvs���������������TTTCDCYCTD@EETW��������������mvvvl�������������kvuvs4TTR@C2CTCT:�������������������rvvvn����������������T@ECCCCDDEDTY�������������pvvvt]��2��������WddddT@C:@T:�����������������������mvvvl���������������-CE@@@CDDE2FG�������������������mvvvk���������TCDEA+>>-?DTC:�������������������������rvvvt]���������������������������d-pA--]p��]+�����߳߳������������������������������]tvvup�����]>44]�]>DC+]�������������������������������kvvvvvvvvkdpkvvvvvvvs�pkvvvvvvk]rvvk]mvkrkvvvvvvkprvvvvvvvs��rvvvvvvvkp��������dsvvrsvvs�pkvvvvvvkp�rkvvvvvvvldsvvvvvvvs]]kvvvvvvkp]kvvvvvvvkrssvvd��svvvvvvvsd�rvvvvvvvsssrssvvvvvvvs���������������d]d]]rvvvu]mvvvldmvvvrkvvvssvvvnruvvnrtvvmpuvvtprvvvkrvvvtpmvvvsdmvvur]]]]]d������svvvlsuvvmmvvvlsvvvk�pnvvvrrvvvtdlvvvl�kvvvskvvvlrvvvn�sovvn]]]]]]dlvvvmlvvvm�kvvvsdnvvvrrtvvvsdpnvvvs]nvvvr�����������������lvvvlrvvvmrvvvudpvvvnrvvvmsvvvsdtvvvpnvvvskvvvlkvvvskvvvslvvvk�����������nvvu]dtvvvrpuvvnpovvnkvvvllvvvkrvvvt�]tvvvppvvvudpvvvn]uvvvr��svvvkpuvvtddtvvvpkvvvllvvvksvvvmsvvvtd���������������]tvvt]]nvvusrnvvvsmvvvrkvuuplvvvplvvvlsvvvnplvvvt�ptvvndpuuompvvvvr������W����svvvllvvvmkvvvsmvvvspuvvt]puvvvr�nvvvlpmvvvslvvvllouossvvvm��mvvvr�kvvvlpmvvvlptvvu]]tvvvp]tvvtrrtvvvs�������������kvvvskvvvvvvvvvlsvvvn]d]dmvvmruvvkptvvvvvvvvmpmvvvsd]]]louuumnnnnl���������]tvvtd�nvvu]rvvvmpvvvm�mvvvslvvvklvvvvvvvvml�puvvt�]]]d�nouunmnnnnpsvvvklvvvvvvvvvl�kvvvkkvvvl�mvvvvvvvvms�����������puvvu]svvvt]nvvvs�����tvvsmvvupmvvvlrvvvt����d]]]dptvvvs���������lvvvklvvvl�nvvvskvvvrpuvvu]dtvvvrpuvvt]kvvvs]]]]]svvvnmvvvppuvvvr]tvvt]dtvvu]svvvtd�������mvvvknvvvs����rvvvn�rvvukvvvlsvvvt]���mvvvl��svvvtd���������dkvotrkvovlmvvnpkvuvs]kvvurrtvvm]]kvvurpppp�svots���������mvvvlrvvvnkvvvl��svvvllvvvmdnvvvr������pppkvvvvvvvvtvum]pmovvvvvvm�mvvnr��lvoutvvmdlvvvvvvvvmpvvukddpvvvvvvvunr���������dkvvvvvvk�kvvkkvvk�pkvvvvvvkkvvvvvvvk�kvvk�������������]mvvvvvvoukmvouskvovvvvvk�kvouvvvvvurpkvvvvvvvk��������]pp]pp]pp]ppppd]p]]]p]p]�pp]��]p]pp]pd��ppp]p]ppddppd���pppppppp]����������������������������������]ppppppppd]]]]dppp]]ppp��pp]]lvvvk]pp]p]pp]�����������������������������������������������������������������������������������������������������]tvvu]��������������������������������������������������������������������������������������������������������������������������������������lvvvk����������������������������������������������������������������������������������������������W�����������������������������dd]d]drvvvtp������������������������������������������������������������������������W�����������������������������������������������rsvvvvvvvk����������������������������������������������������W������W����W������W�W����������������W�������������������W���W��W�������������������W�����������������W�������W��������W�����������������������������
BIN  data/swish.smp
Binary file not shown
BIN  data/taunt1.smp
Binary file not shown
BIN  data/taunt2.smp
Binary file not shown
BIN  data/taunt3.smp
Binary file not shown
BIN  data/taunt4.smp
Binary file not shown
BIN  data/taunt5.smp
Binary file not shown
BIN  data/taunt6.smp
Binary file not shown
BIN  data/tech.spr
Binary file not shown
BIN  data/title.spr
Binary file not shown
BIN  data/uzi.smp
Binary file not shown
BIN  data/uziman.spr
Binary file not shown
BIN  data/weapon.spr
Binary file not shown
25 license.txt
@@ -0,0 +1,25 @@
+Copyright (c) 2000-2007, Lasse ��rni, Kalle Niemitalo, Olli Niemitalo,
+Tuomas M�kel�. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+- Neither the name of "Electric Harem" nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
BIN  missions/original.blk
Binary file not shown
BIN  missions/original.inf
Binary file not shown
BIN  missions/original.map
Binary file not shown
BIN  missions/original.mis
Binary file not shown
BIN  missions/test.blk
Binary file not shown
BIN  missions/test.inf
Binary file not shown
BIN  missions/test.map
Binary file not shown
BIN  missions/test.mis
Binary file not shown
3,217 src/actor.c
3,217 additions, 0 deletions not shown
BIN  src/bgedit.cfg
Binary file not shown
BIN  src/bigfnt.lbm
Binary file not shown
BIN  src/blackfnt.lbm
Binary file not shown
20 src/bme.h
@@ -0,0 +1,20 @@
+// BME header file for user applications
+
+#ifndef BME_H
+#define BME_H
+
+#include <SDL/SDL.h>
+#include "bme_main.h"
+#include "bme_cfg.h"
+#include "bme_err.h"
+#include "bme_snd.h"
+#include "bme_gfx.h"
+#include "bme_win.h"
+#include "bme_kbd.h"
+#include "bme_mou.h"
+#include "bme_joy.h"
+#include "bme_map.h"
+#include "bme_txt.h"
+#include "bme_io.h"
+
+#endif
17 src/bme_cfg.h
@@ -0,0 +1,17 @@
+#ifndef BME_CFG_H
+#define BME_CFG_H
+
+// BME configuration (some static things)
+
+#define MAX_JOYSTICKS 16 // Maximum joysticks
+#define MAX_HANDLES 16 // Up to 16 simultaneus files open from the
+ // datafile
+
+#define MAX_COLORS 256 // 8bit oldskool mode
+
+#define DEFAULT_MAX_SPRFILES 256 // Default maximum of 256 spritefiles, though
+ // this can be set during running of program
+
+#define MAX_KEYS 512
+
+#endif
23 src/bme_err.h
@@ -0,0 +1,23 @@
+#ifndef BME_ERR_H
+#define BME_ERR_H
+
+// BME error code header file
+
+// BME function return codes
+
+#define BME_OK 1
+#define BME_ERROR 0
+
+// BME detailed error types (in bme_error)
+
+#define BME_OPEN_ERROR -1
+#define BME_READ_ERROR -2
+#define BME_WRONG_FORMAT -3
+#define BME_OUT_OF_MEMORY -4
+#define BME_THREAD_ERROR -5
+#define BME_ILLEGAL_CONFIG -6
+#define BME_OUT_OF_CHANNELS -7
+#define BME_GRAPHICS_ERROR -8
+#define BME_SOUND_ERROR -9
+
+#endif
51 src/bme_gfx.h
@@ -0,0 +1,51 @@
+#ifndef BME_GFX_H
+#define BME_GFX_H
+
+// BME graphics module header file
+
+int gfx_init(unsigned xsize, unsigned ysize, unsigned framerate, unsigned flags);
+int gfx_reinit(void);
+void gfx_uninit(void);
+void gfx_updatepage(void);
+void gfx_blitwindow(void);
+void gfx_wipepages(void);
+void gfx_setclipregion(unsigned left, unsigned top, unsigned right, unsigned bottom);
+void gfx_setmaxspritefiles(int num);
+void gfx_setmaxcolors(int num);
+int gfx_loadpalette(char *name);
+void gfx_calcpalette(int fade, int radd, int gadd, int badd);
+void gfx_setpalette(void);
+int gfx_loadblocks(char *name);
+int gfx_loadsprites(int num, char *name);
+void gfx_freesprites(int num);
+
+void gfx_drawblock(int x, int y, unsigned num);
+void gfx_drawsprite(int x, int y, unsigned num);
+void gfx_drawspritec(int x, int y, unsigned num, int color);
+void gfx_drawspritex(int x, int y, unsigned num, Uint8 *xlattable);
+void gfx_getspriteinfo(unsigned num);
+void gfx_fillscreen(char color);
+void gfx_plot(int x, int y, char color);
+void gfx_line(int x1, int y1, int x2, int y2, int color);
+
+extern int gfx_initted;
+extern int gfx_scanlinemode;
+extern int gfx_preventswitch;
+extern int gfx_fullscreen;
+extern unsigned gfx_windowxsize;
+extern unsigned gfx_windowysize;
+extern unsigned gfx_virtualxsize;
+extern unsigned gfx_virtualysize;
+extern unsigned gfx_nblocks;
+extern int gfx_blockxsize;
+extern int gfx_blockysize;
+extern int spr_xsize;
+extern int spr_ysize;
+extern int spr_xhotspot;
+extern int spr_yhotspot;
+extern Uint8 *gfx_vscreen;
+extern Uint8 *gfx_blocks;
+extern Uint8 gfx_palette[];
+extern BLOCKHEADER *gfx_blockheaders;
+
+#endif
19 src/bme_io.h
@@ -0,0 +1,19 @@
+#ifndef BME_IO_H
+#define BME_IO_H
+
+// BME IO module header file
+
+int io_open(char *name);
+int io_lseek(int handle, int bytes, int whence);
+int io_read(int handle, void *buffer, int size);
+void io_close(int handle);
+int io_opendatafile(char *name);
+int io_openlinkeddatafile(unsigned char *ptr);
+void io_setfilemode(int usedf);
+unsigned io_read8(int handle);
+unsigned io_readle16(int handle);
+unsigned io_readle32(int handle);
+unsigned io_readhe16(int handle);
+unsigned io_readhe32(int handle);
+
+#endif
9 src/bme_joy.h
@@ -0,0 +1,9 @@
+#ifndef BME_JOY_H
+#define BME_JOY_H
+
+// Joystick functions header file
+
+int joy_detect(unsigned id);
+unsigned joy_getstatus(unsigned id, int threshold);
+
+#endif
15 src/bme_kbd.h
@@ -0,0 +1,15 @@
+#ifndef BME_KBD_H
+#define BME_KBD_H
+
+// BME keyboard functions header file
+
+int kbd_init(void);
+void kbd_uninit(void);
+int kbd_waitkey(void);
+int kbd_getkey(void);
+int kbd_checkkey(int rawcode);
+int kbd_getascii(void);
+unsigned kbd_getvirtualkey(void);
+char *kbd_getkeyname(int rawcode);
+
+#endif
226 src/bme_main.h
@@ -0,0 +1,226 @@
+#ifndef BME_MAIN_H
+#define BME_MAIN_H
+
+// BME main definitions header file
+
+#define GFX_SCANLINES 1
+#define GFX_DOUBLESIZE 2
+#define GFX_USE1PAGE 0
+#define GFX_USE2PAGES 4
+#define GFX_USE3PAGES 8
+#define GFX_WAITVBLANK 16
+#define GFX_FULLSCREEN 32
+#define GFX_WINDOW 64
+#define GFX_NOSWITCHING 128
+#define GFX_USEDIBSECTION 256
+
+#define MOUSE_ALWAYS_VISIBLE 0
+#define MOUSE_FULLSCREEN_HIDDEN 1
+#define MOUSE_ALWAYS_HIDDEN 2
+
+#define MOUSEB_LEFT 1
+#define MOUSEB_RIGHT 2
+#define MOUSEB_MIDDLE 4
+
+#define JOY_LEFT 1
+#define JOY_RIGHT 2
+#define JOY_UP 4
+#define JOY_DOWN 8
+#define JOY_FIRE1 16
+#define JOY_FIRE2 32
+#define JOY_FIRE3 64
+#define JOY_FIRE4 128
+
+#define LEFT 0
+#define MIDDLE 128
+#define RIGHT 255
+
+#define B_OFF 0
+#define B_SOLID 1
+#define B_NOTSOLID 2
+
+#define MONO 0
+#define STEREO 1
+#define EIGHTBIT 0
+#define SIXTEENBIT 2
+
+#define VM_OFF 0
+#define VM_ON 1
+#define VM_ONESHOT 0
+#define VM_LOOP 2
+#define VM_16BIT 4
+
+#define KEY_BACKSPACE SDLK_BACKSPACE
+#define KEY_CAPSLOCK SDLK_CAPSLOCK
+#define KEY_ENTER SDLK_RETURN
+#define KEY_ESC SDLK_ESCAPE
+#define KEY_ALT SDLK_LALT
+#define KEY_CTRL SDLK_LCTRL
+#define KEY_LEFTCTRL SDLK_LCTRL
+#define KEY_RIGHTALT SDLK_RALT
+#define KEY_RIGHTCTRL SDLK_RCTRL
+#define KEY_LEFTSHIFT SDLK_LSHIFT
+#define KEY_RIGHTSHIFT SDLK_RSHIFT
+#define KEY_NUMLOCK SDLK_NUMLOCK
+#define KEY_SCROLLLOCK SDLK_SCROLLOCK
+#define KEY_SPACE SDLK_SPACE
+#define KEY_TAB SDLK_TAB
+#define KEY_F1 SDLK_F1
+#define KEY_F2 SDLK_F2
+#define KEY_F3 SDLK_F3
+#define KEY_F4 SDLK_F4
+#define KEY_F5 SDLK_F5
+#define KEY_F6 SDLK_F6
+#define KEY_F7 SDLK_F7
+#define KEY_F8 SDLK_F8
+#define KEY_F9 SDLK_F9
+#define KEY_F10 SDLK_F10
+#define KEY_F11 SDLK_F11
+#define KEY_F12 SDLK_F12
+#define KEY_A SDLK_a
+#define KEY_N SDLK_n
+#define KEY_B SDLK_b
+#define KEY_O SDLK_o
+#define KEY_C SDLK_c
+#define KEY_P SDLK_p
+#define KEY_D SDLK_d
+#define KEY_Q SDLK_q
+#define KEY_E SDLK_e
+#define KEY_R SDLK_r
+#define KEY_F SDLK_f
+#define KEY_S SDLK_s
+#define KEY_G SDLK_g
+#define KEY_T SDLK_t
+#define KEY_H SDLK_h
+#define KEY_U SDLK_u
+#define KEY_I SDLK_i
+#define KEY_V SDLK_v
+#define KEY_J SDLK_j
+#define KEY_W SDLK_w
+#define KEY_K SDLK_k
+#define KEY_X SDLK_x
+#define KEY_L SDLK_l
+#define KEY_Y SDLK_y
+#define KEY_M SDLK_m
+#define KEY_Z SDLK_z
+#define KEY_1 SDLK_1
+#define KEY_2 SDLK_2
+#define KEY_3 SDLK_3
+#define KEY_4 SDLK_4
+#define KEY_5 SDLK_5
+#define KEY_6 SDLK_6
+#define KEY_7 SDLK_7
+#define KEY_8 SDLK_8
+#define KEY_9 SDLK_9
+#define KEY_0 SDLK_0
+#define KEY_MINUS SDLK_MINUS
+#define KEY_EQUAL SDLK_EQUALS
+#define KEY_BRACKETL SDLK_LEFTBRACKET
+#define KEY_BRACKETR SDLK_RIGHTBRACKET
+#define KEY_SEMICOLON SDLK_SEMICOLON
+#define KEY_APOST1 SDLK_QUOTE
+#define KEY_APOST2 SDLK_BACKQUOTE
+#define KEY_COMMA SDLK_COMMA
+#define KEY_COLON SDLK_PERIOD
+#define KEY_PERIOD SDLK_PERIOD
+#define KEY_SLASH SDLK_SLASH
+#define KEY_BACKSLASH SDLK_BACKSLASH
+#define KEY_DEL SDLK_DELETE
+#define KEY_DOWN SDLK_DOWN
+#define KEY_END SDLK_END
+#define KEY_HOME SDLK_HOME
+#define KEY_INS SDLK_INSERT
+#define KEY_LEFT SDLK_LEFT
+#define KEY_PGDN SDLK_PAGEDOWN
+
+#endif
+#define KEY_PGUP SDLK_PAGEUP
+#define KEY_RIGHT SDLK_RIGHT
+#define KEY_UP SDLK_UP
+#define KEY_WINDOWSL SDLK_LSUPER
+#define KEY_WINDOWSR SDLK_RSUPER
+#define KEY_MENU SDLK_MENU
+#define KEY_PAUSE SDLK_PAUSE
+#define KEY_KPDIVIDE SDLK_KP_DIVIDE
+#define KEY_KPMULTIPLY SDLK_KP_MULTIPLY
+#define KEY_KPPLUS SDLK_KP_PLUS
+#define KEY_KPMINUS SDLK_KP_MINUS
+#define KEY_KP0 SDLK_KP0
+#define KEY_KP1 SDLK_KP1
+#define KEY_KP2 SDLK_KP2
+#define KEY_KP3 SDLK_KP3
+#define KEY_KP4 SDLK_KP4
+#define KEY_KP5 SDLK_KP5
+#define KEY_KP6 SDLK_KP6
+#define KEY_KP7 SDLK_KP7
+#define KEY_KP8 SDLK_KP8
+#define KEY_KP9 SDLK_KP9
+#define KEY_KPUP SDLK_KP8
+#define KEY_KPDOWN SDLK_KP2
+#define KEY_KPLEFT SDLK_KP4
+#define KEY_KPRIGHT SDLK_KP6
+#define KEY_KPENTER SDLK_KP_ENTER
+#define KEY_KPEQUALS SDLK_KP_EQUALS
+#define KEY_KPPERIOD SDLK_KP_PERIOD
+
+
+typedef struct
+{
+ Sint8 *start;
+ Sint8 *repeat;
+ Sint8 *end;
+ unsigned char voicemode;
+} SAMPLE;
+
+typedef struct
+{
+ volatile Sint8 *pos;
+ Sint8 *repeat;
+ Sint8 *end;
+ SAMPLE *smp;
+ unsigned freq;
+ volatile unsigned fractpos;
+ int vol;
+ int mastervol;
+ unsigned panning;
+ volatile unsigned voicemode;
+} CHANNEL;
+
+typedef struct
+{
+ unsigned rawcode;
+ char *name;
+} KEY;
+
+typedef struct
+{
+ Sint16 xsize;
+ Sint16 ysize;
+ Sint16 xhot;
+ Sint16 yhot;
+ Uint32 offset;
+} SPRITEHEADER;
+
+typedef struct
+{
+ Uint32 type;
+ Uint32 offset;
+} BLOCKHEADER;
+
+typedef struct
+{
+ Uint8 blocksname[13];
+ Uint8 palettename[13];
+} MAPHEADER;
+
+typedef struct
+{
+ Sint32 xsize;
+ Sint32 ysize;
+ Uint8 xdivisor;
+ Uint8 ydivisor;
+ Uint8 xwrap;
+ Uint8 ywrap;
+} LAYERHEADER;
+
+extern int bme_error;
24 src/bme_map.h
@@ -0,0 +1,24 @@
+#ifndef BME_MAP_H
+#define BME_MAP_H
+
+// BME blockmap module header file
+
+#define MAX_LAYERS 4
+
+extern MAPHEADER map_header;
+extern LAYERHEADER map_layer[MAX_LAYERS];
+extern unsigned short *map_layerdataptr[];
+extern unsigned char *map_blkinfdata;
+
+void map_freemap(void);
+int map_loadmap(char *name);
+void map_drawalllayers(int xpos, int ypos, int xorigin, int yorigin, int xblocks, int yblocks);
+void map_drawlayer(int l, int xpos, int ypos, int xorigin, int yorigin, int xblocks, int yblocks);
+int map_loadblockinfo(char *name);
+unsigned map_getblocknum(int l, int xpos, int ypos);
+void map_setblocknum(int l, int xpos, int ypos, unsigned num);
+unsigned char map_getblockinfo(int l, int xpos, int ypos);
+void map_shiftblocksback(unsigned first, int amount, int step);
+void map_shiftblocksforward(unsigned first, int amount, int step);
+
+#endif
12 src/bme_mou.h
@@ -0,0 +1,12 @@
+#ifndef BME_MOU_H
+#define BME_MOU_H
+
+// BME mouse functions header file
+
+void mou_init(void);
+void mou_uninit(void);
+void mou_getpos(unsigned *x, unsigned *y);
+void mou_getmove(int *dx, int *dy);
+unsigned mou_getbuttons(void);
+
+#endif
58 src/bme_snd.h
@@ -0,0 +1,58 @@
+#ifndef BME_SND_H
+#define BME_SND_H
+
+// Sound functions header file
+
+int snd_init(unsigned mixrate, unsigned mixmode, unsigned bufferlength, unsigned channels, int usedirectsound);
+void snd_uninit(void);
+void snd_setcustommixer(void (*custommixer)(Sint32 *dest, unsigned samples));
+SAMPLE *snd_allocsample(int length);
+void snd_freesample(SAMPLE *smp);
+void snd_playsample(SAMPLE *smp, unsigned chnum, unsigned frequency, unsigned char volume, unsigned char panning);
+void snd_ipcorrect(SAMPLE *smp);
+void snd_stopsample(unsigned chnum);
+void snd_preventdistortion(unsigned channels);
+void snd_setmastervolume(unsigned chnum, unsigned char mastervol);
+void snd_setmusicmastervolume(unsigned musicchannels, unsigned char mastervol);
+void snd_setsfxmastervolume(unsigned musicchannels, unsigned char mastervol);
+SAMPLE *snd_loadrawsample(char *name, int repeat, int end, unsigned char voicemode);
+SAMPLE *snd_loadwav(char *name);
+int snd_loadxm(char *name);
+void snd_freexm(void);
+void snd_playxm(int pos);
+void snd_stopxm(void);
+unsigned char snd_getxmpos(void);
+unsigned char snd_getxmline(void);
+unsigned char snd_getxmtick(void);
+unsigned char snd_getxmchannels(void);
+char *snd_getxmname(void);
+int snd_loadmod(char *name);
+void snd_freemod(void);
+void snd_playmod(int pos);
+void snd_stopmod(void);
+unsigned char snd_getmodpos(void);
+unsigned char snd_getmodline(void);
+unsigned char snd_getmodtick(void);
+unsigned char snd_getmodchannels(void);
+char *snd_getmodname(void);
+int snd_loads3m(char *name);
+void snd_frees3m(void);
+void snd_plays3m(int pos);
+void snd_stops3m(void);
+unsigned char snd_gets3mpos(void);
+unsigned char snd_gets3mline(void);
+unsigned char snd_gets3mtick(void);
+unsigned char snd_gets3mchannels(void);
+char *snd_gets3mname(void);
+
+extern void (*snd_player)(void);
+extern CHANNEL *snd_channel;
+extern int snd_sndinitted;
+extern int snd_bpmtempo;
+extern int snd_bpmcount;
+extern int snd_channels;
+extern int snd_buffers;
+extern unsigned snd_mixmode;
+extern unsigned snd_mixrate;
+
+#endif
11 src/bme_tbl.h
@@ -0,0 +1,11 @@
+#ifndef BME_TBL_H
+#define BME_TBL_H
+
+// Internal header file: tables needed in module playing
+
+extern signed char retrigaddtable[];
+extern signed char retrigmultable[];
+extern unsigned char vibratotypetable[];
+extern signed char vibratotable[4][256];
+
+#endif
15 src/bme_txt.h
@@ -0,0 +1,15 @@
+#ifndef BME_TXT_H
+#define BME_TXT_H
+
+// BME text printing module header file
+
+void txt_print(int x, int y, unsigned spritefile, char *string);
+void txt_printcenter(int y, unsigned spritefile, char *string);
+void txt_printx(int x, int y, unsigned spritefile, char *string, unsigned char *xlattable);
+void txt_printcenterx(int y, unsigned spritefile, char *string, unsigned char *xlattable);
+
+extern int txt_lastx;
+extern int txt_lasty;
+extern int txt_spacing;
+
+#endif
32 src/bme_win.h
@@ -0,0 +1,32 @@
+#ifndef BME_WIN_H
+#define BME_WIN_H
+
+// BME windows, input & timing module header file
+
+int win_openwindow(char *appname, char *icon);
+void win_closewindow(void);
+void win_messagebox(char *string);
+void win_checkmessages(void);
+int win_getspeed(int framerate);
+void win_setmousemode(int mode);
+
+extern int win_windowinitted;
+extern int win_quitted;
+extern int win_fullscreen;
+extern unsigned char win_keytable[MAX_KEYS];
+extern unsigned char win_keystate[MAX_KEYS];
+extern unsigned char win_asciikey;
+extern unsigned win_virtualkey;
+extern unsigned win_mousexpos;
+extern unsigned win_mouseypos;
+extern unsigned win_mousexrel;
+extern unsigned win_mouseyrel;
+extern unsigned win_mousebuttons;
+extern int win_mousemode;
+SDL_Joystick *joy[MAX_JOYSTICKS];
+extern Sint16 joyx[MAX_JOYSTICKS];
+extern Sint16 joyy[MAX_JOYSTICKS];
+extern Uint32 joybuttons[MAX_JOYSTICKS];
+
+#endif
+
2,114 src/bofh.c
@@ -0,0 +1,2114 @@
+/*
+ * BOFH: Servers Under Siege V1.5
+ * ------------------------------
+ * Action game by Lasse Öörni (Cadaver), Kalle Niemitalo & Olli Niemitalo
+ * (Yehar) in year 2000. Music by Olli Niemitalo & Tuomas Mäkelä (Kuunvarjo).
+ */
+
+#define CHANNELS 32
+
+#include "bofh.h"
+#include "extern.h"
+#include "sincos.h"
+
+ACTOR actor[MAX_ACTOR];
+BOMB bomb[MAX_BOMB];
+CLOSET closet[MAX_CLOSET];
+LIFT lift[MAX_LIFT];
+STAIRS stairs[MAX_STAIRS];
+
+// ***
+struct {
+ ACTOR *owner;
+ int vol;
+} channelextras[CHANNELS];
+
+unsigned mixrate = 22050;
+unsigned mixmode = STEREO|SIXTEENBIT;
+
+int numstairs = 0;
+int numclosets = 0;
+int numlifts = 0;
+int numbombs = 0;
+
+int srminx, srminy, srmaxx, srmaxy;
+
+int prevtune = -1;
+int bombs = 0;
+int instructions[MAX_BOMB];
+ACTOR *speaker;
+int weapon;
+int screenmode = 0;
+int directsound = 0;
+int gametime;
+int showinstr;
+int showinstrtime;
+int beginservers;
+int beginworkstations;
+int paused = 0;
+int score = 0;
+int terrorists = 0;
+int leaders = 0;
+int computers = 0;
+int gameover = 0;
+int sightline = 0;
+int musicvolume = 64;
+int sfxvolume = 96;
+int xpos, ypos;
+char mutesound = 0;
+char mouseinitted = 0;
+int mousemovex = 0;
+int mousemovey = 0;
+int prevmovex = 0;
+int prevmovey = 0;
+int avgmovex = 0;
+int avgmovey = 0;
+unsigned mouseb = 0;
+unsigned prevmouseb = 0;
+int difficulty = DIFF_EASY;
+int gamespeed;
+char *gamemsg;
+int trapmsg = 0;
+int gamemsgtime = 0;
+int lifecheat = 0;
+int timecheat = 0;
+int ammocheat = 0;
+int speedcheat = 0;
+int instrcheat = 0;
+int enemycheat = 0;
+int grenadecheat = 0;
+int victory = 0;
+int missionindex = 0;
+int nummissions = 0;
+int key;
+int trycheatstring = -1;
+unsigned trycheatindex = 0;
+int xshift = 0;
+int yshift = 0;
+int throwstrength;
+int fastforward;
+int liftnumber;
+int lifthere;
+int liftsound;
+int scannerdelay;
+int kills;
+int actors;
+int victorybits;
+int firstdamagedblock;
+
+unsigned char *firebuf;
+char textbuf[80];
+
+char briefingtext[MAXBRIEFINGLENGTH];
+char victorytext[MAXBRIEFINGLENGTH];
+char missionlist[MAXMISSIONS][13];
+
+HISCORE_ENTRY hiscore[] = {{"BURZUM", 10000},
+ {"IMMORTAL", 9000},
+ {"MAYHEM", 8000},
+ {"DARKTHRONE", 7000},
+ {"ISENGARD", 6000},
+ {"ABIGOR", 5000},
+ {"NECROMANTIA", 4000},
+ {"ABSU", 3000},
+ {"TROLL", 2000},
+ {"ENSLAVED", 1000}};
+
+char *difftext[] = {"PRACTICE", "EASY", "MEDIUM", "HARD", "INSANE"};
+SAMPLE *smp[MAX_SMP];
+char *samplename[] = {
+ "taunt1.smp","taunt2.smp","taunt3.smp","taunt4.smp","taunt5.smp","taunt6.smp",
+ "hit1.smp","hit2.smp","hit3.smp","hit4.smp","hit5.smp","hit6.smp",
+ "die1.smp","die2.smp","die3.smp",
+ "pistol.smp", "shotgun.smp", "uzi.smp", "explode.smp",
+ "fist1.smp", "fist2.smp", "fist3.smp", "fist4.smp",
+ "swish.smp", "klonk.smp",
+ "bder-on.smp", "bder-hit.smp", "bder-run.smp", "bder-off.smp",
+ "gunload.smp",
+ "shell1.smp", "shell2.smp",
+ "ricoch1.smp", "ricoch2.smp", "glass.smp", "liftstrt.smp", "liftstop.smp",
+ "bazooka1.smp", "bazload.smp", "crossbow.smp", "arrowhit.smp",
+ NULL
+};
+SAMPLELOOPPOINT repeats[] = {
+ { SMP_BND_ON, 0x48BE },
+ { SMP_BND_HIT, 0x29A9 },
+ { SMP_BND_RUN, 0x02FC },
+ { SMP_LIFTSTART, 0x4B90 }
+};
+
+char *spritename[] = {
+ "bigfnt.spr", "player.spr", "weapon.spr", "machine.spr",
+ "fistman.spr", "gunman.spr", "shotgman.spr", "uziman.spr",
+ "tech.spr", "closet.spr", "leader.spr", "sadist.spr",
+ "title.spr", "smallfnt.spr", "blackfnt.spr", NULL
+};
+
+int ammo[WEAPNUM]; /* FIST CAT5 B&D CROS PIST SHOT UZI GREN BAZO SCAN */
+const int maxammo[WEAPNUM] = {999, 999, 999, 50, 200, 100, 200, 20, 5, 999};
+const int attackdelaytbl[WEAPNUM] = { 15, 20, 2, 40, 20, 25, 5, 35, 70, 20};
+int actorradius[] = {
+ /* Empty actor */
+ 0,
+ /* The BOFH */
+ 6*DEC,
+ /* Muzzle, bullet, smoke */
+ 0, 0, 0,
+ /* Workstations + printers */
+ 5*DEC, 7*DEC, 7*DEC, 4*DEC, 7*DEC, 5*DEC, 5*DEC, 8*DEC,
+ /* Servers */
+ 7*DEC, 5*DEC, 8*DEC,
+ /* Various small objects + explosions */
+ 0, 0, 0, 0, 0, 0,
+ /* Enemies */
+ 8*DEC, 8*DEC, 8*DEC, 8*DEC, 8*DEC, 8*DEC, 8*DEC,
+ /* Corpses */
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ /* Collectable items */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ***
+ /* Studio equipment :-) */
+ 4*DEC, 4*DEC, 4*DEC,
+ /* Shells & ricochets */
+ 0, 0, 0,
+ /* Laser beam */
+ 0,
+ /* Flame */
+ 0,
+ /* Glass shard */
+ 0,
+ /* Grenades */
+ 0, 0,
+ /* Bazooka projectiles, used bazookas *** */
+ 0, 0, 0,
+ /* Crossbow, arrow & scanner */
+ 0, 0, 0
+ };
+
+/* Enemy attack probability for each difficulty
+ * (64 = never, 63 = rarest, 0 = always :-) */
+int fistpr[MAX_DIFF];
+int pistolpr[MAX_DIFF];
+int shotgunpr[MAX_DIFF];
+int uzipr[MAX_DIFF];
+int crossbowpr[MAX_DIFF];
+int flamepr[MAX_DIFF];
+
+int comphealth[] = {5, 5, 5, 5, 5, 5, 5, 15, 10, 10, 10};
+int enemyhealth[] = {15, 10, 15, 10, 13, 10, 40};
+int enemyscore[] = {350, 750, 1000, 1500, 2000, 2000, 5000};
+int deadenemytype[] = {ACTOR_DEADFISTMAN, ACTOR_DEADPISTOLMAN,
+ ACTOR_DEADSHOTGUNMAN, ACTOR_DEADUZIMAN, ACTOR_DEADTECHNICIAN,
+ ACTOR_DEADSADIST, ACTOR_DEADLEADER};
+int deadenemyitem[] = {ACTOR_NONE, ACTOR_PISTOL, ACTOR_SHOTGUN, ACTOR_UZI,
+ ACTOR_NONE, ACTOR_CROSSBOW, ACTOR_NONE};
+int bnd_hittime;
+enum bnd_sound bnd_sound;
+
+/* All cheat strings must begin with different letters */
+#define NUMCHEATS 7
+char *cheatstring[] = {
+ "QBOPLTJB",
+ "WPJNBB",
+ "OPQFVUUB",
+ "BJLBB",
+ "PIKFJUB",
+ "UBQFUUBWBB",
+ "TJSQBMFJUB"};
+int *cheatvalue[] = {&ammocheat, &lifecheat, &speedcheat, &timecheat, &instrcheat, &enemycheat, &grenadecheat};
+
+int main(int argc, char **argv)
+{
+ int returnvalue = bofhmain();
+ return returnvalue;
+}
+
+int bofhmain(void)
+{
+ win_fullscreen = 1;
+
+ loadhiscore();
+ loadconfig();
+
+ /* Perform initializations */
+ if (!initstuff()) return 666;
+
+ /* Show splash screen */
+ showsplash();
+
+ /* Go to title screen! */
+ titlescreen();
+ saveconfig();
+
+ return 0;
+}
+
+void getgamespeed(void)
+{
+ for (;;)
+ {
+ gamespeed = win_getspeed(70);
+ if (gamespeed) break;
+ }
+ if (gamespeed > MAXFRAMESKIP) gamespeed = MAXFRAMESKIP;
+}
+void showsplash(void)
+{
+ int handle;
+ int delay = 0;
+ char *splashbuf = malloc(64000);
+ if (!splashbuf) return;
+
+ handle = io_open(DIR_DATA "/splash.raw");
+ if (handle == -1)
+ {
+ free(splashbuf);
+ return;
+ }
+ io_read(handle, splashbuf, 64000);
+ io_close(handle);
+
+ gfx_loadpalette(DIR_DATA "/splash.pal");
+ memcpy(gfx_vscreen, splashbuf, 320*200);
+ gfx_setpalette();
+ gfx_updatepage();
+ playfx(24, SMP_EXPLODE, 22000, 20, 64);
+ playfx(25, SMP_EXPLODE, 22050, 20, 128);
+ playfx(26, SMP_EXPLODE, 22100, 20, 192);
+ getgamespeed();
+
+ for (;;)
+ {
+ updatemouse();
+ getgamespeed();
+ delay += gamespeed;
+ if (kbd_getkey()) break;
+ if (delay > 4*70) break;
+ }
+ free(splashbuf);
+ for (delay = 0; delay < 3; delay++)
+ {
+ gfx_fillscreen(0);
+ gfx_updatepage();
+ }
+}
+
+void checkglobalkeys(void)
+{
+ if (key == KEY_M)
+ {
+ musicvolume ^= 64;
+ snd_setmusicmastervolume(FIRSTFXCHAN, musicvolume);
+ }
+ if (key == KEY_F12)
+ {
+ screenmode++;
+ if (screenmode > GFX_DOUBLESIZE) screenmode = 0;
+ if (!gfx_init(320,200,70,screenmode | GFX_USE3PAGES))
+ {
+ if (!gfx_init(320,200,70,screenmode | GFX_USEDIBSECTION))
+ {
+ win_messagebox("Graphics init failed!");
+ saveconfig();
+ exit(0);
+ }
+ }
+ }
+ if (key == KEY_F11)
+ {
+ directsound ^= 1;
+ snd_init(mixrate, mixmode, 150, CHANNELS, directsound);
+ }
+
+ if (win_quitted)
+ {
+ saveconfig();
+ exit(0);
+ }
+}
+
+void playmusic(int tune)
+{
+ if (prevtune == tune) return;
+ prevtune = tune;
+
+ switch(tune)
+ {
+ case MUSIC_MAIN:
+ snd_loadxm(DIR_DATA "/sdriver.xm");
+ snd_playxm(0);
+ break;
+
+ case MUSIC_HISCORE:
+ snd_loadxm(DIR_DATA "/shining.xm");
+ snd_playxm(0);
+ break;
+ }
+}
+
+void stopmusic(void)
+{
+ snd_stopxm();
+ prevtune = -1;
+}
+
+void titlescreen(void)
+{
+ int phase = TITLE_PRESENTS;
+ int phasetime = 0;
+ int phasevar = 0;
+ int c;
+
+ gfx_loadpalette(DIR_DATA "/bofh.pal");
+ gfx_setpalette();
+
+ playmusic(MUSIC_MAIN);
+
+ memset(firebuf, 64, 32000);
+
+ kbd_getascii();
+ getgamespeed();
+ updatemouse();
+ for (;;)
+ {
+ getgamespeed();
+ updatemouse();
+ key = kbd_getkey();
+
+ checkglobalkeys();
+ if (key == KEY_ESC)
+ {
+ return;
+ }
+ if ((key == KEY_SPACE) || (key == KEY_ENTER) ||
+ ((mouseb & MOUSEB_LEFT) && (!(prevmouseb & MOUSEB_LEFT))))
+ {
+ playfx(FXCHAN_ENEMYSHOOT, SMP_SHOTGUN, 22050, 64, 128);
+ if (selectdifficulty())
+ {
+ score = 0;
+ game(missionlist[missionindex]);
+ if (checkhiscore()) phase = TITLE_HISCORE;
+ else phase = TITLE_PRESENTS;
+ }
+ else
+ {
+ phase = TITLE_PRESENTS;
+ }
+ phasetime = 0;
+ phasevar = 0;
+ }
+
+ checkcheats();
+
+ for (; gamespeed; gamespeed--)
+ {
+ switch(phase)
+ {
+ case TITLE_PRESENTS:
+ if (phasetime < 300)
+ {
+ if (phasevar < 40) phasevar++;
+ }
+ else
+ {
+ phasevar -= 2;
+ }
+ break;
+
+ case TITLE_LOGO:
+ if (phasetime < 300)
+ {
+ if (phasevar < 40)
+ {
+ phasevar++;
+ if (phasevar == 40) playfx(FXCHAN_EXPLODE, SMP_EXPLODE, 22050, 64, 128);
+ }
+ }
+ else
+ {
+ phasevar++;
+ }
+ break;
+
+ case TITLE_HISCORE:
+ if (phasetime < 300)
+ {
+ if (phasevar < 100) phasevar++;
+ }
+ else
+ {
+ phasevar++;
+ }
+ break;
+
+ case TITLE_CREDITS:
+ if (phasetime < 300)
+ {
+ if (phasevar < 40) phasevar++;
+ }
+ else
+ {
+ phasevar++;
+ }
+ break;
+
+ case TITLE_CONTROLS:
+ if (phasetime < 600)
+ {
+ if (phasevar < 200) phasevar++;
+ }
+ else
+ {
+ phasevar++;
+ }
+ break;
+
+ case TITLE_RESOLUTION:
+ if (phasetime < 600)
+ {
+ if (phasevar < 200) phasevar++;
+ }
+ else
+ {
+ phasevar++;
+ }
+ break;
+
+ }
+ phasetime++;
+ if (phasetime > (phase < TITLE_CONTROLS ? 400 : 800))
+ {
+ phasetime = 0;
+ phasevar = 0;
+ phase++;
+ if (phase > TITLE_RESOLUTION) phase=TITLE_PRESENTS;
+ /*
+ * Reload the scores every time, in
+ * case another process has changed
+ * them.
+ */
+ if (phase == TITLE_HISCORE) loadhiscore();
+ }
+
+ }
+
+ fireeffect();
+
+ switch(phase)
+ {
+ case TITLE_PRESENTS:
+ txt_printcenter(-50 + phasevar*3, SPR_FONTS, "ELECTRIC HAREM");
+ txt_printcenter(220 - phasevar * 3, SPR_FONTS, "PRESENTS");
+ break;
+
+ case TITLE_LOGO:
+ gfx_drawsprite(-160 + phasevar*8, 60, 0xc0001);
+ gfx_drawsprite(480 - phasevar*8, 140, 0xc0002);
+ break;
+
+ case TITLE_HISCORE:
+ txt_printcenter(200-phasevar*2, SPR_FONTS, "LEGENDARY BOFHS");
+ for (c = 0; c < 10; c++)
+ {
+ sprintf(textbuf, "%02d. %-19s %06d", c+1, hiscore[c].name, hiscore[c].score);
+ txt_printcenter(220-phasevar*2+c*17, SPR_FONTS, textbuf);
+ }
+ break;
+
+ case TITLE_CREDITS:
+ txt_print(-300+phasevar*8, 0, SPR_FONTS, "MAIN DESIGN & PROGRAMMING");
+ txt_print(340-phasevar*8, 20, SPR_FONTS, "LASSE \\\\RNI");
+ txt_print(-300+phasevar*8, 50, SPR_FONTS, "ADDITIONAL DESIGN & PROGRAMMING");
+ txt_print(340-phasevar*8, 70, SPR_FONTS, "KALLE NIEMITALO, OLLI NIEMITALO");
+ txt_print(-300+phasevar*8, 100, SPR_FONTS, "GRAPHICS & SOUND EFFECTS");
+ txt_print(340-phasevar*8, 120, SPR_FONTS, "LASSE \\\\RNI, OLLI NIEMITALO");
+ txt_print(-300+phasevar*8, 150, SPR_FONTS, "MUSIC");
+ txt_print(340-phasevar*8, 170, SPR_FONTS, "OLLI NIEMITALO, TUOMAS M[KEL[");
+ break;
+
+ case TITLE_CONTROLS:
+ txt_printcenter(200-phasevar, SPR_FONTS, "USE ARROW KEYS OR MOUSE TO CONTROL");
+ txt_printcenter(220-phasevar, SPR_FONTS, "THE MOVEMENT OF THE BOFH.");
+ txt_printcenter(240-phasevar, SPR_FONTS, " ");
+ txt_printcenter(260-phasevar, SPR_FONTS, "SPACE/LEFT MOUSEB. = USE WEAPON ");
+ txt_printcenter(280-phasevar, SPR_FONTS, "ENTER/RIGHT MOUSEB. = CHANGE WEAPON");
+ txt_printcenter(300-phasevar, SPR_FONTS, " ");
+ txt_printcenter(320-phasevar, SPR_FONTS, "ALT = STRAFE SHIFT = SLOW MO.");
+ txt_printcenter(340-phasevar, SPR_FONTS, "P = PAUSE GAME ESC = ABORT GAME");
+ txt_printcenter(360-phasevar, SPR_FONTS, "S = SIGHT-LINE M = MUSIC ON/OFF");
+ txt_printcenter(380-phasevar, SPR_FONTS, "V = VIEW BOMB DEFUSING INSTRUCTIONS");
+ break;
+
+ case TITLE_RESOLUTION:
+ txt_printcenter(200-phasevar, SPR_FONTS, " PRESS F11 TO TOGGLE BETWEEN WAVE- ");
+ txt_printcenter(220-phasevar, SPR_FONTS, " OUT & DIRECTSOUND SOUND OUTPUT. ");
+ txt_printcenter(240-phasevar, SPR_FONTS, " ");
+ txt_printcenter(260-phasevar, SPR_FONTS, " PRESS F12 TO TOGGLE BETWEEN THREE ");
+ txt_printcenter(280-phasevar, SPR_FONTS, " AVAILABLE SCREEN RESOLUTIONS: ");
+ txt_printcenter(300-phasevar, SPR_FONTS, " ");
+ txt_printcenter(320-phasevar, SPR_FONTS, " 1X-SIZE SCANLINES 2X-SIZE ");
+ txt_printcenter(340-phasevar, SPR_FONTS, " ");
+ txt_printcenter(360-phasevar, SPR_FONTS, " PRESS ALT-ENTER TO TOGGLE BETWEEN ");
+ txt_printcenter(380-phasevar, SPR_FONTS, " FULLSCREEN AND WINDOWED DISPLAY. ");
+ break;
+ }
+ gfx_updatepage();
+ }
+}
+
+void loadconfig(void)
+{
+ FILE *handle = fopen(DIR_USERCFG "/bofh.cfg", "rb");
+ if (!handle) return;
+ fread(&sightline, sizeof sightline, 1, handle);
+ fread(&screenmode, sizeof screenmode, 1, handle);
+ fread(&win_fullscreen, sizeof win_fullscreen, 1, handle);
+ fread(&directsound, sizeof directsound, 1, handle);
+ fclose(handle);
+}
+
+void saveconfig(void)
+{
+ FILE *handle = fopen(DIR_USERCFG "/bofh.cfg", "wb");
+ if (!handle) return;
+ fwrite(&sightline, sizeof sightline, 1, handle);
+ fwrite(&screenmode, sizeof screenmode, 1, handle);
+ fwrite(&win_fullscreen, sizeof win_fullscreen, 1, handle);
+ fwrite(&directsound, sizeof directsound, 1, handle);
+ fclose(handle);
+}
+
+int selectdifficulty(void)
+{
+ int move = difficulty * 64 + 32;
+ int movex = 0;
+ char flash = 0;
+ int c;
+ DIR *dir;
+ struct dirent *de;
+
+ nummissions = 0;
+ dir = opendir(DIR_MISSIONS);
+ if (dir)
+ {
+ while ((de = readdir(dir)))
+ {
+ char buf[256];
+ int len;
+
+ strcpy(buf, de->d_name);
+ len = strlen(buf);
+ if (len > 4)
+ {
+ if ((!strcmp(&buf[len-4], ".mis")) || (!strcmp(&buf[len-4], ".MIS")))
+ {
+ buf[len-4] = 0;
+ strcpy(&missionlist[nummissions][0], buf);
+ nummissions++;
+ if (nummissions >= MAXMISSIONS) break;
+ }
+ }
+ }
+ closedir(dir);
+ }
+
+ if (missionindex >= nummissions) missionindex = 0;
+
+ if (!nummissions)
+ {
+ gfx_fillscreen(0);
+ txt_printcenter(80, SPR_FONTS, "NO MISSION FILES FOUND!");
+ gfx_updatepage();
+ getgamespeed();
+
+ for (;;)
+ {
+ getgamespeed();
+ updatemouse();
+ key = kbd_getkey();
+ checkglobalkeys();
+ if ((key == KEY_SPACE) || (key == KEY_ENTER) ||
+ ((mouseb & MOUSEB_LEFT) && (!(prevmouseb & MOUSEB_LEFT))))
+ {
+ playfx(FXCHAN_ENEMYSHOOT, SMP_SHOTGUN, 22050, 64, 128);
+ break;
+ }
+ }
+ return 0;
+ }
+
+ kbd_getascii();
+ getgamespeed();
+ updatemouse();
+ for (;;)
+ {
+ getgamespeed();
+ updatemouse();
+ key = kbd_getkey();
+
+ checkglobalkeys();
+ if (key == KEY_ESC)
+ {
+ playfx(FXCHAN_ENEMYSHOOT, SMP_SHOTGUN, 22050, 64, 128);
+ return 0;
+ }
+