debian/0000775000000000000000000000000011774405113007173 5ustar debian/compat0000664000000000000000000000000211774376571010410 0ustar 7 debian/rules0000775000000000000000000000100611774404555010261 0ustar #!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk DEB_DH_INSTALLCHANGELOGS_ARGS := CHANGELOG.txt DEB_INSTALL_DOCS_ALL := -X README makebuilddir/krank:: mkdir -p install convert -resize 32x32 levels/images/icon64x64.png install/krank.xpm install -m 0755 debian/krank-debian-start install/krank binary-post-install/krank:: perl -pi -e 's/Debian revision(?=\))/$$&: $(DEB_VERSION)/' \ debian/krank/usr/lib/krank/k.py clean:: rm -fr install *.cdbs-config_list find -type f -name \*.pyc -delete debian/source/0000775000000000000000000000000011774404602010475 5ustar debian/source/format0000664000000000000000000000001511774404602011704 0ustar 3.0 (quilt) debian/control0000664000000000000000000000147511774404550010611 0ustar Source: krank Section: games Priority: extra Maintainer: Dmitry E. Oboukhov Uploaders: Debian Games Team Standards-Version: 3.9.3 Build-Depends: debhelper (>=7.0), cdbs Build-Depends-Indep: imagemagick Vcs-Browser: http://git.debian.org/?p=collab-maint/krank.git;a=summary Vcs-Git: git://git.debian.org/collab-maint/krank.git Homepage: http://krank.sourceforge.net/ Package: krank Architecture: all Depends: python-pygame, python-yaml, ttf-dejavu, ${misc:Depends} Description: game of dexterity where you match stones together krank is a game of dexterity, being somewhere between Breakout and billiard, where the aim of each level is to shove floating stones towards compatible static stones. You control a short chain of stones with your mouse to achieve that. debian/krank.60000664000000000000000000000546611774376571010422 0ustar .\" vim: et sw=4 ts=4 tw=70 : .TH "krank" "6" "" "krank" "" .SH "NAME" Krank \- is a game of dexterity where you match stones together. .SH "SYNOPSIS" .B krank .B krank -f - start in fullscreen mode .B krank -w - start in windowed mode .B krank -s 800x600 - start in screen with size 800x600 .B krank -f -s 800x600 - start in screen with size 800x600 and in fullscreen mode .B krank -w -s 800x600 - start in screen with size 800x600 and in windowed mode .B krank -h - display the helpscreen. .SH "DESCRIPTION" krank is a game of dexterity, being somewhere between Breakout and billiard, where the aim of each level is to shove floating stones towards compatible static stones. You control a short chain of stones with your mouse to achieve that. .B Krank contains the following elements: .RS 4 .B the snake .RS 4 \- follows your mouse or the analog stick of your joypad. .RE .B the balls .RS 4 \- move if you touch them with the snake or another ball. .RE .B the links .RS 4 \- are like balls, but they bond together if they touch each other. .RE .B the stones .RS 4 \- never move and do nothing else. .RE .B the magnets .RS 4 \- unmovable themselves, attract everything that moves. the number of circles rotating around them indicates how many items may get captured in them. A magnet will vanish if: .RS 4 - it captured at least as many balls as circles are rotating around it; - all the captured balls have the same color as the magnet; - it stayed for 3 seconds in the above condition. .RE If a magnet is fully loaded, but includes links or balls of a different color, it will explode, but not vanish. .RE .B the anchors .RS 4 \- never move, but bond together with links. the number of circles rotating around them indicates how many links may bond with them. An anchor will vanish if: .RS 4 - it is connected to as many other anchors as circles are rotating around it; - all the connected anchors and links have the same color as the anchor; - all other anchors of the same color are fully connected. .RE If all the above conditions are valid for 3 seconds, those anchors will be removed. If an anchor is connected to another anchor, but the connecting chain includes links of a different color, it will explode, but not vanish. .RE A connection between two links will be broken if one link is touched by a ball or captured by a magnet. For each level you solve, there will be two more levels available to play, so you can skip levels you don't like. .RE .SH AIM The aim of each level is to remove all anchors and magnets. .SH CONTROLS .B or .B 'p' or .B - Game pause. .B - Exit from level/game .B + - Quick exit .B - Next level .B - Previous Level .B / - Increase/decrease music volume. .B +/ - Increase/decrease sound volume. debian/krank-debian-start0000664000000000000000000000021211774376571012611 0ustar #!/bin/sh cwd=`pwd` cd /usr/share/games/krank PYTHONPATH="/usr/lib/krank:.:$PYTHONPATH" \ python /usr/lib/krank/Main.py "$@" cd $cwd debian/watch0000664000000000000000000000016711774376571010247 0ustar version=3 opts="dversionmangle=s/^0\.(.*?)\+dfsg\d/0$1/" \ http://sf.net/krank/krank-(\d+(?:\.\d+)*)\.tar\.(?:gz|bz2) debian/krank.desktop0000664000000000000000000000043211774376571011712 0ustar [Desktop Entry] Encoding=UTF-8 Name=Krank Categories=Game;LogicGame;ArcadeGame Comment=a little casual game Comment[ru]=небольшая казуальная игрушка Exec=krank Icon=/usr/share/games/krank/krank.xpm Terminal=false Type=Application StartupNotify=false debian/changelog0000664000000000000000000001015111774404744011054 0ustar krank (0.7+dfsg2-3) unstable; urgency=low * Fixed description, closes: #628129. * Transform package to 3.0 format. -- Dmitry E. Oboukhov Tue, 03 Jul 2012 00:50:55 +0400 krank (0.7+dfsg2-2) unstable; urgency=low * Added DGT to uploaders list. * Standards-Version bumped to 3.8.3. -- Dmitry E. Oboukhov Mon, 19 Oct 2009 14:11:40 +0400 krank (0.7+dfsg2-1) unstable; urgency=low * Orig tar.gz has been repacked (now it can start from src). * Fixed level005/hard, now it is completable, closes: #523205. -- Dmitry E. Oboukhov Sun, 12 Apr 2009 11:17:18 +0400 krank (0.7+dfsg1-13) unstable; urgency=low * Game pause: * 'p' key, uppercase or lower case; * Pause key; * Lose focus (switching keyboard or mouse focus to another window); Pause when "moving the mouse outside the krank window" is a wrong way: If we game in windowed mode, we often move the mouse outside the krank window. closes: #519659. -- Dmitry E. Oboukhov Sat, 14 Mar 2009 22:47:59 +0300 krank (0.7+dfsg1-12) unstable; urgency=low * Added krank.desktop, closes: #519499. * Begining this revision krank saves difficulty level between starts. * Replaced default pygame titile to 'Krank', closes: #519658. * Updated manpage, use for game pause, closes: #519659. -- Dmitry E. Oboukhov Sat, 14 Mar 2009 15:43:41 +0300 krank (0.7+dfsg1-11) experimental; urgency=low * Converted ~/.krankcfg in YAML format, closes: #519501. -- Dmitry E. Oboukhov Fri, 13 Mar 2009 14:46:20 +0300 krank (0.7+dfsg1-10) unstable; urgency=low [ Gerfried Fuchs ] * Fix Homepage URL in control file. [ unera ] * Added command-line options to select video mode and window/full-screen, closes: #519500. * Added arguments support in the startup script. -- Dmitry E. Oboukhov Fri, 13 Mar 2009 11:20:31 +0300 krank (0.7+dfsg1-9) unstable; urgency=low * Added Fullscreen toggle-switcher into the game, closes: #519399. -- Dmitry E. Oboukhov Thu, 12 Mar 2009 15:15:12 +0300 krank (0.7+dfsg1-8) unstable; urgency=low * Fixed watch, closes: #519279. * imagemagik has been moved from Build-depends to Build-depends-indep. -- Dmitry E. Oboukhov Thu, 12 Mar 2009 10:32:28 +0300 krank (0.7+dfsg1-7) unstable; urgency=low * Added manpage. -- Dmitry E. Oboukhov Mon, 09 Mar 2009 22:34:48 +0300 krank (0.7+dfsg1-6) unstable; urgency=low * Fixed mistake in the previous revision: level does not be more than count of levels. -- Dmitry E. Oboukhov Mon, 09 Mar 2009 16:11:36 +0300 krank (0.7+dfsg1-5) unstable; urgency=low * Fixed following level by level for hard/extreme. * Fixed count of particles in level 2. -- Dmitry E. Oboukhov Mon, 09 Mar 2009 16:01:41 +0300 krank (0.7+dfsg1-4) unstable; urgency=low * Fixed debian/watch. * Fixed short-description, closes: #518781. * Added '.' (/usr/share/games/krank) to PYTHONPATH variable, closes: #518825. * Removed irrelevant README from /usr/share/doc/krank. -- Dmitry E. Oboukhov Sun, 08 Mar 2009 19:29:51 +0300 krank (0.7+dfsg1-3) unstable; urgency=low * Fixed crash when level is 'Extreme'. -- Dmitry E. Oboukhov Sun, 08 Mar 2009 02:19:27 +0300 krank (0.7+dfsg1-2) unstable; urgency=low * Added VCS-* and Homepage records to debian/control. * GIT-repo has been created on git.debian.org. * Fixed debian/watch and a few lintian warnings. * Used qa.debian.org redirector for debian/watch. -- Dmitry E. Oboukhov Sun, 01 Feb 2009 19:35:04 +0300 krank (0.7+dfsg1-1) unstable; urgency=low * All images with unknown licension were replaced. * Font has been replaced to ttf-dejavu. * Original font and images were dropped from orig.tar.gz. -- Dmitry E. Oboukhov Thu, 22 Jan 2009 03:03:14 +0300 krank (0.7-1) unstable; urgency=low * Initial release. (Closes: #511040) -- Dmitry E. Oboukhov Tue, 11 Jan 2009 16:20:21 +0300 debian/krank.menu0000664000000000000000000000021011774376571011177 0ustar ?package(krank):needs="x11" section="Games/Blocks"\ title="Krank" \ command="krank" \ icon="/usr/share/games/krank/krank.xpm" debian/copyright0000664000000000000000000000077711774376571011160 0ustar This package was debianized by Dmitry E. Oboukhov on Tue Jan 6 17:14:43 MSK 2009. It was downloaded from: http://sourceforge.net/projects/krank/ Upstream autor: Thorsten Kohnhorst License: source code: Public Domain images: All images with unknown license were replaced. Author of new images: Slava Anishenko License: Public Domain The Debian packaging is (C) 2008, Dmitry E. Oboukhov and is licensed under the GPLv3, see `/usr/share/common-licenses/GPL-3'. debian/krank.manpages0000664000000000000000000000001711774376571012033 0ustar debian/krank.6 debian/patches/0000775000000000000000000000000011774404524010627 5ustar debian/patches/unera.patch0000664000000000000000000011600311774404510012756 0ustar diff --git a/levels/bonus001.py b/levels/bonus001.py index 1da8fff..c8b82dd 100644 --- a/levels/bonus001.py +++ b/levels/bonus001.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('water') k.sound.music() - k.world.setBackground('Big-E-Mr-G09') + k.world.setBackground('bonus-01') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level001.py b/levels/level001.py index c9bb5d7..cd5b42a 100644 --- a/levels/level001.py +++ b/levels/level001.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('nasirkhan02') + k.world.setBackground('level-01') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level002.py b/levels/level002.py index 2ee1a56..8d34489 100644 --- a/levels/level002.py +++ b/levels/level002.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('summer') k.sound.music() - k.world.setBackground('tanakawho04') + k.world.setBackground('level-02') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height @@ -31,10 +31,5 @@ def init(): k.particles.stoneCircle((w*1/3, cy), 'white', k.config.stage*2, 80) k.particles.stoneCircle((w*2/3, cy), 'white', k.config.stage*2, 80) - k.particles.ballCircle((w*1/3, cy), 'white', k.config.stage*2, 80, -math.pi/2) - k.particles.ballCircle((w*2/3, cy), 'white', k.config.stage*2, 80, -math.pi/2) - - k.particles.ballCircle((w*2/3, cy), 'white', 5, 10) - # simple player k.player.setPos((cx, cy-120)) diff --git a/levels/level003.py b/levels/level003.py index a836516..b1b38a8 100644 --- a/levels/level003.py +++ b/levels/level003.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('industry') k.sound.music() - k.world.setBackground('nasirkhan01') + k.world.setBackground('level-03') k.level.linkColor = (0,0,0) cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level004.py b/levels/level004.py index df60dd1..e7d970b 100644 --- a/levels/level004.py +++ b/levels/level004.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('Big-E-Mr-G02') + k.world.setBackground('level-04') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level005.py b/levels/level005.py index 5e22e02..ea2e8b3 100644 --- a/levels/level005.py +++ b/levels/level005.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('water') k.sound.music() - k.world.setBackground('GaryP03') + k.world.setBackground('level-05') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height xd = 170 @@ -19,7 +19,10 @@ def init(): for i in range(len(parts)): k.particles.add(Particle({'pos': parts[i], 'color': i < 2 and 'blue' or 'white'})) else: - num = (k.config.stage-1)*3 + if k.config.stage == 2: + num = 4 + else: + num = (k.config.stage-1)*3 k.particles.ballCircle((cx-xd, cy), 'white', num, 150) k.particles.ballCircle((cx+xd, cy), 'blue', num, 150) diff --git a/levels/level006.py b/levels/level006.py index 39bdb6d..0ce2d99 100644 --- a/levels/level006.py +++ b/levels/level006.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('summer') k.sound.music() - k.world.setBackground('tanakawho05') + k.world.setBackground('level-06') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level007.py b/levels/level007.py index c788b72..4b05815 100644 --- a/levels/level007.py +++ b/levels/level007.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('summer') k.sound.music() - k.world.setBackground('tanakawho01') + k.world.setBackground('level-07') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level008.py b/levels/level008.py index 949070f..5acff22 100644 --- a/levels/level008.py +++ b/levels/level008.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('industry') k.sound.music() - k.world.setBackground('somadjinn03') + k.world.setBackground('level-08') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level009.py b/levels/level009.py index 3208aab..f189756 100644 --- a/levels/level009.py +++ b/levels/level009.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('water') k.sound.music() - k.world.setBackground('Big-E-Mr-G03') + k.world.setBackground('level-09') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level010.py b/levels/level010.py index 9368d2f..dee89ee 100644 --- a/levels/level010.py +++ b/levels/level010.py @@ -7,7 +7,7 @@ from Effect import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('IHP03') + k.world.setBackground('level-10') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level011.py b/levels/level011.py index 6b36432..af3e6ff 100644 --- a/levels/level011.py +++ b/levels/level011.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('industry') k.sound.music() - k.world.setBackground('IHP05') + k.world.setBackground('level-11') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level012.py b/levels/level012.py index 26a4d39..f8e3371 100644 --- a/levels/level012.py +++ b/levels/level012.py @@ -7,7 +7,7 @@ from Effect import * def init(): k.sound.loadTheme('water') k.sound.music() - k.world.setBackground('somadjinn01') + k.world.setBackground('level-12') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height @@ -47,4 +47,4 @@ def init(): pos += (w*3/24, h*3/24) k.player.setPos(pos) - \ No newline at end of file + diff --git a/levels/level013.py b/levels/level013.py index 4a62dfd..193e01c 100644 --- a/levels/level013.py +++ b/levels/level013.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('industry') k.sound.music() - k.world.setBackground('tanakawho02') + k.world.setBackground('level-13') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height xd = 150 diff --git a/levels/level014.py b/levels/level014.py index 8d38ab5..65a97fb 100644 --- a/levels/level014.py +++ b/levels/level014.py @@ -6,7 +6,7 @@ from Part import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('GaryP01') + k.world.setBackground('level-14') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level015.py b/levels/level015.py index f9fe806..f25ca86 100644 --- a/levels/level015.py +++ b/levels/level015.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('industry') k.sound.music() - k.world.setBackground('kahanaboy06') + k.world.setBackground('level-15') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level016.py b/levels/level016.py index ce5e255..d95f5e6 100644 --- a/levels/level016.py +++ b/levels/level016.py @@ -6,7 +6,7 @@ from Part import * def init(): k.sound.loadTheme('water') k.sound.music() - k.world.setBackground('OzBandit01') + k.world.setBackground('level-16') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height @@ -27,4 +27,4 @@ def init(): k.player.setPos((w/2, cy+yd)) - \ No newline at end of file + diff --git a/levels/level017.py b/levels/level017.py index 03bb2c0..43b6df3 100644 --- a/levels/level017.py +++ b/levels/level017.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('somadjinn02') + k.world.setBackground('level-17') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level018.py b/levels/level018.py index b1c5d13..adec452 100644 --- a/levels/level018.py +++ b/levels/level018.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('water') k.sound.music() - k.world.setBackground('nasirkhan03') + k.world.setBackground('level-18') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level019.py b/levels/level019.py index 5e674d1..36054ac 100644 --- a/levels/level019.py +++ b/levels/level019.py @@ -6,7 +6,7 @@ from Part import * def init(): k.sound.loadTheme('summer') k.sound.music() - k.world.setBackground('tanakawho03') + k.world.setBackground('level-19') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level020.py b/levels/level020.py index 5c74ab0..e2d101d 100644 --- a/levels/level020.py +++ b/levels/level020.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('industry') k.sound.music() - k.world.setBackground('GaryP04') + k.world.setBackground('level-20') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level021.py b/levels/level021.py index 9bab7c9..b6038c2 100644 --- a/levels/level021.py +++ b/levels/level021.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('tanakawho07') + k.world.setBackground('level-21') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level022.py b/levels/level022.py index 1f24084..88b7c20 100644 --- a/levels/level022.py +++ b/levels/level022.py @@ -6,7 +6,7 @@ from Part import * def init(): k.sound.loadTheme('summer') k.sound.music() - k.world.setBackground('GaryP02') + k.world.setBackground('level-22') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level023.py b/levels/level023.py index ceae74d..1323562 100644 --- a/levels/level023.py +++ b/levels/level023.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('summer') k.sound.music() - k.world.setBackground('darkmatter01') + k.world.setBackground('level-23') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level024.py b/levels/level024.py index 28dd402..fe10c61 100644 --- a/levels/level024.py +++ b/levels/level024.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('Big-E-Mr-G05') + k.world.setBackground('level-24') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level025.py b/levels/level025.py index 566ff2b..f6411d7 100644 --- a/levels/level025.py +++ b/levels/level025.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('water') k.sound.music() - k.world.setBackground('Big-E-Mr-G08') + k.world.setBackground('level-25') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level026.py b/levels/level026.py index 75796ff..4b386cb 100644 --- a/levels/level026.py +++ b/levels/level026.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('kahanaboy05') + k.world.setBackground('level-26') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level027.py b/levels/level027.py index d3f688f..df6575b 100644 --- a/levels/level027.py +++ b/levels/level027.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('industry') k.sound.music() - k.world.setBackground('IHP02') + k.world.setBackground('level-27') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level028.py b/levels/level028.py index 5075b10..3b569f9 100644 --- a/levels/level028.py +++ b/levels/level028.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('summer') k.sound.music() - k.world.setBackground('Big-E-Mr-G04') + k.world.setBackground('level-28') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level029.py b/levels/level029.py index 1693fad..ecf1da6 100644 --- a/levels/level029.py +++ b/levels/level029.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('space') k.sound.music() - k.world.setBackground('kahanaboy07') + k.world.setBackground('level-29') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/level030.py b/levels/level030.py index 0bb74b3..b64d82b 100644 --- a/levels/level030.py +++ b/levels/level030.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('summer') k.sound.music() - k.world.setBackground('tanakawho06') + k.world.setBackground('level-30') cx, cy, w, h = k.world.rect.centerx, k.world.rect.centery, k.world.rect.width, k.world.rect.height diff --git a/levels/menu.py b/levels/menu.py index 34c57f1..2152302 100644 --- a/levels/menu.py +++ b/levels/menu.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('menu') k.sound.music('space.ogg') - k.world.setBackground('kahanaboy01') + k.world.setBackground('menu') k.world.darken(70) # player diff --git a/levels/menu_credits.py b/levels/menu_credits.py index c846638..8166ad5 100644 --- a/levels/menu_credits.py +++ b/levels/menu_credits.py @@ -7,7 +7,7 @@ from Tools import * def init(): k.sound.loadTheme('menu') k.sound.music('water.ogg') - k.world.setBackground('IHP01') + k.world.setBackground('menu-credits') # simple player k.player.setPos(k.world.rect.center) k.player.setTailNum(2) @@ -16,22 +16,16 @@ def init(): c, h = k.world.rect.centerx, k.world.rect.height drawText('Credits', (c, h*4.0/24.0), color=(0,0,0), valign='center') - drawText('Code by monsterkodi', (c, h*6/28), color=(0,0,0), size='normal', valign='center') - drawText('Sound by legoluft', (c, h*7/28), color=(0,0,0), size='normal', valign='center') - drawText('Images', (c, h*8/24), color=(0,0,0), valign='center') - credits = ["Big-E-Mr-G", "darkmatter", "*GaryP*", "IHP", "kahanaboy", "nasirkhan", "OzBandit", "somadjinn", "tanakawho"] - - index = 1 - for text in credits: - - drawText(text, (k.world.rect.centerx, h*(8/24.0+index/28.0)), size='normal', color=(0,0,0)) - index += 1 + drawText('Code by monsterkodi', (c, h*6/20), color=(0,0,0), size='normal', valign='center') + drawText('Sound by legoluft', (c, h*7/20), color=(0,0,0), size='normal', valign='center') + drawText('Images by Slava Anishenko', (c, h*8/20), color=(0,0,0), size='normal', valign='center') + drawText('Debianized by Dmitry E. Oboukhov', (c, h*9/20), color=(0,0,0), size='normal', valign='center') + drawText('Thanks for Nata Karpenko', (c, h*10/20), color=(0,0,0), size='normal', valign='center') - drawText('Font by Nick Curtis', (c, h*21/28), color=(0,0,0), size='normal', valign='center') - drawText('Version ' + k.VERSION, (c, h*23/28), color=(220,209,180), size='tiny', valign='center') + drawText('Version ' + k.VERSION, (c, h*23/20), color=(220,209,180), size='tiny', valign='center') k.particles.add(Switch({ 'text': 'Back', 'align': 'bottom', 'action': 'k.level.menuExit()', 'size': 'small', - 'pos': vector((c, h*7/8))})) \ No newline at end of file + 'pos': vector((c, h*7/8))})) diff --git a/levels/menu_levels.py b/levels/menu_levels.py index 908842b..0a2e6d6 100644 --- a/levels/menu_levels.py +++ b/levels/menu_levels.py @@ -4,7 +4,7 @@ from Part import * def init(): k.sound.loadTheme('menu') - k.world.setBackground('IHP06') + k.world.setBackground('menu-levels') cx, w, h = k.world.rect.centerx, k.world.rect.width, k.world.rect.height @@ -20,7 +20,7 @@ def init(): row, col = math.floor((i%cols))+1.5, math.floor((i/cols))+0.8 pos.append((row*w/(cols+2), col*h/4.7)) - icon = pygame.image.load('levels/icons/level%03d.tga' % (i+1)) + icon = pygame.image.load('levels/unera-icons/level%03d.tga' % (i+1)) if h < 768: icon = pygame.transform.scale(icon, (88, 66)) icons.append(icon) @@ -81,4 +81,4 @@ def init(): k.screen.blit(k.world.image, k.world.rect) pygame.display.update() - \ No newline at end of file + diff --git a/levels/menu_levels2.py b/levels/menu_levels2.py index d2907d2..d38f83a 100644 --- a/levels/menu_levels2.py +++ b/levels/menu_levels2.py @@ -3,7 +3,7 @@ from Krank import * from Part import * def init(): - k.world.setBackground('IHP06') + k.world.setBackground('menu-levels') cx, w, h = k.world.rect.centerx, k.world.rect.width, k.world.rect.height @@ -18,7 +18,7 @@ def init(): row, col = math.floor((i%cols))+1.5, math.floor((i/cols))+0.8 pos.append((row*w/(cols+2), col*h/4.7)) - icon = pygame.image.load('levels/icons/level%03d.tga' % (10+i+1)) + icon = pygame.image.load('levels/unera-icons/level%03d.tga' % (10+i+1)) if h < 768: icon = pygame.transform.scale(icon, (88, 66)) icons.append(icon) @@ -52,4 +52,4 @@ def init(): k.screen.blit(k.world.image, k.world.rect) pygame.display.update() - \ No newline at end of file + diff --git a/levels/menu_levels3.py b/levels/menu_levels3.py index a9dc20c..6c30ae6 100644 --- a/levels/menu_levels3.py +++ b/levels/menu_levels3.py @@ -3,7 +3,7 @@ from Krank import * from Part import * def init(): - k.world.setBackground('IHP06') + k.world.setBackground('menu-levels') cx, w, h = k.world.rect.centerx, k.world.rect.width, k.world.rect.height @@ -17,7 +17,7 @@ def init(): row, col = math.floor((i%cols))+1.5, math.floor((i/cols))+0.8 pos.append((row*w/(cols+2), col*h/4.7)) - icon = pygame.image.load('levels/icons/level%03d.tga' % (20+i+1)) + icon = pygame.image.load('levels/unera-icons/level%03d.tga' % (20+i+1)) if h < 768: icon = pygame.transform.scale(icon, (88, 66)) icons.append(icon) @@ -44,4 +44,4 @@ def init(): k.screen.blit(k.world.image, k.world.rect) pygame.display.update() - \ No newline at end of file + diff --git a/levels/menu_play.py b/levels/menu_play.py index 42458e8..ba6c49a 100644 --- a/levels/menu_play.py +++ b/levels/menu_play.py @@ -5,7 +5,7 @@ from Part import * def init(): k.sound.loadTheme('menu') k.sound.music('industry.ogg') #k.sound.music('space.ogg') - k.world.setBackground('Big-E-Mr-G13') + k.world.setBackground('menu-play') # player k.player.setPos(k.world.rect.center) diff --git a/levels/menu_scores.py b/levels/menu_scores.py index 19e88c1..9b3a002 100644 --- a/levels/menu_scores.py +++ b/levels/menu_scores.py @@ -7,7 +7,7 @@ from Tools import * def init(): k.sound.loadTheme('menu') k.sound.music('summer.ogg') - k.world.setBackground('darkmatter02') + k.world.setBackground('menu-scores') # simple player k.player.setPos(k.world.rect.center) @@ -58,4 +58,4 @@ def init(): 'action': 'k.level.menuExit()', 'size': 'small', 'pos': pos(cx, h*7/8)})) - \ No newline at end of file + diff --git a/levels/menu_scores1.py b/levels/menu_scores1.py index 68d3b0f..69c294c 100644 --- a/levels/menu_scores1.py +++ b/levels/menu_scores1.py @@ -9,9 +9,9 @@ def init(): stage = 1 numLevels = k.config.numAvailableLevels(stage) if numLevels > 20: - k.world.setBackground('darkmatter02b') + k.world.setBackground('menu-scores1') else: - k.world.setBackground('darkmatter02') + k.world.setBackground('menu-scores1') # simple player k.player.setPos(k.world.rect.center) k.player.setTailNum(2) @@ -35,4 +35,4 @@ def init(): 'align': 'bottom', 'action': 'k.level.menuExit("menu_scores")', 'size': 'small', - 'pos': pos(c, h*7/8)})) \ No newline at end of file + 'pos': pos(c, h*7/8)})) diff --git a/levels/menu_scores2.py b/levels/menu_scores2.py index 34252f8..98d55ee 100644 --- a/levels/menu_scores2.py +++ b/levels/menu_scores2.py @@ -9,9 +9,9 @@ def init(): stage = 2 numLevels = k.config.numAvailableLevels(stage) if numLevels > 20: - k.world.setBackground('darkmatter02b') + k.world.setBackground('menu-scores2') else: - k.world.setBackground('darkmatter02') + k.world.setBackground('menu-scores2') # simple player k.player.setPos(k.world.rect.center) k.player.setTailNum(2) @@ -35,4 +35,4 @@ def init(): 'align': 'bottom', 'action': 'k.level.menuExit("menu_scores")', 'size': 'small', - 'pos': pos(c, h*7/8)})) \ No newline at end of file + 'pos': pos(c, h*7/8)})) diff --git a/levels/menu_scores3.py b/levels/menu_scores3.py index 359ceb7..e03ec62 100644 --- a/levels/menu_scores3.py +++ b/levels/menu_scores3.py @@ -9,9 +9,9 @@ def init(): stage = 3 numLevels = k.config.numAvailableLevels(stage) if numLevels > 20: - k.world.setBackground('darkmatter02b') + k.world.setBackground('menu-scores3') else: - k.world.setBackground('darkmatter02') + k.world.setBackground('menu-scores3') # simple player k.player.setPos(k.world.rect.center) k.player.setTailNum(2) @@ -35,4 +35,4 @@ def init(): 'align': 'bottom', 'action': 'k.level.menuExit("menu_scores")', 'size': 'small', - 'pos': pos(c, h*7/8)})) \ No newline at end of file + 'pos': pos(c, h*7/8)})) diff --git a/levels/menu_screen.py b/levels/menu_screen.py index 23a138f..957e7a1 100644 --- a/levels/menu_screen.py +++ b/levels/menu_screen.py @@ -6,7 +6,7 @@ from Effect import * def init(): k.sound.loadTheme('menu') k.sound.music('industry.ogg') - k.world.setBackground('kahanaboy04') + k.world.setBackground('menu-screen') k.world.darken(60) # simple player k.player.setPos(k.world.rect.center) @@ -17,7 +17,13 @@ def init(): 'align': 'bottom', 'action': 'k.config.save() or k.level.menuExit()', 'size': 'small', - 'pos': pos(cx, h*7/8)})) + 'pos': pos(cx-cx/3, h*7/8)})) + + k.particles.add(Switch({ 'text': 'Fullscreen', + 'align': 'bottom', + 'action': 'k.world.toggleFullscreen()', + 'size': 'small', + 'pos': pos(cx+cx/3, h*7/8)})) modes = pygame.display.list_modes(32, pygame.FULLSCREEN) modes = [m for m in modes if (m[1] >= 600)] set = sets.Set() @@ -28,11 +34,11 @@ def init(): m = modes[i] active = m==k.world.rect.size dirvec = vector.withAngle(-(i+1)*2*math.pi/(len(modes)+1)+math.pi/2, h*5/12) - dirvec.y *= 0.8 + dirvec.y *= 0.6 k.particles.add(Switch({ 'text': "%dx%d" % m, 'size': 'small', 'align': 'bottom', 'action': 'k.world.setScreen((%d, %d))' % m, 'color': active and 'orange' or 'white', 'pos': vector(k.world.rect.center)+dirvec})) - \ No newline at end of file + diff --git a/levels/menu_sound.py b/levels/menu_sound.py index 01d5832..0849881 100644 --- a/levels/menu_sound.py +++ b/levels/menu_sound.py @@ -6,7 +6,7 @@ from Effect import * def init(): k.sound.loadTheme('menu') k.sound.music('industry.ogg') - k.world.setBackground('kahanaboy04') + k.world.setBackground('menu-sounds') k.world.darken(60) # simple player k.player.setPos(k.world.rect.center) @@ -40,4 +40,4 @@ def init(): 'action': 'k.sound.setMusicVolumeIndex(%d) or k.config.save()' % i, 'group': 'music', 'color': i==k.sound.getMusicVolumeIndex() and 'orange' or 'white', - 'pos': vector(k.world.rect.center)+dirvec})) \ No newline at end of file + 'pos': vector(k.world.rect.center)+dirvec})) diff --git a/src/Config.py b/src/Config.py index 533c0e1..555a8a3 100644 --- a/src/Config.py +++ b/src/Config.py @@ -1,6 +1,8 @@ # # Config.py +import yaml +import getopt, sys import k, levels from Krank import * @@ -24,15 +26,46 @@ class Config (dict): self['stageTime'] = [0,0,0,0] self['totalSolved'] = [0,0,0,0] self.stage = 1 + self.fullscreen = 0 k.config = self self.load() + try: + opts, args = getopt.getopt(sys.argv[1:], 'whfs:') + except getopt.GetoptError, err: + print str(err) + self.usage_exit(-1) + + for o, a in opts: + if o == '-h': self.usage_exit(0) + if o == '-w': self.fullscreen = 0 + if o == '-f': self.fullscreen = 1 + if o == '-s': + try: + w,h=a.split('x', 2) + self['screen']=int(w),int(h) + except ValueError, err: + print "Invalid screen size:", a, "\n\t", str(err) + self.usage_exit(-1) + + #------------------------------------------------------------------------------------------- + def usage_exit(self, retcode): + print "Usage:" + print "\tkrank -h for display this screen" + print "\tkrank -f for start in fullscreen mode" + print "\tkrank -w for start in windowed mode" + print "\tkrank -s WxH for start in screen (-f or -w) with defined size" + print "\nexamples:" + print "\tkrank -f -s 800x600" + print "\tkrank -w -s 921x652" + sys.exit(retcode) + #------------------------------------------------------------------------------------------- def score (self, level): si = k.level.isBonus() and 4 or self.stage-1 - li = k.level.isBonus and self.stage-1 or level-1 + li = k.level.isBonus() and self.stage-1 or level-1 # stats self['totalTime'] += k.level.time/1000 @@ -75,12 +108,8 @@ class Config (dict): #------------------------------------------------------------------------------------------- def makeLevelAvailable (self): - for i in range(2): - for stage_index in range(3): - scores = self['scores'][stage_index] - if len(scores) < levels.numLevels: - scores.append({'time': sys.maxint, 'score': sys.maxint}) - break + if len(self['scores'][self.stage - 1]) < levels.numLevels: + self['scores'][self.stage - 1].append({'time': sys.maxint, 'score': sys.maxint}) #------------------------------------------------------------------------------------------- def apply(self): @@ -91,6 +120,8 @@ class Config (dict): def getConfigFilePath(self): if os.sys.platform == 'darwin': return os.path.expanduser('~/Library/Preferences/krank.cfg') + elif os.sys.platform == 'linux2': + return os.path.expanduser('~/.krankcfg') else: return os.path.join(os.environ['APPDATA'], 'krank.cfg') @@ -99,12 +130,20 @@ class Config (dict): self['music_volume'] = k.sound.musicVolume self['sound_volume'] = k.sound.soundVolume self['screen'] = k.world.rect.size + self['stage'] = k.config.stage + self['fullscreen'] = k.config.fullscreen try: config_file = self.getConfigFilePath() + if os.access(config_file, os.R_OK|os.W_OK): + os.unlink(config_file) + print "Old config file has been converted in yaml format" + print "\tnew config name is ", config_file+'.yaml' + config_file += '.yaml' log('writing config to', config_file, log='config') log(self, log='config') file = open(config_file, 'w+') - cPickle.dump(self, file) + file.write("# vim: filetype=yaml :\n") + yaml.dump(self, file) except Exception, e: log(e) @@ -114,9 +153,18 @@ class Config (dict): config_file = self.getConfigFilePath() log('reading config from', config_file, log='config') log(self, log='config') - file = open(config_file, 'r') - self.update(cPickle.load(file)) + yaml_type=0 + + if not os.access(config_file, os.R_OK): + config_file += '.yaml' + file = open(config_file, 'r') + self.update(yaml.load(file)) + else: + file = open(config_file, 'r') + self.update(cPickle.load(file)) + self.stage = self['stage'] + k.config.fullscreen=self['fullscreen'] while len(self['scores']) < 4: self['scores'].append([]) log(self, log='config') except Exception, e: @@ -185,4 +233,4 @@ class Config (dict): stage = self.stage return len([s for s in self['scores'][stage-1] if s['score'] < sys.maxint]) - \ No newline at end of file + diff --git a/src/Input.py b/src/Input.py index ef1933e..97262d0 100644 --- a/src/Input.py +++ b/src/Input.py @@ -20,6 +20,7 @@ class Input: self.exit = False self.pause = False + self.unfocused_pause = False # target pos self.targetpos = k.world.rect.center @@ -61,14 +62,29 @@ class Input: def handleEvents (self): for event in pygame.event.get(): + if event.type == pygame.ACTIVEEVENT: + if event.state == 2: + if event.gain: + if self.unfocused_pause: + self.pause = False + self.unfocused_pause = False + else: + if not self.pause: + self.pause = True + self.unfocused_pause = True + if event.type == pygame.QUIT: sys.exit() # ---------------------------------------------------------------------- KEYS elif event.type == pygame.KEYDOWN: # ------------------------------------------------------------------ pause - if event.key == 32: + if event.key in [ 32, 19, 112]: + self.unfocused_pause = False self.pause = not self.pause else: - if self.pause: self.pause = False + if event.key in [ 27, 113, 275, 276, + 105, 114, 115, 49, 50, 51, 280, 281, 19, 112]: + if self.pause: + self.pause = False # ------------------------------------------------------------------ exit if event.key == 113 and event.mod == pygame.KMOD_LMETA: self.onExit() @@ -197,4 +213,4 @@ class Input: self.targetpos = playerpos + playerToMouse.norm() * targetDistance - \ No newline at end of file + diff --git a/src/Level.py b/src/Level.py index 3bc8d2a..48e2bc2 100644 --- a/src/Level.py +++ b/src/Level.py @@ -160,8 +160,8 @@ class Level: #------------------------------------------------------------------------------------------- def saveIcon (self): image = pygame.transform.scale(k.screen, (120, 90)) - pygame.image.save(image, 'levels/icons/level%03d.tga' % self.number) - log('icon saved to ', 'levels/icons/level%03d.tga' % self.number) + pygame.image.save(image, 'levels/unera-icons/level%03d.tga' % self.number) + log('icon saved to ', 'levels/unera-icons/level%03d.tga' % self.number) #------------------------------------------------------------------------------------------- def saveScreenshot (self): diff --git a/src/Main.py b/src/Main.py index 281d411..0ffa41d 100644 --- a/src/Main.py +++ b/src/Main.py @@ -17,15 +17,17 @@ from Config import * k.debug = 0 startlevel = k.debug and 24 startstage = 1 -fullscreen = not k.debug or 0 pygame.init() pygame.font.init() Config() +fullscreen = k.config.fullscreen + if k.debug: k.config.stage = startstage + fullscreen = 0 #------------------------------------------------------------------------------------------- @@ -56,7 +58,11 @@ if fullscreen: width, height = modes[0] flags = pygame.FULLSCREEN else: - width, height, flags = 800, 600, pygame.RESIZABLE + if k.config['screen']: + width, height = k.config['screen'] + else: + width, height=800, 600 + flags = pygame.RESIZABLE k.clock = pygame.time.Clock() @@ -150,4 +156,4 @@ if 0: stats.print_stats() else: loop() - \ No newline at end of file + diff --git a/src/World.py b/src/World.py index e715601..4f94483 100644 --- a/src/World.py +++ b/src/World.py @@ -38,7 +38,9 @@ class World: #------------------------------------------------------------------------------------------- def initScreen (self, size, flags): k.screen = pygame.display.set_mode(size, flags) + pygame.display.set_caption(k.KRANK_TITLE) self.rect = pygame.Rect(0, 0, size[0], size[1]) + self.screen_flags = flags self.postInit() #------------------------------------------------------------------------------------------- @@ -46,12 +48,35 @@ class World: if size <> self.rect.size: self.image = None k.sound.play('exit') - k.screen = pygame.display.set_mode(size, pygame.FULLSCREEN) + k.screen = pygame.display.set_mode(size, self.screen_flags) self.rect = pygame.Rect(0, 0, size[0], size[1]) self.postInit() Level('menu_screen') k.screen.blit(k.world.image, k.screen.get_rect()) pygame.display.flip() + + #------------------------------------------------------------------------------------------- + def toggleFullscreen(self): + if k.config.fullscreen: + sx,sy=k.world.rect.size + k.config.fullscreen = 0 + k.screen = pygame.display.set_mode((sx, sy), pygame.RESIZABLE); + self.rect = pygame.Rect(0, 0, sx, sy) + self.screen_flags = pygame.RESIZABLE + self.postInit() + Level('menu_screen') + k.screen.blit(k.world.image, k.screen.get_rect()) + pygame.display.flip() + else: + sx,sy=k.world.rect.size + k.config.fullscreen = 1 + k.screen = pygame.display.set_mode((sx, sy), pygame.FULLSCREEN); + self.rect = pygame.Rect(0, 0, sx, sy) + self.screen_flags = pygame.FULLSCREEN + self.postInit() + Level('menu_screen') + k.screen.blit(k.world.image, k.screen.get_rect()) + pygame.display.flip() #------------------------------------------------------------------------------------------- # fonts @@ -65,11 +90,11 @@ class World: try: height = self.rect.height try: - fontfile = 'fonts/QUIGLEYW.TTF' - k.font['large'] = pygame.font.Font(fontfile, height/12) - k.font['normal'] = pygame.font.Font(fontfile, height/24) - k.font['small'] = pygame.font.Font(fontfile, 40) - k.font['tiny'] = pygame.font.Font(fontfile, 30) + fontfile = '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf' + k.font['large'] = pygame.font.Font(fontfile, height/24) + k.font['normal'] = pygame.font.Font(fontfile, height/36) + k.font['small'] = pygame.font.Font(fontfile, 30) + k.font['tiny'] = pygame.font.Font(fontfile, 20) except Exception, e: log(e) k.font['large'] = pygame.font.SysFont(pygame.font.get_default_font(), height/12) @@ -87,7 +112,7 @@ class World: self.resetCockpit() - path = os.path.join('levels/backgrounds', name + '.jpg') + path = os.path.join('levels/unera-backgrounds', name + '.jpg') log(path, log='world') if os.path.isdir(path): for item in os.listdir(path): @@ -104,7 +129,6 @@ class World: xtiles, ytiles = self.rect.width/self.tilesize+1, self.rect.height/self.tilesize+1 self.fadeTiles = range(xtiles*ytiles) random.shuffle(self.fadeTiles) - self.image = quadMirrorSurface(pygame.image.load(file), self.rect.size).convert() #------------------------------------------------------------------------------------------- diff --git a/src/k.py b/src/k.py index a7d7f11..0b697db 100644 --- a/src/k.py +++ b/src/k.py @@ -33,7 +33,8 @@ effect_sprites = None #----------------------------------------------------------------------------------------------- # constants -VERSION = "07" +VERSION = "0.7" +KRANK_TITLE = "Krank version %s (Debian revision)"%(VERSION) -print "krank version", VERSION +print KRANK_TITLE debian/patches/series0000664000000000000000000000001411774404524012037 0ustar unera.patch debian/krank.install0000664000000000000000000000034211774376571011707 0ustar src/*.py /usr/lib/krank levels /usr/share/games/krank/ sounds /usr/share/games/krank/ install/krank /usr/games/ install/krank.xpm /usr/share/games/krank/ debian/krank.desktop /usr/share/applications/