pygame is
Simple DirectMedia Layer is
Site Swing
Merry Christmas - Christmas Avenger

Merry Christmas - Christmas Avenger - 1.0

Nathan Franck (font)



The best way to say "Merry Christmas" is with a quaint arcade game that looks very simple but draws in the most hardcore of gamers for great lengths of time. As maker of this game, I do find it greatly enjoyable. Cheers, and Merry Christmas.


Home Page:


click to view original size


Merry Christmas - Christmas Avenger - 1.0 - Dec 18, 2010
Merry Christmas - Christmas Avenger - 1.0 - Dec 26, 2009 account Comments

If you wish to leave a comment with your account, please sign in first.

March 3, 2011 12:03pm - Zachariah Callaway - nickname: (xzcallaway)
A .deb package of Christmas Avenger is available for download at in the Animations section.
December 29, 2010 6:44pm - Nathan Franck - nickname: (font)
Sure, you can steal it.
December 28, 2010 7:35pm - Robert Leachman - nickname: (quazar)
Thanks Nathan! yes it does help, I've tried adding time to my animation but it's not making much difference. The clock on OS X is a little wonky and there seems no getting around it. Good job with your game! And I like Flash Tactics too! Hey you didn't declare a license for these, is it OK to steal your code? :) I need to try some physics next, after my current project which is all retro at the moment and tough for this newbie.
December 24, 2010 12:57am - Nathan Franck - nickname: (font)
I'm trying to comprehend, but I'll try to explain. clock.tick(60) in there tells the program to delay the program to corespond to a framerate of 60 fps, though it usually can't do 60 fps. clock.tick(60) is a function that returns the delay between frames in the game, so I can use this number to find a global game speed to animate object physics (if the delay between frames is larger than usual, then the gamespeed is increased, and an object moves furthur during the frame to accurately represent the real-time position of the object). The code I used in this game is pretty ugly and bloaty, so don't study it too hard. It was made pretty rapidly over the course of 2 weeks before last Christmas. In more current games I've simply used the line self.timeLapse = self.clocktick(framerate), and when animating objects, I do something like: position += speed*timeLapse. This makes for smooth motions over erratic framerates. Hope I helped you somehow.
December 23, 2010 8:44pm - Robert Leachman - nickname: (quazar)
Dude where can I learn more about this notion of self.gamespeed? My animation is twice as smoother at 60 FPS than 30 (downright twitchy on my machine) but that's only the first part of the battle. I see your `min(float(self.clock.tick(60))/60*1.2, 1.5)` yields .32 or .34 most of the time but sometimes as much as .8 so that's clearly telling me my guys won't move smoothly until their speed factors in that variance... but still I don't get it. Clues? And... MERRY CHRISTMAS!
December 23, 2010 4:51pm - Robert Leachman - nickname: (quazar)
Really cool!
December 18, 2010 7:49pm - Nathan Franck - nickname: (font)
I brought it back just for you.
December 11, 2010 8:27pm - Robert Leachman - nickname: (quazar)
Not even a year later and it's gone gone gone? Darn.
February 16, 2010 2:26pm - DR0ID - nickname: (dr0id)
try PEP8 style for the future
February 14, 2010 12:09am - Nathan Franck - nickname: (font)
Your code wasn't a ton better... call it different programming styles ;)
February 14, 2010 12:08am - Nathan Franck - nickname: (font)
Glad you like it.
February 12, 2010 11:18am - Gummbum - nickname: (gummbum) - 4/5
I forgot to rate. A major ding for code organization, minor ding for my difficulty with cause and effect (my clicks = what goodies, exactly?). If I was only interested in the play value, I'd give this 4.5.

You should post a polite invitation on the Pygame mailing list, Nathan. I know the game is seasonally themed and the season has passed, but Christmas Avenger is great on its own merit--it doesn't need holiday spirit to lift it up. The description is very understated, hence I expect that people are really missing out. :)
February 12, 2010 11:05am - Gummbum - nickname: (gummbum)
Haha! This is a gem. Seagulls are more evil than I ever thought it possible: the villain you love to hate.

I played for about 25 minutes. After the first five minutes I got this:
File "Merry", line 1310, in <module>
File "Merry", line 1277, in start
File "Merry", line 98, in animate
game.achievements.chainreactions[self.vars[7]][1] += 1
TypeError: 'int' object is unsubscriptable

Looked into the code and my brain started smoking.

So I played some more instead. The game is a click-fest. Performance is very good. The happy xmas tree decorators are hilarious in their gleeful single-mindedness. The gulls almost stole my star, those &*$#@!

1) Some gulls nosedive into the ground and slide along it. Cosmetic, and uncommon enough that it doesn't detract much at all from the fun.
2) I was so busy clicking to defend my tree I could not observe/comprehend my scores and achievements. I know from glancing at the code that Christmas Avenger is more complex than just clicking birds for points. I definitely will play some more and see if I start to catch on. But this aspect might benefit from a slowdown time warp (for first-time players), or additional audio/visual cues.
3) The code was very hard to follow. if blocks nested way too deep. Classes are few, have generic names, and have a lot of data packed in them. As I hinted earlier, my brain set off the fire alarm. :)

I regret missing this when it came out. Overall an excellent job, especially for a "here's 1.0 in all its glory" release. I'm not used to seeing that on Did you have a team of testers behind the scenes?

our projects welcomes all python game, art, music, sound, video and multimedia projects. If they use pygame or not.
recent releases
Jan 31, 2017

Jan 24, 2017

Jan 19, 2017

Jan 18, 2017

Jan 7, 2017

Dec 30, 2016

Dec 8, 2016

Nov 28, 2016

Nov 27, 2016

... more!
for pygame related questions, comments, and suggestions, please see help (lists, irc)