PyWeek - 555-BOOM!

The year is 1973. A madman with a grudge against telephone companies, calling himself THE TYGER, is planting bombs in telephone exchanges across the country, wired so he can set them off with a phone call.

Your task is to take the TWINKLE out of the Tyger's eye by tracing the connections through the TWISTED and tortuous circuits of the softly TICKING exchange equipment, and finding a way to disarm the bombs before time runs out.

Only you can save the country's vital communications infrastructure from being thrown into TURMOIL...

Note: The screen shot at right is NOT the last level any more, but screen shot uploading doesn't seem to be working at the moment.
gcewing


The last screen of the tutorial. Also the last level as yet...:-(

Awards

Give this entry an award

Ratings (show detail)

Overall: 3.5
Fun: 2.9
Production: 3.5
Innovation: 4.1

6% respondents marked the game as not working.
1% of respondents wished to disqualify the entry.
Respondents: 42
Files: Uploader Date
5B-0.6-Windows.zip 3.88 Mbytes gcewing 2007/09/25 03:28
Postcomp Release - Windows
5B-0.6-Linux.tar.gz 3.14 Mbytes gcewing 2007/09/25 03:22
Postcomp Release - Linux
5B-0.6-MacOSX.dmg 5.86 Mbytes gcewing 2007/09/25 03:20
Postcomp Release - MacOSX
5B-0.6-Source.zip 981.21 Kbytes gcewing 2007/09/25 03:16
Postcomp Release - Source
5B-0.4.zipfinal 667.69 Kbytes gcewing 2007/09/09 23:48
5B-0.4 final
5B-0.5.zipfinal 668.60 Kbytes gcewing 2007/09/09 23:35
5B-0.5 final
5B-0.3.zipfinal 817.33 Kbytes gcewing 2007/09/08 10:02
555-BOOM! Version 0.3
5B-0.2.zipfinal 807.42 Kbytes gcewing 2007/09/07 21:58
555-BOOM! Version 0.2
1-Tutorial7.png 76.45 Kbytes gcewing 2007/09/06 12:52
The last screen of the tutorial. Also the last level as yet...:-(
5B-0.1.zipfinal 800.98 Kbytes gcewing 2007/09/06 12:50
555-BOOM! version 0.1

Monday 24 September, 2007

[ gcewing @ 05:23 ] 555-BOOM! Response to Feedback

This has been the most successful of my PyWeek entries so far, by a large margin. I'm personally quite pleased by the way it turned out. Somehow I managed to hit on something that I was able to implement fairly completely and still have some time left for polishing and level design.

From the feedback, it seems that most people who were able to play the game properly liked it. However, the random level ordering bug appears to have ruined it for many people. Sorry about that! I was undone by an unexpected "feature" of Linux -- the glob function there apparently doesn't return its results sorted. I posted a fix, but maybe I didn't advertise it clearly enough.

Counting terminals: I hadn't intended that part to be so tedious. I'm thinking about numbering the terminals on the selectors in a future version, which may help to alleviate that.

Repetitiveness: I was trying to introduce some variety into the later levels, but I didn't have much time for level design. The same goes for gradation of difficulty, etc. Any suggestions for improvement in this area are welcome.

Use of multiple themes: There's nothing in the rules that says you can't do that, so there. I didn't write any code before the start, other than my Albow library that I documented and released several months earlier. If you're not willing to take my word for that, there's nothing I can do about it.

Lesson learned for next time: Always test on Linux and Windows if at all possible before the deadline!

Future plans: I'm working on a post-competition update that I hope to release Real Soon Now. I'll also be releasing an updated version of Albow incorporating the improvements I made to it while developing this game.

Thanks for all the good ratings, and to all those who commented.

Greg

Friday 14 September, 2007

[ gcewing @ 11:25 ] Allefant? Images?

There seem to be some resources missing from allefant_second.zip.

Traceback (most recent call last):
  File "run_game.py", line 16, in 
    main.main()
  File "/Local/Games/Python/PyWeek5/allefant5/lib/main.py", line 11, in main
    run.main()
  File "/Local/Games/Python/PyWeek5/allefant5/lib/run.py", line 200, in main
    run.game = Game(run.w, run.h)
  File "/Local/Games/Python/PyWeek5/allefant5/lib/game.py", line 21, in __init__
    self.background1 = Picture("clock.jpg")
  File "/Local/Games/Python/PyWeek5/allefant5/lib/picture.py", line 8, in Picture
    pic = CachedPicture(path, area)
  File "/Local/Games/Python/PyWeek5/allefant5/lib/picture.py", line 17, in __init__
    image = pygame.image.load(data.loadblock(path))
  File "/Local/Games/Python/PyWeek5/allefant5/lib/data.py", line 47, in loadblock
    io = StringIO(dump.index[filename])
KeyError: 'clock.jpg'
There seem to be no images at all in the zip file.

[ gcewing @ 07:33 ] Scions of Darkness crash

Happened when I had about 3 units attacking an enemy outpost, or whatever those grey spiked things are.

Traceback (most recent call last):
  File "run_game.py", line 19, in ?
    main.main()
  File "lib/main.py", line 12, in main
    e=engine.Engine(state="mainmenu")
  File "lib/modules/engine.py", line 27, in __init__
    self.run()
  File "lib/modules/engine.py", line 39, in run
    self.play_game()
  File "lib/modules/engine.py", line 661, in play_game
    player.update()
  File "lib/modules/entities.py", line 567, in update
    i.update()
  File "lib/modules/entities.py", line 253, in update
    self.active_enemy.damage(self.get_attack_value())
  File "lib/modules/entities.py", line 497, in damage
    amount-=random.randint(0, dodge)
  File "/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/random.py", line 189, in randint
    return self.randrange(a, b+1)
  File "/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/random.py", line 168, in randrange
    raise ValueError, "empty range for randrange()"
ValueError: empty range for randrange()

[ gcewing @ 06:23 ] Fix for 555-BOOM! version 0.5

I've discovered a problem that could affect play on systems other than MacOSX.

If the levels seem to be getting played in a random order, replace the following around line 85 of Code/game.py:

  paths = glob(pat)
  if not tutorial:
    paths = [p for p in paths if not os.path.basename(p).startswith("+")]
  return paths
with
  paths = glob(pat)
  if not tutorial:
    paths = [p for p in paths if not os.path.basename(p).startswith("+")]
  paths.sort() # add this line
  return paths
i.e. insert 'paths.sort()' before returning paths.

(I had always thought that glob() was supposed to return its results sorted, but this doesn't seem to be the case on some Linux systems!)

Tuesday 11 September, 2007

[ gcewing @ 04:57 ] DNA Replicator Fix

Here's a small patch to fix a problem causing DNA Replicator to crash on big-endian systems.

--- DNAReplicator-1.3-src/lib/main.py   2007-09-08 14:59:24.000000000 +1200
+++ DNAReplicator-1.3-src-patched/lib/main.py   2007-09-11 16:50:31.000000000 +1200
@@ -138,13 +138,13 @@
     basedl = {}
     for base in ('adenine','guanine','cytosine','thymine'):
         a = array.array('f')
-        if sys.byteorder == 'big':
-            a.byteswap()
         flo = open(data.filepath('%s.msh' % base),'rb')
         try:
             a.fromstring(flo.read())
         finally:
             flo.close()
+        if sys.byteorder == 'big':
+            a.byteswap()
         basedl[base] = compilemesh(a)
 
     global txfont

Monday 10 September, 2007

[ gcewing @ 23:46 ] DNA Replicator crash

Anyone have a fix for this problem?

Traceback (most recent call last):
  File "run_game.py", line 16, in ?
    main.main()
  File "/Local/Games/Python/PyWeek5/DNAReplicator-1.3-src/lib/main.py", line 148, in main
    basedl[base] = compilemesh(a)
  File "/Local/Games/Python/PyWeek5/DNAReplicator-1.3-src/lib/main.py", line 107, in compilemesh
    for i in xrange(3*npoints):
OverflowError: long int too large to convert to int

[ gcewing @ 11:26 ] 555-BOOM! Level Editor Documentation

I've written some documentation for the level editor in 555-BOOM!.

5B-0.5-Doc.tar.gz

[ gcewing @ 00:35 ] Tips about pygame.mixer

Here are a couple of things I've learned about using pygame.mixer in the last couple of days. I'm posting them here in case they're of benefit to anyone.

  • If you get something that sounds like an elephant has trodden on the keyboard of your pipe organ, you've probably got a "play this sound now" condition that's triggering on every frame instead of just once.

  • If you need accurate timing of sounds, you may need to reduce the buffer size that pygame.mixer is initialised with. In a post-comp effort to add more sounds to 5B, I found I needed to use a buffer of around 64 bytes to be able to play short sounds at regular intervals of 100ms without the result sounding ragged. (This is on MacOSX, not sure if other platforms behave the same way.)

[ gcewing @ 00:10 ] 5B 0.5 Uploaded

Got it there at last.

This version has 9 regular levels, a new random element, and a new part.

Note that 0.5 is the most recent version to be used for judging, even though it's not listed at the top, because I made the pending uploads in a different order.

Sunday 09 September, 2007

[ gcewing @ 12:39 ] 555-BOOM! 0.5 is coming...

...just as soon as I can get it to accept a pending upload now that the server is back.

Saturday 08 September, 2007

[ gcewing @ 10:18 ] 5B Version 0.3

More bug fixes, and more levels. There are 7 regular levels now!

I've added a randomised element to some of the levels so that you can't just use the same solution every time. That should add some replay value.

If you're wondering why all the bombs seem to be silent, most of the sounds are disabled for now, until I can fix the stuttering problem.

Friday 07 September, 2007

[ gcewing @ 22:09 ] We have levels!

I've fixed some bugs and created 4 levels.

The crash problem was caused by a case error in a sound filename. I'll have to do something to prevent that sort of thing happening again.

Things are starting to come together. It looks like I may be able to submit something resembling a finished game this time!

Thursday 06 September, 2007

[ gcewing @ 13:08 ] First submission!

5 days in, and this is my first submission, and first diary entry since challenge start. Too busy coding to take any notice of the outside world!

This time I've come up with something that covers all five candidate themes! Well, sort of. You decide.

What's done so far: Most of the necessary infrastructure, and a set of tutorial levels. At least half the effort went into implementing a comprehensive built-in level editor -- which may well turn out to be the most interesting part of the game. Especially if I don't come up with a large number of astoundingly ingenious level designs in an extremely short time starting from now...

[ gcewing @ 10:58 ] HELP - pygame.mixer bug?

I'm having trouble playing a particular sound. It works fine the first time, but if I try to play it again there's a good chance of it getting stuck looping over a small segment.

I'm using MacOSX 10.4, python 2.3, pygame 1.7.1, SDL_mixer 1.2.8.

I've tried saving the sound in .ogg and .wav formats, and with different sample rates, but it makes no difference.

Anyone else encountered something like this? Is it a known bug in pygame.mixer or SDL_mixer?

Monday 27 August, 2007

[ gcewing @ 09:24 ] What does "2+GHz" mean?

With regard to the System Capabilities poll, if I have dual 1.25GHz processors, does that count as 2+GHz or not?