summaryrefslogtreecommitdiffstats
path: root/kspaceduel
diff options
context:
space:
mode:
Diffstat (limited to 'kspaceduel')
-rw-r--r--kspaceduel/AUTHORS2
-rw-r--r--kspaceduel/ChangeLog11
-rw-r--r--kspaceduel/Makefile.am36
-rw-r--r--kspaceduel/README10
-rw-r--r--kspaceduel/TODO5
-rw-r--r--kspaceduel/ai.cpp680
-rw-r--r--kspaceduel/ai.h102
-rw-r--r--kspaceduel/configure.in.in1
-rw-r--r--kspaceduel/defines.h66
-rw-r--r--kspaceduel/dialogs.cpp434
-rw-r--r--kspaceduel/dialogs.h102
-rw-r--r--kspaceduel/general.ui337
-rw-r--r--kspaceduel/hi128-app-kspaceduel.pngbin0 -> 11889 bytes
-rw-r--r--kspaceduel/hi16-app-kspaceduel.pngbin0 -> 560 bytes
-rw-r--r--kspaceduel/hi22-app-kspaceduel.pngbin0 -> 3667 bytes
-rw-r--r--kspaceduel/hi32-app-kspaceduel.pngbin0 -> 1696 bytes
-rw-r--r--kspaceduel/hi48-app-kspaceduel.pngbin0 -> 2884 bytes
-rw-r--r--kspaceduel/hi64-app-kspaceduel.pngbin0 -> 4290 bytes
-rw-r--r--kspaceduel/kspaceduel.desktop76
-rw-r--r--kspaceduel/kspaceduel.kcfg41
-rw-r--r--kspaceduel/kspaceduelui.rc16
-rw-r--r--kspaceduel/main.cpp29
-rw-r--r--kspaceduel/mainview.cpp1052
-rw-r--r--kspaceduel/mainview.h104
-rw-r--r--kspaceduel/mathroutines.cpp41
-rw-r--r--kspaceduel/mathroutines.h8
-rw-r--r--kspaceduel/options.kcfgc5
-rw-r--r--kspaceduel/pics/Makefile.am2
-rw-r--r--kspaceduel/pics/cr16-action-spnewgame.pngbin0 -> 493 bytes
-rw-r--r--kspaceduel/pics/cr16-action-spnewround.pngbin0 -> 493 bytes
-rw-r--r--kspaceduel/pics/cr16-action-sppausegame.pngbin0 -> 227 bytes
-rw-r--r--kspaceduel/pics/cr22-action-spnewgame.pngbin0 -> 996 bytes
-rw-r--r--kspaceduel/pics/cr22-action-spnewround.pngbin0 -> 1031 bytes
-rw-r--r--kspaceduel/pics/cr22-action-sppausegame.pngbin0 -> 308 bytes
-rw-r--r--kspaceduel/pics/cr32-action-spnewgame.pngbin0 -> 2440 bytes
-rw-r--r--kspaceduel/pics/cr32-action-spnewround.pngbin0 -> 2504 bytes
-rw-r--r--kspaceduel/pics/cr32-action-sppausegame.pngbin0 -> 323 bytes
-rw-r--r--kspaceduel/pics/lo16-action-spnewgame.pngbin0 -> 493 bytes
-rw-r--r--kspaceduel/pics/lo16-action-spnewround.pngbin0 -> 493 bytes
-rw-r--r--kspaceduel/pics/lo16-action-sppausegame.pngbin0 -> 227 bytes
-rw-r--r--kspaceduel/playerinfo.cpp80
-rw-r--r--kspaceduel/playerinfo.h26
-rw-r--r--kspaceduel/sprites.cpp340
-rw-r--r--kspaceduel/sprites.h143
-rw-r--r--kspaceduel/sprites/Makefile.am6
-rw-r--r--kspaceduel/sprites/backgr.pngbin0 -> 1319 bytes
-rw-r--r--kspaceduel/sprites/explosion/Makefile.am26
-rw-r--r--kspaceduel/sprites/explosion/explos00.pbmbin0 -> 41 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos00.ppmbin0 -> 603 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos01.pbmbin0 -> 49 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos01.ppmbin0 -> 928 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos02.pbmbin0 -> 78 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos02.ppmbin0 -> 1270 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos03.pbmbin0 -> 87 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos03.ppmbin0 -> 1588 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos04.pbmbin0 -> 99 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos04.ppmbin0 -> 2099 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos05.pbmbin0 -> 141 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos05.ppmbin0 -> 2504 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos06.pbmbin0 -> 145 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos06.ppmbin0 -> 2681 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos07.pbmbin0 -> 153 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos07.ppmbin0 -> 3053 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos08.pbmbin0 -> 153 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos08.ppmbin0 -> 3269 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos09.pbmbin0 -> 153 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos09.ppmbin0 -> 3377 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos10.pbmbin0 -> 161 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos10.ppmbin0 -> 3563 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos11.pbmbin0 -> 204 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos11.ppmbin0 -> 3890 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos12.pbmbin0 -> 209 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos12.ppmbin0 -> 3989 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos13.pbmbin0 -> 214 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos13.ppmbin0 -> 4088 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos14.pbmbin0 -> 214 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos14.ppmbin0 -> 4088 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos15.pbmbin0 -> 214 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos15.ppmbin0 -> 4211 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos16.pbmbin0 -> 224 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos16.ppmbin0 -> 4415 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos17.pbmbin0 -> 224 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos17.ppmbin0 -> 4415 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos18.pbmbin0 -> 224 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos18.ppmbin0 -> 4544 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos19.pbmbin0 -> 224 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos19.ppmbin0 -> 4673 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos20.pbmbin0 -> 229 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos20.ppmbin0 -> 4781 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos21.pbmbin0 -> 229 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos21.ppmbin0 -> 4781 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos22.pbmbin0 -> 229 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos22.ppmbin0 -> 4913 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos23.pbmbin0 -> 229 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos23.ppmbin0 -> 4913 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos24.pbmbin0 -> 239 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos24.ppmbin0 -> 5135 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos25.pbmbin0 -> 239 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos25.ppmbin0 -> 5135 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos26.pbmbin0 -> 239 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos26.ppmbin0 -> 5135 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos27.pbmbin0 -> 239 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos27.ppmbin0 -> 5135 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos28.pbmbin0 -> 239 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos28.ppmbin0 -> 5135 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos29.pbmbin0 -> 239 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos29.ppmbin0 -> 5135 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos30.pbmbin0 -> 169 bytes
-rw-r--r--kspaceduel/sprites/explosion/explos30.ppmbin0 -> 3629 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex00.pbm13
-rw-r--r--kspaceduel/sprites/explosion/mineex00.ppmbin0 -> 290 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex01.pbmbin0 -> 37 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex01.ppmbin0 -> 531 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex02.pbmbin0 -> 39 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex02.ppmbin0 -> 567 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex03.pbmbin0 -> 41 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex03.ppmbin0 -> 651 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex04.pbmbin0 -> 43 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex04.ppmbin0 -> 691 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex05.pbmbin0 -> 45 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex05.ppmbin0 -> 784 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex06.pbmbin0 -> 45 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex06.ppmbin0 -> 784 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex07.pbmbin0 -> 45 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex07.ppmbin0 -> 892 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex08.pbmbin0 -> 63 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex08.ppmbin0 -> 946 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex09.pbmbin0 -> 69 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex09.ppmbin0 -> 1048 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex10.pbmbin0 -> 69 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex10.ppmbin0 -> 1048 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex11.pbmbin0 -> 69 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex11.ppmbin0 -> 1108 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex12.pbmbin0 -> 69 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex12.ppmbin0 -> 1108 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex13.pbmbin0 -> 69 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex13.ppmbin0 -> 1108 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex14.pbmbin0 -> 72 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex14.ppmbin0 -> 1288 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex15.pbmbin0 -> 72 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex15.ppmbin0 -> 1288 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex16.pbmbin0 -> 72 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex16.ppmbin0 -> 1288 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex17.pbmbin0 -> 69 bytes
-rw-r--r--kspaceduel/sprites/explosion/mineex17.ppmbin0 -> 1168 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/Makefile.am6
-rw-r--r--kspaceduel/sprites/playerinfo/energy.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/mine.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/ship10.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/ship11.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/ship12.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/ship13.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/ship20.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/ship21.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/ship22.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/ship23.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/playerinfo/win.pnmbin0 -> 3688 bytes
-rw-r--r--kspaceduel/sprites/powerups/Makefile.am5
-rw-r--r--kspaceduel/sprites/powerups/pbullet.pbm3
-rw-r--r--kspaceduel/sprites/powerups/pbullet.ppmbin0 -> 615 bytes
-rw-r--r--kspaceduel/sprites/powerups/penergy.pbm3
-rw-r--r--kspaceduel/sprites/powerups/penergy.ppmbin0 -> 615 bytes
-rw-r--r--kspaceduel/sprites/powerups/pmine.pbm3
-rw-r--r--kspaceduel/sprites/powerups/pmine.ppmbin0 -> 615 bytes
-rw-r--r--kspaceduel/sprites/powerups/pshield.pbm3
-rw-r--r--kspaceduel/sprites/powerups/pshield.ppmbin0 -> 615 bytes
-rw-r--r--kspaceduel/sprites/ship1/Makefile.am25
-rw-r--r--kspaceduel/sprites/ship1/bullet.pbm5
-rw-r--r--kspaceduel/sprites/ship1/bullet.ppm5
-rw-r--r--kspaceduel/sprites/ship1/mine0.pbmbin0 -> 33 bytes
-rw-r--r--kspaceduel/sprites/ship1/mine0.ppmbin0 -> 567 bytes
-rw-r--r--kspaceduel/sprites/ship1/mine1.pbmbin0 -> 57 bytes
-rw-r--r--kspaceduel/sprites/ship1/mine1.ppmbin0 -> 891 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship00.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship00.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship01.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship01.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship02.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship02.ppmbin0 -> 2339 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship03.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship03.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship04.pbmbin0 -> 108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship04.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship05.pbmbin0 -> 105 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship05.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship06.pbmbin0 -> 102 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship06.ppmbin0 -> 2168 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship07.pbmbin0 -> 129 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship07.ppmbin0 -> 2369 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship08.pbmbin0 -> 117 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship08.ppmbin0 -> 2297 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship09.pbmbin0 -> 109 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship09.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship10.pbmbin0 -> 97 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship10.ppmbin0 -> 2075 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship11.pbmbin0 -> 93 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship11.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship12.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship12.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship13.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship13.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship14.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship14.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship15.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship15.ppmbin0 -> 2234 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship16.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship16.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship17.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship17.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship18.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship18.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship19.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship19.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship20.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship20.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship21.pbmbin0 -> 93 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship21.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship22.pbmbin0 -> 101 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship22.ppmbin0 -> 2168 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship23.pbmbin0 -> 113 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship23.ppmbin0 -> 2291 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship24.pbmbin0 -> 117 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship24.ppmbin0 -> 2216 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship25.pbmbin0 -> 125 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship25.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship26.pbmbin0 -> 99 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship26.ppmbin0 -> 2099 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship27.pbmbin0 -> 105 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship27.ppmbin0 -> 2044 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship28.pbmbin0 -> 108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship28.ppmbin0 -> 2107 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship29.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship29.ppmbin0 -> 2170 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship30.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship30.ppmbin0 -> 2233 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship31.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship31.ppmbin0 -> 2233 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship32.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship32.ppmbin0 -> 2233 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship33.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship33.ppmbin0 -> 2170 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship34.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship34.ppmbin0 -> 2170 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship35.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship35.ppmbin0 -> 2170 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship36.pbmbin0 -> 108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship36.ppmbin0 -> 2107 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship37.pbmbin0 -> 105 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship37.ppmbin0 -> 2044 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship38.pbmbin0 -> 102 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship38.ppmbin0 -> 2075 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship39.pbmbin0 -> 125 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship39.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship40.pbmbin0 -> 117 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship40.ppmbin0 -> 2216 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship41.pbmbin0 -> 109 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship41.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship42.pbmbin0 -> 101 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship42.ppmbin0 -> 2168 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship43.pbmbin0 -> 93 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship43.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship44.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship44.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship45.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship45.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship46.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship46.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship47.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship47.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship48.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship48.ppmbin0 -> 2339 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship49.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship49.ppmbin0 -> 2339 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship50.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship50.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship51.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship51.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship52.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship52.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship53.pbmbin0 -> 93 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship53.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship54.pbmbin0 -> 97 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship54.ppmbin0 -> 2075 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship55.pbmbin0 -> 109 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship55.ppmbin0 -> 2279 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship56.pbmbin0 -> 117 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship56.ppmbin0 -> 2216 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship57.pbmbin0 -> 125 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship57.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship58.pbmbin0 -> 102 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship58.ppmbin0 -> 2075 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship59.pbmbin0 -> 105 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship59.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship60.pbmbin0 -> 108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship60.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship61.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship61.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship62.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship62.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship63.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship63.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship64.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship1/ship64.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship2/Makefile.am27
-rw-r--r--kspaceduel/sprites/ship2/bullet.pbm5
-rw-r--r--kspaceduel/sprites/ship2/bullet.ppm5
-rw-r--r--kspaceduel/sprites/ship2/mine0.pbmbin0 -> 35 bytes
-rw-r--r--kspaceduel/sprites/ship2/mine0.ppmbin0 -> 612 bytes
-rw-r--r--kspaceduel/sprites/ship2/mine1.pbmbin0 -> 57 bytes
-rw-r--r--kspaceduel/sprites/ship2/mine1.ppmbin0 -> 843 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship00.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship00.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship01.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship01.ppmbin0 -> 2339 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship02.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship02.ppmbin0 -> 2234 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship03.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship03.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship04.pbmbin0 -> 108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship04.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship05.pbmbin0 -> 105 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship05.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship06.pbmbin0 -> 99 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship06.ppmbin0 -> 2009 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship07.pbmbin0 -> 125 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship07.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship08.pbmbin0 -> 117 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship08.ppmbin0 -> 2297 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship09.pbmbin0 -> 109 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship09.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship10.pbmbin0 -> 101 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship10.ppmbin0 -> 2168 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship11.pbmbin0 -> 93 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship11.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship12.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship12.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship13.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship13.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship14.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship14.ppmbin0 -> 2339 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship15.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship15.ppmbin0 -> 2339 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship16.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship16.ppmbin0 -> 2234 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship17.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship17.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship18.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship18.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship19.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship19.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship20.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship20.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship21.pbmbin0 -> 93 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship21.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship22.pbmbin0 -> 101 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship22.ppmbin0 -> 2168 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship23.pbmbin0 -> 109 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship23.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship24.pbmbin0 -> 117 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship24.ppmbin0 -> 2216 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship25.pbmbin0 -> 125 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship25.ppmbin0 -> 2204 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship26.pbmbin0 -> 102 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship26.ppmbin0 -> 2168 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship27.pbmbin0 -> 105 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship27.ppmbin0 -> 2044 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship28.pbmbin0 -> 108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship28.ppmbin0 -> 2107 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship29.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship29.ppmbin0 -> 2170 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship30.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship30.ppmbin0 -> 2233 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship31.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship31.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship32.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship32.ppmbin0 -> 2233 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship33.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship33.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship34.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship34.ppmbin0 -> 2170 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship35.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship35.ppmbin0 -> 2170 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship36.pbmbin0 -> 108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship36.ppmbin0 -> 2107 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship37.pbmbin0 -> 105 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship37.ppmbin0 -> 2044 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship38.pbmbin0 -> 102 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship38.ppmbin0 -> 2168 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship39.pbmbin0 -> 129 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship39.ppmbin0 -> 2369 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship40.pbmbin0 -> 121 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship40.ppmbin0 -> 2381 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship41.pbmbin0 -> 109 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship41.ppmbin0 -> 2279 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship42.pbmbin0 -> 97 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship42.ppmbin0 -> 2075 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship43.pbmbin0 -> 93 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship43.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship44.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship44.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship45.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship45.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship46.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship46.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship47.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship47.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship48.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship48.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship49.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship49.ppmbin0 -> 2339 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship50.pbmbin0 -> 119 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship50.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship51.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship51.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship52.pbmbin0 -> 114 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship52.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship53.pbmbin0 -> 93 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship53.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship54.pbmbin0 -> 97 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship54.ppmbin0 -> 2075 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship55.pbmbin0 -> 113 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship55.ppmbin0 -> 2291 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship56.pbmbin0 -> 117 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship56.ppmbin0 -> 2216 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship57.pbmbin0 -> 129 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship57.ppmbin0 -> 2369 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship58.pbmbin0 -> 102 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship58.ppmbin0 -> 2075 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship59.pbmbin0 -> 105 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship59.ppmbin0 -> 2045 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship60.pbmbin0 -> 108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship60.ppmbin0 -> 2108 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship61.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship61.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship62.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship62.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship63.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship63.ppmbin0 -> 2273 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship64.pbmbin0 -> 111 bytes
-rw-r--r--kspaceduel/sprites/ship2/ship64.ppmbin0 -> 2171 bytes
-rw-r--r--kspaceduel/sprites/sun/Makefile.am3
-rw-r--r--kspaceduel/sprites/sun/sun.pbmbin0 -> 759 bytes
-rw-r--r--kspaceduel/sprites/sun/sun.ppmbin0 -> 16904 bytes
-rw-r--r--kspaceduel/structs.h46
-rw-r--r--kspaceduel/topwidget.cpp144
-rw-r--r--kspaceduel/topwidget.h33
-rw-r--r--kspaceduel/version.h1
447 files changed, 4116 insertions, 0 deletions
diff --git a/kspaceduel/AUTHORS b/kspaceduel/AUTHORS
new file mode 100644
index 00000000..bcb050bf
--- /dev/null
+++ b/kspaceduel/AUTHORS
@@ -0,0 +1,2 @@
+Author of KSpaceduel:
+Andreas Zehender <az@azweb.de>
diff --git a/kspaceduel/ChangeLog b/kspaceduel/ChangeLog
new file mode 100644
index 00000000..95bada83
--- /dev/null
+++ b/kspaceduel/ChangeLog
@@ -0,0 +1,11 @@
+version 1.0
+ * [Andreas Zehender] Portet to Qt-2.0
+ * [Andreas Zehender] Changed option dialogs
+
+version 0.2.2
+ * [Andreas Zehender] fixed error in ExplosionSprite::setSequence
+
+version 0.2.1
+ * [Andreas Zehender] Implemented movements, bullets, mines
+ * [Andreas Zehender] First released version
+
diff --git a/kspaceduel/Makefile.am b/kspaceduel/Makefile.am
new file mode 100644
index 00000000..00bdbe76
--- /dev/null
+++ b/kspaceduel/Makefile.am
@@ -0,0 +1,36 @@
+INCLUDES= -I$(top_srcdir)/libkdegames $(all_includes)
+
+SUBDIRS = sprites pics
+
+# you can add here more. This one gets installed
+bin_PROGRAMS = kspaceduel
+
+# Which sources should be compiled for kspaceduel.
+kspaceduel_SOURCES = general.ui mathroutines.cpp topwidget.cpp \
+ playerinfo.cpp sprites.cpp mainview.cpp dialogs.cpp ai.cpp \
+ main.cpp options.kcfgc
+
+kspaceduel_METASOURCES = AUTO
+EXTRA_DIST = kspaceduel.desktop kspaceduel.xpm mini-kspaceduel.xpm
+
+kspaceduel_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+kspaceduel_LDADD = $(LIB_KDEGAMES)
+kspaceduel_DEPENDENCIES = $(LIB_KDEGAMES_DEP)
+
+# this option you can leave out. Just, if you use "make dist", you need it
+noinst_HEADERS = mathroutines.h topwidget.h playerinfo.h \
+ sprites.h dialogs.h mainview.h defines.h ai.h structs.h \
+ version.h
+
+DISTCLEANFILES = $(kspaceduel_METASOURCES)
+
+messages: rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/kspaceduel.pot
+
+KDE_ICON = kspaceduel
+
+xdg_apps_DATA = kspaceduel.desktop
+kde_kcfg_DATA = kspaceduel.kcfg
+
+rcdir=$(kde_datadir)/kspaceduel
+rc_DATA = kspaceduelui.rc
diff --git a/kspaceduel/README b/kspaceduel/README
new file mode 100644
index 00000000..6b5565ff
--- /dev/null
+++ b/kspaceduel/README
@@ -0,0 +1,10 @@
+KSpaceduel
+----------
+
+KSpaceduel is an arcade two-player space game for KDE.
+Two ships fly around the sun and have to shoot the other ship.
+
+Look at the html manual for further information.
+
+Andreas Zehender <az@azweb.de>
+31 Oct 1998
diff --git a/kspaceduel/TODO b/kspaceduel/TODO
new file mode 100644
index 00000000..4e93d5ba
--- /dev/null
+++ b/kspaceduel/TODO
@@ -0,0 +1,5 @@
+todo:
+-----
+
+sound!!!!!
+
diff --git a/kspaceduel/ai.cpp b/kspaceduel/ai.cpp
new file mode 100644
index 00000000..5a7bec20
--- /dev/null
+++ b/kspaceduel/ai.cpp
@@ -0,0 +1,680 @@
+#include <math.h>
+
+#include "ai.h"
+#include "mathroutines.h"
+#include "options.h"
+
+int Ai::calcFrameIncrement[Options::EnumAiDifficulty::COUNT] = {15,8,6,2};
+int Ai::calcPositionNumber[Options::EnumAiDifficulty::COUNT] = {10,15,20,60};
+int Ai::calcShotDirections[Options::EnumAiDifficulty::COUNT] = {4,7,10,12};
+int Ai::calcCollisions[Options::EnumAiDifficulty::COUNT] = {30,15,10,10};
+int Ai::calcNextShot[Options::EnumAiDifficulty::COUNT] = {300,200,90,60};
+
+Ai::Ai(int pn,ShipSprite* s[2],QPtrList<BulletSprite>* b[2],
+ QPtrList<MineSprite>* m[2],SConfig *c)
+{
+ int i;
+
+ playerNumber=pn;
+ opponentNumber=(pn+1)%2;
+ cfg=c;
+
+ for(i=0;i<2;i++)
+ {
+ ship[i]=s[i];
+ bullets[i]=b[i];
+ mines[i]=m[i];
+ shipsNextPositions[i]=new QMemArray<AiSprite>
+ ((int)(calcPositionNumber[Options::aiDifficulty(playerNumber)]/cfg->gamespeed));
+ aiMines[i]=new QMemArray<AiSprite>(cfg->maxMines);
+ mineNumber[i]=0;
+ }
+ myShots.setAutoDelete(true);
+ objectsHitByShip.setAutoDelete(true);
+ minesHitByShot.setAutoDelete(true);
+}
+
+void Ai::newRound()
+{
+ accelerateFramesNumber=0;
+ rotateFramesNumber=0;
+ shoot=false;
+ score=1e10;
+
+ rotation=RNONE;
+ acc=false;
+ bullet=false;
+ mine=false;
+
+ borderTime=-1;
+ sunTime=-1;
+
+ calculateCollisions=(int)(calcCollisions[Options::aiDifficulty(playerNumber)]
+ /cfg->gamespeed);
+ waitShot=(int) rint( random.getDouble() *
+ calcNextShot[Options::aiDifficulty(playerNumber)]
+ /cfg->gamespeed);
+
+ myShots.clear();
+ objectsHitByShip.clear();
+ minesHitByShot.clear();
+}
+
+void Ai::think()
+{
+ setSpriteFieldSize();
+
+ myShots.clear();
+ borderTime=-1;
+ sunTime=-1;
+ score--;
+ if(waitShot>0)
+ waitShot--;
+
+ calculateNextPositions();
+ if(Options::aiDifficulty(playerNumber)!=Options::EnumAiDifficulty::Trainee)
+ testForHits();
+ if(waitShot<=0)
+ {
+ tryShots();
+ shotScores();
+ }
+ chooseAction();
+
+
+ if(rotateFramesNumber<=0)
+ {
+ rotation=RNONE;
+ if(accelerateFramesNumber<=0)
+ {
+ acc=false;
+ if(shoot)
+ {
+ bullet=true;
+ shoot=false;
+ }
+ else
+ bullet=false;
+ score=1e10;
+ }
+ else
+ {
+ acc=true;
+ accelerateFramesNumber--;
+ }
+ }
+ else
+ rotateFramesNumber--;
+
+}
+
+
+AiSprite Ai::nextPosition(AiSprite sp,double mult)
+{
+ double abs_2,nx,ny,sq,eg;
+ if(!sp.sun)
+ {
+ abs_2=sp.x*sp.x+sp.y*sp.y;
+ if(abs_2<1)
+ abs_2=1;
+ sq=sqrt(abs_2);
+ nx=sp.x/sq;
+ ny=sp.y/sq;
+ eg=cfg->gravity*mult;
+ sp.dx-=eg*nx/abs_2;
+ sp.dy-=eg*ny/abs_2;
+
+ sp.x+=sp.dx*mult;
+ sp.y+=sp.dy*mult;
+
+ if(sp.x*sp.x+sp.y*sp.y<1600)
+ sp.sun=true;
+ else
+ {
+ //simple bounds actions
+ if(sp.x>sfwidth_2)
+ {
+ sp.x-=sfwidth;
+ sp.border=true;
+ }
+ else if(sp.x<-sfwidth_2)
+ {
+ sp.x+=sfwidth;
+ sp.border=true;
+ }
+ if(sp.y>sfheight_2)
+ {
+ sp.y-=sfheight;
+ sp.border=true;
+ }
+ else if(sp.y<-sfheight_2)
+ {
+ sp.y+=sfheight;
+ sp.border=true;
+ }
+ }
+ }
+
+ return sp;
+}
+
+void Ai::nextPositions(AiSprite sp,QMemArray<AiSprite> *a,int frames)
+{
+ int i,num;
+ double fmult=cfg->gamespeed*frames;
+
+ (*a)[0]=nextPosition(sp,cfg->gamespeed);
+ num=a->size();
+ for(i=1;i<num;i++)
+ (*a)[i]=nextPosition((*a)[i-1],fmult);
+}
+
+void Ai::calculateNextPositions()
+{
+ unsigned int i,j;
+ MineSprite *ms;
+
+ j=(int)(calcPositionNumber[Options::aiDifficulty(playerNumber)]/cfg->gamespeed);
+
+ if(shipsNextPositions[0]->size() != j)
+ for(i=0;i<2;i++)
+ shipsNextPositions[i]->resize(j);
+
+ for(i=0;i<2;i++)
+ nextPositions(ship[i]->toAiSprite(),shipsNextPositions[i],
+ calcFrameIncrement[Options::aiDifficulty(playerNumber)]);
+
+ if(cfg->maxMines > aiMines[0]->size())
+ for(i=0;i<2;i++)
+ aiMines[i]->resize(cfg->maxMines);
+
+ for(i=0;i<2;i++)
+ {
+ j=0;
+ ms=mines[i]->first();
+ while(ms)
+ {
+ (*(aiMines[i]))[j]=ms->toAiSprite();
+ ms=mines[i]->next();
+ j++;
+ }
+ mineNumber[i]=j;
+ }
+}
+
+void Ai::tryShots()
+{
+ AiSprite shot,me;
+ double rot,nr,nx,ny;
+ int i,f,frameIncrement,frameNum;
+ Hit hit;
+ Shot *goodShot;
+
+ me=ship[playerNumber]->toAiSprite();
+ rot=ship[playerNumber]->getRotation();
+
+ //Each 'frameIncrement' frames a shot is tried
+ frameIncrement=(int)((2*M_PI/calcShotDirections[Options::aiDifficulty(playerNumber)])
+ /cfg->rotationSpeed);
+ if(frameIncrement==0)
+ frameIncrement=1;
+ //Number of frames needed to rotate 180 degrees
+ frameNum=(int)(M_PI/(frameIncrement*cfg->rotationSpeed));
+
+ //if too much bullets are on the playfield, no shot is tried
+ if(bullets[playerNumber]->count() <
+ (cfg->maxBullets+ship[playerNumber]->getBulletPowerups()))
+ {
+ for(f=0;f<=frameNum;f++)
+ {
+ if(f!=0)
+ for(i=0;i<frameIncrement;i++)
+ me=nextPosition(me,cfg->gamespeed);
+ else
+ me=nextPosition(me,cfg->gamespeed);
+
+ if(!ship[playerNumber]->reloadsBullet(f*frameIncrement*cfg->gamespeed))
+ {
+ for(i=0;i<2;i++)
+ {
+ if((f==0)&&(i==1))
+ continue;
+ if(i==0)
+ nr=rot+frameIncrement*f*cfg->rotationSpeed;
+ else
+ nr=rot-frameIncrement*f*cfg->rotationSpeed;
+
+ nx=cos(nr);
+ ny=sin(nr);
+ shot.x=me.x+nx*SHOTDIST;
+ shot.y=me.y+ny*SHOTDIST;
+ shot.dx=me.dx+nx*cfg->shotSpeed;
+ shot.dy=me.dy+ny*cfg->shotSpeed;
+ shot.sun=false;
+ shot.border=false;
+
+ hit=firstObject(shot,f*frameIncrement,
+ calcFrameIncrement[Options::aiDifficulty(playerNumber)]);
+ if((hit.object!=HNOTHING) &&
+ !((hit.object==HSHIP)&&(hit.playerNumber==playerNumber)))
+ {
+ goodShot=new Shot;
+ goodShot->hit=hit;
+ goodShot->rotation=(i==0?RLEFT:RRIGHT);
+ goodShot->rotationFrames=f*frameIncrement;
+ goodShot->score=1e10;
+ myShots.append(goodShot);
+ }
+ }
+ }
+ }
+ }
+}
+
+Hit Ai::firstObject(AiSprite shot,int time,int frames)
+{
+ int optime,i,num,rtime,basetime,t,m;
+ double dist,distx,disty,shiplastdist=0;
+ bool shipdistgreater=true,hitfound=false;
+ Hit hit={HNOTHING,0,0,0,1e10};
+
+ basetime=time/frames;
+ if((time%frames)>0)
+ basetime++;
+ rtime=basetime*frames-time;
+ optime=shipsNextPositions[0]->size();
+
+ num=optime-basetime;
+
+ if(num>0)
+ {
+ for(t=0;(t<num)&&(!hitfound)&&(!shot.sun);t++)
+ {
+ if(t==0)
+ shot=nextPosition(shot,cfg->gamespeed*rtime);
+ else
+ shot=nextPosition(shot,cfg->gamespeed*frames);
+
+ //distance to other objects
+ for(i=0;i<2;i++)
+ {
+ distx=(*(shipsNextPositions[i]))[basetime].x-shot.x;
+ disty=(*(shipsNextPositions[i]))[basetime].y-shot.y;
+ dist=distx*distx+disty*disty;
+ //own ship
+ if(i==playerNumber)
+ {
+ if(dist<shiplastdist)
+ shipdistgreater=false;
+ if((!shipdistgreater)&&(dist<hit.distance))
+ {
+ hit.object=HSHIP;
+ hit.objectNumber=0;
+ hit.playerNumber=i;
+ hit.hitTime=basetime*frames;
+ hit.distance=dist;
+ }
+ shiplastdist=dist;
+ }
+ //other ship
+ else if(dist<hit.distance)
+ {
+ hit.object=HSHIP;
+ hit.objectNumber=0;
+ hit.playerNumber=i;
+ hit.hitTime=basetime*frames;
+ hit.distance=dist;
+ }
+
+ //mines
+ for(m=0;m<mineNumber[i];m++)
+ {
+ distx=(*(aiMines[i]))[m].x-shot.x;
+ disty=(*(aiMines[i]))[m].y-shot.y;
+ dist=distx*distx+disty*disty;
+
+ if(dist<hit.distance)
+ {
+ hit.object=HMINE;
+ hit.playerNumber=i;
+ hit.objectNumber=m;
+ hit.hitTime=basetime*frames;
+ hit.distance=dist;
+ }
+ }
+ }
+ if(hit.distance<100)
+ hitfound=true;
+ basetime++;
+ }
+ }
+
+ return hit;
+}
+
+void Ai::testForHits()
+{
+ AiSprite shot;
+ unsigned int i;
+ int m,p;
+ BulletSprite *bullet;
+ Hit *h;
+ Hit hit;
+ bool hitfound=false;
+ double distance,dx,dy;
+
+ if(calculateCollisions>0)
+ {
+ calculateCollisions--;
+ h=objectsHitByShip.first();
+ while(h)
+ {
+ if(h->hitTime>0)
+ {
+ h->hitTime--;
+ h=objectsHitByShip.next();
+ }
+ else
+ {
+ objectsHitByShip.remove();
+ h=objectsHitByShip.current();
+ }
+ }
+ h=minesHitByShot.first();
+ while(h)
+ {
+ if(h->hitTime>0)
+ {
+ h->hitTime--;
+ h=minesHitByShot.next();
+ }
+ else
+ {
+ minesHitByShot.remove();
+ h=minesHitByShot.current();
+ }
+ }
+ }
+ else
+ {
+ objectsHitByShip.clear();
+ minesHitByShot.clear();
+ for(i=0;i<2;i++)
+ {
+ for(bullet=bullets[i]->first();bullet;bullet=bullets[i]->next())
+ {
+ shot=bullet->toAiSprite();
+ hit=firstObject(shot,0,calcFrameIncrement[Options::aiDifficulty(playerNumber)]);
+ if(hit.object==HMINE)
+ {
+ h=new Hit(hit);
+ minesHitByShot.append(h);
+ }
+ if((hit.object==HSHIP)&&(hit.playerNumber==playerNumber))
+ {
+ h=new Hit(hit);
+ h->object=HSHOT;
+ objectsHitByShip.append(h);
+ }
+ }
+ }
+
+ hit.object=HNOTHING;
+ hit.distance=400;
+
+ for(i=0;(i<shipsNextPositions[0]->size()) &&
+ !(*shipsNextPositions[playerNumber])[i].sun;i++)
+ {
+ if((borderTime<0) && (*shipsNextPositions[playerNumber])[i].border)
+ borderTime=i*calcFrameIncrement[Options::aiDifficulty(playerNumber)];
+
+ dx=(*shipsNextPositions[playerNumber])[i].x;
+ dy=(*shipsNextPositions[playerNumber])[i].y;
+ distance=dx*dx+dy*dy;
+ if((distance<3025)&&(sunTime<0))
+ sunTime=i*calcFrameIncrement[Options::aiDifficulty(playerNumber)];
+
+ if(!hitfound)
+ for(p=0;p<2;p++)
+ for(m=0;m<mineNumber[p];m++)
+ {
+ dx=(*shipsNextPositions[playerNumber])[i].x-(*aiMines[p])[m].x;
+ dy=(*shipsNextPositions[playerNumber])[i].y-(*aiMines[p])[m].y;
+ distance=dx*dx+dy*dy;
+ if(hit.distance>distance)
+ {
+ hit.object=HMINE;
+ hit.playerNumber=p;
+ hit.objectNumber=m;
+ hit.hitTime=i*calcFrameIncrement[Options::aiDifficulty(playerNumber)];
+ hit.distance=distance;
+ if(distance<100)
+ hitfound=true;
+ }
+ }
+ }
+ if(hit.object!=HNOTHING)
+ {
+ h=new Hit(hit);
+ objectsHitByShip.append(h);
+ }
+ calculateCollisions=(int)(calcCollisions[Options::aiDifficulty(playerNumber)]/cfg->gamespeed);
+ }
+}
+
+void Ai::shotScores()
+{
+ Shot *s;
+ Hit *h,*mh;
+ bool found,foundmh;
+ double dist,dx,dy,fuel;
+
+
+ dx=(*shipsNextPositions[playerNumber])[0].x-(*shipsNextPositions[opponentNumber])[0].x;
+ dy=(*shipsNextPositions[playerNumber])[0].y-(*shipsNextPositions[opponentNumber])[0].y;
+ dist=dx*dx+dy*dy;
+
+ for(s=myShots.first();s;s=myShots.next())
+ {
+ fuel=(100-(ship[playerNumber]->getEnergy()-cfg->shotEnergyNeed));
+ s->score=fuel*fuel/10 + s->hit.distance+s->hit.hitTime;
+ if(dist > (75*75))
+ s->score+=waitShot*8;
+ else
+ s->score+=waitShot*4;
+
+ if(s->hit.object==HMINE)
+ {
+ found=false;
+ for(h=objectsHitByShip.first();h && !found;h=objectsHitByShip.next())
+ {
+ if((h->object==HMINE)&&(h->playerNumber==s->hit.playerNumber)
+ &&(h->objectNumber==s->hit.objectNumber))
+ //ship will hit a mine that will be hitten by the shot
+ {
+ found=true;
+ //ship hits earlier then shot
+ if(h->hitTime<s->hit.hitTime)
+ s->score+=1000;
+ else
+ {
+ foundmh=false;
+ for(mh=minesHitByShot.first();mh && !foundmh;mh=minesHitByShot.next())
+ {
+ if((mh->playerNumber==s->hit.playerNumber)
+ &&(mh->objectNumber==s->hit.objectNumber))
+ //another shot will hit the mine
+ {
+ if(mh->hitTime<s->hit.hitTime)
+ s->score+=500;
+ else
+ s->score-=300;
+ }
+ }
+ }
+ }
+ }
+ if(!found)
+ s->score+=1000;
+ }
+ }
+}
+
+void Ai::chooseAction()
+{
+ double bestScore=1e10;
+ Shot *bestShot=NULL,*s;
+ AiSprite actualpos;
+ double posangle,movephi,phiright,phileft,torotate=0,velangle;
+ int framesleft,framesright;
+ bool rotateAndAccelerate=false;
+ Hit *nextHit=0;
+ int shotHitTime;
+
+
+ shotHitTime=1000000;
+ nextHit=0;
+/* for(h=objectsHitByShip.first();h;h=objectsHitByShip.next())
+ if(h->object==HSHOT)
+ if(h->hitTime<shotHitTime)
+ {
+ nextHit=h;
+ shotHitTime=h->hitTime;
+ }*/
+
+ if((borderTime>0) || (sunTime>0) || (nextHit))
+ {
+ actualpos=ship[playerNumber]->toAiSprite();
+ posangle=rectToAngle(actualpos.x,actualpos.y);
+
+ movephi=rectToAngle((*shipsNextPositions[playerNumber])[0].x,
+ (*shipsNextPositions[playerNumber])[0].y) - posangle;
+
+ phileft=movephi+cfg->rotationSpeed;
+ phiright=movephi-cfg->rotationSpeed;
+
+ if((borderTime>0)&& !((sunTime>0)&&(sunTime<borderTime)))
+ {
+ bestScore=borderTime/cfg->gamespeed;
+ if(score>bestScore)
+ {
+ velangle=rectToAngle(actualpos.dx,actualpos.dy);
+ if(fabs(difference(posangle+3*M_PI/4,velangle))
+ < fabs(difference(posangle-3*M_PI/4,velangle)))
+ torotate=posangle-3*M_PI/4-ship[playerNumber]->getRotation();
+ else
+ torotate=posangle+3*M_PI/4-ship[playerNumber]->getRotation();
+ rotateAndAccelerate=true;
+ score=bestScore;
+ accelerateFramesNumber=(int)(8/cfg->gamespeed);
+ }
+ }
+ else if(sunTime>0)
+ {
+ bestScore=sunTime/(cfg->gamespeed*10)
+ +(actualpos.x*actualpos.x+actualpos.y*actualpos.y)/5000;
+ if(score>bestScore)
+ {
+ velangle=rectToAngle(actualpos.dx,actualpos.dy);
+ if(fabs(difference(posangle+2*M_PI/5,velangle))
+ < fabs(difference(posangle-2*M_PI/5,velangle)))
+ torotate=posangle+2*M_PI/5-ship[playerNumber]->getRotation();
+ else
+ torotate=posangle-2*M_PI/5-ship[playerNumber]->getRotation();
+ rotateAndAccelerate=true;
+ score=bestScore;
+ accelerateFramesNumber=(int)(8/cfg->gamespeed);
+ }
+ }
+ else
+ {
+/* bestScore=abs(nextHit->hitTime-90)*4/cfg->gamespeed + nextHit->distance*2
+ + (100-(ship[playerNumber]->getEnergy()-cfg->shotEnergyNeed))*4;
+ if((score>bestScore)&&(bestScore<400))
+ {
+ velangle=rectToAngle(actualpos.dx,actualpos.dy);
+ if(fabs(difference(posangle+2*M_PI/5,velangle))
+ < fabs(difference(posangle-2*M_PI/5,velangle)))
+ torotate=posangle+2*M_PI/5-ship[playerNumber]->getRotation();
+ else
+ torotate=posangle-2*M_PI/5-ship[playerNumber]->getRotation();
+ rotateAndAccelerate=true;
+ score=bestScore;
+ accelerateFramesNumber=(int)(4/cfg->gamespeed);
+ }*/
+ }
+
+ if(rotateAndAccelerate)
+ {
+ if(phileft<0)
+ framesleft=1000;
+ else
+ {
+ while(torotate<0)
+ torotate+=2*M_PI;
+ while(torotate>=2*M_PI)
+ torotate-=2*M_PI;
+ framesleft=(int)(torotate/phileft+0.5);
+ }
+
+ if(phiright>0)
+ framesright=1000;
+ else
+ {
+ while(torotate>0)
+ torotate-=2*M_PI;
+ while(torotate<=-2*M_PI)
+ torotate+=2*M_PI;
+ framesright=(int)(torotate/phiright+0.5);
+ }
+
+ if(framesright<framesleft)
+ {
+ rotation=RRIGHT;
+ rotateFramesNumber=framesright;
+ }
+ else
+ {
+ rotation=RLEFT;
+ rotateFramesNumber=framesleft;
+ }
+ shoot=false;
+
+ }
+ }
+ else
+ {
+
+ bestShot=0;
+ for(s=myShots.first();s;s=myShots.next())
+ if(s->score<bestScore)
+ {
+ bestScore=s->score;
+ bestShot=s;
+ }
+ if(bestShot)
+ {
+ if((bestScore<score)&&(bestScore<400))
+ {
+ rotation=bestShot->rotation;
+ rotateFramesNumber=bestShot->rotationFrames;
+ accelerateFramesNumber=0;
+ shoot=true;
+ score=bestScore;
+ calculateCollisions = 0;
+ waitShot=(int) rint( random.getDouble() *
+ calcNextShot[Options::aiDifficulty(playerNumber)]
+ /cfg->gamespeed);
+ }
+ }
+ }
+}
+
+void Ai::setSpriteFieldSize()
+{
+ sfwidth=(double)(ship[playerNumber]->spriteFieldWidth());
+ sfheight=(double)(ship[playerNumber]->spriteFieldHeight());
+ sfwidth_2=sfwidth/2.0;
+ sfheight_2=sfheight/2.0;
+}
+
diff --git a/kspaceduel/ai.h b/kspaceduel/ai.h
new file mode 100644
index 00000000..0369ea02
--- /dev/null
+++ b/kspaceduel/ai.h
@@ -0,0 +1,102 @@
+#ifndef __KSD_AI_H
+#define __KSD_AI_H
+
+#include <krandomsequence.h>
+
+#include <qptrlist.h>
+#include <qmemarray.h>
+
+#include "sprites.h"
+#include "dialogs.h"
+#include "options.h"
+
+enum Rotation {RLEFT,RNONE,RRIGHT};
+
+struct MineHit
+{
+ int mineNumber,hitTime;
+ double distance;
+};
+
+enum HitObject {HSHIP,HMINE,HSHOT,HNOTHING};
+
+struct Hit
+{
+ HitObject object;
+ int playerNumber,objectNumber,hitTime;
+ double distance; //distance^2
+};
+
+struct Shot
+{
+ Hit hit;
+ Rotation rotation;
+ int rotationFrames;
+ double score;
+};
+
+
+class Ai
+{
+public:
+ Ai(int pn,ShipSprite* s[2],QPtrList<BulletSprite> *b[2],
+ QPtrList<MineSprite> *m[2],SConfig *c);
+ void newRound();
+ void think();
+ bool rotateLeft(){return rotation==RLEFT;}
+ bool rotateRight(){return rotation==RRIGHT;}
+ bool accelerate(){return acc;}
+ bool shootBullet(){return bullet;}
+ bool layMine(){return mine;}
+private:
+ AiSprite nextPosition(AiSprite sp,double mult);
+ void nextPositions(AiSprite sp,QMemArray<AiSprite> *a,int frames);
+ Hit firstObject(AiSprite shot,int shotframes,int frames);
+ void shotScores();
+ void calculateNextPositions();
+ void setSpriteFieldSize();
+ void testForHits();
+ void tryShots();
+ void chooseAction();
+
+ SConfig *cfg;
+
+ KRandomSequence random;
+
+ //actions
+ Rotation rotation;
+ bool acc;
+ bool bullet,mine;
+ //what to do when
+ int rotateFramesNumber,accelerateFramesNumber;
+ bool shoot;
+ double score;
+ //sprites
+ int playerNumber,opponentNumber;
+ ShipSprite *ship[2];
+ QPtrList<BulletSprite> *bullets[2];
+ QPtrList<MineSprite> *mines[2];
+ QMemArray<AiSprite> *shipsNextPositions[2];
+ QMemArray<AiSprite> *aiMines[2];
+ int mineNumber[2];
+ //possible Hits
+ QPtrList<Shot> myShots;
+ QPtrList<Hit> objectsHitByShip;
+ QPtrList<Hit> minesHitByShot;
+ int borderTime;
+ int sunTime;
+ //SpriteField width and height
+ double sfwidth,sfheight,sfwidth_2,sfheight_2;
+ //Difficulty
+ static int calcFrameIncrement[Options::EnumAiDifficulty::COUNT];
+ static int calcPositionNumber[Options::EnumAiDifficulty::COUNT];
+ static int calcShotDirections[Options::EnumAiDifficulty::COUNT];
+ static int calcCollisions[Options::EnumAiDifficulty::COUNT];
+ static int calcNextShot[Options::EnumAiDifficulty::COUNT];
+ static double calcShotRandom[Options::EnumAiDifficulty::COUNT];
+
+ int calculateCollisions;
+ int waitShot;
+};
+
+#endif
diff --git a/kspaceduel/configure.in.in b/kspaceduel/configure.in.in
new file mode 100644
index 00000000..cd18ea8d
--- /dev/null
+++ b/kspaceduel/configure.in.in
@@ -0,0 +1 @@
+dnl KDE_CHECK_QWSPRITEFIELD(DO_NOT_COMPILE="$DO_NOT_COMPILE kspaceduel")
diff --git a/kspaceduel/defines.h b/kspaceduel/defines.h
new file mode 100644
index 00000000..81162d77
--- /dev/null
+++ b/kspaceduel/defines.h
@@ -0,0 +1,66 @@
+#include <qnamespace.h>
+
+
+#define IDS_PAUSE 1
+#define IDS_MAIN 2
+
+#define PlayerKeyLeft 0
+#define PlayerKeyRight 1
+#define PlayerKeyAcc 2
+#define PlayerKeyShot 3
+#define PlayerKeyMine 4
+#define PlayerKeyNum 5
+
+#define ROTNUM 64
+
+#define MV_BACKGROUND "sprites/backgr.png"
+
+#define MV_SHIP1_PPM "sprites/ship1/ship%02d.ppm"
+#define MV_SHIP1_PBM "sprites/ship1/ship%02d.pbm"
+#define MV_SHIP2_PPM "sprites/ship2/ship%02d.ppm"
+#define MV_SHIP2_PBM "sprites/ship2/ship%02d.pbm"
+
+#define MV_BULLET1_PPM "sprites/ship1/bullet.ppm"
+#define MV_BULLET1_PBM "sprites/ship1/bullet.pbm"
+#define MV_BULLET2_PPM "sprites/ship2/bullet.ppm"
+#define MV_BULLET2_PBM "sprites/ship2/bullet.pbm"
+
+#define MV_MINE1_PPM "sprites/ship1/mine%d.ppm"
+#define MV_MINE1_PBM "sprites/ship1/mine%d.pbm"
+#define MV_MINE2_PPM "sprites/ship2/mine%d.ppm"
+#define MV_MINE2_PBM "sprites/ship2/mine%d.pbm"
+
+#define MV_SUN_PPM "sprites/sun/sun.ppm"
+#define MV_SUN_PBM "sprites/sun/sun.pbm"
+
+#define MV_EXPLOSION_PPM "sprites/explosion/explos%02d.ppm"
+#define MV_EXPLOSION_PBM "sprites/explosion/explos%02d.pbm"
+#define MV_MINEEX_PPM "sprites/explosion/mineex%02d.ppm"
+#define MV_MINEEX_PBM "sprites/explosion/mineex%02d.pbm"
+
+#define MV_POWERBULLET_PPM "sprites/powerups/pbullet.ppm"
+#define MV_POWERBULLET_PBM "sprites/powerups/pbullet.pbm"
+#define MV_POWERMINE_PPM "sprites/powerups/pmine.ppm"
+#define MV_POWERMINE_PBM "sprites/powerups/pmine.pbm"
+#define MV_POWERSHIELD_PPM "sprites/powerups/pshield.ppm"
+#define MV_POWERSHIELD_PBM "sprites/powerups/pshield.pbm"
+#define MV_POWERENERGY_PPM "sprites/powerups/penergy.ppm"
+#define MV_POWERENERGY_PBM "sprites/powerups/penergy.pbm"
+
+#define DEF_WIDTH 640
+#define DEF_HEIGHT 480
+
+#define EXPLOSION_TIME 7
+
+#define S_BASE 1500
+#define S_SUN S_BASE+0
+#define S_SHIP S_BASE+1
+#define S_BULLET S_BASE+2
+#define S_MINE S_BASE+3
+#define S_EXPLOSION S_BASE+4
+#define S_POWERUP S_BASE+5
+
+#define SHOTDIST 14
+#define EPSILON 0.1
+
+#define GAME_START_SHORTCUT Qt::Key_Space
diff --git a/kspaceduel/dialogs.cpp b/kspaceduel/dialogs.cpp
new file mode 100644
index 00000000..9e5b4b7a
--- /dev/null
+++ b/kspaceduel/dialogs.cpp
@@ -0,0 +1,434 @@
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qtabwidget.h>
+#include <qslider.h>
+#include <qlcdnumber.h>
+#include <qlayout.h>
+
+#include <klocale.h>
+
+#include "options.h"
+#include "dialogs.h"
+#include "general.h"
+
+bool operator!=(const SConfig &s1, const SConfig &s2)
+{
+ return
+(s1.gamespeed != s2.gamespeed) ||
+(s1.gravity != s2.gravity) ||
+(s1.acc != s2.acc) ||
+(s1.energyNeed != s2.energyNeed) ||
+(s1.sunEnergy != s2.sunEnergy) ||
+(s1.rotationSpeed != s2.rotationSpeed) ||
+(s1.mineActivateTime != s2.mineActivateTime) ||
+(s1.mineFuel != s2.mineFuel) ||
+(s1.shotSpeed != s2.shotSpeed) ||
+(s1.shotEnergyNeed != s2.shotEnergyNeed) ||
+(s1.mineEnergyNeed != s2.mineEnergyNeed) ||
+(s1.rotationEnergyNeed != s2.rotationEnergyNeed) ||
+(s1.startPosX != s2.startPosX) ||
+(s1.startPosY != s2.startPosY) ||
+(s1.startVelX != s2.startVelX) ||
+(s1.startVelY != s2.startVelY) ||
+(s1.bulletLifeTime != s2.bulletLifeTime) ||
+(s1.mineReloadTime != s2.mineReloadTime) ||
+(s1.bulletReloadTime != s2.bulletReloadTime) ||
+(s1.bulletDamage != s2.bulletDamage) ||
+(s1.shipDamage != s2.shipDamage) ||
+(s1.mineDamage != s2.mineDamage) ||
+(s1.maxBullets != s2.maxBullets) ||
+(s1.maxMines != s2.maxMines) ||
+(s1.powerupLifeTime != s2.powerupLifeTime) ||
+(s1.powerupRefreshTime != s2.powerupRefreshTime) ||
+(s1.powerupEnergyAmount != s2.powerupEnergyAmount) ||
+(s1.powerupShieldAmount != s2.powerupShieldAmount);
+}
+
+
+char ConfigSetup::LabelName[EditNum][25]=
+{
+ I18N_NOOP("Game speed:"), I18N_NOOP("Shot speed:"),
+ I18N_NOOP("Energy need:"), I18N_NOOP("Max number:"),
+ I18N_NOOP("Damage:"), I18N_NOOP("Life time:"),
+ I18N_NOOP("Reload time:"), I18N_NOOP("Mine fuel:"),
+ I18N_NOOP("Energy need:"), I18N_NOOP("Activate time:"),
+ I18N_NOOP("Damage:"), I18N_NOOP("Max number:"),
+ I18N_NOOP("Reload time:"), I18N_NOOP("Acceleration:"),
+ I18N_NOOP("Energy need:"), I18N_NOOP("Rotation speed:"),
+ I18N_NOOP("Energy need:"), I18N_NOOP("Crash damage:"),
+ I18N_NOOP("Sun energy:"), I18N_NOOP("Gravity:"),
+ I18N_NOOP("Position X:"), I18N_NOOP("Position Y:"),
+ I18N_NOOP("Velocity X:"), I18N_NOOP("Velocity Y:"),
+ I18N_NOOP("Appearance time:"),I18N_NOOP("Life time:"),
+ I18N_NOOP("Energy amount:"), I18N_NOOP("Shield amount:")
+};
+
+enum ConfigSetup::Type ConfigSetup::VarType[EditNum]=
+{VarFloat,
+ VarFloat,VarFloat,VarInt,VarInt,VarFloat,VarFloat,
+ VarFloat,VarFloat,VarFloat,VarInt,VarInt,VarFloat,
+ VarFloat,VarFloat,VarFloat,
+ VarFloat,VarInt,
+ VarFloat,VarFloat,
+ VarFloat,VarFloat,VarFloat,VarFloat,
+ VarFloat,VarFloat,VarFloat,VarInt};
+
+double ConfigSetup::EditVal[EditNum][3]=
+{{0.2,4.0,1},
+ {0.1,10,3},{0,99,10},{0,10,5},{1,100,20},{50,2000,100},{0,400,10},
+ {5,200,65},{0,99,5},{5,100,15},{1,100,30},{0,10,3},{0,400,10},
+ {0,1.0,0.2},{0,10,1.0},{0.1,4,1},
+ {0,10,0.2},{0,100,50},
+ {1000,30000,9000},{0,10000,2200},
+ {-250,250,-130},{-180,180,-100},{-10,10,3},{-10,10,-1.7},
+ {200,4000,800},{200,4000,400},{0,99,50},{0,99,30}};
+
+int ConfigSetup::EditDiv[EditNum]=
+{100,
+ 10,1,1,1,1,10,
+ 1,1,10,1,1,10,
+ 100,10,10,
+ 10,1,
+ 1,1,
+ 10,10,100,100,
+ 1,1,1,1};
+
+int ConfigSetup::Parent[EditNum]=
+{TabGeneral,
+ TabBullet,TabBullet,TabBullet,TabBullet,TabBullet,TabBullet,
+ TabMine,TabMine,TabMine,TabMine,TabMine,TabMine,
+ TabShip,TabShip,TabShip,TabShip,TabShip,
+ TabSun,TabSun,
+ TabStart,TabStart,TabStart,TabStart,
+ TabPowerups,TabPowerups,TabPowerups,TabPowerups};
+
+int ConfigSetup::Position[EditNum]=
+{0,
+ 0,1,2,3,4,5,
+ 0,1,2,3,4,5,
+ 0,1,2,3,4,
+ 0,1,
+ 0,1,2,3,
+ 0,1,2,3};
+
+const int LCDLen=6;
+
+ConfigSetup::ConfigSetup(SConfig *custom,QWidget *parent,const char *name)
+ :QWidget( parent, name )
+{
+ QLabel *label[EditNum];
+ QGridLayout *stacklayout[TabNum];
+ QWidget *configWidgets[TabNum];
+ //QGroupBox *box;
+
+ int i;
+
+ resize(500,400);
+ //setCaption(i18n("Game Setup"));
+ //setHelp( "OptionsConfigurations" );
+
+
+ //box=new QGroupBox(i18n("Config"),this);
+ //setMainWidget( box );
+ QVBoxLayout *boxlayout = new QVBoxLayout( this, 6 );
+
+ tabs=new QTabWidget(this);
+ for(i=0;i<TabNum;i++)
+ {
+ configWidgets[i]=new QWidget(tabs);
+ stacklayout[i]=new QGridLayout(configWidgets[i],6,3,10);
+ }
+
+ for(i=0;i<EditNum;i++)
+ {
+ label[i]=new QLabel(i18n(LabelName[i]),configWidgets[Parent[i]]);
+ slider[i]=new QSlider(EditVal[i][0]*EditDiv[i],EditVal[i][1]*EditDiv[i],
+ (EditVal[i][1]-EditVal[i][0])/10,
+ EditVal[i][2]*EditDiv[i],
+ QSlider::Horizontal,configWidgets[Parent[i]]);
+ connect(slider[i],SIGNAL(valueChanged(int)),SLOT(sliderChanged(int)));
+ value[i]=new QLCDNumber(LCDLen,configWidgets[Parent[i]]);
+ value[i]->setFrameStyle(QFrame::NoFrame);
+ }
+
+ configCombo=new QComboBox(false,this);
+ connect(configCombo,SIGNAL(activated(int)),SLOT(configSelected(int)));
+ for(i=0;i<predefinedConfigNum;i++)
+ configCombo->insertItem(i18n(predefinedConfigName[i]));
+ configCombo->insertItem(i18n("Custom"));
+
+ boxlayout->addSpacing( 2 * 6 );
+ boxlayout->addWidget(configCombo);
+ boxlayout->addWidget(tabs);
+
+ for(i=0;i<EditNum;i++)
+ {
+ stacklayout[Parent[i]]->addWidget(label[i],Position[i],0);
+ stacklayout[Parent[i]]->addWidget(slider[i],Position[i],1);
+ stacklayout[Parent[i]]->addWidget(value[i],Position[i],2);
+ }
+
+ for(i=0;i<TabNum;i++)
+ stacklayout[i]->activate();
+
+ tabs->addTab(configWidgets[0],i18n("General"));
+ tabs->addTab(configWidgets[1],i18n("Bullet"));
+ tabs->addTab(configWidgets[2],i18n("Name","Mine"));
+ tabs->addTab(configWidgets[3],i18n("Ship"));
+ tabs->addTab(configWidgets[4],i18n("Sun"));
+ tabs->addTab(configWidgets[5],i18n("Start"));
+ tabs->addTab(configWidgets[6],i18n("Powerups"));
+
+ customConfig=custom;
+
+ updateWidgets();
+}
+
+void ConfigSetup::updateWidgets()
+{
+ config=*customConfig;
+ selectedConfig = -1;
+ configCombo->setCurrentItem(Options::lastConfig());
+ configSelected(Options::lastConfig());
+}
+
+void ConfigSetup::valueChanged(int ednum,int value)
+{
+ if(selectedConfig==predefinedConfigNum)
+ {
+ switch(ednum)
+ {
+ case EditMaxBullets:config.maxBullets=value;break;
+ case EditBulletDamage:config.bulletDamage=value;break;
+ case EditMaxMines:config.maxMines=value;break;
+ case EditMineDamage:config.mineDamage=value;break;
+ case EditShipDamage:config.shipDamage=value;break;
+ case EditPowerupShieldAmount:config.powerupShieldAmount=value;break;
+ }
+ emit changed();
+ }
+}
+
+void ConfigSetup::valueChanged(int ednum,double value)
+{
+ if(selectedConfig==predefinedConfigNum)
+ {
+ switch(ednum)
+ {
+ case EditSunEnergy:config.sunEnergy=value;break;
+ case EditGravity:config.gravity=value;break;
+ case EditShotSpeed:config.shotSpeed=value;break;
+ case EditShotEnergyNeed:config.shotEnergyNeed=value;break;
+ case EditBulletLifeTime:config.bulletLifeTime=value;break;
+ case EditBulletReloadTime:config.bulletReloadTime=value;break;
+ case EditMineFuel:config.mineFuel=value;break;
+ case EditMineEnergyNeed:config.mineEnergyNeed=value;break;
+ case EditMineActivateTime:config.mineActivateTime=value;break;
+ case EditMineReloadTime:config.mineReloadTime=value;break;
+ case EditGamespeed:config.gamespeed=value;break;
+ case EditPosX:config.startPosX=value;break;
+ case EditPosY:config.startPosY=value;break;
+ case EditVelX:config.startVelX=value;break;
+ case EditVelY:config.startVelY=value;break;
+ case EditAcc:config.acc=value;break;
+ case EditEnergyNeed:config.energyNeed=value;break;
+ case EditRotationSpeed:config.rotationSpeed=value;break;
+ case EditRotationEnergyNeed:config.rotationEnergyNeed=value;break;
+ case EditPowerupRefreshTime:config.powerupRefreshTime=value;break;
+ case EditPowerupLifeTime:config.powerupLifeTime=value;break;
+ case EditPowerupEnergyAmount:config.powerupEnergyAmount=value;break;
+ }
+ emit changed();
+ }
+}
+
+void ConfigSetup::updateSettings()
+{
+ *customConfig=config;
+
+ Options::setLastConfig(selectedConfig);
+ Options::writeConfig();
+}
+
+bool ConfigSetup::hasChanged()
+{
+ if (configCombo->currentItem() != Options::lastConfig())
+ return true;
+
+ if (configCombo->currentItem() != predefinedConfigNum)
+ return false;
+
+ return ((*customConfig) != config);
+}
+
+void ConfigSetup::updateWidgetsDefault()
+{
+ configCombo->setCurrentItem(0);
+ configSelected(0);
+}
+
+bool ConfigSetup::isDefault()
+{
+ return configCombo->currentItem() == 0;
+}
+
+void ConfigSetup::configSelected(int num)
+{
+ int i;
+ if(!((selectedConfig==predefinedConfigNum)&&(num==predefinedConfigNum)))
+ {
+ selectedConfig = num;
+ for(i=0;i<EditNum;i++)
+ slider[i]->setEnabled(num==predefinedConfigNum);
+ //enableButton( Default, num==predefinedConfigNum );
+ if(num<predefinedConfigNum)
+ displayConfig(predefinedConfig[num]);
+ else
+ displayConfig(config);
+ emit changed();
+ }
+}
+
+void ConfigSetup::displayConfig(SConfig cfg)
+{
+ setValue(EditSunEnergy,cfg.sunEnergy);
+ setValue(EditGravity,cfg.gravity);
+
+ setValue(EditShotSpeed,cfg.shotSpeed);
+ setValue(EditShotEnergyNeed,cfg.shotEnergyNeed);
+ setValue(EditMaxBullets,cfg.maxBullets);
+ setValue(EditBulletDamage,cfg.bulletDamage);
+ setValue(EditBulletLifeTime,cfg.bulletLifeTime);
+ setValue(EditBulletReloadTime,cfg.bulletReloadTime);
+
+ setValue(EditMineFuel,cfg.mineFuel);
+ setValue(EditMineEnergyNeed,cfg.mineEnergyNeed);
+ setValue(EditMineActivateTime,cfg.mineActivateTime);
+ setValue(EditMineDamage,cfg.mineDamage);
+ setValue(EditMaxMines,cfg.maxMines);
+ setValue(EditMineReloadTime,cfg.mineReloadTime);
+
+ setValue(EditGamespeed,cfg.gamespeed);
+
+ setValue(EditPosX,cfg.startPosX);
+ setValue(EditPosY,cfg.startPosY);
+ setValue(EditVelX,cfg.startVelX);
+ setValue(EditVelY,cfg.startVelY);
+
+ setValue(EditAcc,cfg.acc);
+ setValue(EditEnergyNeed,cfg.energyNeed);
+ setValue(EditRotationSpeed,cfg.rotationSpeed);
+ setValue(EditRotationEnergyNeed,cfg.rotationEnergyNeed);
+ setValue(EditShipDamage,cfg.shipDamage);
+
+ setValue(EditPowerupLifeTime,cfg.powerupLifeTime);
+ setValue(EditPowerupRefreshTime,cfg.powerupRefreshTime);
+ setValue(EditPowerupShieldAmount,cfg.powerupShieldAmount);
+ setValue(EditPowerupEnergyAmount,cfg.powerupEnergyAmount);
+}
+
+void ConfigSetup::setValue(int ednum,int val)
+{
+ QString str;
+ str.sprintf("%*i",LCDLen,val);
+ value[ednum]->display(str);
+ slider[ednum]->setValue(val);
+}
+
+void ConfigSetup::setValue(int ednum,double val)
+{
+ QString str;
+ int hval=(int)(val*EditDiv[ednum]+0.5);
+ int n,h;
+
+ if(EditDiv[ednum]==1)
+ str.sprintf("%*i",LCDLen,hval);
+ else
+ {
+ h=1;
+ for(n=0;h<EditDiv[ednum];n++)
+ h*=10;
+ str.sprintf("%*.*f",LCDLen,n,val);
+ }
+ value[ednum]->display(str);
+ slider[ednum]->setValue(hval);
+}
+
+void ConfigSetup::setValue(int ednum,unsigned val)
+{
+ QString str;
+ str.sprintf("%*i",LCDLen,(int)val);
+ value[ednum]->display(str);
+ slider[ednum]->setValue((int)val);
+}
+
+void ConfigSetup::sliderChanged(int val)
+{
+ int i,n,h;
+ QString str;
+
+ for(i=0;(i<EditNum)&&(slider[i]!=sender());i++);
+ if(i<EditNum)
+ {
+ if(EditDiv[i]==1)
+ str.sprintf("%*i",LCDLen,val);
+ else
+ {
+ h=1;
+ for(n=0;h<EditDiv[i];n++)
+ h*=10;
+ str.sprintf("%*.*f",LCDLen,n,(double)val/EditDiv[i]);
+ }
+ value[i]->display(str);
+ if(VarType[i]==VarFloat)
+ valueChanged(i,(double)val/EditDiv[i]);
+ else
+ valueChanged(i,val);
+ }
+
+}
+
+SettingsDialog::SettingsDialog(SConfig *customConfig, QWidget *parent, const char *name)
+ : KConfigDialog( parent, name, Options::self())
+{
+ General *general = new General();
+ addPage(general, i18n("General"), "package_settings", i18n("General Settings"));
+
+ cs = new ConfigSetup(customConfig);
+ addPage(cs, i18n("Game"), "kspaceduel", i18n("Game Settings"));
+ connect(cs, SIGNAL(changed()), this, SLOT(updateButtons()));
+
+// resize(600,400);
+}
+
+SettingsDialog::~SettingsDialog()
+{
+}
+
+void SettingsDialog::updateWidgetsDefault()
+{
+ cs->updateWidgetsDefault();
+}
+
+void SettingsDialog::updateWidgets()
+{
+ cs->updateWidgets();
+}
+
+void SettingsDialog::updateSettings()
+{
+ cs->updateSettings();
+ emit settingsUpdated();
+}
+
+bool SettingsDialog::hasChanged()
+{
+ return cs->hasChanged();
+}
+
+bool SettingsDialog::isDefault()
+{
+ return cs->isDefault();
+}
+
+#include "dialogs.moc"
diff --git a/kspaceduel/dialogs.h b/kspaceduel/dialogs.h
new file mode 100644
index 00000000..1a1ef6d2
--- /dev/null
+++ b/kspaceduel/dialogs.h
@@ -0,0 +1,102 @@
+#ifndef __SP_DIALOG_H
+#define __SP_DIALOG_H
+
+class QPushButton;
+class QLabel;
+class QComboBox;
+class QTabWidget;
+class QSlider;
+class QLCDNumber;
+class QCheckBox;
+
+#include <kconfigdialog.h>
+
+#include "defines.h"
+#include "structs.h"
+
+
+class ConfigSetup:public QWidget
+{
+ Q_OBJECT
+public:
+ ConfigSetup(SConfig *custom,QWidget *parent=0,const char* name=0);
+
+ bool hasChanged();
+ bool isDefault();
+ void updateSettings();
+ void updateWidgets();
+ void updateWidgetsDefault();
+
+signals:
+ void changed();
+
+protected slots:
+ void configSelected(int num);
+ void sliderChanged(int val);
+protected:
+ void valueChanged(int ednum,int val);
+ void valueChanged(int ednum,double val);
+ void displayConfig(SConfig cfg);
+ void setValue(int ednum,int val);
+ void setValue(int ednum,double val);
+ void setValue(int ednum,unsigned val);
+private:
+ enum {EditGamespeed=0,
+ EditShotSpeed,EditShotEnergyNeed,EditMaxBullets,EditBulletDamage,
+ EditBulletLifeTime,EditBulletReloadTime,
+ EditMineFuel,EditMineEnergyNeed,EditMineActivateTime,
+ EditMineDamage,EditMaxMines,EditMineReloadTime,
+ EditAcc,EditEnergyNeed,EditRotationSpeed,
+ EditRotationEnergyNeed,EditShipDamage,
+ EditSunEnergy,EditGravity,
+ EditPosX,EditPosY,EditVelX,EditVelY,
+ EditPowerupRefreshTime,EditPowerupLifeTime,
+ EditPowerupEnergyAmount,EditPowerupShieldAmount,
+ EditNum};
+ enum {TabGeneral=0,TabBullet,TabMine,
+ TabShip,TabSun,TabStart,TabPowerups,TabNum};
+ enum Type {VarInt,VarFloat};
+
+ static char LabelName[EditNum][25];
+ static int Parent[EditNum];
+ static int Position[EditNum];
+ static const char *TabName[TabNum];
+ static double EditVal[EditNum][3];
+ static int EditDiv[EditNum];
+ static Type VarType[EditNum];
+
+ QTabWidget *tabs;
+
+ QSlider *slider[EditNum];
+ QLCDNumber *value[EditNum];
+
+ QComboBox *configCombo;
+ SConfig *customConfig,config;
+
+ int selectedConfig;
+};
+
+class SettingsDialog : public KConfigDialog
+{
+ Q_OBJECT
+public:
+ SettingsDialog(SConfig *customConfig, QWidget *parent=0, const char *name=0);
+ ~SettingsDialog();
+
+signals:
+ void settingsUpdated();
+
+private slots:
+ void updateWidgets();
+ void updateWidgetsDefault();
+ void updateSettings();
+
+private:
+ bool hasChanged();
+ bool isDefault();
+
+private:
+ ConfigSetup* cs;
+};
+
+#endif
diff --git a/kspaceduel/general.ui b/kspaceduel/general.ui
new file mode 100644
index 00000000..83f3108f
--- /dev/null
+++ b/kspaceduel/general.ui
@@ -0,0 +1,337 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>General</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>General</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>512</width>
+ <height>488</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>GroupBoxPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="title">
+ <string>Hit Points</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLCDNumber" row="1" column="2">
+ <property name="name">
+ <cstring>lCDNumber2</cstring>
+ </property>
+ <property name="numDigits">
+ <number>2</number>
+ </property>
+ <property name="value" stdset="0">
+ <number>99</number>
+ </property>
+ </widget>
+ <widget class="QLCDNumber" row="0" column="2">
+ <property name="name">
+ <cstring>lCDNumber1</cstring>
+ </property>
+ <property name="numDigits">
+ <number>2</number>
+ </property>
+ <property name="value" stdset="0">
+ <number>99</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Red player:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Blue player:</string>
+ </property>
+ </widget>
+ <widget class="QSlider" row="1" column="1">
+ <property name="name">
+ <cstring>kcfg_StartHitPoints1</cstring>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QSlider" row="0" column="1">
+ <property name="name">
+ <cstring>kcfg_StartHitPoints0</cstring>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox4</cstring>
+ </property>
+ <property name="title">
+ <string>Graphics</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Refresh time:</string>
+ </property>
+ </widget>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>kcfg_RefreshTime</cstring>
+ </property>
+ <property name="minValue">
+ <number>10</number>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="value">
+ <number>33</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLCDNumber">
+ <property name="name">
+ <cstring>lCDNumber3</cstring>
+ </property>
+ <property name="numDigits">
+ <number>3</number>
+ </property>
+ <property name="value" stdset="0">
+ <number>33</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>91</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="2" column="0">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Red Player</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>kcfg_Player0IsAi</cstring>
+ </property>
+ <property name="text">
+ <string>Player is AI</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Difficulty:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Trainee</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Normal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Hard</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Insane</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>kcfg_AiDifficulty0</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="currentItem">
+ <number>1</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="2" column="1">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Blue Player</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>kcfg_Player1IsAi</cstring>
+ </property>
+ <property name="text">
+ <string>Player is AI</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Difficulty:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Trainee</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Normal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Hard</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Insane</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>kcfg_AiDifficulty1</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="currentItem">
+ <number>1</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>kcfg_StartHitPoints0</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lCDNumber1</receiver>
+ <slot>display(int)</slot>
+ </connection>
+ <connection>
+ <sender>kcfg_StartHitPoints1</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lCDNumber2</receiver>
+ <slot>display(int)</slot>
+ </connection>
+ <connection>
+ <sender>kcfg_RefreshTime</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lCDNumber3</receiver>
+ <slot>display(int)</slot>
+ </connection>
+ <connection>
+ <sender>kcfg_Player0IsAi</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>textLabel1</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>kcfg_Player0IsAi</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>kcfg_AiDifficulty0</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>kcfg_Player1IsAi</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>textLabel2</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>kcfg_Player1IsAi</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>kcfg_AiDifficulty1</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kspaceduel/hi128-app-kspaceduel.png b/kspaceduel/hi128-app-kspaceduel.png
new file mode 100644
index 00000000..623b8b0a
--- /dev/null
+++ b/kspaceduel/hi128-app-kspaceduel.png
Binary files differ
diff --git a/kspaceduel/hi16-app-kspaceduel.png b/kspaceduel/hi16-app-kspaceduel.png
new file mode 100644
index 00000000..a5b4b333
--- /dev/null
+++ b/kspaceduel/hi16-app-kspaceduel.png
Binary files differ
diff --git a/kspaceduel/hi22-app-kspaceduel.png b/kspaceduel/hi22-app-kspaceduel.png
new file mode 100644
index 00000000..66037f3f
--- /dev/null
+++ b/kspaceduel/hi22-app-kspaceduel.png
Binary files differ
diff --git a/kspaceduel/hi32-app-kspaceduel.png b/kspaceduel/hi32-app-kspaceduel.png
new file mode 100644
index 00000000..129dcb02
--- /dev/null
+++ b/kspaceduel/hi32-app-kspaceduel.png
Binary files differ
diff --git a/kspaceduel/hi48-app-kspaceduel.png b/kspaceduel/hi48-app-kspaceduel.png
new file mode 100644
index 00000000..c452befa
--- /dev/null
+++ b/kspaceduel/hi48-app-kspaceduel.png
Binary files differ
diff --git a/kspaceduel/hi64-app-kspaceduel.png b/kspaceduel/hi64-app-kspaceduel.png
new file mode 100644
index 00000000..16d07cde
--- /dev/null
+++ b/kspaceduel/hi64-app-kspaceduel.png
Binary files differ
diff --git a/kspaceduel/kspaceduel.desktop b/kspaceduel/kspaceduel.desktop
new file mode 100644
index 00000000..87da3326
--- /dev/null
+++ b/kspaceduel/kspaceduel.desktop
@@ -0,0 +1,76 @@
+[Desktop Entry]
+Name=KSpaceDuel
+Name[af]=K-ruimte-uitdaging
+Name[ar]=لعبة مبارزة الÙضاء (KSpaceDuel)
+Name[be]=КаÑÐ¼Ñ–Ñ‡Ð½Ð°Ñ Ð´ÑƒÑль
+Name[bn]=কে-সà§à¦ªà§‡à¦¸à¦¡à§à§Ÿà§‡à¦²
+Name[hi]=के-सà¥à¤ªà¥‡à¤¸à¤¡à¥à¤¯à¥‚à¤à¤²
+Name[hr]=KSvemirski dvoboj
+Name[hu]=Űrpárbaj
+Name[is]=Geimeinvígi
+Name[nb]=Rom-duell
+Name[ne]=केडीई सà¥à¤ªà¥‡à¤¸ डà¥à¤¯à¥à¤²
+Name[nn]=Romduell
+Name[ro]=Duel spaţial
+Name[sv]=Kspaceduel
+Name[ta]=Kஸà¯à®ªà¯‡à®¸à¯à®Ÿà¯à®¯à®²à¯
+Name[tg]=KМуҳорибаи Кайҳонӣ
+Name[tr]=Uzay Düellosu
+Name[zh_TW]=KSpaceDuel 決戰星空
+Name[zu]=I-KSpaceDuel
+MimeType=
+Exec=kspaceduel %i %m -caption "%c"
+GenericName=Space Arcade Game
+GenericName[be]=КаÑÐ¼Ñ–Ñ‡Ð½Ð°Ñ Ð°Ñ€ÐºÐ°Ð´Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ
+GenericName[bg]=КоÑмичеÑка игра
+GenericName[bn]=মহাশূনà§à¦¯ নিয়ে à¦à¦•à¦Ÿà¦¿ আরà§à¦•à§‡à¦¡ (Arcade) খেলা
+GenericName[bs]=Svemirska arkadna igra
+GenericName[ca]=Joc arcade d'espai
+GenericName[cs]=Vesmírná arkádová hra
+GenericName[cy]=Gêm Arcêd Ofod
+GenericName[da]=Rum arkadespil
+GenericName[de]=Weltraum Arkade-Spiel
+GenericName[el]=Διαστημικό Arcade παιχνίδι
+GenericName[eo]=Kosma arkadoludo
+GenericName[es]=Juego recreativo espacial
+GenericName[et]=Põnevusmäng kosmoses
+GenericName[eu]=Espazioko arcade jokoa
+GenericName[fa]=بازی گذرگاه Ùضایی
+GenericName[fi]=Arcade-peli
+GenericName[fr]=Jeu d'arcade dans l'espace
+GenericName[he]=משחק ×רקייד חללי
+GenericName[hr]=Arkadna igra u Svemiru
+GenericName[hu]=Lövöldözős
+GenericName[is]=Skotgeimleikur
+GenericName[it]=Gioco arcade nello spazio
+GenericName[ja]=宇宙アーケードゲーム
+GenericName[km]=ល្បែង​ទូ​លំហ
+GenericName[ko]=우주 ì•„ì¼€ì´ë“œ 게임
+GenericName[lv]=KosmiskÄ dueļa spÄ“le
+GenericName[mk]=Ð’ÑеленÑка аркадна игра
+GenericName[nb]=Arkade-romspill
+GenericName[nds]=Speelhall-Weltruumspeel
+GenericName[ne]=सà¥à¤ªà¥‡à¤¸ आरà¥à¤•à¥‡à¤¡ खेल
+GenericName[nl]=Ruimte-arcadespel
+GenericName[nn]=Arkade-romspel
+GenericName[pl]=Kosmiczna gra zręcznościowa
+GenericName[pt]=Jogo de Arcada Espacial
+GenericName[pt_BR]=Jogo de Arcade espacial
+GenericName[ru]=КоÑмичеÑÐºÐ°Ñ Ð´ÑƒÑль
+GenericName[sk]=Vesmírna dobrodružná hra
+GenericName[sl]=Vesoljska arkadna igra
+GenericName[sr]=СвемирÑка аркадна игра
+GenericName[sr@Latn]=Svemirska arkadna igra
+GenericName[sv]=Rymdarkadspel
+GenericName[ta]=விணà¯à®µà¯†à®³à®¿ ஆரà¯à®•à¯‡à®Ÿà¯ விளையாடà¯à®Ÿà¯
+GenericName[uk]=КоÑмічна аркадна гра - дуель
+GenericName[wa]=Djeu d' årcåde di l' espåce
+GenericName[zh_TW]=大型éŠæˆ²æ©ŸéŠæˆ²
+Icon=kspaceduel
+Path=
+DocPath=kspaceduel/index.html
+Type=Application
+Terminal=false
+X-KDE-StartupNotify=true
+X-DCOP-ServiceType=Multi
+Categories=Qt;KDE;Game;ArcadeGame;
diff --git a/kspaceduel/kspaceduel.kcfg b/kspaceduel/kspaceduel.kcfg
new file mode 100644
index 00000000..56b9fddd
--- /dev/null
+++ b/kspaceduel/kspaceduel.kcfg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+ <kcfgfile name="kspaceduelrc"/>
+ <group name="Game">
+ <entry name="TimeAfterKill" type="Double" key="timeAfterKill">
+ <default>42.9</default>
+ </entry>
+ <entry name="StartHitPoints$(Player)" type="Int" key="startHitPointsP$(Player)">
+ <parameter name="Player" type="Int" min="0" max="1"/>
+ <default>99</default>
+ <min>1</min>
+ <max>99</max>
+ </entry>
+ <entry name="Player$(Player)IsAi" type="Bool" key="player$(Player)IsAi">
+ <parameter name="Player" type="Int" min="0" max="1"/>
+ <default param="0">false</default>
+ <default param="1">true</default>
+ </entry>
+ <entry name="AiDifficulty$(Player)" type="Enum" key="ai$(Player)Difficulty">
+ <parameter name="Player" type="Int" min="0" max="1"/>
+ <choices>
+ <choice name="Trainee"/>
+ <choice name="Normal"/>
+ <choice name="Hard"/>
+ <choice name="Insane"/>
+ </choices>
+ <default>Normal</default>
+ </entry>
+ <entry name="LastConfig" type="Int" key="lastConfig">
+ <default>0</default>
+ </entry>
+ <entry name="RefreshTime" type="Int" key="refreshTime">
+ <default>33</default>
+ <min>10</min>
+ <max>100</max>
+ </entry>
+ </group>
+</kcfg>
diff --git a/kspaceduel/kspaceduelui.rc b/kspaceduel/kspaceduelui.rc
new file mode 100644
index 00000000..4aab1ba0
--- /dev/null
+++ b/kspaceduel/kspaceduelui.rc
@@ -0,0 +1,16 @@
+<!DOCTYPE kpartgui>
+<kpartgui name="kspaceduel" version="6">
+
+<MenuBar>
+ <Menu name="game"><text>&amp;Game</text>
+ <Action name="new_round" append="new_merge"/>
+ </Menu>
+</MenuBar>
+
+<Toolbar name="mainToolBar"><text>Main Toolbar</text>
+ <Action name="game_new"/>
+ <Action name="new_round"/>
+ <Action name="game_pause"/>
+</Toolbar>
+
+</kpartgui>
diff --git a/kspaceduel/main.cpp b/kspaceduel/main.cpp
new file mode 100644
index 00000000..ab1952b1
--- /dev/null
+++ b/kspaceduel/main.cpp
@@ -0,0 +1,29 @@
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+
+#include "version.h"
+#include "topwidget.h"
+
+static const char description[] = I18N_NOOP("KDE Space Game");
+
+int main(int argc,char **argv)
+{
+ KAboutData aboutData( "kspaceduel", I18N_NOOP("KSpaceDuel"),
+ KSPACEDUEL_VERSION, description, KAboutData::License_GPL,
+ "(c) 1998-2000, Andreas Zehender");
+ aboutData.addAuthor("Andreas Zehender",0, "az@azweb.de");
+ KCmdLineArgs::init( argc, argv, &aboutData );
+
+ KApplication myapplication;
+ MyTopLevelWidget* top = new MyTopLevelWidget( );
+ myapplication.setMainWidget(top);
+ top->show();
+ top->start();
+ return myapplication.exec();
+}
+
+#ifdef kspaceduel_only_for_xgettext
+i18n( "Default" ), i18n( "Bullet" ), i18n( "Chaos" ), i18n( "Lack of energy" )
+#endif
+
diff --git a/kspaceduel/mainview.cpp b/kspaceduel/mainview.cpp
new file mode 100644
index 00000000..0d385a49
--- /dev/null
+++ b/kspaceduel/mainview.cpp
@@ -0,0 +1,1052 @@
+#include "mainview.h"
+
+#include <math.h>
+#include <qbitmap.h>
+#include <qfile.h>
+#include <qvbox.h>
+
+#include <kapplication.h>
+#include <kaction.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kglobalsettings.h>
+#include <kconfig.h>
+#include <kiconloader.h>
+
+#include "ai.h"
+#include "options.h"
+
+KToggleAction *MyMainView::pauseAction = 0;
+
+MyMainView::MyMainView(QWidget *parent)
+ :QWidget(parent),
+ field(DEF_WIDTH,DEF_HEIGHT),
+ view(&field,this)
+{
+ int i,p;
+ setMinimumSize(600,400);
+ random.setSeed(0);
+ QPixmap backgr(locate("appdata", MV_BACKGROUND));
+ field.setBackgroundPixmap(backgr);
+
+ view.setResizePolicy(QScrollView::AutoOne);
+ view.setHScrollBarMode(QScrollView::AlwaysOff);
+ view.setVScrollBarMode(QScrollView::AlwaysOff);
+
+ for(p=0;p<2;p++)
+ {
+ for(i=0;i<PlayerKeyNum;i++)
+ playerKeyPressed[p][i]=false;
+ bulletShot[p]=false;
+ minePut[p]=false;
+ }
+
+ QString tmp = KGlobal::dirs()->findResourceDir("appdata", (QString)MV_BACKGROUND);
+
+ QCanvasPixmapArray *sunsequence
+ = loadOldPixmapSequence( tmp + MV_SUN_PPM, tmp + MV_SUN_PBM );
+ sun=new SunSprite(sunsequence, &field);
+ sun->move(width()/2-1,height()/2-1);
+ sun->show();
+
+ explosionsequence = loadOldPixmapSequence( tmp + MV_EXPLOSION_PPM,
+ tmp + MV_EXPLOSION_PBM, 31 );
+ mineexplosionsequence = loadOldPixmapSequence(tmp + MV_MINEEX_PPM,
+ tmp + MV_MINEEX_PBM, 18 );
+
+ shipsequence[0] = loadOldPixmapSequence( tmp + MV_SHIP1_PPM,
+ tmp + MV_SHIP1_PBM, ROTNUM );
+ shipsequence[1] = loadOldPixmapSequence( tmp + MV_SHIP2_PPM,
+ tmp + MV_SHIP2_PBM, ROTNUM);
+ ship[0]=new ShipSprite(shipsequence[0],&field,0);
+ ship[1]=new ShipSprite(shipsequence[1],&field,1);
+
+ bulletsequence[0] = loadOldPixmapSequence( tmp + MV_BULLET1_PPM,
+ tmp + MV_BULLET1_PBM );
+ bulletsequence[1] = loadOldPixmapSequence( tmp + MV_BULLET2_PPM,
+ tmp + MV_BULLET2_PBM );
+ minesequence[0] = loadOldPixmapSequence( tmp + MV_MINE1_PPM,
+ tmp + MV_MINE1_PBM, 2);
+ minesequence[1] = loadOldPixmapSequence( tmp + MV_MINE2_PPM,
+ tmp + MV_MINE2_PBM, 2);
+ powerupsequence[PowerupSprite::PowerupMine]
+ = loadOldPixmapSequence( tmp + MV_POWERMINE_PPM, tmp + MV_POWERMINE_PBM );
+ powerupsequence[PowerupSprite::PowerupBullet]
+ = loadOldPixmapSequence( tmp + MV_POWERBULLET_PPM, tmp + MV_POWERBULLET_PBM );
+ powerupsequence[PowerupSprite::PowerupShield]
+ = loadOldPixmapSequence( tmp + MV_POWERSHIELD_PPM, tmp + MV_POWERSHIELD_PBM );
+ powerupsequence[PowerupSprite::PowerupEnergy]
+ = loadOldPixmapSequence( tmp + MV_POWERENERGY_PPM, tmp + MV_POWERENERGY_PBM );
+
+ for(i=0;i<2;i++)
+ {
+ // ship[i]->setBoundsAction(QwRealMobileSprite::Wrap);
+ ship[i]->hide();
+ bullets[i]=new QPtrList<BulletSprite>;
+ bullets[i]->setAutoDelete(true);
+ mines[i]=new QPtrList<MineSprite>;
+ mines[i]->setAutoDelete(true);
+
+ }
+
+ explosions.setAutoDelete(true);
+ powerups.setAutoDelete(true);
+
+ waitForStart=false;
+ textSprite=0;
+ readConfig();
+}
+
+MyMainView::~MyMainView()
+{
+ killTimers();
+ writeConfig();
+}
+
+void MyMainView::setActionCollection(KActionCollection *a)
+{
+ actionCollection = a;
+}
+
+void MyMainView::readConfig()
+{
+ KConfig *cfg = kapp->config();
+ int i;
+
+ cfg->setGroup("Game");
+ customConfig.gamespeed=cfg->readDoubleNumEntry("gamespeed",
+ predefinedConfig[0].gamespeed);
+
+ customConfig.gravity=
+ cfg->readDoubleNumEntry("gravity",predefinedConfig[0].gravity);
+ customConfig.acc=
+ cfg->readDoubleNumEntry("acceleration",predefinedConfig[0].acc);
+ customConfig.bulletDamage=
+ cfg->readUnsignedNumEntry("bulletDamage",predefinedConfig[0].bulletDamage);
+ customConfig.bulletLifeTime=
+ cfg->readDoubleNumEntry("bulletLifeTime",predefinedConfig[0].bulletLifeTime);
+ customConfig.bulletReloadTime=
+ cfg->readDoubleNumEntry("bulletReloadTime",predefinedConfig[0].bulletReloadTime);
+ customConfig.mineDamage=
+ cfg->readUnsignedNumEntry("mineDamage",predefinedConfig[0].mineDamage);
+ customConfig.shipDamage=
+ cfg->readUnsignedNumEntry("shipDamage",predefinedConfig[0].shipDamage);
+ customConfig.maxBullets=
+ cfg->readUnsignedNumEntry("maxBullets",predefinedConfig[0].maxBullets);
+ customConfig.maxMines=
+ cfg->readUnsignedNumEntry("maxMines",predefinedConfig[0].maxMines);
+ customConfig.mineReloadTime=
+ cfg->readDoubleNumEntry("mineReloadTime",predefinedConfig[0].mineReloadTime);
+ customConfig.rotationSpeed=
+ cfg->readDoubleNumEntry("rotationSpeed",predefinedConfig[0].rotationSpeed);
+ customConfig.shotSpeed=
+ cfg->readDoubleNumEntry("shotSpeed",predefinedConfig[0].shotSpeed);
+ customConfig.energyNeed=
+ cfg->readDoubleNumEntry("accEnergyNeed",predefinedConfig[0].energyNeed);
+ customConfig.rotationEnergyNeed=
+ cfg->readDoubleNumEntry("rotationEnergyNeed",predefinedConfig[0].rotationEnergyNeed);
+ customConfig.sunEnergy=
+ cfg->readDoubleNumEntry("sunEnergy",predefinedConfig[0].sunEnergy);
+ customConfig.mineActivateTime=
+ cfg->readDoubleNumEntry("mineActivateTime",predefinedConfig[0].mineActivateTime);
+ customConfig.mineFuel=
+ cfg->readDoubleNumEntry("mineFuel",predefinedConfig[0].mineFuel);
+ customConfig.shotEnergyNeed=
+ cfg->readDoubleNumEntry("shotEnergyNeed",predefinedConfig[0].shotEnergyNeed);
+ customConfig.mineEnergyNeed=
+ cfg->readDoubleNumEntry("mineEnergyNeed",predefinedConfig[0].mineEnergyNeed);
+ customConfig.startPosX=
+ cfg->readDoubleNumEntry("startPosX",predefinedConfig[0].startPosX);
+ customConfig.startPosY=
+ cfg->readDoubleNumEntry("startPosY",predefinedConfig[0].startPosY);
+ customConfig.startVelX=
+ cfg->readDoubleNumEntry("startVelX",predefinedConfig[0].startVelX);
+ customConfig.startVelY=
+ cfg->readDoubleNumEntry("startVelY",predefinedConfig[0].startVelY);
+ customConfig.powerupLifeTime=
+ cfg->readDoubleNumEntry("powerupLifeTime",predefinedConfig[0].powerupLifeTime);
+ customConfig.powerupRefreshTime=
+ cfg->readDoubleNumEntry("powerupRefreshTime",predefinedConfig[0].powerupRefreshTime);
+ customConfig.powerupShieldAmount=
+ cfg->readUnsignedNumEntry("powerupShieldAmount",
+ predefinedConfig[0].powerupShieldAmount);
+ customConfig.powerupEnergyAmount=
+ cfg->readDoubleNumEntry("powerupEnergyAmount",
+ predefinedConfig[0].powerupEnergyAmount);
+
+ if(Options::lastConfig() < predefinedConfigNum)
+ config=modifyConfig(predefinedConfig[Options::lastConfig()]);
+ else
+ config=modifyConfig(customConfig);
+
+ for(i=0;i<2;i++)
+ ai[i]=new Ai(i,ship,bullets,mines,&config);
+}
+
+void MyMainView::writeConfig()
+{
+ KConfig *cfg;
+ cfg=KApplication::kApplication()->config();
+ cfg->setGroup("Game");
+
+ cfg->writeEntry("gravity",customConfig.gravity);
+ cfg->writeEntry("acceleration",customConfig.acc);
+ cfg->writeEntry("bulletDamage",customConfig.bulletDamage);
+ cfg->writeEntry("bulletLifeTime",customConfig.bulletLifeTime);
+ cfg->writeEntry("bulletReloadTime",customConfig.bulletReloadTime);
+ cfg->writeEntry("mineDamage",customConfig.mineDamage);
+ cfg->writeEntry("shipDamage",customConfig.shipDamage);
+ cfg->writeEntry("maxBullets",customConfig.maxBullets);
+ cfg->writeEntry("maxMines",customConfig.maxMines);
+ cfg->writeEntry("rotationSpeed",customConfig.rotationSpeed);
+ cfg->writeEntry("shotSpeed",customConfig.shotSpeed);
+ cfg->writeEntry("accEnergyNeed",customConfig.energyNeed);
+ cfg->writeEntry("rotationEnergyNeed",customConfig.rotationEnergyNeed);
+ cfg->writeEntry("sunEnergy",customConfig.sunEnergy);
+ cfg->writeEntry("mineActivateTime",customConfig.mineActivateTime);
+ cfg->writeEntry("mineReloadTime",customConfig.mineReloadTime);
+ cfg->writeEntry("mineFuel",customConfig.mineFuel);
+ cfg->writeEntry("shotEnergyNeed",customConfig.shotEnergyNeed);
+ cfg->writeEntry("mineEnergyNeed",customConfig.mineEnergyNeed);
+
+ cfg->writeEntry("startPosX",customConfig.startPosX);
+ cfg->writeEntry("startPosY",customConfig.startPosY);
+ cfg->writeEntry("startVelX",customConfig.startVelX);
+ cfg->writeEntry("startVelY",customConfig.startVelY);
+
+ cfg->writeEntry("powerupLifeTime",customConfig.powerupLifeTime);
+ cfg->writeEntry("powerupRefreshTime",customConfig.powerupRefreshTime);
+ cfg->writeEntry("powerupShieldAmount",customConfig.powerupShieldAmount);
+ cfg->writeEntry("powerupEnergyAmount",customConfig.powerupEnergyAmount);
+}
+
+SConfig MyMainView::modifyConfig(SConfig conf)
+{
+ SConfig newConfig=conf;
+ newConfig.gamespeed*=Options::refreshTime()/33.0;
+ newConfig.acc*=newConfig.gamespeed;
+ newConfig.rotationSpeed*=newConfig.gamespeed*M_PI/ROTNUM*4;
+ newConfig.energyNeed*=newConfig.gamespeed;
+ newConfig.rotationEnergyNeed*=newConfig.gamespeed;
+ newConfig.mineActivateTime*=newConfig.gamespeed;
+
+ return newConfig;
+}
+
+void MyMainView::keyPressEvent(QKeyEvent *ev)
+{
+ if((gameEnd<=0.0)&&(gameEnd>-2.0))
+ {
+ /*
+ if(key==options.functionKey[FunctionKeyStart])
+ newRound();
+ */
+ }
+ else if(waitForStart)
+ {
+ /*
+ if((key==options.functionKey[FunctionKeyStart])
+ && (!functionKeyPressed[FunctionKeyStart]))
+ {
+ functionKeyPressed[FunctionKeyStart]=true;
+ resume();
+ }
+ */
+ }
+ else
+ {
+ KKey key(ev);
+ bool accept=true;
+
+ if(actionCollection->action("P1KeyLeft")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyLeft]=true;
+ else if(actionCollection->action("P2KeyLeft")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyLeft]=true;
+
+ else if(actionCollection->action("P1KeyRight")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyRight]=true;
+ else if(actionCollection->action("P2KeyRight")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyRight]=true;
+
+ else if(actionCollection->action("P1KeyAcc")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyAcc]=true;
+ else if(actionCollection->action("P2KeyAcc")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyAcc]=true;
+
+ else if(actionCollection->action("P1Shot")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyShot]=true;
+ else if(actionCollection->action("P2Shot")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyShot]=true;
+
+ else if(actionCollection->action("P1Mine")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyMine]=true;
+ else if(actionCollection->action("P2Mine")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyMine]=true;
+ else
+ accept = false;
+ /*
+ if((key==options.functionKey[FunctionKeyStart])
+ && (!functionKeyPressed[FunctionKeyStart]))
+ {
+ functionKeyPressed[FunctionKeyStart]=true;
+ pause();
+ }
+ */
+ if(!accept)
+ ev->ignore();
+ }
+}
+
+void MyMainView::keyReleaseEvent(QKeyEvent *ev)
+{
+ KKey key(ev);
+ bool accept=true;
+
+ if(actionCollection->action("P1KeyLeft")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyLeft]=false;
+ else if(actionCollection->action("P2KeyLeft")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyLeft]=false;
+
+ else if(actionCollection->action("P1KeyRight")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyRight]=false;
+ else if(actionCollection->action("P2KeyRight")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyRight]=false;
+
+ else if(actionCollection->action("P1KeyAcc")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyAcc]=false;
+ else if(actionCollection->action("P2KeyAcc")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyAcc]=false;
+
+ else if(actionCollection->action("P1Shot")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyShot]=false;
+ else if(actionCollection->action("P2Shot")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyShot]=false;
+
+ else if(actionCollection->action("P1Mine")->shortcut().contains(key))
+ playerKeyPressed[0][PlayerKeyMine]=false;
+ else if(actionCollection->action("P2Mine")->shortcut().contains(key))
+ playerKeyPressed[1][PlayerKeyMine]=false;
+ else
+ accept = false;
+
+ if(!accept)
+ ev->ignore();
+}
+
+void MyMainView::pause()
+{
+ if( !waitForStart )
+ {
+ pauseAction->setChecked( true );
+
+ waitForStart=true;
+ killTimers();
+ emit setStatusText(i18n(" paused "), IDS_PAUSE);
+ }
+}
+
+void MyMainView::resume()
+{
+ waitForStart=false;
+ timerID=startTimer(Options::refreshTime());
+ emit(setStatusText("",IDS_PAUSE));
+ emit(setStatusText("",IDS_MAIN));
+}
+
+void MyMainView::start( )
+{
+ if( ( gameEnd <= 0.0 ) && ( gameEnd > -2.0 ) )
+ {
+ newRound( );
+ }
+ else if( waitForStart )
+ {
+ waitForStart = false;
+ timerID=startTimer(Options::refreshTime());
+ emit(setStatusText("",IDS_PAUSE));
+ emit(setStatusText("",IDS_MAIN));
+ pauseAction->setEnabled( true );
+ pauseAction->setChecked( false );
+ }
+}
+
+void MyMainView::stop()
+{
+ pauseAction->setEnabled( false );
+ pauseAction->setChecked( false );
+
+ killTimers();
+ waitForStart = true;
+}
+
+void MyMainView::togglePause( )
+{
+ if( waitForStart )
+ resume( );
+ else
+ pause( );
+}
+
+void MyMainView::resizeEvent(QResizeEvent *event)
+{
+ double mx,my;
+ MineSprite *mine;
+ BulletSprite *bullet;
+ PowerupSprite *powerup;
+ int i,current;
+
+ mx=(event->size().width()-event->oldSize().width())/2.0;
+ my=(event->size().height()-event->oldSize().height())/2.0;
+ QWidget::resizeEvent(event);
+ view.resize(width(),height());
+ field.resize(width(),height());
+
+ // printf("%d %d\n",field.width(),field.height());
+ sun->move(width()/2-1,height()/2-1);
+
+ for(i=0;i<2;i++)
+ {
+ // ship[i]->adoptSpritefieldBounds();
+ ship[i]->moveBy(mx,my);
+ current=mines[i]->at();
+ for(mine=mines[i]->first();mine;mine=mines[i]->next())
+ {
+ // mine->adoptSpritefieldBounds();
+ mine->moveBy(mx,my);
+ }
+ if(current>=0)
+ mines[i]->at(current);
+
+ current=bullets[i]->at();
+ for(bullet=bullets[i]->first();bullet;bullet=bullets[i]->next())
+ {
+ // bullet->adoptSpritefieldBounds();
+ bullet->moveBy(mx,my);
+ }
+ if(current>=0)
+ bullets[i]->at(current);
+
+ }
+ if(textSprite)
+ textSprite->moveBy((int)mx,(int)my);
+ current=powerups.at();
+ for(powerup=powerups.first();powerup;powerup=powerups.next())
+ powerup->moveBy(mx,my);
+ if(current>=0)
+ powerups.at(current);
+}
+
+void MyMainView::newRound()
+{
+ double mx,my;
+ int i;
+
+ timeToNextPowerup=random.getDouble() * config.powerupRefreshTime;
+ powerups.clear();
+
+ killTimers();
+ mx=width()/2.0;
+ my=height()/2.0;
+ ship[0]->move(mx+config.startPosX,my+config.startPosY);
+ ship[0]->setRotation(0.0);
+ ship[0]->setFrame(0);
+
+ ship[1]->move(mx-config.startPosX,my-config.startPosY);
+ ship[1]->setRotation(M_PI);
+ ship[1]->setFrame(ROTNUM/2);
+
+ ship[0]->setVelocity(config.startVelX,config.startVelY);
+ ship[1]->setVelocity(-config.startVelX,-config.startVelY);
+ for(i=0;i<2;i++)
+ {
+ ship[i]->show();
+ ship[i]->setEnergy(99.9);
+ ship[i]->setHitPoints(Options::startHitPoints(i));
+ ship[i]->stop(false);
+ ship[i]->setExplosion(-1);
+ emit(energy(i,(int)ship[i]->getEnergy()));
+ emit(hitPoints(i,ship[i]->getHitPoints()));
+ bulletShot[i]=false;
+ bullets[i]->clear();
+ mines[i]->clear();
+ ship[i]->mine(0.0);
+ ship[i]->bullet(0.0);
+ ship[i]->setBulletPowerups(0);
+ ship[i]->setMinePowerups(0);
+
+ ai[i]->newRound();
+ }
+ explosions.clear();
+ gameEnd=-10.0;
+ for(i=0;i<PlayerKeyNum;i++)
+ {
+ playerKeyPressed[0][i]=false;
+ playerKeyPressed[1][i]=false;
+ }
+ if(textSprite)
+ {
+ textSprite->hide();
+ delete textSprite;
+ textSprite=0;
+ }
+ field.update();
+
+ QString str = i18n("Press %1 to start")
+ .arg(KShortcut(GAME_START_SHORTCUT).toString());
+ emit(setStatusText(str,IDS_MAIN));
+ emit( setStatusText( "", IDS_PAUSE ) );
+ stop( );
+}
+
+void MyMainView::newGame()
+{
+ int i;
+ for(i=0;i<2;i++)
+ {
+ ship[i]->setWins(0);
+ emit(wins(i,0));
+ }
+ newRound();
+}
+
+void MyMainView::timerEvent(QTimerEvent *event)
+{
+ unsigned w;
+ int i;
+ bool stopped = false;
+
+ if(event->timerId()==timerID)
+ {
+ killTimers();
+ if(gameEnd>0.0)
+ {
+ gameEnd-=1.0;
+ if(gameEnd<=0.0)
+ {
+ stopped = true;
+ if(textSprite)
+ {
+ textSprite->hide();
+ delete textSprite;
+ textSprite=0;
+ }
+
+ textSprite=new QCanvasText(&field);
+ textSprite->move(width()/2,height()/2-90);
+ textSprite->setTextFlags(AlignCenter);
+ textSprite->setColor(qRgb(255,160,0));
+ textSprite->setFont(QFont(KGlobalSettings::generalFont().family(),14));
+ textSprite->show( );
+ if(ship[0]->getHitPoints()==0)
+ {
+ if(ship[1]->getHitPoints()==0)
+ textSprite->setText(i18n("draw round"));
+ else
+ {
+ textSprite->setText(i18n("blue player won the round"));
+ w=ship[1]->getWins()+1;
+ ship[1]->setWins(w);
+ emit(wins(1,w));
+ }
+ }
+ else
+ {
+ textSprite->setText(i18n("red player won the round"));
+ w=ship[0]->getWins()+1;
+ ship[0]->setWins(w);
+ emit(wins(0,w));
+ }
+ QString str = i18n("Press %1 for new round")
+ .arg(KShortcut(GAME_START_SHORTCUT).toString());
+ emit(setStatusText(str,IDS_MAIN));
+ stop( );
+ }
+ }
+
+ if( !stopped )
+ {
+ for(i=0;i<2;i++)
+ if(Options::playerIsAi(i)&&(ship[i]->getHitPoints()>0))
+ ai[i]->think();
+
+ moveMines();
+ moveBullets();
+ moveExplosions();
+ moveShips();
+ calculatePowerups();
+ collisions();
+ timerID=startTimer(Options::refreshTime());
+ }
+ field.update();
+ }
+}
+
+void MyMainView::moveShips()
+{
+ int i,nf,olde;
+ double nx,ny,en,nr;
+ BulletSprite *bullet;
+ MineSprite *mine;
+
+
+ for(i=0;i<2;i++)
+ {
+ bool playerIsAi = Options::playerIsAi(i);
+ olde=(int)ship[i]->getEnergy();
+ if(ship[i]->getHitPoints()==0)
+ {
+ ship[i]->forward(config.gamespeed);
+ ship[i]->calculateGravityAndEnergy(config.gravity,config.sunEnergy,
+ config.gamespeed);
+ }
+ else
+ {
+ ship[i]->calculateGravityAndEnergy(config.gravity,config.sunEnergy,
+ config.gamespeed);
+
+
+ if(!playerIsAi&&playerKeyPressed[i][PlayerKeyRight]
+ || playerIsAi&&ai[i]->rotateRight())
+ ship[i]->rotateRight(config.rotationEnergyNeed,
+ config.rotationSpeed);
+
+ if(!playerIsAi&&playerKeyPressed[i][PlayerKeyLeft]
+ || playerIsAi&&ai[i]->rotateLeft())
+ ship[i]->rotateLeft(config.rotationEnergyNeed,
+ config.rotationSpeed);
+
+ en=ship[i]->getEnergy();
+ nr=ship[i]->getRotation();
+
+
+ nf=ship[i]->frame();
+ nx=cos(nr);
+ ny=sin(nr);
+ if((!playerIsAi&&playerKeyPressed[i][PlayerKeyAcc]
+ || playerIsAi&&ai[i]->accelerate())
+ &&(en>config.energyNeed))
+ {
+ en-=config.energyNeed;
+ ship[i]->setVelocity(ship[i]->xVelocity()+nx*config.acc,
+ ship[i]->yVelocity()-ny*config.acc);
+ }
+ if(en>99.9)
+ en=99.9;
+
+ ship[i]->forward(config.gamespeed);
+ //Bullets and Mines
+ if(!playerIsAi&&playerKeyPressed[i][PlayerKeyShot]
+ ||playerIsAi&&ai[i]->shootBullet())
+ {
+ if((en>config.shotEnergyNeed) && (!ship[i]->reloadsBullet()))
+ {
+ if(bullets[i]->count() <
+ (config.maxBullets+ship[i]->getBulletPowerups()))
+ {
+ ship[i]->bullet(config.bulletReloadTime);
+ en-=config.shotEnergyNeed;
+ bullet=new BulletSprite(bulletsequence[i],&field,i,
+ config.bulletLifeTime);
+ bullet->move(ship[i]->x()+nx*SHOTDIST,
+ ship[i]->y()-ny*SHOTDIST);
+ bullet->setVelocity(ship[i]->xVelocity()+nx*config.shotSpeed,
+ ship[i]->yVelocity()-ny*config.shotSpeed);
+ // bullet->setBoundsAction(QwRealMobileSprite::Wrap);
+ bullet->show();
+
+ bullets[i]->append(bullet);
+ }
+ }
+ }
+ if(!Options::playerIsAi(i)&&playerKeyPressed[i][PlayerKeyMine]
+ || Options::playerIsAi(i)&&ai[i]->layMine())
+ {
+ if((en>config.mineEnergyNeed) && (!ship[i]->reloadsMine()))
+ {
+ if(mines[i]->count() <
+ (config.maxMines+ship[i]->getMinePowerups()))
+ {
+ ship[i]->mine(config.mineReloadTime);
+ en-=config.mineEnergyNeed;
+ mine=new MineSprite(minesequence[i],&field,i,
+ config.mineActivateTime,config.mineFuel);
+ mine->move(ship[i]->x(),ship[i]->y());
+ mine->setVelocity(0,0);
+ //mine->setBoundsAction(QwRealMobileSprite::Wrap);
+ mine->show();
+ mines[i]->append(mine);
+ }
+ }
+ }
+ ship[i]->setEnergy(en);
+ if(olde!=(int)en)
+ emit(energy(i,(int)en));
+ }
+ }
+}
+
+void MyMainView::moveMines()
+{
+ MineSprite* mine;
+ int p;
+
+ for(p=0;p<2;p++)
+ {
+ mine=mines[p]->first();
+ while(mine)
+ {
+ mine->calculateGravity(config.gravity,config.gamespeed);
+ mine->forward(config.gamespeed);
+ if(mine->over())
+ {
+ mine->hide();
+ mines[p]->remove();
+ mine=mines[p]->current();
+ }
+ else
+ mine=mines[p]->next();
+ }
+ }
+}
+
+void MyMainView::moveBullets()
+{
+ int i;
+ BulletSprite *sp;
+
+ for(i=0;i<2;i++)
+ {
+ sp=bullets[i]->first();
+ while(sp)
+ {
+ sp->calculateGravity(config.gravity,config.gamespeed);
+ sp->forward(config.gamespeed);
+ if(sp->timeOut())
+ {
+ sp->hide();
+ bullets[i]->removeRef(sp);
+ sp=bullets[i]->current();
+ }
+ else
+ sp=bullets[i]->next();
+ }
+ }
+}
+
+void MyMainView::moveExplosions()
+{
+ ExplosionSprite *ex;
+ ex=explosions.first();
+ while(ex)
+ {
+ ex->forward(config.gamespeed);
+ if(ex->isOver())
+ {
+ explosions.removeRef(ex);
+ ex=explosions.current();
+ }
+ else
+ ex=explosions.next();
+ }
+}
+
+void MyMainView::calculatePowerups()
+{
+ PowerupSprite *sp;
+ int type,x,y;
+
+ sp=powerups.first();
+ while(sp)
+ {
+ sp->setLifetime(sp->getLifetime()-config.gamespeed);
+ if(sp->getLifetime()<0)
+ {
+ powerups.removeRef(sp);
+ sp=powerups.current();
+ }
+ else
+ sp=powerups.next();
+ }
+ timeToNextPowerup-=config.gamespeed;
+ if(timeToNextPowerup<0)
+ {
+ timeToNextPowerup= random.getDouble() * config.powerupRefreshTime;
+ type= random.getLong(PowerupSprite::PowerupNum);
+ sp=new PowerupSprite(powerupsequence[type],&field,type,
+ config.powerupLifeTime);
+ do
+ {
+ x = random.getLong(width()-40)+20;
+ y = random.getLong(height()-40)+20;
+ }
+ while(((x-width()/2)*(x-width()/2)+(y-height()/2)*(y-height()/2))<(50*50));
+ sp->move(x,y);
+ powerups.append(sp);
+ sp->show();
+ }
+}
+
+void MyMainView::collisions()
+{
+ int pl,hp,op,oldhp[2],ohp;
+ QCanvasItemList unexact;
+ QCanvasItem *sprite;
+ BulletSprite *bullet;
+ MineSprite *mine;
+ ExplosionSprite *expl;
+ ShipSprite *s;
+ PowerupSprite *power;
+ QCanvasItemList hitlist;
+ double ndx[2],ndy[2];
+ double en;
+ QCanvasItemList::Iterator it;
+
+ for(pl=0;pl<2;pl++)
+ {
+ if(!ship[pl]->isStopped())
+ {
+ unexact.clear();
+ unexact=ship[pl]->collisions(false);
+ oldhp[pl]=hp=ship[pl]->getHitPoints();
+ hitlist.clear();
+ for(it=unexact.begin(); it != unexact.end(); ++it)
+ {
+ sprite = (*it);
+ if((sprite->rtti()!=S_EXPLOSION)
+ && !((sprite->rtti()!=S_SUN)&&(ship[pl]->getHitPoints()==0)))
+ if(ship[pl]->collidesWith(sprite))
+ if(!hitlist.contains(sprite))
+ hitlist.append(sprite);
+ }
+
+ for(it=hitlist.begin(); it != hitlist.end(); ++it)
+ {
+ sprite = (*it);
+ switch(sprite->rtti())
+ {
+ case S_SUN:
+ hp=0;
+ ship[pl]->stop();
+ break;
+ case S_BULLET:
+ bullet=(BulletSprite *)sprite;
+ bullet->hide();
+ bullets[bullet->getPlayerNumber()]->removeRef(bullet);
+ hp-=config.bulletDamage;
+ break;
+ case S_SHIP:
+ s=(ShipSprite*)sprite;
+ ohp=s->getHitPoints();
+ if(ohp>0)
+ {
+ s->setHitPoints(ohp-hp-config.shipDamage);
+ emit(hitPoints(s->getPlayerNumber(),s->getHitPoints()));
+ ndx[0]=((1-EPSILON)*ship[0]->xVelocity()+(1+EPSILON)*ship[1]->xVelocity())/2.0;
+ ndy[0]=((1-EPSILON)*ship[0]->yVelocity()+(1+EPSILON)*ship[1]->yVelocity())/2.0;
+ ndx[1]=((1-EPSILON)*ship[1]->xVelocity()+(1+EPSILON)*ship[0]->xVelocity())/2.0;
+ ndy[1]=((1-EPSILON)*ship[1]->yVelocity()+(1+EPSILON)*ship[0]->yVelocity())/2.0;
+ ship[0]->setVelocity(ndx[0],ndy[0]);
+ ship[1]->setVelocity(ndx[1],ndy[1]);
+ hp-=ohp+config.shipDamage;
+ }
+ break;
+ case S_MINE:
+ mine=(MineSprite *)sprite;
+ if(mine->isActive()&& !mine->explodes())
+ {
+ mine->explode(mineexplosionsequence);
+ ndx[0]=(ship[pl]->xVelocity()+0.3*mine->xVelocity())/1.3;
+ ndy[0]=(ship[pl]->yVelocity()+0.3*mine->yVelocity())/1.3;
+ ship[pl]->setVelocity(ndx[0],ndy[0]);
+ mine->setVelocity(ndx[0],ndy[0]);
+ hp-=config.mineDamage;
+ }
+ break;
+ case S_POWERUP:
+ power=(PowerupSprite *)sprite;
+ switch(power->getType())
+ {
+ case PowerupSprite::PowerupShield:
+ hp+=config.powerupShieldAmount;
+ break;
+ case PowerupSprite::PowerupEnergy:
+ en=ship[pl]->getEnergy()+config.powerupEnergyAmount;
+ if(en>99)
+ en=99;
+ ship[pl]->setEnergy(en);
+ break;
+ case PowerupSprite::PowerupMine:
+ ship[pl]->setMinePowerups(
+ ship[pl]->getMinePowerups()+1);
+ break;
+ case PowerupSprite::PowerupBullet:
+ ship[pl]->setBulletPowerups(
+ ship[pl]->getMinePowerups()+1);
+ break;
+ }
+ power->hide();
+ powerups.removeRef(power);
+ break;
+ }
+ }
+ if(hp>99)
+ hp=99;
+ ship[pl]->setHitPoints(hp);
+ }
+
+ for(mine=mines[pl]->first();mine;mine=mines[pl]->next())
+ {
+ if(!mine->explodes())
+ {
+ unexact.clear();
+ unexact=mine->collisions(false);
+ hitlist.clear();
+ for( it=unexact.begin(); it != unexact.end(); ++it )
+ {
+ sprite = (*it);
+ if(sprite->rtti()==S_BULLET)
+ if(mine->collidesWith(sprite))
+ if(!hitlist.contains(sprite))
+ hitlist.append(sprite);
+ }
+ if(hitlist.count()>0)
+ {
+ mine->explode(mineexplosionsequence);
+ for(it=hitlist.begin(); it != hitlist.end(); ++it)
+ {
+ bullet=(BulletSprite*)(*it);
+ bullets[bullet->getPlayerNumber()]->removeRef(bullet);
+ }
+ }
+ }
+ }
+ }
+
+ hitlist.clear();
+ unexact.clear();
+ unexact=sun->collisions(false);
+ for( it = unexact.begin(); it != unexact.end(); ++it)
+ {
+ sprite=(*it);
+ switch(sprite->rtti())
+ {
+ case S_BULLET:
+ if(sun->collidesWith(sprite))
+ if(!hitlist.contains(sprite))
+ hitlist.append(sprite);
+ break;
+ case S_MINE:
+ if(!((MobileSprite*)sprite)->isStopped())
+ if(sun->collidesWith(sprite))
+ if(!hitlist.contains(sprite))
+ hitlist.append(sprite);
+ break;
+ }
+ }
+
+ for(it=hitlist.begin(); it != hitlist.end(); ++it)
+ {
+ sprite=(*it);
+ switch(sprite->rtti())
+ {
+ case S_BULLET:
+ bullet=(BulletSprite *)sprite;
+ bullet->hide();
+ bullets[bullet->getPlayerNumber()]->removeRef(bullet);
+ break;
+ case S_MINE:
+ mine=(MineSprite*)sprite;
+ mine->stop();
+ if(!mine->explodes())
+ mine->explode(mineexplosionsequence);
+ break;
+ }
+ }
+
+
+ for(pl=0;pl<2;pl++)
+ {
+ hp=ship[pl]->getHitPoints();
+ if(hp!=oldhp[pl])
+ emit(hitPoints(pl,hp));
+ if((hp==0)&&(ship[pl]->getExplosion()<0))
+ {
+ op=(pl+1)%2;
+ ship[pl]->setExplosion((int)(EXPLOSION_TIME/config.gamespeed));
+ expl=new ExplosionSprite(explosionsequence,&field,ship[pl]);
+ expl->show();
+ explosions.append(expl);
+ gameEnd=Options::timeAfterKill()/config.gamespeed;
+ }
+ }
+}
+
+void MyMainView::gameSetup()
+{
+ if(!waitForStart)
+ pause();
+
+ if (KConfigDialog::showDialog("settings"))
+ return;
+
+ SettingsDialog *settings=new SettingsDialog(&customConfig,this,"settings");
+ connect(settings, SIGNAL(settingsUpdated()),this,SLOT(closeSettings()));
+ settings->show();
+}
+
+void MyMainView::closeSettings(){
+ if(Options::lastConfig()<predefinedConfigNum)
+ config=modifyConfig(predefinedConfig[Options::lastConfig()]);
+ else
+ config=modifyConfig(customConfig);
+}
+
+QCanvasPixmapArray* MyMainView::loadOldPixmapSequence(const QString& datapattern,
+ const QString& maskpattern, int framecount)
+{
+ int image;
+ QPtrList<QPixmap> pixmaplist;
+ QPtrList<QPoint> pointlist;
+ QString dataname, maskname;
+ QPixmap *pix;
+ QBitmap *bitmap;
+ int hotx=0, hoty=0;
+ QPoint *point;
+
+ for( image=0; image < framecount; image++ )
+ {
+ // #### Why is this a QString??
+ dataname.sprintf( datapattern.ascii(), image );
+ maskname.sprintf( maskpattern.ascii(), image );
+
+ QFile file(dataname);
+ if( file.open( IO_ReadOnly ) )
+ {
+ char line[128];
+ file.readLine( line, 128 ); // Skip "P6"/"P3" line
+ file.readLine( line, 128 );
+
+ while ( line[0] == '#' )
+ {
+ // Comment line - see if it has additional parameters
+ if ( 0 == strncmp( line,"# HOTSPOT ", 10 ) )
+ sscanf( line+10, "%d %d", &hotx, &hoty);
+
+ file.readLine( line, 128 );
+ }
+ point = new QPoint( hotx, hoty );
+ pointlist.append( point );
+ }
+
+ pix = new QPixmap( dataname );
+ bitmap = new QBitmap( maskname );
+ pix->setMask( *bitmap );
+
+ pixmaplist.append( pix );
+ }
+
+ QCanvasPixmapArray* newarray = new QCanvasPixmapArray( pixmaplist, pointlist );
+ return newarray;
+}
+
+#include "mainview.moc"
diff --git a/kspaceduel/mainview.h b/kspaceduel/mainview.h
new file mode 100644
index 00000000..98dd8e15
--- /dev/null
+++ b/kspaceduel/mainview.h
@@ -0,0 +1,104 @@
+#ifndef __MY_MAIN_VIEW_H
+#define __MY_MAIN_VIEW_H
+
+#include <qwidget.h>
+#include <qimage.h>
+
+class KToggleAction;
+class KActionCollection;
+#include <krandomsequence.h>
+
+#include "sprites.h"
+#include "dialogs.h"
+class Ai;
+
+#ifdef sun
+#undef sun
+#endif
+
+class MyMainView:public QWidget
+{
+ Q_OBJECT
+public:
+ MyMainView(QWidget *parent=0);
+ ~MyMainView();
+
+ static KToggleAction *pauseAction;
+ void setActionCollection(KActionCollection *a);
+
+public slots:
+ void newRound();
+ void newGame();
+ void togglePause( );
+ void pause();
+ void resume();
+ void start();
+ void stop();
+ void gameSetup();
+ void closeSettings();
+ void readConfig();
+ void writeConfig();
+signals:
+ void hitPoints(int pn,int hp);
+ void energy(int pn,int en);
+ void wins(int pn,int w);
+ void setStatusText(const QString & str,int id);
+
+protected:
+ virtual void resizeEvent(QResizeEvent *event);
+ virtual void timerEvent(QTimerEvent *event);
+ virtual void keyPressEvent(QKeyEvent *event);
+ virtual void keyReleaseEvent(QKeyEvent *event);
+ SConfig modifyConfig(SConfig conf);
+ QCanvasPixmapArray* loadOldPixmapSequence(const QString& datapattern,
+ const QString& maskpattern, int framecount=1);
+ void moveShips();
+ void moveBullets();
+ void moveMines();
+ void moveExplosions();
+ void calculatePowerups();
+ void collisions();
+private:
+ KActionCollection *actionCollection;
+
+ QCanvas field;
+ QCanvasView view;
+
+ SConfig customConfig,config;
+
+ int timerID;
+ bool playerKeyPressed[2][PlayerKeyNum];
+ bool bulletShot[2];
+ bool minePut[2];
+ bool waitForStart;
+ double gameEnd;
+ double timeToNextPowerup;
+
+// sprites
+ QPtrList<QImage> shipImages;
+ QPtrList<QPoint> points;
+ QImage bulletImage;
+ QCanvasPixmapArray *bulletsequence[2];
+ QCanvasPixmapArray *shipsequence[2];
+ QCanvasPixmapArray *explosionsequence;
+ QCanvasPixmapArray *minesequence[2];
+ QCanvasPixmapArray *mineexplosionsequence;
+ QCanvasPixmapArray *powerupsequence[PowerupSprite::PowerupNum];
+
+
+ ShipSprite *ship[2];
+ SunSprite *sun;
+ QCanvasText *textSprite;
+ QPtrList<BulletSprite> *bullets[2];
+ QPtrList<MineSprite> *mines[2];
+ QPtrList<ExplosionSprite> explosions;
+ QPtrList<PowerupSprite> powerups;
+
+ KRandomSequence random;
+
+//Ai
+ Ai *ai[2];
+
+};
+
+#endif
diff --git a/kspaceduel/mathroutines.cpp b/kspaceduel/mathroutines.cpp
new file mode 100644
index 00000000..4597a3ad
--- /dev/null
+++ b/kspaceduel/mathroutines.cpp
@@ -0,0 +1,41 @@
+#include "mathroutines.h"
+#include "math.h"
+
+double rectToAngle(double x,double y)
+{
+ double phi=0;
+ if(fabs(x)<1e-6)
+ {
+ if(y>0)
+ phi=M_PI_2;
+ else
+ phi=-M_PI_2;
+ }
+ else
+ {
+ phi=atan(y/x);
+ if(x<0)
+ phi+=M_PI;
+ }
+ if(phi>M_PI)
+ phi-=2*M_PI;
+ return phi;
+}
+
+double average(double phi1,double phi2)
+{
+ return phi2+difference(phi1,phi2)/2.0;
+}
+
+double difference(double phi1,double phi2)
+{
+ double dif;
+
+ dif=phi1-phi2;
+ while(dif>M_PI)
+ dif-=2*M_PI;
+ while(dif<-M_PI)
+ dif+=2*M_PI;
+
+ return dif;
+}
diff --git a/kspaceduel/mathroutines.h b/kspaceduel/mathroutines.h
new file mode 100644
index 00000000..5363496d
--- /dev/null
+++ b/kspaceduel/mathroutines.h
@@ -0,0 +1,8 @@
+#ifndef _KSD_MR_H
+#define _KSD_MR_H
+
+double rectToAngle(double x,double y);
+double average(double phi1,double phi2);
+double difference(double phi1,double phi2);
+
+#endif
diff --git a/kspaceduel/options.kcfgc b/kspaceduel/options.kcfgc
new file mode 100644
index 00000000..d6356cc7
--- /dev/null
+++ b/kspaceduel/options.kcfgc
@@ -0,0 +1,5 @@
+# Code generation options for kconfig_compiler
+File=kspaceduel.kcfg
+ClassName=Options
+Singleton=true
+Mutators=LastConfig
diff --git a/kspaceduel/pics/Makefile.am b/kspaceduel/pics/Makefile.am
new file mode 100644
index 00000000..cc7f32c7
--- /dev/null
+++ b/kspaceduel/pics/Makefile.am
@@ -0,0 +1,2 @@
+kspacedueldir = $(kde_datadir)/kspaceduel/icons
+kspaceduel_ICON = AUTO \ No newline at end of file
diff --git a/kspaceduel/pics/cr16-action-spnewgame.png b/kspaceduel/pics/cr16-action-spnewgame.png
new file mode 100644
index 00000000..8eb54762
--- /dev/null
+++ b/kspaceduel/pics/cr16-action-spnewgame.png
Binary files differ
diff --git a/kspaceduel/pics/cr16-action-spnewround.png b/kspaceduel/pics/cr16-action-spnewround.png
new file mode 100644
index 00000000..a6e89ac9
--- /dev/null
+++ b/kspaceduel/pics/cr16-action-spnewround.png
Binary files differ
diff --git a/kspaceduel/pics/cr16-action-sppausegame.png b/kspaceduel/pics/cr16-action-sppausegame.png
new file mode 100644
index 00000000..2459e2e0
--- /dev/null
+++ b/kspaceduel/pics/cr16-action-sppausegame.png
Binary files differ
diff --git a/kspaceduel/pics/cr22-action-spnewgame.png b/kspaceduel/pics/cr22-action-spnewgame.png
new file mode 100644
index 00000000..bfe69fa1
--- /dev/null
+++ b/kspaceduel/pics/cr22-action-spnewgame.png
Binary files differ
diff --git a/kspaceduel/pics/cr22-action-spnewround.png b/kspaceduel/pics/cr22-action-spnewround.png
new file mode 100644
index 00000000..60122fb6
--- /dev/null
+++ b/kspaceduel/pics/cr22-action-spnewround.png
Binary files differ
diff --git a/kspaceduel/pics/cr22-action-sppausegame.png b/kspaceduel/pics/cr22-action-sppausegame.png
new file mode 100644
index 00000000..6f3225f1
--- /dev/null
+++ b/kspaceduel/pics/cr22-action-sppausegame.png
Binary files differ
diff --git a/kspaceduel/pics/cr32-action-spnewgame.png b/kspaceduel/pics/cr32-action-spnewgame.png
new file mode 100644
index 00000000..ad797080
--- /dev/null
+++ b/kspaceduel/pics/cr32-action-spnewgame.png
Binary files differ
diff --git a/kspaceduel/pics/cr32-action-spnewround.png b/kspaceduel/pics/cr32-action-spnewround.png
new file mode 100644
index 00000000..5488f6d1
--- /dev/null
+++ b/kspaceduel/pics/cr32-action-spnewround.png
Binary files differ
diff --git a/kspaceduel/pics/cr32-action-sppausegame.png b/kspaceduel/pics/cr32-action-sppausegame.png
new file mode 100644
index 00000000..483ce4d2
--- /dev/null
+++ b/kspaceduel/pics/cr32-action-sppausegame.png
Binary files differ
diff --git a/kspaceduel/pics/lo16-action-spnewgame.png b/kspaceduel/pics/lo16-action-spnewgame.png
new file mode 100644
index 00000000..8eb54762
--- /dev/null
+++ b/kspaceduel/pics/lo16-action-spnewgame.png
Binary files differ
diff --git a/kspaceduel/pics/lo16-action-spnewround.png b/kspaceduel/pics/lo16-action-spnewround.png
new file mode 100644
index 00000000..a6e89ac9
--- /dev/null
+++ b/kspaceduel/pics/lo16-action-spnewround.png
Binary files differ
diff --git a/kspaceduel/pics/lo16-action-sppausegame.png b/kspaceduel/pics/lo16-action-sppausegame.png
new file mode 100644
index 00000000..2459e2e0
--- /dev/null
+++ b/kspaceduel/pics/lo16-action-sppausegame.png
Binary files differ
diff --git a/kspaceduel/playerinfo.cpp b/kspaceduel/playerinfo.cpp
new file mode 100644
index 00000000..1cd2cd31
--- /dev/null
+++ b/kspaceduel/playerinfo.cpp
@@ -0,0 +1,80 @@
+#include "playerinfo.h"
+#include <qpixmap.h>
+#include <qtooltip.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+
+PlayerInfo::PlayerInfo(int pnr,QWidget *parent,const char *name)
+ :QFrame(parent,name),
+ lplayer(this),lenergy(this),lwins(this),
+ hitpoints(2,this),energy(2,this),wins(2,this)
+{
+ setFixedWidth(45);
+ setFrameStyle(Panel|Raised);
+ QString str;
+ int i;
+
+ lplayer.setFrameStyle(Panel|Sunken);
+ lplayer.setMargin(0);
+ QToolTip::add(&lplayer,i18n("Hit points"));
+ lenergy.setFrameStyle(Panel|Sunken);
+ lenergy.setMargin(0);
+ QToolTip::add(&lenergy,i18n("Energy"));
+ lwins.setFrameStyle(Panel|Sunken);
+ lwins.setMargin(0);
+ QToolTip::add(&lwins,i18n("Wins"));
+
+ lplayer.setGeometry(5,5,35,35);
+ lplayer.setIndent(0);
+ lenergy.setGeometry(5,80,35,35);
+ lenergy.setIndent(0);
+ lwins.setGeometry(5,155,35,35);
+ lwins.setIndent(0);
+
+ for(i=0;i<4;i++)
+ {
+ str = QString::fromLatin1("sprites/playerinfo/ship%1%2.pnm")
+ .arg(pnr+1)
+ .arg(i);
+ pix[i]=new QPixmap(locate("appdata", str));
+ }
+
+ lplayer.setPixmap(*pix[0]);
+ currentPixmap=0;
+ lenergy.setPixmap(QPixmap(locate("appdata", "sprites/playerinfo/energy.pnm")));
+ lwins.setPixmap(QPixmap(locate("appdata", "sprites/playerinfo/win.pnm")));
+
+ hitpoints.setGeometry(9,45,26,26);
+ energy.setGeometry(9,120,26,26);
+ wins.setGeometry(9,195,26,26);
+ hitpoints.setFrameStyle(NoFrame);
+ QToolTip::add(&hitpoints,i18n("Hit points"));
+ energy.setFrameStyle(NoFrame);
+ QToolTip::add(&energy,i18n("Energy"));
+ wins.setFrameStyle(NoFrame);
+ QToolTip::add(&wins,i18n("Wins"));
+}
+
+void PlayerInfo::setHitpoints(int h)
+{
+ int p=3-h/25;
+ hitpoints.display(h);
+ if(p!=currentPixmap)
+ {
+ lplayer.setPixmap(*(pix[p]));
+ currentPixmap=p;
+ }
+}
+
+void PlayerInfo::setEnergy(int e)
+{
+ energy.display(e);
+}
+
+void PlayerInfo::setWins(int w)
+{
+ wins.display(w);
+}
+
+#include "playerinfo.moc"
diff --git a/kspaceduel/playerinfo.h b/kspaceduel/playerinfo.h
new file mode 100644
index 00000000..e172c982
--- /dev/null
+++ b/kspaceduel/playerinfo.h
@@ -0,0 +1,26 @@
+#ifndef __PLAYER_INFO_H
+#define __PLAYER_INFO_H
+
+#include <qframe.h>
+#include <qlabel.h>
+class QPixmap;
+#include <qlcdnumber.h>
+#include <qcolor.h>
+
+class PlayerInfo:public QFrame
+{
+ Q_OBJECT
+public:
+ PlayerInfo(int pnr,QWidget *parent=0,const char *name=0);
+public slots:
+ void setHitpoints(int h);
+ void setEnergy(int e);
+ void setWins(int w);
+private:
+ QPixmap* pix[4];
+ int currentPixmap;
+ QLabel lplayer,lenergy,lwins;
+ QLCDNumber hitpoints,energy,wins;
+};
+
+#endif
diff --git a/kspaceduel/sprites.cpp b/kspaceduel/sprites.cpp
new file mode 100644
index 00000000..08eab3c7
--- /dev/null
+++ b/kspaceduel/sprites.cpp
@@ -0,0 +1,340 @@
+#include "sprites.h"
+#include "mathroutines.h"
+#include <math.h>
+
+
+SunSprite::SunSprite(QCanvasPixmapArray *seq, QCanvas* canvas)
+ :QCanvasSprite(seq, canvas)
+{
+ // doesn't work with Qt 2.2.2 anymore
+ // setZ(0);
+}
+
+
+PowerupSprite::PowerupSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int t,
+ double lifetime)
+ :QCanvasSprite(seq, canvas)
+{
+ time=lifetime;
+ type=t;
+}
+
+
+MobileSprite::MobileSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn)
+ :QCanvasSprite(seq, canvas)
+{
+ stopped=false;
+ playerNumber=pn;
+}
+
+void MobileSprite::forward(double mult, int fr)
+{
+ if(!stopped)
+ {
+ QCanvasSprite::moveBy(xVelocity()*mult,yVelocity()*mult);
+ checkBounds();
+ setFrame(fr);
+ }
+ else
+ setFrame(fr);
+}
+
+void MobileSprite::forward(double mult)
+{
+ if(!stopped)
+ {
+ QCanvasSprite::moveBy(xVelocity()*mult,yVelocity()*mult);
+ checkBounds();
+ }
+}
+
+void MobileSprite::checkBounds()
+{
+ double cx, cy;
+ int ch, cw;
+
+ cx = x();
+ cy = y();
+ ch = canvas()->height();
+ cw = canvas()->width();
+
+ if ( (int)(cx+0.5) < 0 )
+ cx = cw - 1 - fmod( -cx, cw );
+ else if ( (int)(cx+0.5) > ( cw-1 ) )
+ cx = fmod( cx-cw-1, cw );
+ if ( (int)(cy+0.5) < 0 )
+ cy = ch-1 - fmod( -cy, ch );
+ else if ( (int)(cy+0.5) > ( ch-1 ) )
+ cy = fmod( cy-ch-1, ch );
+ if ( (cx != x()) || (cy != y()) )
+ {
+ // printf("%5.2f %5.2f %5.2f %5.2f\n", x(), y(), cx, cy);
+ move( cx, cy );
+ }
+}
+
+void MobileSprite::calculateGravity(double gravity,double mult)
+{
+ double abs_2,nx,ny,ex,ey,sq,eg;
+
+ if(!stopped)
+ {
+ ex=x()-canvas()->width()/2.0;
+ ey=y()-canvas()->height()/2.0;
+
+ abs_2=ex*ex+ey*ey;
+ sq=sqrt(abs_2);
+
+ nx=ex/sq;
+ ny=ey/sq;
+ eg=gravity*mult;
+ setVelocity(xVelocity()-eg*nx/abs_2,
+ yVelocity()-eg*ny/abs_2);
+ }
+}
+
+AiSprite MobileSprite::toAiSprite()
+{
+ // y direction: screen: bottom to top
+ // mathematical: top to bottom
+ AiSprite as;
+ as.x=x()-canvas()->width()/2.0;
+ as.y=-(y()-canvas()->height()/2.0);
+ as.dx=xVelocity();
+ as.dy=-yVelocity();
+ as.sun=false;
+ as.border=false;
+ return as;
+}
+
+ShipSprite::ShipSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn)
+ :MobileSprite(seq,canvas,pn)
+{
+ hitpoints=99;
+ energy=99.9;
+ explosion=-1;
+ setZ(-20);
+ rotation=0;
+ bulletPowerups=0;
+ minePowerups=0;
+}
+
+void ShipSprite::setRotation(double r)
+{
+ int nf,of=frame();
+ rotation=r;
+ if(rotation<0)
+ rotation-=((int)(rotation/(2*M_PI))-1)*2*M_PI;
+ if(rotation>=2*M_PI)
+ rotation-=(int)(rotation/(2*M_PI))*2*M_PI;
+ nf=(int)(rotation/(2*M_PI)*ROTNUM)%ROTNUM;
+ if(nf!=of)
+ setFrame(nf);
+}
+
+void ShipSprite::forward(double mult)
+{
+ MobileSprite::forward(mult);
+ if(explosion>0)
+ {
+ explosion--;
+ if(explosion==0)
+ hide();
+ }
+ if(reloadBulletTime>0)
+ reloadBulletTime-=mult;
+ if(reloadMineTime>0)
+ reloadMineTime-=mult;
+}
+
+void ShipSprite::forward(double mult,int fr)
+{
+ MobileSprite::forward(mult,fr);
+ rotation=fr/ROTNUM*M_PI*2;
+ if(explosion>0)
+ {
+ explosion--;
+ if(explosion==0)
+ hide();
+ }
+ if(reloadBulletTime>0)
+ reloadBulletTime-=mult;
+ if(reloadMineTime>0)
+ reloadMineTime-=mult;
+}
+
+void ShipSprite::calculateGravityAndEnergy(double gravity,double sunEnergy,
+ double mult)
+{
+ double nx,ny,ex,ey,abs_2,phi,sq,eg;
+
+ if(!stopped)
+ {
+ ex=x()-canvas()->width()/2.0;
+ ey=y()-canvas()->height()/2.0;
+
+ abs_2=ex*ex+ey*ey;
+ sq=sqrt(abs_2);
+
+ if ( explodes() && (sq<20) )
+ stopped = true;
+ else
+ {
+ nx=ex/sq;
+ ny=ey/sq;
+ eg=gravity*mult;
+ setVelocity(xVelocity()-eg*nx/abs_2,
+ yVelocity()-eg*ny/abs_2);
+ if(hitpoints!=0)
+ {
+ if(energy<99.8)
+ {
+ phi=rectToAngle(nx,ny);
+ energy+=fabs(sunEnergy*mult/(abs_2)*cos(phi+rotation));
+ }
+ }
+ }
+ }
+}
+
+void ShipSprite::rotateRight(double rotationEnergyNeed,double rotationSpeed)
+{
+ if(energy>rotationEnergyNeed)
+ {
+ energy-=rotationEnergyNeed;
+ setRotation(rotation-rotationSpeed);
+ }
+}
+
+void ShipSprite::rotateLeft(double rotationEnergyNeed,double rotationSpeed)
+{
+ if(energy>rotationEnergyNeed)
+ {
+ energy-=rotationEnergyNeed;
+ setRotation(rotation+rotationSpeed);
+ }
+}
+
+BulletSprite::BulletSprite(QCanvasPixmapArray* seq,QCanvas* canvas, int pn,double lifetime)
+ :MobileSprite(seq,canvas,pn)
+{
+ setZ(-10);
+ time=lifetime;
+}
+
+void BulletSprite::forward(double mult)
+{
+ MobileSprite::forward(mult);
+ time-=mult;
+}
+
+void BulletSprite::forward(double mult,int fr)
+{
+ MobileSprite::forward(mult,fr);
+ time-=mult;
+}
+
+MineSprite::MineSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn,double atime,double f)
+ :MobileSprite(seq,canvas,pn)
+{
+ activateTime=atime;
+ setZ(-25);
+ fuel=f;
+ explosiontime=0;
+ timeToGo=0.0;
+ expl=false;
+ active=false;
+}
+
+void MineSprite::explode(QCanvasPixmapArray *seq)
+{
+ setSequence(seq);
+ timeToGo=seq->count();
+ expl=true;
+ setFrame(0);
+ explosiontime=0.0;
+ setZ(-8);
+ setFuel(0.0);
+}
+
+void MineSprite::forward(double mult)
+{
+ if(active)
+ {
+ if(expl)
+ {
+ explosiontime+=mult;
+ if(explosiontime>(timeToGo-0.001))
+ explosiontime=timeToGo-0.01;
+ setFrame((int)explosiontime);
+ }
+ }
+ else
+ {
+ activateTime-=(double)mult;
+ if(activateTime<0.0)
+ {
+ active=true;
+ setFrame(1);
+ }
+ }
+ if(fuel<0.001)
+ MobileSprite::forward(mult);
+}
+
+void MineSprite::calculateGravity(double gravity,double mult)
+{
+ double abs_2,nx,ny,ex,ey,sq,eg;
+
+ if(!stopped)
+ {
+ ex=x()-canvas()->width()/2.0;
+ ey=y()-canvas()->height()/2.0;
+
+ abs_2=ex*ex+ey*ey;
+ sq=sqrt(abs_2);
+ nx=ex/sq;
+ ny=ey/sq;
+ eg=gravity*mult;
+ if(fuel<0.001)
+ setVelocity(xVelocity()-eg*nx/abs_2,
+ yVelocity()-eg*ny/abs_2);
+ else
+ fuel-=eg/abs_2;
+ }
+}
+
+ExplosionSprite::ExplosionSprite(QCanvasPixmapArray* seq, QCanvas* canvas, MobileSprite *sp)
+ :QCanvasSprite(seq, canvas)
+{
+ over=false;
+ setZ(-5);
+ obj=sp;
+ timeToGo=seq->count();
+ time=0;
+
+ move(sp->x(),sp->y());
+}
+
+void ExplosionSprite::forward(double mult)
+{
+ int of=frame();
+ move(obj->x(),obj->y());
+ time+=mult;
+
+ if(time>=timeToGo)
+ {
+ over=true;
+ hide();
+ }
+ else
+ if((int)time!=of)
+ setFrame((int)time);
+}
+
+
+void ExplosionSprite::setSequence(QCanvasPixmapArray *seq)
+{
+ timeToGo=seq->count();
+ QCanvasSprite::setSequence(seq);
+}
diff --git a/kspaceduel/sprites.h b/kspaceduel/sprites.h
new file mode 100644
index 00000000..0d0b1fb3
--- /dev/null
+++ b/kspaceduel/sprites.h
@@ -0,0 +1,143 @@
+#ifndef __SPRITE_OBJECTS_H
+#define __SPRITE_OBJECTS_H
+
+#include <qcanvas.h>
+#include "defines.h"
+
+#ifdef sun
+#undef sun
+#endif
+
+struct AiSprite
+{
+ double x,y,dx,dy;
+ bool sun, border;
+};
+
+class SunSprite:public QCanvasSprite
+{
+public:
+ SunSprite(QCanvasPixmapArray* seq, QCanvas* canvas);
+ virtual int rtti() const {return S_SUN;}
+};
+
+
+class PowerupSprite:public QCanvasSprite
+{
+public:
+ enum {PowerupMine=0, PowerupBullet, PowerupShield, PowerupEnergy,
+ PowerupNum};
+ PowerupSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int t, double lifetime);
+ virtual int rtti() const {return S_POWERUP;}
+
+ double getLifetime() {return time;}
+ void setLifetime(double t) {time=t;}
+ int getType() {return type;}
+private:
+ double time;
+ int type;
+};
+
+class MobileSprite:public QCanvasSprite
+{
+public:
+ MobileSprite(QCanvasPixmapArray* array, QCanvas* canvas, int pn);
+
+ virtual void forward(double mult,int frame);
+ virtual void forward(double mult);
+ virtual void calculateGravity(double gravity,double mult);
+ int spriteFieldWidth(){return canvas()->width();}
+ int spriteFieldHeight(){return canvas()->height();}
+ AiSprite toAiSprite();
+
+ bool isStopped() {return stopped;}
+ void stop(bool s=true) {stopped=s;}
+ int getPlayerNumber() {return playerNumber;}
+protected:
+ void checkBounds();
+ bool stopped;
+ int playerNumber;
+};
+
+
+class ShipSprite:public MobileSprite
+{
+public:
+ ShipSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn);
+ virtual int rtti() const {return S_SHIP;}
+ int getHitPoints() {return hitpoints;}
+ void setHitPoints(int hp) {hitpoints=(hp<0?0:hp);}
+ double getEnergy() {return energy;}
+ void setEnergy(double e) {energy=(e<0?0:e);}
+ void setWins(int w) {wins=w;}
+ int getWins() {return wins;}
+ void setExplosion(int f) {explosion=f;}
+ int getExplosion() {return explosion;}
+ void setRotation(double r);
+ double getRotation() {return rotation;}
+ void rotateRight(double rotationEnergyNeed,double rotationSpeed);
+ void rotateLeft(double rotationEnergyNeed,double rotationSpeed);
+ void bullet(double reloadTime) {reloadBulletTime=reloadTime;}
+ bool reloadsBullet(double t=0.0) {return reloadBulletTime>t;}
+ void mine(double reloadTime) {reloadMineTime=reloadTime;}
+ bool reloadsMine(double t=0.0) {return reloadMineTime>t;}
+ bool explodes() {return explosion>=0;}
+ void setMinePowerups(int m) {minePowerups=m;}
+ int getMinePowerups() {return minePowerups;}
+ void setBulletPowerups(int b) {bulletPowerups=b;}
+ int getBulletPowerups() {return bulletPowerups;}
+ virtual void forward(double mult);
+ virtual void forward(double mult,int fr);
+ virtual void calculateGravityAndEnergy(double gravity,double sunEnergy,
+ double mult);
+private:
+ int hitpoints, wins, explosion;
+ double energy,rotation,reloadBulletTime,reloadMineTime;
+ int bulletPowerups,minePowerups;
+};
+
+class BulletSprite:public MobileSprite
+{
+public:
+ BulletSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn,double lifetime);
+ virtual int rtti() const {return S_BULLET;}
+ virtual void forward(double mult);
+ virtual void forward(double mult,int fr);
+ bool timeOut() {return time<=0;}
+private:
+ double time;
+};
+
+class MineSprite:public MobileSprite
+{
+public:
+ MineSprite(QCanvasPixmapArray* seq, QCanvas* canvas, int pn,double atime,double f);
+ virtual int rtti() const {return S_MINE;}
+ bool isActive() {return active;}
+ double getFuel() {return fuel;}
+ void setFuel(double f) {fuel=(f<0.0?0.0:f);}
+ virtual void forward(double mult);
+ void explode(QCanvasPixmapArray* s);
+ bool explodes() {return expl;}
+ bool over() {return (expl&&(explosiontime>(timeToGo-0.1)));}
+ virtual void calculateGravity(double gravity,double mult);
+private:
+ bool expl,active;
+ double activateTime,fuel,timeToGo,explosiontime;
+};
+
+class ExplosionSprite:public QCanvasSprite
+{
+public:
+ ExplosionSprite(QCanvasPixmapArray *seq, QCanvas* field, MobileSprite *sp);
+ virtual int rtti() const {return S_EXPLOSION;}
+ bool isOver() {return over;}
+ virtual void forward(double mult);
+ void setSequence(QCanvasPixmapArray *seq);
+private:
+ double timeToGo,time;
+ bool over;
+ MobileSprite *obj;
+};
+
+#endif
diff --git a/kspaceduel/sprites/Makefile.am b/kspaceduel/sprites/Makefile.am
new file mode 100644
index 00000000..58bce015
--- /dev/null
+++ b/kspaceduel/sprites/Makefile.am
@@ -0,0 +1,6 @@
+SUBDIRS = ship1 ship2 playerinfo explosion sun powerups
+
+bgdir = $(kde_datadir)/kspaceduel/sprites
+bg_DATA = backgr.png
+
+EXTRA_DIST = $(bg_DATA)
diff --git a/kspaceduel/sprites/backgr.png b/kspaceduel/sprites/backgr.png
new file mode 100644
index 00000000..3b30f396
--- /dev/null
+++ b/kspaceduel/sprites/backgr.png
Binary files differ
diff --git a/kspaceduel/sprites/explosion/Makefile.am b/kspaceduel/sprites/explosion/Makefile.am
new file mode 100644
index 00000000..680ffbb1
--- /dev/null
+++ b/kspaceduel/sprites/explosion/Makefile.am
@@ -0,0 +1,26 @@
+
+expldir = $(kde_datadir)/kspaceduel/sprites/explosion
+
+expl_DATA = \
+explos00.pbm explos00.ppm explos01.pbm explos01.ppm explos02.pbm \
+explos02.ppm explos03.pbm explos03.ppm explos04.pbm explos04.ppm \
+explos05.pbm explos05.ppm explos06.pbm explos06.ppm explos07.pbm \
+explos07.ppm explos08.pbm explos08.ppm explos09.pbm explos09.ppm \
+explos10.pbm explos10.ppm explos11.pbm explos11.ppm explos12.pbm \
+explos12.ppm explos13.pbm explos13.ppm explos14.pbm explos14.ppm \
+explos15.pbm explos15.ppm explos16.pbm explos16.ppm explos17.pbm \
+explos17.ppm explos18.pbm explos18.ppm explos19.pbm explos19.ppm \
+explos20.pbm explos20.ppm explos21.pbm explos21.ppm explos22.pbm \
+explos22.ppm explos23.pbm explos23.ppm explos24.pbm explos24.ppm \
+explos25.pbm explos25.ppm explos26.pbm explos26.ppm explos27.pbm \
+explos27.ppm explos28.pbm explos28.ppm explos29.pbm explos29.ppm \
+explos30.pbm explos30.ppm mineex00.pbm mineex00.ppm mineex01.pbm \
+mineex01.ppm mineex02.pbm mineex02.ppm mineex03.pbm mineex03.ppm \
+mineex04.pbm mineex04.ppm mineex05.pbm mineex05.ppm mineex06.pbm \
+mineex06.ppm mineex07.pbm mineex07.ppm mineex08.pbm mineex08.ppm \
+mineex09.pbm mineex09.ppm mineex10.pbm mineex10.ppm mineex11.pbm \
+mineex11.ppm mineex12.pbm mineex12.ppm mineex13.pbm mineex13.ppm \
+mineex14.pbm mineex14.ppm mineex15.pbm mineex15.ppm mineex16.pbm \
+mineex16.ppm mineex17.pbm mineex17.ppm
+
+EXTRA_DIST = $(expl_DATA)
diff --git a/kspaceduel/sprites/explosion/explos00.pbm b/kspaceduel/sprites/explosion/explos00.pbm
new file mode 100644
index 00000000..9b57de08
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos00.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos00.ppm b/kspaceduel/sprites/explosion/explos00.ppm
new file mode 100644
index 00000000..1a9d7f3e
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos00.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos01.pbm b/kspaceduel/sprites/explosion/explos01.pbm
new file mode 100644
index 00000000..30c4f701
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos01.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos01.ppm b/kspaceduel/sprites/explosion/explos01.ppm
new file mode 100644
index 00000000..5c5d90e9
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos01.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos02.pbm b/kspaceduel/sprites/explosion/explos02.pbm
new file mode 100644
index 00000000..8624bbec
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos02.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos02.ppm b/kspaceduel/sprites/explosion/explos02.ppm
new file mode 100644
index 00000000..bfd07769
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos02.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos03.pbm b/kspaceduel/sprites/explosion/explos03.pbm
new file mode 100644
index 00000000..e9037df3
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos03.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos03.ppm b/kspaceduel/sprites/explosion/explos03.ppm
new file mode 100644
index 00000000..ec9c071d
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos03.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos04.pbm b/kspaceduel/sprites/explosion/explos04.pbm
new file mode 100644
index 00000000..906679f0
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos04.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos04.ppm b/kspaceduel/sprites/explosion/explos04.ppm
new file mode 100644
index 00000000..f3b098bc
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos04.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos05.pbm b/kspaceduel/sprites/explosion/explos05.pbm
new file mode 100644
index 00000000..086068b8
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos05.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos05.ppm b/kspaceduel/sprites/explosion/explos05.ppm
new file mode 100644
index 00000000..8154989f
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos05.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos06.pbm b/kspaceduel/sprites/explosion/explos06.pbm
new file mode 100644
index 00000000..ff19e016
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos06.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos06.ppm b/kspaceduel/sprites/explosion/explos06.ppm
new file mode 100644
index 00000000..d86e535c
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos06.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos07.pbm b/kspaceduel/sprites/explosion/explos07.pbm
new file mode 100644
index 00000000..cefd17af
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos07.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos07.ppm b/kspaceduel/sprites/explosion/explos07.ppm
new file mode 100644
index 00000000..0f515a5f
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos07.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos08.pbm b/kspaceduel/sprites/explosion/explos08.pbm
new file mode 100644
index 00000000..38fd3aa8
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos08.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos08.ppm b/kspaceduel/sprites/explosion/explos08.ppm
new file mode 100644
index 00000000..3eaa4a62
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos08.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos09.pbm b/kspaceduel/sprites/explosion/explos09.pbm
new file mode 100644
index 00000000..bc015285
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos09.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos09.ppm b/kspaceduel/sprites/explosion/explos09.ppm
new file mode 100644
index 00000000..69f574b3
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos09.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos10.pbm b/kspaceduel/sprites/explosion/explos10.pbm
new file mode 100644
index 00000000..e031712c
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos10.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos10.ppm b/kspaceduel/sprites/explosion/explos10.ppm
new file mode 100644
index 00000000..65eaff0d
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos10.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos11.pbm b/kspaceduel/sprites/explosion/explos11.pbm
new file mode 100644
index 00000000..e8021289
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos11.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos11.ppm b/kspaceduel/sprites/explosion/explos11.ppm
new file mode 100644
index 00000000..d2dc949e
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos11.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos12.pbm b/kspaceduel/sprites/explosion/explos12.pbm
new file mode 100644
index 00000000..0e073796
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos12.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos12.ppm b/kspaceduel/sprites/explosion/explos12.ppm
new file mode 100644
index 00000000..acaa96e1
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos12.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos13.pbm b/kspaceduel/sprites/explosion/explos13.pbm
new file mode 100644
index 00000000..05179167
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos13.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos13.ppm b/kspaceduel/sprites/explosion/explos13.ppm
new file mode 100644
index 00000000..43c4e5de
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos13.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos14.pbm b/kspaceduel/sprites/explosion/explos14.pbm
new file mode 100644
index 00000000..d09e77ac
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos14.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos14.ppm b/kspaceduel/sprites/explosion/explos14.ppm
new file mode 100644
index 00000000..14ed717a
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos14.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos15.pbm b/kspaceduel/sprites/explosion/explos15.pbm
new file mode 100644
index 00000000..6ef019bb
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos15.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos15.ppm b/kspaceduel/sprites/explosion/explos15.ppm
new file mode 100644
index 00000000..3ae97336
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos15.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos16.pbm b/kspaceduel/sprites/explosion/explos16.pbm
new file mode 100644
index 00000000..8a6f41b7
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos16.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos16.ppm b/kspaceduel/sprites/explosion/explos16.ppm
new file mode 100644
index 00000000..9a62a486
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos16.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos17.pbm b/kspaceduel/sprites/explosion/explos17.pbm
new file mode 100644
index 00000000..ff8f8373
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos17.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos17.ppm b/kspaceduel/sprites/explosion/explos17.ppm
new file mode 100644
index 00000000..5fb061fa
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos17.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos18.pbm b/kspaceduel/sprites/explosion/explos18.pbm
new file mode 100644
index 00000000..863eb7d0
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos18.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos18.ppm b/kspaceduel/sprites/explosion/explos18.ppm
new file mode 100644
index 00000000..0d892a7a
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos18.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos19.pbm b/kspaceduel/sprites/explosion/explos19.pbm
new file mode 100644
index 00000000..e9873fcf
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos19.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos19.ppm b/kspaceduel/sprites/explosion/explos19.ppm
new file mode 100644
index 00000000..a2a24916
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos19.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos20.pbm b/kspaceduel/sprites/explosion/explos20.pbm
new file mode 100644
index 00000000..23dbee36
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos20.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos20.ppm b/kspaceduel/sprites/explosion/explos20.ppm
new file mode 100644
index 00000000..0de63929
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos20.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos21.pbm b/kspaceduel/sprites/explosion/explos21.pbm
new file mode 100644
index 00000000..df4d3d39
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos21.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos21.ppm b/kspaceduel/sprites/explosion/explos21.ppm
new file mode 100644
index 00000000..c1d74f3a
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos21.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos22.pbm b/kspaceduel/sprites/explosion/explos22.pbm
new file mode 100644
index 00000000..d2c04460
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos22.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos22.ppm b/kspaceduel/sprites/explosion/explos22.ppm
new file mode 100644
index 00000000..bffedc3d
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos22.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos23.pbm b/kspaceduel/sprites/explosion/explos23.pbm
new file mode 100644
index 00000000..10942982
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos23.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos23.ppm b/kspaceduel/sprites/explosion/explos23.ppm
new file mode 100644
index 00000000..f26992f1
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos23.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos24.pbm b/kspaceduel/sprites/explosion/explos24.pbm
new file mode 100644
index 00000000..665e10b9
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos24.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos24.ppm b/kspaceduel/sprites/explosion/explos24.ppm
new file mode 100644
index 00000000..17f0203e
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos24.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos25.pbm b/kspaceduel/sprites/explosion/explos25.pbm
new file mode 100644
index 00000000..30fda10b
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos25.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos25.ppm b/kspaceduel/sprites/explosion/explos25.ppm
new file mode 100644
index 00000000..877a9c28
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos25.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos26.pbm b/kspaceduel/sprites/explosion/explos26.pbm
new file mode 100644
index 00000000..351a035a
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos26.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos26.ppm b/kspaceduel/sprites/explosion/explos26.ppm
new file mode 100644
index 00000000..ee488917
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos26.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos27.pbm b/kspaceduel/sprites/explosion/explos27.pbm
new file mode 100644
index 00000000..d98ea215
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos27.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos27.ppm b/kspaceduel/sprites/explosion/explos27.ppm
new file mode 100644
index 00000000..96e26dd8
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos27.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos28.pbm b/kspaceduel/sprites/explosion/explos28.pbm
new file mode 100644
index 00000000..dc872400
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos28.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos28.ppm b/kspaceduel/sprites/explosion/explos28.ppm
new file mode 100644
index 00000000..692ff55d
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos28.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos29.pbm b/kspaceduel/sprites/explosion/explos29.pbm
new file mode 100644
index 00000000..e67a072f
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos29.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos29.ppm b/kspaceduel/sprites/explosion/explos29.ppm
new file mode 100644
index 00000000..5ba8adfe
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos29.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos30.pbm b/kspaceduel/sprites/explosion/explos30.pbm
new file mode 100644
index 00000000..63cce7e5
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos30.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/explos30.ppm b/kspaceduel/sprites/explosion/explos30.ppm
new file mode 100644
index 00000000..44c38d5d
--- /dev/null
+++ b/kspaceduel/sprites/explosion/explos30.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex00.pbm b/kspaceduel/sprites/explosion/mineex00.pbm
new file mode 100644
index 00000000..0924b0cb
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex00.pbm
@@ -0,0 +1,13 @@
+P1
+8 11
+00001000
+00111110
+01111110
+11111111
+11111111
+11111111
+11111111
+11111111
+11111110
+01111110
+00111100
diff --git a/kspaceduel/sprites/explosion/mineex00.ppm b/kspaceduel/sprites/explosion/mineex00.ppm
new file mode 100644
index 00000000..80f7c3aa
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex00.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex01.pbm b/kspaceduel/sprites/explosion/mineex01.pbm
new file mode 100644
index 00000000..d2e5487b
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex01.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex01.ppm b/kspaceduel/sprites/explosion/mineex01.ppm
new file mode 100644
index 00000000..514a1d77
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex01.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex02.pbm b/kspaceduel/sprites/explosion/mineex02.pbm
new file mode 100644
index 00000000..d9b584f6
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex02.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex02.ppm b/kspaceduel/sprites/explosion/mineex02.ppm
new file mode 100644
index 00000000..a4ddccd4
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex02.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex03.pbm b/kspaceduel/sprites/explosion/mineex03.pbm
new file mode 100644
index 00000000..fce5deee
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex03.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex03.ppm b/kspaceduel/sprites/explosion/mineex03.ppm
new file mode 100644
index 00000000..baba3afc
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex03.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex04.pbm b/kspaceduel/sprites/explosion/mineex04.pbm
new file mode 100644
index 00000000..7ed25873
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex04.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex04.ppm b/kspaceduel/sprites/explosion/mineex04.ppm
new file mode 100644
index 00000000..752ab4c8
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex04.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex05.pbm b/kspaceduel/sprites/explosion/mineex05.pbm
new file mode 100644
index 00000000..e16f95cc
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex05.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex05.ppm b/kspaceduel/sprites/explosion/mineex05.ppm
new file mode 100644
index 00000000..c36b15cd
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex05.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex06.pbm b/kspaceduel/sprites/explosion/mineex06.pbm
new file mode 100644
index 00000000..54fbd102
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex06.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex06.ppm b/kspaceduel/sprites/explosion/mineex06.ppm
new file mode 100644
index 00000000..abaaca8c
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex06.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex07.pbm b/kspaceduel/sprites/explosion/mineex07.pbm
new file mode 100644
index 00000000..cc62a4a8
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex07.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex07.ppm b/kspaceduel/sprites/explosion/mineex07.ppm
new file mode 100644
index 00000000..564ecaea
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex07.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex08.pbm b/kspaceduel/sprites/explosion/mineex08.pbm
new file mode 100644
index 00000000..b3db5320
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex08.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex08.ppm b/kspaceduel/sprites/explosion/mineex08.ppm
new file mode 100644
index 00000000..99f7bfe7
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex08.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex09.pbm b/kspaceduel/sprites/explosion/mineex09.pbm
new file mode 100644
index 00000000..9d2d32f8
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex09.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex09.ppm b/kspaceduel/sprites/explosion/mineex09.ppm
new file mode 100644
index 00000000..b23aec3a
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex09.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex10.pbm b/kspaceduel/sprites/explosion/mineex10.pbm
new file mode 100644
index 00000000..101e5845
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex10.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex10.ppm b/kspaceduel/sprites/explosion/mineex10.ppm
new file mode 100644
index 00000000..e2f23352
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex10.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex11.pbm b/kspaceduel/sprites/explosion/mineex11.pbm
new file mode 100644
index 00000000..40818303
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex11.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex11.ppm b/kspaceduel/sprites/explosion/mineex11.ppm
new file mode 100644
index 00000000..ed38957c
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex11.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex12.pbm b/kspaceduel/sprites/explosion/mineex12.pbm
new file mode 100644
index 00000000..fc7efa9f
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex12.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex12.ppm b/kspaceduel/sprites/explosion/mineex12.ppm
new file mode 100644
index 00000000..1d2b4394
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex12.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex13.pbm b/kspaceduel/sprites/explosion/mineex13.pbm
new file mode 100644
index 00000000..286f2d94
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex13.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex13.ppm b/kspaceduel/sprites/explosion/mineex13.ppm
new file mode 100644
index 00000000..fc2b928e
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex13.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex14.pbm b/kspaceduel/sprites/explosion/mineex14.pbm
new file mode 100644
index 00000000..80f1d799
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex14.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex14.ppm b/kspaceduel/sprites/explosion/mineex14.ppm
new file mode 100644
index 00000000..e674c572
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex14.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex15.pbm b/kspaceduel/sprites/explosion/mineex15.pbm
new file mode 100644
index 00000000..c333dc4c
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex15.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex15.ppm b/kspaceduel/sprites/explosion/mineex15.ppm
new file mode 100644
index 00000000..c0de08db
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex15.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex16.pbm b/kspaceduel/sprites/explosion/mineex16.pbm
new file mode 100644
index 00000000..c333dc4c
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex16.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex16.ppm b/kspaceduel/sprites/explosion/mineex16.ppm
new file mode 100644
index 00000000..c0de08db
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex16.ppm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex17.pbm b/kspaceduel/sprites/explosion/mineex17.pbm
new file mode 100644
index 00000000..cce4495a
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex17.pbm
Binary files differ
diff --git a/kspaceduel/sprites/explosion/mineex17.ppm b/kspaceduel/sprites/explosion/mineex17.ppm
new file mode 100644
index 00000000..7a9e0cc2
--- /dev/null
+++ b/kspaceduel/sprites/explosion/mineex17.ppm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/Makefile.am b/kspaceduel/sprites/playerinfo/Makefile.am
new file mode 100644
index 00000000..0e3dc6b8
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/Makefile.am
@@ -0,0 +1,6 @@
+playerdir = $(kde_datadir)/kspaceduel/sprites/playerinfo
+player_DATA = \
+energy.pnm mine.pnm ship10.pnm ship11.pnm ship12.pnm ship13.pnm ship20.pnm \
+ship21.pnm ship22.pnm ship23.pnm win.pnm
+
+EXTRA_DIST = $(player_DATA)
diff --git a/kspaceduel/sprites/playerinfo/energy.pnm b/kspaceduel/sprites/playerinfo/energy.pnm
new file mode 100644
index 00000000..7468f3bd
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/energy.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/mine.pnm b/kspaceduel/sprites/playerinfo/mine.pnm
new file mode 100644
index 00000000..44ff28ef
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/mine.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/ship10.pnm b/kspaceduel/sprites/playerinfo/ship10.pnm
new file mode 100644
index 00000000..9463990e
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/ship10.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/ship11.pnm b/kspaceduel/sprites/playerinfo/ship11.pnm
new file mode 100644
index 00000000..66ef5825
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/ship11.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/ship12.pnm b/kspaceduel/sprites/playerinfo/ship12.pnm
new file mode 100644
index 00000000..b5dafbd6
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/ship12.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/ship13.pnm b/kspaceduel/sprites/playerinfo/ship13.pnm
new file mode 100644
index 00000000..4daf565f
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/ship13.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/ship20.pnm b/kspaceduel/sprites/playerinfo/ship20.pnm
new file mode 100644
index 00000000..aae88e86
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/ship20.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/ship21.pnm b/kspaceduel/sprites/playerinfo/ship21.pnm
new file mode 100644
index 00000000..600e6555
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/ship21.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/ship22.pnm b/kspaceduel/sprites/playerinfo/ship22.pnm
new file mode 100644
index 00000000..34a95574
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/ship22.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/ship23.pnm b/kspaceduel/sprites/playerinfo/ship23.pnm
new file mode 100644
index 00000000..8487b42a
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/ship23.pnm
Binary files differ
diff --git a/kspaceduel/sprites/playerinfo/win.pnm b/kspaceduel/sprites/playerinfo/win.pnm
new file mode 100644
index 00000000..324ba53c
--- /dev/null
+++ b/kspaceduel/sprites/playerinfo/win.pnm
Binary files differ
diff --git a/kspaceduel/sprites/powerups/Makefile.am b/kspaceduel/sprites/powerups/Makefile.am
new file mode 100644
index 00000000..5133d7d7
--- /dev/null
+++ b/kspaceduel/sprites/powerups/Makefile.am
@@ -0,0 +1,5 @@
+powerdir = $(kde_datadir)/kspaceduel/sprites/powerups
+power_DATA = \
+pbullet.pbm pbullet.ppm penergy.pbm penergy.ppm pmine.pbm pmine.ppm \
+pshield.pbm pshield.ppm
+EXTRA_DIST = $(power_DATA)
diff --git a/kspaceduel/sprites/powerups/pbullet.pbm b/kspaceduel/sprites/powerups/pbullet.pbm
new file mode 100644
index 00000000..f363dd1c
--- /dev/null
+++ b/kspaceduel/sprites/powerups/pbullet.pbm
@@ -0,0 +1,3 @@
+P4
+14 14
+À?ðøÿøÿüÿüÿüÿüÿüÿüÿøø?ðà \ No newline at end of file
diff --git a/kspaceduel/sprites/powerups/pbullet.ppm b/kspaceduel/sprites/powerups/pbullet.ppm
new file mode 100644
index 00000000..b66820ec
--- /dev/null
+++ b/kspaceduel/sprites/powerups/pbullet.ppm
Binary files differ
diff --git a/kspaceduel/sprites/powerups/penergy.pbm b/kspaceduel/sprites/powerups/penergy.pbm
new file mode 100644
index 00000000..f363dd1c
--- /dev/null
+++ b/kspaceduel/sprites/powerups/penergy.pbm
@@ -0,0 +1,3 @@
+P4
+14 14
+À?ðøÿøÿüÿüÿüÿüÿüÿüÿøø?ðà \ No newline at end of file
diff --git a/kspaceduel/sprites/powerups/penergy.ppm b/kspaceduel/sprites/powerups/penergy.ppm
new file mode 100644
index 00000000..a2388c28
--- /dev/null
+++ b/kspaceduel/sprites/powerups/penergy.ppm
Binary files differ
diff --git a/kspaceduel/sprites/powerups/pmine.pbm b/kspaceduel/sprites/powerups/pmine.pbm
new file mode 100644
index 00000000..f363dd1c
--- /dev/null
+++ b/kspaceduel/sprites/powerups/pmine.pbm
@@ -0,0 +1,3 @@
+P4
+14 14
+À?ðøÿøÿüÿüÿüÿüÿüÿüÿøø?ðà \ No newline at end of file
diff --git a/kspaceduel/sprites/powerups/pmine.ppm b/kspaceduel/sprites/powerups/pmine.ppm
new file mode 100644
index 00000000..8be25623
--- /dev/null
+++ b/kspaceduel/sprites/powerups/pmine.ppm
Binary files differ
diff --git a/kspaceduel/sprites/powerups/pshield.pbm b/kspaceduel/sprites/powerups/pshield.pbm
new file mode 100644
index 00000000..f363dd1c
--- /dev/null
+++ b/kspaceduel/sprites/powerups/pshield.pbm
@@ -0,0 +1,3 @@
+P4
+14 14
+À?ðøÿøÿüÿüÿüÿüÿüÿüÿøø?ðà \ No newline at end of file
diff --git a/kspaceduel/sprites/powerups/pshield.ppm b/kspaceduel/sprites/powerups/pshield.ppm
new file mode 100644
index 00000000..9be24c93
--- /dev/null
+++ b/kspaceduel/sprites/powerups/pshield.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/Makefile.am b/kspaceduel/sprites/ship1/Makefile.am
new file mode 100644
index 00000000..aca11c80
--- /dev/null
+++ b/kspaceduel/sprites/ship1/Makefile.am
@@ -0,0 +1,25 @@
+ship1dir = $(kde_datadir)/kspaceduel/sprites/ship1
+ship1_DATA = \
+bullet.pbm bullet.ppm mine0.pbm mine0.ppm mine1.pbm mine1.ppm ship00.pbm \
+ship00.ppm ship01.pbm ship01.ppm ship02.pbm ship02.ppm ship03.pbm \
+ship03.ppm ship04.pbm ship04.ppm ship05.pbm ship05.ppm ship06.pbm \
+ship06.ppm ship07.pbm ship07.ppm ship08.pbm ship08.ppm ship09.pbm \
+ship09.ppm ship10.pbm ship10.ppm ship11.pbm ship11.ppm ship12.pbm \
+ship12.ppm ship13.pbm ship13.ppm ship14.pbm ship14.ppm ship15.pbm \
+ship15.ppm ship16.pbm ship16.ppm ship17.pbm ship17.ppm ship18.pbm \
+ship18.ppm ship19.pbm ship19.ppm ship20.pbm ship20.ppm ship21.pbm \
+ship21.ppm ship22.pbm ship22.ppm ship23.pbm ship23.ppm ship24.pbm \
+ship24.ppm ship25.pbm ship25.ppm ship26.pbm ship26.ppm ship27.pbm \
+ship27.ppm ship28.pbm ship28.ppm ship29.pbm ship29.ppm ship30.pbm \
+ship30.ppm ship31.pbm ship31.ppm ship32.pbm ship32.ppm ship33.pbm \
+ship33.ppm ship34.pbm ship34.ppm ship35.pbm ship35.ppm ship36.pbm \
+ship36.ppm ship37.pbm ship37.ppm ship38.pbm ship38.ppm ship39.pbm \
+ship39.ppm ship40.pbm ship40.ppm ship41.pbm ship41.ppm ship42.pbm \
+ship42.ppm ship43.pbm ship43.ppm ship44.pbm ship44.ppm ship45.pbm \
+ship45.ppm ship46.pbm ship46.ppm ship47.pbm ship47.ppm ship48.pbm \
+ship48.ppm ship49.pbm ship49.ppm ship50.pbm ship50.ppm ship51.pbm \
+ship51.ppm ship52.pbm ship52.ppm ship53.pbm ship53.ppm ship54.pbm \
+ship54.ppm ship55.pbm ship55.ppm ship56.pbm ship56.ppm ship57.pbm \
+ship57.ppm ship58.pbm ship58.ppm ship59.pbm ship59.ppm ship60.pbm \
+ship60.ppm ship61.pbm ship61.ppm ship62.pbm ship62.ppm ship63.pbm \
+ship63.ppm ship64.pbm ship64.ppm
diff --git a/kspaceduel/sprites/ship1/bullet.pbm b/kspaceduel/sprites/ship1/bullet.pbm
new file mode 100644
index 00000000..9f8fd80d
--- /dev/null
+++ b/kspaceduel/sprites/ship1/bullet.pbm
@@ -0,0 +1,5 @@
+P1
+3 3
+111
+111
+111
diff --git a/kspaceduel/sprites/ship1/bullet.ppm b/kspaceduel/sprites/ship1/bullet.ppm
new file mode 100644
index 00000000..56a1b85a
--- /dev/null
+++ b/kspaceduel/sprites/ship1/bullet.ppm
@@ -0,0 +1,5 @@
+P6
+# HOTSPOT 1 1
+3 3
+255
+n""±""n""±""î""­""n""­""n"" \ No newline at end of file
diff --git a/kspaceduel/sprites/ship1/mine0.pbm b/kspaceduel/sprites/ship1/mine0.pbm
new file mode 100644
index 00000000..158c3baf
--- /dev/null
+++ b/kspaceduel/sprites/ship1/mine0.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/mine0.ppm b/kspaceduel/sprites/ship1/mine0.ppm
new file mode 100644
index 00000000..94371392
--- /dev/null
+++ b/kspaceduel/sprites/ship1/mine0.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/mine1.pbm b/kspaceduel/sprites/ship1/mine1.pbm
new file mode 100644
index 00000000..0b39d79e
--- /dev/null
+++ b/kspaceduel/sprites/ship1/mine1.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/mine1.ppm b/kspaceduel/sprites/ship1/mine1.ppm
new file mode 100644
index 00000000..1ae3374e
--- /dev/null
+++ b/kspaceduel/sprites/ship1/mine1.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship00.pbm b/kspaceduel/sprites/ship1/ship00.pbm
new file mode 100644
index 00000000..6bf23756
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship00.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship00.ppm b/kspaceduel/sprites/ship1/ship00.ppm
new file mode 100644
index 00000000..c55557a7
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship00.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship01.pbm b/kspaceduel/sprites/ship1/ship01.pbm
new file mode 100644
index 00000000..d1f5d378
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship01.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship01.ppm b/kspaceduel/sprites/ship1/ship01.ppm
new file mode 100644
index 00000000..e47c4504
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship01.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship02.pbm b/kspaceduel/sprites/ship1/ship02.pbm
new file mode 100644
index 00000000..4f0dcafe
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship02.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship02.ppm b/kspaceduel/sprites/ship1/ship02.ppm
new file mode 100644
index 00000000..8077b010
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship02.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship03.pbm b/kspaceduel/sprites/ship1/ship03.pbm
new file mode 100644
index 00000000..8096630c
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship03.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship03.ppm b/kspaceduel/sprites/ship1/ship03.ppm
new file mode 100644
index 00000000..706a8ece
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship03.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship04.pbm b/kspaceduel/sprites/ship1/ship04.pbm
new file mode 100644
index 00000000..7d43a13e
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship04.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship04.ppm b/kspaceduel/sprites/ship1/ship04.ppm
new file mode 100644
index 00000000..0d3fc821
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship04.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship05.pbm b/kspaceduel/sprites/ship1/ship05.pbm
new file mode 100644
index 00000000..22d41bf2
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship05.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship05.ppm b/kspaceduel/sprites/ship1/ship05.ppm
new file mode 100644
index 00000000..af2541cf
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship05.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship06.pbm b/kspaceduel/sprites/ship1/ship06.pbm
new file mode 100644
index 00000000..d4c43aa1
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship06.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship06.ppm b/kspaceduel/sprites/ship1/ship06.ppm
new file mode 100644
index 00000000..e41b0a43
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship06.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship07.pbm b/kspaceduel/sprites/ship1/ship07.pbm
new file mode 100644
index 00000000..7f3e2683
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship07.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship07.ppm b/kspaceduel/sprites/ship1/ship07.ppm
new file mode 100644
index 00000000..bf016f6c
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship07.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship08.pbm b/kspaceduel/sprites/ship1/ship08.pbm
new file mode 100644
index 00000000..9cfd6bf1
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship08.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship08.ppm b/kspaceduel/sprites/ship1/ship08.ppm
new file mode 100644
index 00000000..5939bda6
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship08.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship09.pbm b/kspaceduel/sprites/ship1/ship09.pbm
new file mode 100644
index 00000000..6ec3a907
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship09.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship09.ppm b/kspaceduel/sprites/ship1/ship09.ppm
new file mode 100644
index 00000000..9e94fa33
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship09.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship10.pbm b/kspaceduel/sprites/ship1/ship10.pbm
new file mode 100644
index 00000000..4cd96f5d
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship10.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship10.ppm b/kspaceduel/sprites/ship1/ship10.ppm
new file mode 100644
index 00000000..0cbf08f9
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship10.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship11.pbm b/kspaceduel/sprites/ship1/ship11.pbm
new file mode 100644
index 00000000..37dd4050
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship11.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship11.ppm b/kspaceduel/sprites/ship1/ship11.ppm
new file mode 100644
index 00000000..1b383d50
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship11.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship12.pbm b/kspaceduel/sprites/ship1/ship12.pbm
new file mode 100644
index 00000000..c0ba451b
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship12.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship12.ppm b/kspaceduel/sprites/ship1/ship12.ppm
new file mode 100644
index 00000000..79dd1087
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship12.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship13.pbm b/kspaceduel/sprites/ship1/ship13.pbm
new file mode 100644
index 00000000..585dd0a0
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship13.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship13.ppm b/kspaceduel/sprites/ship1/ship13.ppm
new file mode 100644
index 00000000..af962f8d
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship13.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship14.pbm b/kspaceduel/sprites/ship1/ship14.pbm
new file mode 100644
index 00000000..aaf4bf9e
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship14.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship14.ppm b/kspaceduel/sprites/ship1/ship14.ppm
new file mode 100644
index 00000000..886b6be9
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship14.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship15.pbm b/kspaceduel/sprites/ship1/ship15.pbm
new file mode 100644
index 00000000..d61306e9
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship15.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship15.ppm b/kspaceduel/sprites/ship1/ship15.ppm
new file mode 100644
index 00000000..e7f8f7e2
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship15.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship16.pbm b/kspaceduel/sprites/ship1/ship16.pbm
new file mode 100644
index 00000000..47125d73
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship16.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship16.ppm b/kspaceduel/sprites/ship1/ship16.ppm
new file mode 100644
index 00000000..228cf12c
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship16.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship17.pbm b/kspaceduel/sprites/ship1/ship17.pbm
new file mode 100644
index 00000000..31828cbd
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship17.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship17.ppm b/kspaceduel/sprites/ship1/ship17.ppm
new file mode 100644
index 00000000..4dff9f7b
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship17.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship18.pbm b/kspaceduel/sprites/ship1/ship18.pbm
new file mode 100644
index 00000000..a104102d
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship18.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship18.ppm b/kspaceduel/sprites/ship1/ship18.ppm
new file mode 100644
index 00000000..91828c52
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship18.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship19.pbm b/kspaceduel/sprites/ship1/ship19.pbm
new file mode 100644
index 00000000..d4184744
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship19.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship19.ppm b/kspaceduel/sprites/ship1/ship19.ppm
new file mode 100644
index 00000000..1e44c1fa
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship19.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship20.pbm b/kspaceduel/sprites/ship1/ship20.pbm
new file mode 100644
index 00000000..c9e6592a
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship20.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship20.ppm b/kspaceduel/sprites/ship1/ship20.ppm
new file mode 100644
index 00000000..b13956eb
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship20.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship21.pbm b/kspaceduel/sprites/ship1/ship21.pbm
new file mode 100644
index 00000000..dc8a04fc
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship21.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship21.ppm b/kspaceduel/sprites/ship1/ship21.ppm
new file mode 100644
index 00000000..d2a51f6d
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship21.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship22.pbm b/kspaceduel/sprites/ship1/ship22.pbm
new file mode 100644
index 00000000..0675c265
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship22.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship22.ppm b/kspaceduel/sprites/ship1/ship22.ppm
new file mode 100644
index 00000000..1471eb41
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship22.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship23.pbm b/kspaceduel/sprites/ship1/ship23.pbm
new file mode 100644
index 00000000..0ff6d171
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship23.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship23.ppm b/kspaceduel/sprites/ship1/ship23.ppm
new file mode 100644
index 00000000..008adf46
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship23.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship24.pbm b/kspaceduel/sprites/ship1/ship24.pbm
new file mode 100644
index 00000000..613500ab
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship24.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship24.ppm b/kspaceduel/sprites/ship1/ship24.ppm
new file mode 100644
index 00000000..e96306e9
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship24.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship25.pbm b/kspaceduel/sprites/ship1/ship25.pbm
new file mode 100644
index 00000000..857db7c3
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship25.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship25.ppm b/kspaceduel/sprites/ship1/ship25.ppm
new file mode 100644
index 00000000..4cbae30e
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship25.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship26.pbm b/kspaceduel/sprites/ship1/ship26.pbm
new file mode 100644
index 00000000..adbc4f54
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship26.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship26.ppm b/kspaceduel/sprites/ship1/ship26.ppm
new file mode 100644
index 00000000..3bc7bbb0
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship26.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship27.pbm b/kspaceduel/sprites/ship1/ship27.pbm
new file mode 100644
index 00000000..d2a19254
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship27.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship27.ppm b/kspaceduel/sprites/ship1/ship27.ppm
new file mode 100644
index 00000000..e92fae28
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship27.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship28.pbm b/kspaceduel/sprites/ship1/ship28.pbm
new file mode 100644
index 00000000..f2274e62
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship28.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship28.ppm b/kspaceduel/sprites/ship1/ship28.ppm
new file mode 100644
index 00000000..38137308
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship28.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship29.pbm b/kspaceduel/sprites/ship1/ship29.pbm
new file mode 100644
index 00000000..2d48307f
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship29.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship29.ppm b/kspaceduel/sprites/ship1/ship29.ppm
new file mode 100644
index 00000000..92dc7048
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship29.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship30.pbm b/kspaceduel/sprites/ship1/ship30.pbm
new file mode 100644
index 00000000..85cf7861
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship30.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship30.ppm b/kspaceduel/sprites/ship1/ship30.ppm
new file mode 100644
index 00000000..1e34a615
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship30.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship31.pbm b/kspaceduel/sprites/ship1/ship31.pbm
new file mode 100644
index 00000000..0a6a2f98
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship31.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship31.ppm b/kspaceduel/sprites/ship1/ship31.ppm
new file mode 100644
index 00000000..88de98ce
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship31.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship32.pbm b/kspaceduel/sprites/ship1/ship32.pbm
new file mode 100644
index 00000000..da818895
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship32.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship32.ppm b/kspaceduel/sprites/ship1/ship32.ppm
new file mode 100644
index 00000000..dd0ece74
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship32.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship33.pbm b/kspaceduel/sprites/ship1/ship33.pbm
new file mode 100644
index 00000000..fe24c29b
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship33.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship33.ppm b/kspaceduel/sprites/ship1/ship33.ppm
new file mode 100644
index 00000000..24c47275
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship33.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship34.pbm b/kspaceduel/sprites/ship1/ship34.pbm
new file mode 100644
index 00000000..25e1f1d2
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship34.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship34.ppm b/kspaceduel/sprites/ship1/ship34.ppm
new file mode 100644
index 00000000..4509b69b
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship34.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship35.pbm b/kspaceduel/sprites/ship1/ship35.pbm
new file mode 100644
index 00000000..a832dafe
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship35.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship35.ppm b/kspaceduel/sprites/ship1/ship35.ppm
new file mode 100644
index 00000000..084eafa0
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship35.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship36.pbm b/kspaceduel/sprites/ship1/ship36.pbm
new file mode 100644
index 00000000..08a3295a
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship36.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship36.ppm b/kspaceduel/sprites/ship1/ship36.ppm
new file mode 100644
index 00000000..b97b6391
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship36.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship37.pbm b/kspaceduel/sprites/ship1/ship37.pbm
new file mode 100644
index 00000000..2727c02d
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship37.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship37.ppm b/kspaceduel/sprites/ship1/ship37.ppm
new file mode 100644
index 00000000..4b1fa725
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship37.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship38.pbm b/kspaceduel/sprites/ship1/ship38.pbm
new file mode 100644
index 00000000..87b51c80
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship38.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship38.ppm b/kspaceduel/sprites/ship1/ship38.ppm
new file mode 100644
index 00000000..44bf768a
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship38.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship39.pbm b/kspaceduel/sprites/ship1/ship39.pbm
new file mode 100644
index 00000000..99281fff
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship39.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship39.ppm b/kspaceduel/sprites/ship1/ship39.ppm
new file mode 100644
index 00000000..ffafc076
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship39.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship40.pbm b/kspaceduel/sprites/ship1/ship40.pbm
new file mode 100644
index 00000000..eb4203ed
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship40.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship40.ppm b/kspaceduel/sprites/ship1/ship40.ppm
new file mode 100644
index 00000000..1def4c91
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship40.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship41.pbm b/kspaceduel/sprites/ship1/ship41.pbm
new file mode 100644
index 00000000..61782784
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship41.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship41.ppm b/kspaceduel/sprites/ship1/ship41.ppm
new file mode 100644
index 00000000..02d26e8c
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship41.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship42.pbm b/kspaceduel/sprites/ship1/ship42.pbm
new file mode 100644
index 00000000..b98fabd1
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship42.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship42.ppm b/kspaceduel/sprites/ship1/ship42.ppm
new file mode 100644
index 00000000..4c2f8b1a
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship42.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship43.pbm b/kspaceduel/sprites/ship1/ship43.pbm
new file mode 100644
index 00000000..adc24118
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship43.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship43.ppm b/kspaceduel/sprites/ship1/ship43.ppm
new file mode 100644
index 00000000..7a8da650
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship43.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship44.pbm b/kspaceduel/sprites/ship1/ship44.pbm
new file mode 100644
index 00000000..0b8afcd9
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship44.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship44.ppm b/kspaceduel/sprites/ship1/ship44.ppm
new file mode 100644
index 00000000..75c52fc3
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship44.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship45.pbm b/kspaceduel/sprites/ship1/ship45.pbm
new file mode 100644
index 00000000..216d22a5
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship45.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship45.ppm b/kspaceduel/sprites/ship1/ship45.ppm
new file mode 100644
index 00000000..f75d6322
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship45.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship46.pbm b/kspaceduel/sprites/ship1/ship46.pbm
new file mode 100644
index 00000000..7a249684
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship46.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship46.ppm b/kspaceduel/sprites/ship1/ship46.ppm
new file mode 100644
index 00000000..a23a8be9
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship46.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship47.pbm b/kspaceduel/sprites/ship1/ship47.pbm
new file mode 100644
index 00000000..b5b60231
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship47.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship47.ppm b/kspaceduel/sprites/ship1/ship47.ppm
new file mode 100644
index 00000000..3bda3af2
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship47.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship48.pbm b/kspaceduel/sprites/ship1/ship48.pbm
new file mode 100644
index 00000000..b396376a
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship48.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship48.ppm b/kspaceduel/sprites/ship1/ship48.ppm
new file mode 100644
index 00000000..e869d7dc
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship48.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship49.pbm b/kspaceduel/sprites/ship1/ship49.pbm
new file mode 100644
index 00000000..4e40825c
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship49.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship49.ppm b/kspaceduel/sprites/ship1/ship49.ppm
new file mode 100644
index 00000000..872c9be2
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship49.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship50.pbm b/kspaceduel/sprites/ship1/ship50.pbm
new file mode 100644
index 00000000..72a4e31b
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship50.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship50.ppm b/kspaceduel/sprites/ship1/ship50.ppm
new file mode 100644
index 00000000..6358387b
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship50.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship51.pbm b/kspaceduel/sprites/ship1/ship51.pbm
new file mode 100644
index 00000000..6e1b27b3
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship51.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship51.ppm b/kspaceduel/sprites/ship1/ship51.ppm
new file mode 100644
index 00000000..fb37a73e
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship51.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship52.pbm b/kspaceduel/sprites/ship1/ship52.pbm
new file mode 100644
index 00000000..824eec39
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship52.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship52.ppm b/kspaceduel/sprites/ship1/ship52.ppm
new file mode 100644
index 00000000..a044f6d6
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship52.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship53.pbm b/kspaceduel/sprites/ship1/ship53.pbm
new file mode 100644
index 00000000..3fbc9832
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship53.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship53.ppm b/kspaceduel/sprites/ship1/ship53.ppm
new file mode 100644
index 00000000..89f11b55
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship53.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship54.pbm b/kspaceduel/sprites/ship1/ship54.pbm
new file mode 100644
index 00000000..97010f8d
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship54.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship54.ppm b/kspaceduel/sprites/ship1/ship54.ppm
new file mode 100644
index 00000000..2e386eb8
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship54.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship55.pbm b/kspaceduel/sprites/ship1/ship55.pbm
new file mode 100644
index 00000000..e2391283
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship55.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship55.ppm b/kspaceduel/sprites/ship1/ship55.ppm
new file mode 100644
index 00000000..ee02a506
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship55.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship56.pbm b/kspaceduel/sprites/ship1/ship56.pbm
new file mode 100644
index 00000000..c5953877
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship56.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship56.ppm b/kspaceduel/sprites/ship1/ship56.ppm
new file mode 100644
index 00000000..38753fc8
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship56.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship57.pbm b/kspaceduel/sprites/ship1/ship57.pbm
new file mode 100644
index 00000000..22bfacba
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship57.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship57.ppm b/kspaceduel/sprites/ship1/ship57.ppm
new file mode 100644
index 00000000..1aaa1905
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship57.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship58.pbm b/kspaceduel/sprites/ship1/ship58.pbm
new file mode 100644
index 00000000..4d9f0de3
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship58.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship58.ppm b/kspaceduel/sprites/ship1/ship58.ppm
new file mode 100644
index 00000000..e1402352
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship58.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship59.pbm b/kspaceduel/sprites/ship1/ship59.pbm
new file mode 100644
index 00000000..c5886207
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship59.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship59.ppm b/kspaceduel/sprites/ship1/ship59.ppm
new file mode 100644
index 00000000..fb2a0d6b
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship59.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship60.pbm b/kspaceduel/sprites/ship1/ship60.pbm
new file mode 100644
index 00000000..3edabddd
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship60.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship60.ppm b/kspaceduel/sprites/ship1/ship60.ppm
new file mode 100644
index 00000000..e7655dfe
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship60.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship61.pbm b/kspaceduel/sprites/ship1/ship61.pbm
new file mode 100644
index 00000000..78557a20
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship61.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship61.ppm b/kspaceduel/sprites/ship1/ship61.ppm
new file mode 100644
index 00000000..026a618f
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship61.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship62.pbm b/kspaceduel/sprites/ship1/ship62.pbm
new file mode 100644
index 00000000..bf3495cf
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship62.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship62.ppm b/kspaceduel/sprites/ship1/ship62.ppm
new file mode 100644
index 00000000..48ca2897
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship62.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship63.pbm b/kspaceduel/sprites/ship1/ship63.pbm
new file mode 100644
index 00000000..5ed04c90
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship63.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship63.ppm b/kspaceduel/sprites/ship1/ship63.ppm
new file mode 100644
index 00000000..b1d0841b
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship63.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship64.pbm b/kspaceduel/sprites/ship1/ship64.pbm
new file mode 100644
index 00000000..e37c6fcf
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship64.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship1/ship64.ppm b/kspaceduel/sprites/ship1/ship64.ppm
new file mode 100644
index 00000000..127a50be
--- /dev/null
+++ b/kspaceduel/sprites/ship1/ship64.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/Makefile.am b/kspaceduel/sprites/ship2/Makefile.am
new file mode 100644
index 00000000..bd201dcb
--- /dev/null
+++ b/kspaceduel/sprites/ship2/Makefile.am
@@ -0,0 +1,27 @@
+ship2dir = $(kde_datadir)/kspaceduel/sprites/ship2
+ship2_DATA = \
+bullet.pbm bullet.ppm mine0.pbm mine0.ppm mine1.pbm mine1.ppm ship00.pbm \
+ship00.ppm ship01.pbm ship01.ppm ship02.pbm ship02.ppm ship03.pbm \
+ship03.ppm ship04.pbm ship04.ppm ship05.pbm ship05.ppm ship06.pbm \
+ship06.ppm ship07.pbm ship07.ppm ship08.pbm ship08.ppm ship09.pbm \
+ship09.ppm ship10.pbm ship10.ppm ship11.pbm ship11.ppm ship12.pbm \
+ship12.ppm ship13.pbm ship13.ppm ship14.pbm ship14.ppm ship15.pbm \
+ship15.ppm ship16.pbm ship16.ppm ship17.pbm ship17.ppm ship18.pbm \
+ship18.ppm ship19.pbm ship19.ppm ship20.pbm ship20.ppm ship21.pbm \
+ship21.ppm ship22.pbm ship22.ppm ship23.pbm ship23.ppm ship24.pbm \
+ship24.ppm ship25.pbm ship25.ppm ship26.pbm ship26.ppm ship27.pbm \
+ship27.ppm ship28.pbm ship28.ppm ship29.pbm ship29.ppm ship30.pbm \
+ship30.ppm ship31.pbm ship31.ppm ship32.pbm ship32.ppm ship33.pbm \
+ship33.ppm ship34.pbm ship34.ppm ship35.pbm ship35.ppm ship36.pbm \
+ship36.ppm ship37.pbm ship37.ppm ship38.pbm ship38.ppm ship39.pbm \
+ship39.ppm ship40.pbm ship40.ppm ship41.pbm ship41.ppm ship42.pbm \
+ship42.ppm ship43.pbm ship43.ppm ship44.pbm ship44.ppm ship45.pbm \
+ship45.ppm ship46.pbm ship46.ppm ship47.pbm ship47.ppm ship48.pbm \
+ship48.ppm ship49.pbm ship49.ppm ship50.pbm ship50.ppm ship51.pbm \
+ship51.ppm ship52.pbm ship52.ppm ship53.pbm ship53.ppm ship54.pbm \
+ship54.ppm ship55.pbm ship55.ppm ship56.pbm ship56.ppm ship57.pbm \
+ship57.ppm ship58.pbm ship58.ppm ship59.pbm ship59.ppm ship60.pbm \
+ship60.ppm ship61.pbm ship61.ppm ship62.pbm ship62.ppm ship63.pbm \
+ship63.ppm ship64.pbm ship64.ppm
+
+EXTRA_DIST = $(ship2_DATA)
diff --git a/kspaceduel/sprites/ship2/bullet.pbm b/kspaceduel/sprites/ship2/bullet.pbm
new file mode 100644
index 00000000..9f8fd80d
--- /dev/null
+++ b/kspaceduel/sprites/ship2/bullet.pbm
@@ -0,0 +1,5 @@
+P1
+3 3
+111
+111
+111
diff --git a/kspaceduel/sprites/ship2/bullet.ppm b/kspaceduel/sprites/ship2/bullet.ppm
new file mode 100644
index 00000000..33d6d702
--- /dev/null
+++ b/kspaceduel/sprites/ship2/bullet.ppm
@@ -0,0 +1,5 @@
+P6
+# HOTSPOT 1 1
+3 3
+255
+::–Y_¸::–Y_¸~~ÿY_¸::–Y_¸::– \ No newline at end of file
diff --git a/kspaceduel/sprites/ship2/mine0.pbm b/kspaceduel/sprites/ship2/mine0.pbm
new file mode 100644
index 00000000..b9f2a2de
--- /dev/null
+++ b/kspaceduel/sprites/ship2/mine0.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/mine0.ppm b/kspaceduel/sprites/ship2/mine0.ppm
new file mode 100644
index 00000000..85143cce
--- /dev/null
+++ b/kspaceduel/sprites/ship2/mine0.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/mine1.pbm b/kspaceduel/sprites/ship2/mine1.pbm
new file mode 100644
index 00000000..21a31590
--- /dev/null
+++ b/kspaceduel/sprites/ship2/mine1.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/mine1.ppm b/kspaceduel/sprites/ship2/mine1.ppm
new file mode 100644
index 00000000..12e725d1
--- /dev/null
+++ b/kspaceduel/sprites/ship2/mine1.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship00.pbm b/kspaceduel/sprites/ship2/ship00.pbm
new file mode 100644
index 00000000..a2c22134
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship00.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship00.ppm b/kspaceduel/sprites/ship2/ship00.ppm
new file mode 100644
index 00000000..31e9924c
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship00.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship01.pbm b/kspaceduel/sprites/ship2/ship01.pbm
new file mode 100644
index 00000000..bc9521af
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship01.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship01.ppm b/kspaceduel/sprites/ship2/ship01.ppm
new file mode 100644
index 00000000..8ecdfe06
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship01.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship02.pbm b/kspaceduel/sprites/ship2/ship02.pbm
new file mode 100644
index 00000000..d89221b8
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship02.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship02.ppm b/kspaceduel/sprites/ship2/ship02.ppm
new file mode 100644
index 00000000..5bb6af26
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship02.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship03.pbm b/kspaceduel/sprites/ship2/ship03.pbm
new file mode 100644
index 00000000..6c758512
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship03.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship03.ppm b/kspaceduel/sprites/ship2/ship03.ppm
new file mode 100644
index 00000000..cd34a9b7
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship03.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship04.pbm b/kspaceduel/sprites/ship2/ship04.pbm
new file mode 100644
index 00000000..cb480126
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship04.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship04.ppm b/kspaceduel/sprites/ship2/ship04.ppm
new file mode 100644
index 00000000..a1ec1250
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship04.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship05.pbm b/kspaceduel/sprites/ship2/ship05.pbm
new file mode 100644
index 00000000..8c52f726
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship05.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship05.ppm b/kspaceduel/sprites/ship2/ship05.ppm
new file mode 100644
index 00000000..facaf2c8
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship05.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship06.pbm b/kspaceduel/sprites/ship2/ship06.pbm
new file mode 100644
index 00000000..4e275f75
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship06.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship06.ppm b/kspaceduel/sprites/ship2/ship06.ppm
new file mode 100644
index 00000000..f773a627
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship06.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship07.pbm b/kspaceduel/sprites/ship2/ship07.pbm
new file mode 100644
index 00000000..9ce84d59
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship07.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship07.ppm b/kspaceduel/sprites/ship2/ship07.ppm
new file mode 100644
index 00000000..b7913b00
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship07.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship08.pbm b/kspaceduel/sprites/ship2/ship08.pbm
new file mode 100644
index 00000000..ffbfb0fa
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship08.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship08.ppm b/kspaceduel/sprites/ship2/ship08.ppm
new file mode 100644
index 00000000..79119eea
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship08.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship09.pbm b/kspaceduel/sprites/ship2/ship09.pbm
new file mode 100644
index 00000000..4a46f232
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship09.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship09.ppm b/kspaceduel/sprites/ship2/ship09.ppm
new file mode 100644
index 00000000..7e635876
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship09.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship10.pbm b/kspaceduel/sprites/ship2/ship10.pbm
new file mode 100644
index 00000000..e93a6c72
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship10.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship10.ppm b/kspaceduel/sprites/ship2/ship10.ppm
new file mode 100644
index 00000000..b3578f45
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship10.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship11.pbm b/kspaceduel/sprites/ship2/ship11.pbm
new file mode 100644
index 00000000..13d2416b
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship11.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship11.ppm b/kspaceduel/sprites/ship2/ship11.ppm
new file mode 100644
index 00000000..9df7a4c3
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship11.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship12.pbm b/kspaceduel/sprites/ship2/ship12.pbm
new file mode 100644
index 00000000..4b344578
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship12.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship12.ppm b/kspaceduel/sprites/ship2/ship12.ppm
new file mode 100644
index 00000000..7a6f532c
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship12.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship13.pbm b/kspaceduel/sprites/ship2/ship13.pbm
new file mode 100644
index 00000000..29502533
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship13.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship13.ppm b/kspaceduel/sprites/ship2/ship13.ppm
new file mode 100644
index 00000000..75ab41d6
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship13.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship14.pbm b/kspaceduel/sprites/ship2/ship14.pbm
new file mode 100644
index 00000000..becd3f01
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship14.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship14.ppm b/kspaceduel/sprites/ship2/ship14.ppm
new file mode 100644
index 00000000..753c615a
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship14.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship15.pbm b/kspaceduel/sprites/ship2/ship15.pbm
new file mode 100644
index 00000000..e30e9994
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship15.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship15.ppm b/kspaceduel/sprites/ship2/ship15.ppm
new file mode 100644
index 00000000..d12872ae
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship15.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship16.pbm b/kspaceduel/sprites/ship2/ship16.pbm
new file mode 100644
index 00000000..7e42c115
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship16.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship16.ppm b/kspaceduel/sprites/ship2/ship16.ppm
new file mode 100644
index 00000000..d0584030
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship16.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship17.pbm b/kspaceduel/sprites/ship2/ship17.pbm
new file mode 100644
index 00000000..295c72da
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship17.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship17.ppm b/kspaceduel/sprites/ship2/ship17.ppm
new file mode 100644
index 00000000..e2e164cb
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship17.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship18.pbm b/kspaceduel/sprites/ship2/ship18.pbm
new file mode 100644
index 00000000..290b436f
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship18.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship18.ppm b/kspaceduel/sprites/ship2/ship18.ppm
new file mode 100644
index 00000000..2e70ad30
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship18.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship19.pbm b/kspaceduel/sprites/ship2/ship19.pbm
new file mode 100644
index 00000000..b6749b15
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship19.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship19.ppm b/kspaceduel/sprites/ship2/ship19.ppm
new file mode 100644
index 00000000..473bf9a9
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship19.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship20.pbm b/kspaceduel/sprites/ship2/ship20.pbm
new file mode 100644
index 00000000..dc74a396
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship20.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship20.ppm b/kspaceduel/sprites/ship2/ship20.ppm
new file mode 100644
index 00000000..369de36e
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship20.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship21.pbm b/kspaceduel/sprites/ship2/ship21.pbm
new file mode 100644
index 00000000..c23a98f6
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship21.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship21.ppm b/kspaceduel/sprites/ship2/ship21.ppm
new file mode 100644
index 00000000..090ce9f0
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship21.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship22.pbm b/kspaceduel/sprites/ship2/ship22.pbm
new file mode 100644
index 00000000..0fad8c90
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship22.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship22.ppm b/kspaceduel/sprites/ship2/ship22.ppm
new file mode 100644
index 00000000..6991dd32
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship22.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship23.pbm b/kspaceduel/sprites/ship2/ship23.pbm
new file mode 100644
index 00000000..5862f439
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship23.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship23.ppm b/kspaceduel/sprites/ship2/ship23.ppm
new file mode 100644
index 00000000..250a3771
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship23.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship24.pbm b/kspaceduel/sprites/ship2/ship24.pbm
new file mode 100644
index 00000000..857b2116
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship24.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship24.ppm b/kspaceduel/sprites/ship2/ship24.ppm
new file mode 100644
index 00000000..55ac941b
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship24.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship25.pbm b/kspaceduel/sprites/ship2/ship25.pbm
new file mode 100644
index 00000000..b8884975
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship25.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship25.ppm b/kspaceduel/sprites/ship2/ship25.ppm
new file mode 100644
index 00000000..794fc038
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship25.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship26.pbm b/kspaceduel/sprites/ship2/ship26.pbm
new file mode 100644
index 00000000..badd42a3
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship26.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship26.ppm b/kspaceduel/sprites/ship2/ship26.ppm
new file mode 100644
index 00000000..cdc6ef50
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship26.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship27.pbm b/kspaceduel/sprites/ship2/ship27.pbm
new file mode 100644
index 00000000..393b3f05
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship27.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship27.ppm b/kspaceduel/sprites/ship2/ship27.ppm
new file mode 100644
index 00000000..4ec3cbd4
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship27.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship28.pbm b/kspaceduel/sprites/ship2/ship28.pbm
new file mode 100644
index 00000000..31139aa8
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship28.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship28.ppm b/kspaceduel/sprites/ship2/ship28.ppm
new file mode 100644
index 00000000..647923e1
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship28.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship29.pbm b/kspaceduel/sprites/ship2/ship29.pbm
new file mode 100644
index 00000000..6c2a656c
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship29.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship29.ppm b/kspaceduel/sprites/ship2/ship29.ppm
new file mode 100644
index 00000000..880526c1
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship29.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship30.pbm b/kspaceduel/sprites/ship2/ship30.pbm
new file mode 100644
index 00000000..b456646b
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship30.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship30.ppm b/kspaceduel/sprites/ship2/ship30.ppm
new file mode 100644
index 00000000..a367708c
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship30.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship31.pbm b/kspaceduel/sprites/ship2/ship31.pbm
new file mode 100644
index 00000000..51279992
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship31.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship31.ppm b/kspaceduel/sprites/ship2/ship31.ppm
new file mode 100644
index 00000000..f11ea682
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship31.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship32.pbm b/kspaceduel/sprites/ship2/ship32.pbm
new file mode 100644
index 00000000..231f442f
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship32.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship32.ppm b/kspaceduel/sprites/ship2/ship32.ppm
new file mode 100644
index 00000000..3710e5d8
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship32.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship33.pbm b/kspaceduel/sprites/ship2/ship33.pbm
new file mode 100644
index 00000000..967d7531
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship33.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship33.ppm b/kspaceduel/sprites/ship2/ship33.ppm
new file mode 100644
index 00000000..8d0fb3a3
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship33.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship34.pbm b/kspaceduel/sprites/ship2/ship34.pbm
new file mode 100644
index 00000000..935fc508
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship34.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship34.ppm b/kspaceduel/sprites/ship2/ship34.ppm
new file mode 100644
index 00000000..412ae1e3
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship34.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship35.pbm b/kspaceduel/sprites/ship2/ship35.pbm
new file mode 100644
index 00000000..7fc405ee
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship35.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship35.ppm b/kspaceduel/sprites/ship2/ship35.ppm
new file mode 100644
index 00000000..a7d53fd8
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship35.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship36.pbm b/kspaceduel/sprites/ship2/ship36.pbm
new file mode 100644
index 00000000..9e081991
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship36.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship36.ppm b/kspaceduel/sprites/ship2/ship36.ppm
new file mode 100644
index 00000000..f0bd791d
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship36.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship37.pbm b/kspaceduel/sprites/ship2/ship37.pbm
new file mode 100644
index 00000000..85d5a716
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship37.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship37.ppm b/kspaceduel/sprites/ship2/ship37.ppm
new file mode 100644
index 00000000..cf221325
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship37.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship38.pbm b/kspaceduel/sprites/ship2/ship38.pbm
new file mode 100644
index 00000000..97544c97
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship38.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship38.ppm b/kspaceduel/sprites/ship2/ship38.ppm
new file mode 100644
index 00000000..4b9c41a2
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship38.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship39.pbm b/kspaceduel/sprites/ship2/ship39.pbm
new file mode 100644
index 00000000..72485ed4
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship39.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship39.ppm b/kspaceduel/sprites/ship2/ship39.ppm
new file mode 100644
index 00000000..f920b9c5
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship39.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship40.pbm b/kspaceduel/sprites/ship2/ship40.pbm
new file mode 100644
index 00000000..05ce8d9e
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship40.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship40.ppm b/kspaceduel/sprites/ship2/ship40.ppm
new file mode 100644
index 00000000..982ca694
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship40.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship41.pbm b/kspaceduel/sprites/ship2/ship41.pbm
new file mode 100644
index 00000000..55556661
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship41.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship41.ppm b/kspaceduel/sprites/ship2/ship41.ppm
new file mode 100644
index 00000000..c75c12d7
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship41.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship42.pbm b/kspaceduel/sprites/ship2/ship42.pbm
new file mode 100644
index 00000000..f0bef294
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship42.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship42.ppm b/kspaceduel/sprites/ship2/ship42.ppm
new file mode 100644
index 00000000..1f402bf8
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship42.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship43.pbm b/kspaceduel/sprites/ship2/ship43.pbm
new file mode 100644
index 00000000..16040fa5
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship43.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship43.ppm b/kspaceduel/sprites/ship2/ship43.ppm
new file mode 100644
index 00000000..5151dde5
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship43.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship44.pbm b/kspaceduel/sprites/ship2/ship44.pbm
new file mode 100644
index 00000000..8cea22b3
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship44.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship44.ppm b/kspaceduel/sprites/ship2/ship44.ppm
new file mode 100644
index 00000000..12cac1d8
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship44.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship45.pbm b/kspaceduel/sprites/ship2/ship45.pbm
new file mode 100644
index 00000000..833b42b5
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship45.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship45.ppm b/kspaceduel/sprites/ship2/ship45.ppm
new file mode 100644
index 00000000..039ef873
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship45.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship46.pbm b/kspaceduel/sprites/ship2/ship46.pbm
new file mode 100644
index 00000000..74887081
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship46.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship46.ppm b/kspaceduel/sprites/ship2/ship46.ppm
new file mode 100644
index 00000000..9c274173
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship46.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship47.pbm b/kspaceduel/sprites/ship2/ship47.pbm
new file mode 100644
index 00000000..be47bb91
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship47.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship47.ppm b/kspaceduel/sprites/ship2/ship47.ppm
new file mode 100644
index 00000000..ab00ac53
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship47.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship48.pbm b/kspaceduel/sprites/ship2/ship48.pbm
new file mode 100644
index 00000000..0b2d3e6e
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship48.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship48.ppm b/kspaceduel/sprites/ship2/ship48.ppm
new file mode 100644
index 00000000..5ff7d24f
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship48.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship49.pbm b/kspaceduel/sprites/ship2/ship49.pbm
new file mode 100644
index 00000000..83ac8363
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship49.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship49.ppm b/kspaceduel/sprites/ship2/ship49.ppm
new file mode 100644
index 00000000..7ec6455d
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship49.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship50.pbm b/kspaceduel/sprites/ship2/ship50.pbm
new file mode 100644
index 00000000..20e5b229
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship50.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship50.ppm b/kspaceduel/sprites/ship2/ship50.ppm
new file mode 100644
index 00000000..a11cd0f0
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship50.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship51.pbm b/kspaceduel/sprites/ship2/ship51.pbm
new file mode 100644
index 00000000..948062b5
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship51.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship51.ppm b/kspaceduel/sprites/ship2/ship51.ppm
new file mode 100644
index 00000000..3974678c
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship51.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship52.pbm b/kspaceduel/sprites/ship2/ship52.pbm
new file mode 100644
index 00000000..bbb498ec
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship52.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship52.ppm b/kspaceduel/sprites/ship2/ship52.ppm
new file mode 100644
index 00000000..9b5075dc
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship52.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship53.pbm b/kspaceduel/sprites/ship2/ship53.pbm
new file mode 100644
index 00000000..51fcf071
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship53.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship53.ppm b/kspaceduel/sprites/ship2/ship53.ppm
new file mode 100644
index 00000000..27da47fa
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship53.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship54.pbm b/kspaceduel/sprites/ship2/ship54.pbm
new file mode 100644
index 00000000..7ed85a20
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship54.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship54.ppm b/kspaceduel/sprites/ship2/ship54.ppm
new file mode 100644
index 00000000..fb4373a1
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship54.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship55.pbm b/kspaceduel/sprites/ship2/ship55.pbm
new file mode 100644
index 00000000..97223e26
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship55.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship55.ppm b/kspaceduel/sprites/ship2/ship55.ppm
new file mode 100644
index 00000000..54939d95
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship55.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship56.pbm b/kspaceduel/sprites/ship2/ship56.pbm
new file mode 100644
index 00000000..49cf8e8a
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship56.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship56.ppm b/kspaceduel/sprites/ship2/ship56.ppm
new file mode 100644
index 00000000..b37e12f1
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship56.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship57.pbm b/kspaceduel/sprites/ship2/ship57.pbm
new file mode 100644
index 00000000..6b5b3922
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship57.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship57.ppm b/kspaceduel/sprites/ship2/ship57.ppm
new file mode 100644
index 00000000..0220769f
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship57.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship58.pbm b/kspaceduel/sprites/ship2/ship58.pbm
new file mode 100644
index 00000000..a669df91
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship58.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship58.ppm b/kspaceduel/sprites/ship2/ship58.ppm
new file mode 100644
index 00000000..b4e1fbe9
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship58.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship59.pbm b/kspaceduel/sprites/ship2/ship59.pbm
new file mode 100644
index 00000000..005b4bdf
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship59.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship59.ppm b/kspaceduel/sprites/ship2/ship59.ppm
new file mode 100644
index 00000000..ec1e44a7
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship59.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship60.pbm b/kspaceduel/sprites/ship2/ship60.pbm
new file mode 100644
index 00000000..9829ce5e
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship60.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship60.ppm b/kspaceduel/sprites/ship2/ship60.ppm
new file mode 100644
index 00000000..f66b15cc
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship60.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship61.pbm b/kspaceduel/sprites/ship2/ship61.pbm
new file mode 100644
index 00000000..b055eefe
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship61.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship61.ppm b/kspaceduel/sprites/ship2/ship61.ppm
new file mode 100644
index 00000000..c4fea47e
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship61.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship62.pbm b/kspaceduel/sprites/ship2/ship62.pbm
new file mode 100644
index 00000000..6378eec9
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship62.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship62.ppm b/kspaceduel/sprites/ship2/ship62.ppm
new file mode 100644
index 00000000..e88befbc
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship62.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship63.pbm b/kspaceduel/sprites/ship2/ship63.pbm
new file mode 100644
index 00000000..4da971a2
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship63.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship63.ppm b/kspaceduel/sprites/ship2/ship63.ppm
new file mode 100644
index 00000000..27bea663
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship63.ppm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship64.pbm b/kspaceduel/sprites/ship2/ship64.pbm
new file mode 100644
index 00000000..a144ef6b
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship64.pbm
Binary files differ
diff --git a/kspaceduel/sprites/ship2/ship64.ppm b/kspaceduel/sprites/ship2/ship64.ppm
new file mode 100644
index 00000000..954fc1b2
--- /dev/null
+++ b/kspaceduel/sprites/ship2/ship64.ppm
Binary files differ
diff --git a/kspaceduel/sprites/sun/Makefile.am b/kspaceduel/sprites/sun/Makefile.am
new file mode 100644
index 00000000..0e50b0e2
--- /dev/null
+++ b/kspaceduel/sprites/sun/Makefile.am
@@ -0,0 +1,3 @@
+sundir = $(kde_datadir)/kspaceduel/sprites/sun
+sun_DATA = sun.ppm sun.pbm
+EXTRA_DIST = $(sun_DATA)
diff --git a/kspaceduel/sprites/sun/sun.pbm b/kspaceduel/sprites/sun/sun.pbm
new file mode 100644
index 00000000..fc4eda67
--- /dev/null
+++ b/kspaceduel/sprites/sun/sun.pbm
Binary files differ
diff --git a/kspaceduel/sprites/sun/sun.ppm b/kspaceduel/sprites/sun/sun.ppm
new file mode 100644
index 00000000..27494a9a
--- /dev/null
+++ b/kspaceduel/sprites/sun/sun.ppm
Binary files differ
diff --git a/kspaceduel/structs.h b/kspaceduel/structs.h
new file mode 100644
index 00000000..e58b182a
--- /dev/null
+++ b/kspaceduel/structs.h
@@ -0,0 +1,46 @@
+#ifndef __SP_STRUCTS_H
+#define __SP_STRUCTS_H
+
+struct SConfig
+{
+ double gamespeed,gravity,acc,energyNeed,sunEnergy,rotationSpeed,
+ mineActivateTime,mineFuel,shotSpeed,shotEnergyNeed,mineEnergyNeed,
+ rotationEnergyNeed,startPosX,startPosY,startVelX,startVelY,
+ bulletLifeTime,mineReloadTime,bulletReloadTime;
+ unsigned bulletDamage,shipDamage,mineDamage,maxBullets,maxMines;
+ double powerupLifeTime, powerupRefreshTime;
+ double powerupEnergyAmount;
+ unsigned powerupShieldAmount;
+};
+
+bool operator!=(const SConfig &s1, const SConfig &s2);
+
+#define predefinedConfigNum 4
+const SConfig predefinedConfig[]={{1.0, 2200.0, 0.2, 1.0, 9000.0, 1.0,
+ 15.0, 65.0, 3.0, 10.0, 5.0,
+ 0.2, -130.0, -100.0, 3.0, -1.7,
+ 500.0,10.0,10.0,
+ 20, 50, 30, 5, 3,
+ 400.0, 800.0, 50, 30},
+ {1.0, 2200.0, 0.2, 1.0, 9000.0, 1.0,
+ 15.0, 40.0, 5.0, 20.0, 10.0,
+ 0.2, -50.0, -150.0, 3.5, 0.9,
+ 500.0,10.0,10.0,
+ 20, 50, 30, 6, 2,
+ 400.0, 800.0, 50, 30},
+ {1.3, 2200.0, 0.2, 1.0, 13000.0, 1.0,
+ 15.0, 50.0, 4.0, 10.0, 10.0,
+ 0.2, -50.0, -150.0, 3.2, -0.9,
+ 400.0,10.0,10.0,
+ 20, 50, 30, 7, 5,
+ 400.0, 800.0, 50, 30},
+ {1.0, 2200.0, 0.2, 1.0, 9000.0, 1.0,
+ 15.0, 40.0, 5.0, 60.0, 50.0,
+ 0.4, -50.0, -170.0, 3.0, -0.5,
+ 500.0,10.0,10.0,
+ 20, 50, 30, 5, 3,
+ 400.0, 800.0, 50, 30}};
+const char predefinedConfigName[predefinedConfigNum][15]=
+{"Default","Bullet","Chaos","Lack of Energy"};
+
+#endif
diff --git a/kspaceduel/topwidget.cpp b/kspaceduel/topwidget.cpp
new file mode 100644
index 00000000..9f275848
--- /dev/null
+++ b/kspaceduel/topwidget.cpp
@@ -0,0 +1,144 @@
+#include <klocale.h>
+#include <kaccel.h>
+#include <kkeydialog.h>
+#include <kaction.h>
+#include <kstdgameaction.h>
+#include <qlayout.h>
+#include <kstatusbar.h>
+
+#include "topwidget.h"
+#include "mainview.h"
+#include "playerinfo.h"
+
+MyTopLevelWidget::MyTopLevelWidget()
+{
+ initGameWidgets();
+ initStatusBar( );
+ initActions( );
+ setupGUI( );
+}
+
+void MyTopLevelWidget::initGameWidgets( ){
+ QWidget *w = new QWidget(this);
+
+ playerinfo[0]=new PlayerInfo(0,w);
+ playerinfo[1]=new PlayerInfo(1,w);
+ playfield=new MyMainView(w);
+
+ QBoxLayout *toplayout=new QHBoxLayout(w);
+ toplayout->addWidget(playerinfo[0]);
+ toplayout->addWidget(playfield);
+ toplayout->addWidget(playerinfo[1]);
+ toplayout->activate();
+
+ playfield->setFocusPolicy(QWidget::StrongFocus);
+ playfield->setFocus();
+
+ QObject::connect(playfield,SIGNAL(energy(int,int)),
+ SLOT(energy(int,int)));
+ QObject::connect(playfield,SIGNAL(hitPoints(int,int)),
+ SLOT(hitPoints(int,int)));
+ QObject::connect(playfield,SIGNAL(wins(int,int)),SLOT(wins(int,int)));
+ QObject::connect(playfield,SIGNAL(setStatusText(const QString &,int)),
+ SLOT(setStatusText(const QString &,int)));
+
+ setCentralWidget(w);
+}
+
+void MyTopLevelWidget::energy(int pn,int en)
+{
+ playerinfo[pn]->setEnergy(en);
+}
+
+void MyTopLevelWidget::hitPoints(int pn,int hp)
+{
+ playerinfo[pn]->setHitpoints(hp);
+}
+
+void MyTopLevelWidget::wins(int pn,int w)
+{
+ playerinfo[pn]->setWins(w);
+}
+
+void MyTopLevelWidget::initActions( )
+{
+ KStdGameAction::quit(this, SLOT(close()), actionCollection());
+ KStdGameAction::gameNew(playfield, SLOT(newGame()), actionCollection());
+ ( void )new KAction( i18n( "&New Round" ), "spnewround",
+ CTRL + Key_R, playfield, SLOT( newRound( ) ),
+ actionCollection( ), "new_round" );
+ MyMainView::pauseAction =
+ KStdGameAction::pause(playfield, SLOT(togglePause()), actionCollection());
+ MyMainView::pauseAction->setChecked( false );
+ KAction* gameStart = new KAction( i18n( "Start" ), GAME_START_SHORTCUT,
+ playfield, SLOT( start( ) ), actionCollection( ), "game_start" );
+
+ KStdAction::preferences(playfield, SLOT(gameSetup()), actionCollection());
+
+ KAccel* acc = new KAccel(this);
+ gameStart->plugAccel(acc);
+
+ // Default keys
+ actionCollection()->setAutoConnectShortcuts(false);
+ KAction* ac;
+ ac = new KAction(i18n("Player 1 Rotate Left"), Key_S, 0, 0,
+ actionCollection(), "P1KeyLeft");
+ ac->setEnabled( false );
+ ac = new KAction(i18n("Player 1 Rotate Right"), Key_F, 0, 0,
+ actionCollection(), "P1KeyRight");
+ ac->setEnabled( false );
+ ac = new KAction(i18n("Player 1 Accelerate"), Key_E, 0, 0,
+ actionCollection(), "P1KeyAcc");
+ ac->setEnabled( false );
+ ac = new KAction(i18n("Player 1 Shot"), Key_D, 0, 0,
+ actionCollection(), "P1Shot");
+ ac->setEnabled( false );
+ ac = new KAction(i18n("Player 1 Mine"), Key_A, 0, 0,
+ actionCollection(), "P1Mine");
+ ac->setEnabled( false );
+
+ ac = new KAction(i18n("Player 2 Rotate Left"), Key_Left, 0, 0,
+ actionCollection(), "P2KeyLeft");
+ ac->setEnabled( false );
+ ac = new KAction(i18n("Player 2 Rotate Right"), Key_Right, 0, 0,
+ actionCollection(), "P2KeyRight");
+ ac->setEnabled( false );
+ ac = new KAction(i18n("Player 2 Accelerate"), Key_Up, 0, 0,
+ actionCollection(), "P2KeyAcc");
+ ac->setEnabled( false );
+ ac = new KAction(i18n("Player 2 Shot"), Key_Down, 0, 0,
+ actionCollection(), "P2Shot");
+ ac->setEnabled( false );
+ ac = new KAction(i18n("Player 2 Mine"), Key_Insert, 0, 0,
+ actionCollection(), "P2Mine");
+ ac->setEnabled( false );
+
+ actionCollection()->setAutoConnectShortcuts(true);
+ playfield->setActionCollection(actionCollection());
+}
+
+void MyTopLevelWidget::initStatusBar( )
+{
+ statusBar( )->insertItem(i18n(" paused "),IDS_PAUSE,1);
+ statusBar( )->insertItem(" ",IDS_MAIN,1);
+ statusBar( )->insertItem("",42,2);
+}
+
+void MyTopLevelWidget::start()
+{
+ playfield->newGame();
+ playfield->newRound();
+}
+
+void MyTopLevelWidget::setStatusText(const QString & str,int id)
+{
+ statusBar( )->changeItem(str,id);
+}
+
+void MyTopLevelWidget::keySetup()
+{
+ playfield->pause();
+ KKeyDialog::configure( actionCollection( ), this, true );
+}
+
+#include "topwidget.moc"
diff --git a/kspaceduel/topwidget.h b/kspaceduel/topwidget.h
new file mode 100644
index 00000000..39c0f5d3
--- /dev/null
+++ b/kspaceduel/topwidget.h
@@ -0,0 +1,33 @@
+#ifndef __MY_TOP_WIDGET_H
+#define __MY_TOP_WIDGET_H
+
+#include <kmainwindow.h>
+
+class PlayerInfo;
+class MyMainView;
+
+class MyTopLevelWidget:public KMainWindow
+{
+ Q_OBJECT
+public:
+ MyTopLevelWidget();
+ void start();
+
+private slots:
+ void setStatusText(const QString & text,int id);
+ void keySetup();
+ void energy(int pn,int en);
+ void hitPoints(int pn,int hp);
+ void wins(int pn,int w);
+
+protected:
+ void initActions( );
+ void initStatusBar( );
+ void initGameWidgets();
+
+private:
+ PlayerInfo *playerinfo[2];
+ MyMainView *playfield;
+};
+
+#endif
diff --git a/kspaceduel/version.h b/kspaceduel/version.h
new file mode 100644
index 00000000..531f6c0a
--- /dev/null
+++ b/kspaceduel/version.h
@@ -0,0 +1 @@
+#define KSPACEDUEL_VERSION "1.1"