April 2013 challenge: “nemesis”

The Sea of Good and Bad - TSoG&B: Voice acting

Posted by cyhawk on 2013/05/01 03:08

Ever since playing Shundread's The Catcher in the Strife, I knew how much voice acting can add to a game. Finally with so much dialog in the game we got to give it a try! The tricky part is that the dialog changes during the week as the gameplay evolves. So we left recording the voices until late — too late.

Most of the recording slipped past the deadline and was only added in version 1.1. Also it was all one take with lots of laughing at each other. It is tons of fun, and I think the result adds to the game no matter how ridiculous it turns out. I recommend you give it a try for next PyWeek if you haven't yet!

It would have been even better if everyone on the team would have voiced one character, but we couldn't get it organized in time. Well, there is something left for the future!

Add a comment

Last Will of the Emtar - Last Will of the Emtar - mechanics postmortem

Posted by Cosmologicon on 2013/04/26 05:03

Typically I'm pleased with how game ideas turn out. They're fun either immediately or after a little work. This is the first time I was ever really disappointed in an idea. The final game contains significant compromises to the original idea. Many of the game's imbalances are the result of gameplay elements being affected by changes near the end of development, in order to salvage the overall experience.

It's a tile puzzle tower defense game. Tiles are active or inactive based on their orientation relative to adjacent tiles: all the contacts must touch contacts of the opposing color. This is where "nemesis" came in. Defensive towers only operate when their tile is active.



Quite early in the development I realized this is way harder to play than I expected. First of all, if you change one tile you affect all four tiles around it, like a huge Rubik's cube. Also, that sea of red and blue is disorienting. Just look at it. If they weren't highlighted, how quickly could you pick out the active tiles? I considered changing the rules so that you had to match colors rather than mismatch them. This is far more common in puzzle games, and it was slightly easier. However, since this was my main link to the theme, I decided to stick with the mismatching mechanic, come what may.

(I did, however, get a story out of it. The disorientation of mismatched colors became the central plot point. If you like stories like this, I think the payoff at the end of the game is well worth it. Among my games, this has one of my favorite stories.)

And that's only half the mechanics. Then you have the tower defense elements on top of it all. I originally conceived TD mechanics that made extensive use of the tile layout. eg, traps that would swap the tile the enemy was on with a farther back tile. Before I even implemented them, though, I knew it would greatly exacerbate the playability nightmare. So I quickly replaced those devices with more traditional guns and traps.

Still, in the middle of a wave, it was nearly impossible to recover if one of your towers became disabled. There was no point doing anything during a wave except sit back and hope your defenses hold. Obviously not that fun. I finally made several large changes to make it possible to recover from a few disabled towers.
  1. Added a device that changes the colors of any tile so as to activate it in one click.
  2. Enemies originally attacked by randomly changing the colors of a tile. I changed it so that they rotate the tile left or right (much easier to undo).
  3. Enemies used to remove any tower on tiles they attacked, now they leave the tower but disable it.
  4. Enemies used to attack (and rotate) tiles adjacent to towers. This would disable the tower without making it immediately clear which tile was attacked. Now enemies only attack towers directly.
With these changes in place, the game is playable, but about half the tools in your arsenal are worthless or close to it. You never need a different strategy than put a bunch of lasers, which is what players seem to be doing. So, the gameplay variety was hurt, but at least the game is playable.

In retrospect, I probably could have guessed early on that this would have happened. I think in the future I'll be more critical of complex game ideas. Thanks for reading!

Add a comment

The Sea of Good and Bad - TSoG&B: Finish line

Posted by cyhawk on 2013/04/26 01:09

I spent the rest of the day drawing character portraits. While the finished drawings are not much more elaborate than the sketches, they took immensely longer to draw. Perhaps it's my "while not looking_good(line): undo(); line = random_line()" approach :). I had to take Friday off work to finish.

All the while everyone else was working on design, coding and music at such pace that I could not follow. Would there be a game at the end in which these characters get to be featured? Or will they just float over a black background in the company of a few white squares? (This was the general design for a long time.

I was very relieved and impressed in the end, as over the course of Saturday the game turned playable and even fun. This is a really awesome thing about working in a big team that I had missed in previous PyWeeks. Code magically appearing even when I had nothing to do with it :). I hope my teammates will post some diary entries about this part of the development, since I wasn't able to follow along.



I also made rough 3D ships and stuff in Sculptris. I was aching to try it for PyWeek, since it's such a fast and simple modeling tool and I was not let down. The good thing is that even if you're not great at modeling, the end result will just look like a child's play-doh sculpture. (As seen above :).) It exports to OBJ which is easy enough to load.

Add a comment

The Sea of Good and Bad - TSoG&B: First days

Posted by cyhawk on 2013/04/24 00:42

Planning out everything had the advantage that we could immediately start implementation on Sunday. I threw together the skeleton of the game in an hour that had all the core components (in a non-working state of course :)), and everyone could start plugging in parts in parallel.

The downside of the big team was that I could not follow progress closely. Since I was working on other designs in the pre-production phase I barely understood what was the game we were making about. I thought I'd let those who knew more work on the game logic. The pre-production design was rather vague about the setting (the white wizard of Life battling the black wizard of Death) so I went to spice it up.

I wrote a goofy script and sketched portraits for the characters. Game dialogs are not an easy genre. They need to be so short as to not bore the player that every sentence has to serve multiple purposes. You have to expand the setting, advance the story, explain the game mechanic and build the character with the same dozen words that fit in the constrained space at the bottom of the screen!

So I probably failed at all of those goals :). But it was a good effort. Players with a keen sense for detective stories may be able to work out the plot. Who sent the Kraken? Who was Tom working for? What the hell is Aunt Menace going on about?

Add a comment

...As Was Foretold - Update

Posted by Rectifier on 2013/04/23 19:54

If you're wondering which download to use:

Windows users are encouraged to use the py2exe version for simplicity.

Mac or Linux users should use https://dl.dropboxusercontent.com/u/33587464/As_Was_Foretold_Linux.zip instead; it has a trivial patch for some graphics corruption.

Add a comment

For Science! - Postmortem: For Science!

Posted by reidrac on 2013/04/23 16:50

Game concept

I had a good idea for the "secret identity" theme, but I failed to find anything interesting for the other themes before the challenge started. Because of that I spent all the first day figuring out what to do.

I decided to use the "arch-enemy" twist of nemesis and I wanted to do something with a strategy component presenting two enemies fighting each other over and over. Besides I wanted to let the multi-player door open, just in case I had the time and the inspiration, and a "vs" game seemed a good idea.

One element that is frequently used in strategy games is resource management. Basically I needed a way to provide to the player limited resources so he had to choose between different actions in order to defeat his enemy.

I'm not sure how I ended with a match-3 puzzle game for that, specially because I used Command & Conquer as a reference for the resource management idea. C&C is one of the strategy games I've played most (back in the day), and I tried to find a way to reproduce some of the basic mechanics with my limited art skills.

The match-3 puzzle kind of works, with very simple rules:
  • You must match 3 tiles or more to obtain resources: money and the assets to use against your enemy (they cost money).
  • Assets let you attack and defend (repairing your shield).
  • It is turn based (just in case the multi-player part happened, remember?): you can match-3 or use assets, so you must choose what is best for you each turn.

At first I meant to use rock/paper/scissors mechanics with each attack having a defensive counterpart, but because my artistic limitations and the time pressure I had to simplify the idea: several attacks with different price/damage to make the game more interesting and a "shield up" asset as defensive element.

The main problem with this game idea is the artificial intelligence, because the player will fight against the computer and it needs to be both challenging and fun. I didn't want to do it too difficult neither too easy.

The best way to minimize the effect of a bad AI is to have a "tournament" or "story" mode with a increasing level of difficulty, or a "human vs human" mode. Unfortunately I didn't have the time to get that far, but it would have been nice.

You can check the "final" idea here: http://media.pyweek.org/dl/16/useboxnet3/game-idea.jpg

I'm very happy I stuck with the plan, because by the end of the week I was inclined to simplify things and the result would have been quite different.

Development: what went OK

I read about OpenGL, Pyglet and Cocos2d before the challenge. I made a warm up game with Pyglet, and that was very valuable. In fact I should have done the same with Cocos2d because I didn't know how to use the library and that made things a lot harder (but that's part of "what went wrong").

This time I've used Inkscape for the graphics and I like the results. I didn't have experience with the application, but that wasn't a big deal because I have limited pixel art skills too, and looks like it's easier (or faster at least) to draw decent stuff with Inkscape than to do good pixel art.

For the audio I used sfxr and Audacity, plus SoundTracker for the song (nailed it, didn't I?). I kind of regret adding the song too early in the development process because by the end of the week I couldn't get it out of my head.

Having one day off was great. I don't think I would have finished the game without that extra time, specially because I didn't have a game idea to start programming on Sunday.

My development cycle is kind of slow because of testing, and it is a good thing. In fact I've only detected a very small aesthetic bug in the final version of the game, and that feels great!

Development: what went wrong

Again: don't use a library you don't know well enough. Just don't.

I did it in the previous PyWeek with PyGame, and did it again this time with Cocos2d. Yes, Cocos2d is amazing; but it's hard to use and too easy evolve your code into something unmanageable. Besides that feeling of "I don't know what I'm doing" doesn't help when you are programming against the clock!

I tried to have a better structure for the code, and I had a plan. When I went with Cocos2d I thought the Scene/Director/Action structure of the library would force me to "do things right", but I was wrong because I still made a couple of big mistakes (I went with a view/controller pattern and in some cases I put data in the wrong place). At the end of the week I had a mixture of spaghetti code with some lasagne code (too many layers!).

I didn't test Cocos2d with py2exe and I found a couple of glitches. Not a big deal because I was lucky and I could patch the library, but that's something I should have done before the challenge. After all the hard work it's really heartbreaking when you stumble upon a bug in one of the libraries!

Finally I completed the game scene too late, and I didn't have enough time to play it to fine tune the gameplay and the AI. I think it happened that way because the game is like two games in one: the match-3 part (it was "ready" on Friday) and the attack/defence part (I couldn't finish it until Saturday afternoon); and two control parts: the mouse and the AI.

I have setup a web for the game and I'll release post-compo updates fixing any bugs I find (not many so far).

Final words

This PyWeek was intense, as it is supposed to be :). I had more time for coding than in the previous PyWeek, but the game was more ambitious and at the end I had more or less the same stress level.

I loved it, but I need to find a way to do it less tiring next time!

Add a comment

Avidus: Those Left Behind - Bugs.

Posted by flyingfox on 2013/04/23 05:41

Turns out that the released version has a pretty good bug in it.  If you click the icons, the game will crash.  I didn't find this, because I have never clicked on one of the icons since I added keyboard shortcuts.  Long story short, use 1, 2, 3, and 4 to activate your powers.  It's not like you have a lot of time to play around with the mouse anyway. :)

Also, make sure you have numpy (http://sourceforge.net/projects/numpy/files/NumPy/1.7.1/) and scipy (http://sourceforge.net/projects/scipy/files/scipy/0.12.0/) installed.

We now return you to your regularly scheduled judging.

PS. Wow, there are some nice games this year.  Put's mine to shame.

Add a comment

The Sea of Good and Bad - TSoG&B: Before PyWeek

Posted by cyhawk on 2013/04/23 03:30

We were too busy to post any diary entries, but now I think we can go back and summarize how things went.

I basically mentioned PyWeek to everyone I bumped into in the weeks before the contest and got 10 or so people in the team. It was crazy. We came up with 2-3 detailed ideas for each theme candidate and it was painful shooting them down. Here are my dead soldiers if you're interested:
It was a lot of fun just throwing ideas at each other. We also tried to make warmup games, but that didn't go very far. (Just watch out, I'll finish Space Bear Cathedrals as warmup for next PyWeek!)

In the end we had to settle on one idea per theme candidate. This would surely have escalated to a knife-fight had we not worked through Google+ hangouts. (How do other teams do this? I wonder if there is a peaceful way of going about it...)

We then added even more detail to the winners, down to screen mocks and milestones! (See the TPS and the secret identity game above.) We thought we were ready for PyWeek! But were we...? Find out in our next episode! :)

Add a comment

Nemesis - one drawing

Posted by circusblatta on 2013/04/23 02:31

1 comment

Nemesis - things left unfinished

Posted by ilseppia on 2013/04/22 08:53

This time there were only two of us participating the competition.
This entailed some things left unfinished.
Anyway the game is playable and at least winnable.

Let me add some notes here for those who want to play the whole the adventure:
- Action key is Left CTRL. You can customize keys by editing pw16_variable.py.
- You can forget about mouse by using 1-8 keys to select objects and SPACE to activate them.
- Collisions are glitchy. If looks like you can't move on a free cell, just try to go back ad forward again, or try to shift you a little on your side before trying again. It may also happen you get stuck in a cell... you can fly over objects by pressing F12 (debug mode).
- "sword" combo is not working fine, I suggest to just avoid enemies until you get some long range fire.
- Enemies positions are misleading. It looks like they move towards to you, but they are not... wrong collision logic still checks their original cell position, so they will hurt you/can be killed only in their original cell.
- "shield", "immune" and "invisible" combo are not working,. Forget about them.
- When getting into a dark room you need to have the torch aready active. So just go back and enter again in the dark room with torch.
- There are 10 Athena's Owl to free in the map
- If you get stuck in front of something even if you have the correct combo active, remember to press the action key.
- Trees images were supposed to be 2 cell tall.
- Game automatically saves at every object collected. If you want to reset the game just delete the file in save folder.

It would be nicer to finish/fix everything in time.
Thanks for playing.

Add a comment