Color trails

Shattered Silence

Nerd Paradise: 3rd Generation - Members and friends of


Most Cultured Zombie Horde
Presented by hodgestar

Most Epic Intro
Presented by superjoe

Give this entry an award


Ratings (show detail)

Overall: 3.5
Fun: 3.0
Production: 4.0
Innovation: 3.6

Respondents: 25


File Size Uploader Date
missed some source control submissions from other teammates when I bundled the last one
12.0 MB blakeohare 2011/04/10 00:08
The Game
12.0 MB blakeohare 2011/04/10 00:00
Color trails
78.4 KB blakeohare 2011/04/09 00:14

Diary Entries

PyWeek12 SS3/NP PostMortem...ish

Note: Please forgive typos and things that only sort of make sense -- this was written on a plane while being pretty seriously sleep deprived

I kind of want this to be one but I simply haven't had the energy/motivation needed to write it after talking most of these things over with my team.  I'll try to hit the high points though.

General thoughts on PyWeek12:
First and foremost, to all the entrants: Good Job!  The quality of the games this time around seemed pretty phenomenal.  I'm not sure why but it just felt as if everything was noticeably better put together than in the previous two competitions I participated in.

My goal for this submission was to demonstrate that our team could be creative -- previously we'd basically done clones of classic games.  While this meant gameplay was a known good it required no real thought outside of a new plot to frame the same old thing.  This time around we experimented with (somewhat) strange plot, new gameplay mechanics, and (I thought) worked the theme in in a pretty neat manner.

Overall I'm super happy with our performance and our component scores fell as expected: Production > Innovation > Fun.  I am a bit surprised we did so poorly relative to previous entries with Production as this felt like it was the most polished of any of our submissions thus far.  So it goes.

We generally divide PyWeek into two phases.  Phase one is pre-competition and involves a lot of brainstorming about what possible games would be for each theme.  In the past we've started with "NES-style platformers styled after Wibbly Wobbly" or "Steampunkish SNES-Zelda centered around Caught."  This time we started with the theme and came up with a gameplay mechanic that fit the story we wanted to tell.  This was a reasonable success and our "innovation" ranking reflected that relative to previous submissions.

Phase two is the post-selection development and, honestly, not much went smoothly with it this pyweek.  Morale was lagging from day one, we never had a unified mindset about the game mechanics, three of our content people were not available for significant portions of the week.  On the plus side that means there was a lot to learn?

So... about those lessons?
Morale is key for us maybe as much as (or more so?) than having a solid game concept at day 1.  I was having a minor nervous breakdown for the first two or three days of the competition which caused me to miss the most important phase of my development -- weekend #1.  After that I was constantly behind schedule and generally less productive than I should have been until Friday of the competition (which for the most part was too late to make matter).

Fixception and I were the main drivers behind the concept for Shattered Silence and spent a good amount of time during phase 1 and the first couple of days of phase 2 trying to make sure our lead dev (Blake) had a good understanding of it.  We were successful to some degree but changes were made to adapt it to what Blake was familiar with and a non-trivial amount of the mechanics just didn't make it into the game.  In that regard the theme was a bit of an omen -- about 1/9th of what we wanted actually made it in.  To top those problems we really didn't do a good job selling the concept to our asset team which made it difficult for them to come up with content (music and pixel art specifically).  For a game to be developed in a week and do well it should have, if not buy in, at least team-wide understanding of the concept and basic gameplay.

This last bit isn't so much a new lesson but one we continuously learn: as a rule we will underestimate the difficulty of something important.  For SS1 (Shoul Shenanigans) it was (non-pixel) art, in SS2 (Shackled Stones) it was level content, turn around on enemies, and map scripting integration.  For SS3 we hit a bottleneck with level creation again as well as game mechanics and necessity of things like pathfinding.

My take away from this is confusion -- maybe we should try again but with more unity behind an original idea, maybe if we're going to do our own games we should be more "realistic" (but then the creative process is a bit less fun, for me at least), maybe we've reached a bottleneck on our current development style (I suspect this, if nothing else, to be the case).

Going forward:
While I'm not sure about it yet I suspect I won't be working with the NP team for PyWeek13 -- I'm getting a little bit burned out doing work so far removed from the actual game portions of the projects.  Most of those on the team are long time friends of mine and Blake is a fantastic developer so I hate to leave them hanging... but the difference in drive during a PyWeek run between Blake and I is 1) intimidating 2) makes me super hesitant to take a role I think I would find interesting. For the most part I don't expect this to make much difference on the NP team -- Blake is one of those types that can do everything from Art to Dev to Music if he needs to and I'm no better as a second dev than ikanread so shuffling people around should mean for only a minor distraction, if any at all.

I've also been super encouraged by the feedback we got.  Specifically whoever said "Wonderful intro. Fantastic immersive story. A bit lacking in the gameplay department. I don't know if I would call this game 'fun.' But it is a beautiful work of art." makes me really happy, thank you =)  There were enough things of this sort I want to see Shattered Silence built as the game it is in my head so I'll probably start development for it as a long term project outside of PyWeek (probably in C++ or C#)

 - Based on performance vs my personal goals for PW12 I think this was our best submission yet
 - I thoroughly enjoyed the theme and our concept and will likely start development on it as a new project and build out the other 88% of the game
 - I suspect I'm burned out on the team thing, depending on how the second edition (SS3mkii) is going I may not be in PW13 at all.
 - This turned out a little more post-mortemy than I thought it would be.  If you've made it this far you deserve a cookie.


My legs. They are wibbly wobbly.

Ahh, Saturday. 5PM PDT. The end of PyWeek. That moment when I stand up on my now wibbly-wobbly hind legs and let these worn down nubs that used to be fingers grow back. It's been a rough week but in different ways than previous PyWeeks. This was quite different than my previous experiences. It probably wasn't my best PyWeek either, and as such I've learned quite a few things. 

On a happy note, though. I'm not dizzy and hallucinating the way I was directly after PyWeeks 10 and 11. 

Typically our team structure is as follows...
- 1 or 2 people coding
- 1 person on pixel art (sprites-n-tiles)
- 1 person on large art (backgrounds, portraits, and cutscene art)
- 1 person on music
- n people on assets where n is proportional to the size of the game we ultimately plan to make. 

If n is large enough, I will lay down basic architecture and infrastructure in the first hour of PyWeek to unblock the other coder and then spend the rest of the night (probably to sunrise) making a fancy dancy UI map editor for the n asset-development people. For PyWeek 10 we made a story-based platform game. For PyWeek 11 we made a overhead-2D zelda-style dungeon adventure game. Therefore n was assigned a large value. 

This time we were making a real time strategy game and the intent was to have auto-generated levels for custom games and 9 levels for the story-mode game. 

"Gee, 9 doesn't sound like a big number for total number of levels"

So I made the mistake of assigning n the value of 1. In Shattered Silence (yup, that's the game's name) you start out with a very small map. Once you complete that map, the bounds of the map increase by a factor of 3 on each edge (so the area is "9 times" the area it was before). There are 9 zoom levels, so you have to beat the level 9 times. 

The side length of the 9th level would equal three to the power of eight times the original map width. (power of 8 because there are 8 zoom incrementations for 9 levels)

That's a big number for a side length. If it was strictly following this pattern, the final level would be 6561 times larger on each side taking up a total area 43,046,721 times larger than the original level. Because no one here owns a computer with 22 gigs of RAM, we tweaked it a few times such that the actual zoom is sneakily a bit smaller and midway (between levels 5 and 6) we reset gameplay to an abstracted view where you no longer control individuals, but icons denoting crowds of people instead. Looking back, it reminds me of Katamari Damacy's zooming system. This made it manageable and still runs 120 fps without making my laptop burst into flames. But still, it was quite a bit more to map out than I had anticipated. 

Mistake 2: leaving map making till the 2nd half of the week. Had I done this earlier, I would have realized that these maps are pretty huge. Second, the person that was going to do the maps had a personal emergency come up on Thursday. Three of the teammates were unavailble post-Thursday and had their work finished up. The other 2 had full work item queues. So unfortunately quite a few things had to give to get the maps to a playable level. 

- Seemingly innocent tasks can balloon really quickly
- As much as any of us can dig ourselves into a bunker and live off a feeding tube with no scheduled distractions for the whole week, life has a funny way of catching us by surprise. Recovering from such surprises is much easier to do when work is accurately estimated before Wednesday. 

The other lesson Ive learned is that the game idea has to be something /everyone/ on the team feels passionately about. We felt okay about the idea we had for 9 times when we chose it, but only okay. Once we started to sit down and create it, no one was nearly as excited as they were in previous PyWeeks. There was probably a few reasons for this. One reason could have possibly been that there was no fully functional game until late in the week. The whole engine was comprised of numerous small moving parts and couldn't really be enjoyed until at least most of them were completed. 

Previously, we made games where you run around and do things. The "run around" bit took about 2 days and "do things" bits took the other 5. But at the very minimum you could see concrete progress and that probably helped morale tremendously without us realizing it until we saw the lack of that this time. 

- When morale starts to dip, it's really contagious. 
- Make an ugly game that works in 1 or 2 days. Make it work nicely in 2 more days. Spend the final 3 days on polish. If everyone comes down with the plague on Wednesday, then hey, you still have a game that "works nicely". 

So those are the lessons I've learned. I've often claimed that "PyWeek is the time to perform, not the time to learn" but this time I've learned that learning is unavoidable. Anyways, it's time for me to return back into hibernation in the real world for another ~5 months until PyWeek 13 when I'm sure I'll learn several new and different lessons. Hopefully my fingers will have grown back by then. 

It's been a rough week and even though there were several factors working against us, I am still pretty pleased with the final outcome. Once again, we have really awesome art thanks to Spears and first-timer Niels, and we have much more sophisticated (in a good way) menus than we ever have before thanks to Falun's efforts. 

I hope you enjoy it. :)


Oh, and a Completely Random lesson:
PyGame's Surface.set_alpha() method does not work on surfaces that contain per-pixel transparency. However, it can be cleverly hacked around. Suppose you wanted to accomplish something that looks like this:
# surfA is a 100x100 surface that contains transparency
# screen is the game screen that you want to blit it to
surfA.set_alpha(128) # will not work because PyGame is silly. SILLY!
screen.blit(surfA, (x, y))

Instead, try this:
tempSurf = pygame.Surface((surfA.get_width(), surfB.get_width())
tempSurf.blit(screen, (-x, -y))
tempSurf.blit(surfA, (0, 0))
tempSurf.set_alpha(128) # this WILL work 

screen.blit(tempSurf, (x, y))


Gameplay note

The First Post... 7 days in?

I guess the only post-submission note I want to add is that you can view the end-game cutscene press F8 from the title menu.

We don't save intermediate states so it can be difficult to reach it otherwise. Enjoy!

Add a comment