PyWeek - Run!
Ratings (show detail)
|Run!v1.0.zip — final||8.60 Mbytes||Ermahgerd||2012/09/15 20:33|
|1.0 source and win32 executable|
|Run! v0.8.zip||594.72 Kbytes||Ermahgerd||2012/09/14 17:31|
|Run! v0.4.zip||593.73 Kbytes||Ermahgerd||2012/09/13 03:39|
|Run!.zip||569.28 Kbytes||Ermahgerd||2012/09/12 02:29|
|Run_SS.png||252.73 Kbytes||Ermahgerd||2012/09/11 18:07|
Sunday 16 September, 2012
[ Ermahgerd @ 14:29 ] Postmortem
So now that the week of development is over, I thought that I should take a few moments to reflect on the past week, and go through the various parts of the development that I was happy with, as well as the parts that I would do differently next time.
First, I have to say that overall I'm extremely pleased with the final product. I managed to throw together what, to me, is a really fun game in less than a week. I got sick early on in the week after nursing my girlfriend back to heath, but it didn't slow me down too much. I was able to get a few days off from work, and class due to the illness, and used a lot of this time to work on the game. My girlfriend was extremely helpful and supportive during the week.
Pygame was a huge part of the rapid development. It's such an easy to use framework, and well documented. Not once did I need to consult with an outside source, such as Google, to find out how to accomplish something specific. I did run into a performance issue in the beginning however, which forced me to change the entire direction of the project. I don't know if this was poor design, or a limitation of the framework, but it's definitely going to affect my designs going forward with games using Pygame. It's also going to push me to exploring other frameworks, such as Pyglet, especially when I want to push big ideas into my games.
The week before PyWeek has started, I was doing some research on handling game states for my last game, Kitty Vacuum Dodge. I asked about it in the Pygame IRC channel, and Idlework opened the doors to State Machines. This had a HUGE effect on the code design (and will on future games). The modular nature of the game states allows you to easily customize the states, as well as easily handle initialization and cleanup when necessary.
One thing that was sorely lacking in my development was planning. Most, if not all features of the game were made up on the fly, and it shows in the code. It got a little tricky when implementing elements later on that relied on previously implemented elements, because the elements relied on weren't being designed with that in mind. That resulted in a lot of back and forth tweaking, and some less than elegant "hacks" to force things to work the way I wanted them to. Midway through the week, I did manage to take a few hours to refactor some of the code, and fix a lot of the spaghetti, and circular dependencies, but I still think it could have been better. In the end however, it works, and I suppose that is what matters the most.
Something that kinda worked and kinda didn't was the art. I managed to put together all of the art on my own, and it works, but isn't quite what I had envisioned the game looking like. I haven't had any prior experience looking for/using free art resources on the web, and didn't want to waste any time doing so during development. The current art definitely gets the point across, and has the benefit of being made with a specific purpose in mind. It was just too simple, and I wanted the graphics to "pop" a bit more than they do. I also wish I could have added a few more backgrounds to the game.
Music and sounds ended up being a complete afterthought. I had forgotten all about them, and had no plans originally to add any. During the last 48 hours, when I was spending time doing tweaks, and adding a help screen, I decided to take some time to look around for some free music and FX. Pygame made adding them extremely simple, in fact, finding the right sounds was harder than actually putting them in the game. I'm so very happy with the background music loops.
In general, this week was a success for me, as all I really wanted to do was complete a game in a given time frame, and I managed to do that, and exceed all expectations for what I could accomplish during that time. I will certainly be participating in future PyWeeks, and try to make each successive entry bigger, and better :)
Saturday 15 September, 2012
[ Ermahgerd @ 20:38 ] Version 1.0 (Final) uploaded!
The finish line has been crossed! In the version 1.0 directory, you will find the source, as well as a directory containing the windows executable. I had a ton of fun developing Run!, and learned quite a bit. I will be making another diary entry in a few hours going into more detail regarding the development process.
Overall, I'm very happy with the end product, especially considering it's only my second completed game. I can't wait to see what everyone thinks!
My highest score is 4365, can you beat it?
Friday 14 September, 2012
[ Ermahgerd @ 15:12 ] Bug update.
I just realized today that there was a rendering bug on Windows machines. That bug will be fixed in the next version. I had been running the game on Mac hardware until this morning, so the bug went by unnoticed.
[ Ermahgerd @ 03:32 ] Competition end is dangerously close...
So today most of the progress made was mainly code cleanup. I didn't want to do this until everything else was complete, and I was more or less sitting on some "spare" time. However, the spaghetti code that I had mentioned in my previous post was causing some trouble with the power-up systems. It was a situation that would have been a snowballing result of the hack code entered previously, and I decided to fix all of the code instead, rather than making it worse. It's still not the prettiest work ever, but it's much cleaner than it was before, and even resulted in a performance gain on my machine.
Other than clean the clean-up, and start on the power-up system, there weren't too many other additions to the game today. At the same time, however, there aren't very many more needed before I'm satisfied with calling it one-oh. I want to tweak the enemy patterns, and add a "High Score" screen viewable from the title screen, and at the end of the game. If time allows it, I will make the data persistent, if not, it will be session specific.
I'll try to have a new version posted tomorrow night.
Thursday 13 September, 2012
[ Ermahgerd @ 03:39 ] Amazing day!
Whew, what a day.
Today, I managed to get quite a bit done, which you can see by the v0.4 upload.
Here's what I accomplished:
- Animated main character.
- Added projectiles and projectile collision.
- Added Title Screen state.
- Added heads up display, with various elements
- Added a "combo" system for rewarding consecutive kills, along with a hud element to display bonuses.
- Squashed quite a few collision bugs that popped up due to adding a number of new elements.
One thing that I can already say I will take away from this experience is planning. I specially mean planning my code. While it works fine, and I'm generally proud of it, I have ended up with a bit of spaghetti code in a few places where I decided it was necessary to just make something "work". I will definitely keep this in mind for my next project.
I'm so very excited about how this project is shaping up, and can't wait to see how the final version ends up.
Wednesday 12 September, 2012
[ Ermahgerd @ 02:28 ] First source upload!
Well, I managed to get quite a bit done today. To celebrate, I'm going to do my first version upload!
In this version, I've managed to fine tune the platform generator, animate my ninja character, and fine-tune character-to-platform collision. It's a solid framework to build on.
If you play the current version, you will notice that the character will fall from the sky at the start (and sometimes miss the first platform). This is only for the current version, and will not be the starting position in the final product.
Overall, I'm pretty happy with the current state of my systems, but would really like to tweak the character's jump characteristics. I'll probably hit that on one of the last two days.
Up next is the opposing ninja enemies, and projectiles. Following that will be the HUD, and game states.
I'm actually really proud since this is my second game, and first Pyweek entry. My main goal for entering this competition was to start a project from scratch with a firm deadline. So far, I feel like the end is within reach!
Tuesday 11 September, 2012
[ Ermahgerd @ 17:54 ] Rolling with the punches.
So a lot has happened to the project over the last few days, but progress is still being made.
The original concept was to have a small squirrel, running through the forest jumping from platform to platform. The design was a kind of platforming "runner", where the character would constantly run right, and the only control you have over the character is making it jump (this is what is used to meet the "One Way Trip" theme requirement).
The system is still pretty much the same, but I had to scrap the whole squirrel in forest thing. I'm by no means an artist, and coming up with a forest background proved to be beyond my skill. I am instead doing a city landscape, which meant changing the main character from a squirrel to something else. For the moment, I'm going with a ninja - because who doesn't love ninjas :)
I'm considering adding other actions (throwing stars), but will wait until the primary systems are in place, and working as I would like them to.
Here's a screen of my current progress. It's depicting the level running, with the platforms moving from right to left. The platforms are created procedurally, at a random width (specified in a range), at a random y-location (specified in a range).
There's some dirty collision in place, but it's definitely not what I want in the final product. I will do some fine tuning so that the character needs to hit the platform on the top to be safe, and not just intersect it at any location.
I still have a lot of work ahead of me, but I still feel like I'm on track to finish by the end of the competition.
The cold I mentioned in the last post gave me the day off work, so I have some extra time to boot :)
Monday 10 September, 2012
[ Ermahgerd @ 15:05 ] Problems on the starting line!
So the competition has just begun, and I've already hit a bump! I'm still relatively inexperienced with Pygame, as I've only written one complete game, so still lack the experience to really make it shine.
The problem I ran into was trying to implement a 3-layer scrolling parallax background. The layers consisted of a static background (did not move), and 2 layers of trees, which stretched the entire height of the screen. The game was unable to exceed 10 frames, which was completely unacceptable for the type of game I'm going for.
Due to this, I lost a couple days of code and art, because I'm scrapping this part of the plan. I'm still technically on track however, as I had allocated these days to work on it in advance.
Oh, and my girlfriend gave me her cold >.>
Hopefully I'll be able to power through it, and have something up in the next 24 hours that resembles a demo.