PyWeek 28 challenge: “Tower”

Stacky Tower - Stacky Tower: Christmas Update!

Posted by dowski on 2019/12/22 21:45

Eli got inspired and did a Christmas update for Stacky Tower. This update includes two new blocks.

  • Present: reactivates the block below
  • Snowball Gun: fires a snowball that freezes the block across from you - the next block dropped by your opponent doesn't take effect

Merry Christmas!

Add a comment

Planet SMASH! - Planet SMASH!: Postmortem

Posted by Tee on 2019/10/14 00:22

Thanks for the feedback!

I usually try to make my games as minimal as possible so I can actually finish them, but I fell into my old ways of being too ambitious (well, given the available time and my efficiency).

While I had fun in the middle of the week drawing the alien, I didn't have time to implement much of the actual gameplay. Originally this was supposed to be called Planet JOUST!, and it would involve two planets fighting each other with gigantic towers as swords. I downgraded it to Planet SMASH! at an attempt to salvage some gameplay, and changed the other planet to little ships (which were actually still placeholder art) to make it easier to implement.

Making a strategy game requires a lot of interface details, feedback to the player, etc., and I only had time to add the bare essentials. It's awkward to play this game without a decent interface and, rightfully so, many of you mentioned that. But I hope even with the bad interface, the game at least gave a taste of what I was aiming for.

I was hoping to have the tower itself be a more interesting component of the game. It would break as you hit the enemy, and certain floors would be more resistant than others according to your upgrades. So the top floors would be more fragile than the bottom floors. The damage would be computed based on the actual part of the tower that was part of the impact, rather than a global damage, and some floors would be "offensive" floors in that they would add more damage if it hits the target, and you would want them at the top. I was also planning abilities to alter the orbit and repair floors.

This would probably be best implemented with a pause system like FTL so the player can think about what to do, and consider their orbit to see how they can hit the other planet on the next pass. Due to time I ended up making it a bit more action-y than strategy in an attempt to make the gameplay more interesting, but I'm not sure if that was the right move. I wonder if I should have gone the opposite way, kept the single enemy, and made it turn-based for each pass. In any case, all of this was too ambitious for the time I had available. Not to mention this is probably terribly unbalanced because I only tried to balance it in the last 15 minutes. To be fair, I'm not sure I would be able to get the gameplay right even if I had more time, because the concept needs a lot of playtesting and fine-tuning.

Even if this was too ambitious, I did have fun implementing this. I think it's a cool little concept and I'm glad I tried to implement it.

These past few weeks were busy for me and unfortunately I couldn't rate your games this time. Hopefully next time I'll be able to, sorry about that. :/

Congratulations to the winners, and I'll see you next time!

Add a comment

Battle Tower - Conclusion for Battle Tower

Posted by chrisyan2000 on 2019/10/13 00:14

Welp this is all I can put together given two days ;( hopefully will have enough time for the next pyweek

And by the way, I'm pretty sure in the 'README.txt' and the front page I said to *hold* space to attack, looks like most people have missed that.

And the hitbox might feels weird because the damage detection is determined at the time one swing has finished, if you turn around before the last tick of the swing, the hitbox might feel a little weird to you.


Will make sure to make the path compatible with mac/linux as well as using python 3.7+ next time ;(


Add a comment

Towers of Strength - Hello world

Posted by coen on 2019/10/12 10:42

Someone just told me that they had trouble running the game. It may be because I wrote it in pygame 1.9 and they tried to run it in pygame The workaround was to remove sys.exit.

And apparently I should have posted a diary entry so people can reach me. So here it is

Apologies to anyone who failed to run my game, especially if you then tried to reach me and couldn't. I'll do better next time


Derplings: Tower Ascent - Missing requirements.txt

Posted by macskay on 2019/10/08 06:52

IMPORTANT: We saw that the requirements.txt was missing and there was a bug inside the map please use the following version if you test play the game:


Spire of Chaos - A strategy guide

Posted by Darni on 2019/10/03 00:51

With people evaluating the game, I thought it would be nice to provide a strategy guide... The game is beatable with some experience in it, probably hard if you're new. I've separated tips in two sections, the top ones (labeled as TIPS) are gamerules that can be useful (and you'll probably can figure out yourself if you pay attention), and the second section (labeled as SPOILERS), has some tricks that you might want to discover by yourself:


  • Each level has an entrance and an exit that you should try to find
  • Different actions take different time. Take a look at the clock on the bottom left, you have until the end of day seven or you lose.
  • There's always a path to the exit of each level. If you don't find it, try searching (S key) for hidden doors in the perimeter of the explored area. If you don't have high awareness, you may need to search each square a few times to find it.
  • You'll see small dark grey extensions of a corridors to the sides indicating paths that are yet unexplored.
  • Check your HP bar if you're taking damage. If it's low, you can always rest (R key); that recovers all your HP. You spend a lot of time, but resting should make it unusual to lose because your HP got down to zero.
  • Items can give you bonuses to actions, but you have to choose to use the item on the relevant menu. Those options are shown in green (and are generally better than the equivalent non-green option)
  • You can only carry one pair of boots, if you pick one, you have to drop the other


  • You are trying to get to the top of the tower, not explore everything/pick up all items/kill all monsters. If you go for a "completionist" approach, you'll most likely run out of time. many obstacles you can just walk around
  • If you need to get extra items, fight monsters. They sometimes drop loot.
  • Alternating search and walk makes you go more slowly, but lowers the chance of stepping on a random trap significantly.
  • There are never traps where monsters or items are. And traps within doors only affect you when trying (successfully or not) to open it.
  • Breaking/unlocking a door triggers a trap, but destroys the trap afterwards. Trying to untrap it might trigger it many times instead. Depending on how strong/agile you are, you might choose to take the hit. (especially if you are in a hurry)
  • Walking through a trap is sometimes a good option if you're in a hurry (and the trap is not the kind that delays you)
  • The exit of each level is always in the bottom right corner of the map. Try to always make progress towards it
  • Try to have something on your feet always, even if you don't use it. Those acid trap pits are nasty.
  • Depending on what you're good at (fighting monsters vs opening doors), you most likely want to choose a path where you can take advantage of your skills/items.
  • This is a balance issue that I'd like to fix: There are more than enough health potions. So upgrading your health is usually not worth it
  • This is a balance issue that I'd like to fix: escaping a monster is usually a bad idea (if you don't want to fight it, don't move into its room on the first place!). That makes the boots of escaping a pretty useless item... except for protecting your feet. Very occasionally an escape is useful (if you get to a monster room to check what's behind a corner and see that it's a dead end with nothing of value).

Good luck!

Add a comment

Babel - Finished!

Posted by LeopardShark on 2019/09/30 18:55

If you are playing the game, note that it is hard. Anything other than easy mode will probably require a few attempts unless you already know one of the languages in the game.

Here are a few additional customisation options which you can get by editing the code, if you want to (although be careful with your file encodings if you're re-saving src/, and I'm not sure if these changes will actually work):
  • If you find the button 'click' sound annoying you can disable it by commenting out line 42 in src/
  • If you want to play with a custom set of languages, you can edit the dictionary on lines 163–165 of src/
  • You can give yourself more or less time by editing the inital_time() and extra_time() functions on lines 15–36 of
I got quite a lot done in the last day: music and sound effects, winning and losing screens, four new languages (German, Italian, Portuguese and Russian), a much better difficulty-select screen, the ability to show the English for an instruction after a mistake, and lots of bug fixes. I managed to reach exactly 1000 lines of code, which is not as many as Floodboat (which had two people), but more than any of my other Pyweek entries.

I think this is probably the best game I have made for Pyweek so far, in terms of idea, gameplay and polish.

I apologise for any inaccuracies in the translations: if I've butchered your language's syntax you can rest assured I've done much worse with Python syntax in the code!


Improbable Mission Force - Improbable Mission Force Soundtrack

Posted by mit-mit on 2019/09/30 16:44

You can now listen to a medley of the soundtrack to our game "Improbably Mission Force" on soundcloud:

Hope you enjoy!

Add a comment

Hobot's Ascent - A wild game appeared!

Posted by rdb on 2019/09/30 11:08

Well, here it is; the fruit of a stressful but productive and fun week.  We finished on time!  On Wednesday afternoon, as the first line of code was being written, I had become less sure that we'd be able to present anything interactive at all.

Tower was not our favourite theme, but it was definitely something we could work with, by making that the setting of the game world.  I teamed up this time with momojohobo, who had greatly impressed me with his ability to animate and produce music last PyWeek.  He encouraged me to try a new art style for this game, which was inspired by games like Samorost and Machinarium.  I'd never tried this before, but I wanted to make a 2-D game this time around, and I was happy to try something new; I quickly learned that the GIMP's Clone, Perspective and Burn tools would become my new friends for the week.

During the first few days, all seemed well; my teammate created the charming titular character while I started work on the first two levels.  After I'd drawn each level I'd hand it off to momojohobo to do his superb animation magic in Blender 2.80.  Because I had never done this kind of thing before, other than a little bit of practice on the Saturday before PyWeek, I was a little unconfident and slow; but I was nonetheless quite pleased with the results—I'm especially proud of how the second floor turned out.

Where we ran into significant trouble was with the export pipeline.  Because the recently-released Blender 2.80 had changed some core elements of its API, the existing exporters to Panda3D didn't work; fortunately, there was now a glTF 2.0 exporter in Blender, and we could import those in Panda3D with the help of the panda3d-gltf plug-in on PyPI.  But, these things were less battle-tested.  They actually performed admirably well, but given our somewhat esoteric uses, we ran into a lot little issues here and there.  Each new issue we encountered required hours of debugging and hours more of trying to find a workaround.  We also ended up with a quite elaborate script to fix up and optimize the assets after conversion.

At the point where we had ironed out or worked around most of the issues, we had only a little over three days left, and the stress could be felt—we had only two and a half levels, and new issues could still pop up around any corner.  We both agreed that we weren't going to worry about finishing a game on time, but primarily to just have fun.  Though the initial plan was that I would draw all the levels, we realised that I really needed to start writing some code, so momojohobo took over the level design of the remaining levels.

The last two (!) days were filled with frantic coding to actually get the levels scripted up in Panda3D.  Because the entire level was rigged up as a single model, and the export tools insisted on having each animation affect the whole level, I ended up making heavy use of Panda3D's ability to define Actor sub-parts using joint filters.  It took some time to come to that conclusion, but it ended up working very elegantly and simply.  This is an aspect where I think the choice of Panda3D really paid off, because I honestly don't know how I would have gotten all this to work anywhere else, especially within such a short period of time.

The final level to be rigged (the one with all the clocks) was scripted up with 6 hours on the clock.  I am personally not really quite happy with some of the puzzles to make it in last; they were produced under stress to get more content in, and as some of my friends have pointed out I appreciate that the clocks puzzle in particular can be a little frustrating.  If you don't figure it out, the solution is in a comment in game/floors/ in the source code.

We're also aware of the many graphical glitches, for which there wasn't time to fix; some of them would have required us to redo how we did a bunch of things in the animations, which would have required us to revise all of the animations—definitely something we didn't have time for.  We now know how to avoid all these pitfalls in the future, though, and if we were to do it all over again, we'd be making a game that's thrice as good.

I'm ultimately quite pleased with what we managed to produce despite all the difficulties we faced, and we'll hope you'll find this weird, glitchy little game as charming as we do.  I'm also immensely grateful to my teammate, momojohobo, whose ability to produce amazing animations and music in a very short period of time makes me green with envy.  I am also grateful to Moguri, whose panda3d-gltf and blend2bam libraries met our quixotic pipeline needs admirably well, and was available to discuss the issues we ran into.

Congratulations to everyone who finished PyWeek!  I see a lot of great entries this year, and can't wait to try them!

Add a comment

m47pyweek28 - Summary, some random thoughts

Posted by Master47 on 2019/09/29 21:19

Not sure who will read this, but I wanted to write a couple of lines and tell you, that there are two bugs, which can be prevented if one follows the instructions outlined in "instructions.txt":
- Generate a tower before trying to click on "PLAY!".  Otherwise I do not know what will happen.
- When generating a tower, please choose at least once colour block and set the number of blocks to generate to at least 1. Otherwise I do not know what will happen.

I sadly did not have time to fix the bugs, as I was very busy with work.

In total, I think I spent about 15 hours of programming. Or 2 hours on both Monday and Tuesday, and 10 hours on Saturday.  I am finished (yes, physically, too) :D lol.

So what do I think of my game?
Well, to put it nicely, "things can be clicked on"...

It should be regarded as a reaction game.

Further plans were the following:
- Make this game a network game, where tower blue prints are hosted on a server and players can battle each other on who builds the tower the quickest.
- Include different sounds when clicking on blocks. So there would be two ways, in which the time it would take to build a tower from a blue print, could be reduced:
  - Remembering the order of clicking the correct blocks by sound (Hearing sense)
  - Remembering the order of clicking the correct blocks by using the eyes (vision sense)

I also wanted to include options and a highscore table, but I did not have time.
The joy of getting older and having a full time job, eh? But it's ok :).
And not to mention, the dishwasher won't fill itself.

What will I do now?
Well, have some lovely green tea =).

Over and out!

Add a comment