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


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.


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


File Uploader Date
Postcomp Release - Windows
gcewing 2007/09/25 03:28
Postcomp Release - Linux
gcewing 2007/09/25 03:22
Postcomp Release - MacOSX
gcewing 2007/09/25 03:20
Postcomp Release - Source
gcewing 2007/09/25 03:16
5B-0.4 final
gcewing 2007/09/09 23:48
5B-0.5 final
gcewing 2007/09/09 23:35
555-BOOM! Version 0.3
gcewing 2007/09/08 10:02
555-BOOM! Version 0.2
gcewing 2007/09/07 21:58
The last screen of the tutorial. Also the last level as yet...:-(
gcewing 2007/09/06 12:52
555-BOOM! version 0.1
gcewing 2007/09/06 12:50

Diary Entries

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?


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?

1 comment

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...


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!

Add a comment

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.

Add a comment

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.

Add a comment

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.

Add a comment

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.)

1 comment

555-BOOM! Level Editor Documentation

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


Add a comment

DNA Replicator crash

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


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/   2007-09-08 14:59:24.000000000 +1200
+++ DNAReplicator-1.3-src-patched/lib/   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')
+        if sys.byteorder == 'big':
+            a.byteswap()
         basedl[base] = compilemesh(a)
     global txfont

Add a comment

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/

  paths = glob(pat)
  if not tutorial:
    paths = [p for p in paths if not os.path.basename(p).startswith("+")]
  return paths
  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!)

Add a comment

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 "", line 19, in ?
  File "lib/", line 12, in main
  File "lib/modules/", line 27, in __init__
  File "lib/modules/", line 39, in run
  File "lib/modules/", line 661, in play_game
  File "lib/modules/", line 567, in update
  File "lib/modules/", line 253, in update
  File "lib/modules/", line 497, in damage
    amount-=random.randint(0, dodge)
  File "/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/", line 189, in randint
    return self.randrange(a, b+1)
  File "/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/", line 168, in randrange
    raise ValueError, "empty range for randrange()"
ValueError: empty range for randrange()

1 comment

Allefant? Images?

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


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.


1 comment