Any clue when the next PyWeek will be?
|final screenshot - no soccer ball :(|
This is a team entry. The members are: trailblazer, mcferrill, rabidpoobear, StupidMop, PyTM30, dodgyville and Hippo.
|File||Thumbnail||Description||Upload time (UTC)||Size|
|Kiwi_Soccer.zip||FINAL SUBMISSION Weak Entry :(||2005-09-04.00:10Z||6.07 MB|
|statusbars.png||url||soccer ball and status bars (not in the release)||2005-09-04.00:16Z||97 KB|
|finalshot.png||url||final screenshot - no soccer ball :(||2005-09-04.00:16Z||73 KB|
Just a quick note on the comments. We don't have much of a game here. We basically aimed really high on this project, and just ran out of time. We didn't manage to check in much of a game, so of course we're not going to win this contest. However, I think we do have some interesting technology here.
Here's what's going on:
- 2d physics engine: pyODE is a 3d physics engine, so we had to trick it into handling our 2d room. We ended up building something like an ant farm: everything is happening inside a 640x480x32 unit space, with walls all around holding everything in place. When you press left or right, you're actually applying a force to the kiwi, and he stops because the atmosphere applies resistance. At one point he was able to kick around a soccer ball and it would bounce around realistically, but that didn't quite get integrated with the level editor.
- angled platforms: the world consists of arbitrary rectangles loaded from an SVG file. We hit a big snag here dealing with svg's transformation matrices. I was up a whole night reading about linear algebra trying to get it working, but never quite nailed it, so we had to fall back to non-rotated platforms. Unfortunately, even these disappeared from the room in the release version.
- metabolism: kiwi's can't fly. Since this kiwi can, thanks to his hyped up metabolism. The price is that he has to eat a tremendous amount of food for this power. Fat stores and glucose actually behave sensibly, and he can even eat food. We just didn't have time to get the speed right, or to get food into the level. I added a quick hack to force-feed him invisible food just to keep him from starving in the release version, which is why the glucose meter goes up on it's own. He still still starves if you fly too fast though. The original idea was to make him change shape as he got fatter and slimmer, and to incorporate weight changes into the gameplay, but we didn't get that far.
- console state machine: the menus, dialogs, high score system, and the game it self are all modelled using the State design pattern, with separate objects for each. So one console is always running, and it just swaps out these state objects as things happen. This turned out to be a really clean way to model a game.
- model-view-controller architecture: the model consists of geometry and bodies in the physics engine, whereas the view tracks these objects and moves the sprites around on screen accordingly. Eventnet and the event handlers in the individual state objects act as the controller.
- nice sound/music system: illium did all this single handedly so I'm not 100% sure how it all works, but using it was very easy, and the code is worth investigating
- inkscape scripting: inkscape is an open source svg drawing tool and part of our project was getting inkscape to break the levels down into foreground and background PNG fies, and extracting the geometry/object layer as a simplified svg. It looks like inkscape could be a great level editor once we get this working.
Much of the system is also written in a semi-literate style, with test cases and documentation interspersed throughout the code. That's part of what the trailblazer concept was about, though that part didn't quite go off the way I'd expected.
So anyway, we didn't finish and what we have doesn't look like much, but check under the hood and you might find that there's some interesting stuff going on. We're planning another week long sprint to happen in a few weeks. Meanwhile, I'm hoping to have time this week to at least get the levels loading so we can actually play!
well. it's over. we didn't quite ship a working game, but we did show off a lot of stuff. No food or eggs or ladders or even the soccer ball... But we did get backgrounds, a transparent status display, music, metabolism (though we're faking feeding the kiwi food automatically) and semi-real physics.
We were hoping to get at least the soccer bal it into the final release but it got traded in for loading levels from a file. Even then we only managed to get two in, and one of them doesn't work. :/
So, we won't be winning a contest, but we do have the makings of a cool game here. There's already been some talk on IRC about continuing the project and restrategizing for the next pyweek. We're going to try and meet up tomorrow on #trailblazer around 8PM EST to talk things over.
Thanks everyone for all your hard work! I know *I* had a blast and learned all kinds of things. I hope you guys had fun too.
Okay, hope to see you all tomorrow. I'm going to get some sleep.
Well, I don't know if our team will finish the entry in time for the contest but we will finish it. Our team leader is out of commision as I'm writing this (exhaustion) and I only have one helper. We'll do our best and if we don't get it out in time at least we'll know more for next time and will have had fun!
Well, I've been up all night... Yesterday we had a 2D world drawn in inkscape, saved to SVG, and extruded into 3d space for pyODE. That mostly works, except I think the y coordinates are off a bit for the platforms.
What this is showing is that we can now take that world and map sprites to each object in the physics demo. Also, we can render sprites in layers.
Lots of other stuff is shaping up too, but I'm too tired to tell you about it right now. Maybe someone will post to the blog... :)
Adam made a good case for the feasibility of using pyODE for 2d physics, so we agreed to go for it. Dillon and I investigated how to get pyODE and PGU talking to each other, and realized we didn't need tiles anymore. Real physics opens the door to a world of hills and slopes and funny angles. Instead of a tile editor, we're just going to draw our levels in inkscape, with a special layer of simple rectangles to describe the room to pyODE.
So Dillon and I shared a scren for a few hours (along with various helpers) and worked out the code for parsing rectangles from an svg file and the plan for turning them into 3D boxes for pyODE. Once we could see how things were going to fit together, Dillon went off to work on the next step: displaying the screen in pygame.
Sean drew our main character: a slick looking kiwi bird - see the concept art in the gallery on blazeofglory.org. Last I heard he was off to do some animation.
David disappeared for a few hours, only to surprise us all later with a working version of the metabolism engine!
Meanwhile, fellow entrant Rene Dudfield (illume on here) found himself with too much client work on his hands, and too little time to complete his entry this week, so with Richard's approval he's now the sound and audio lead for team trailblazer. Welcome, Rene!
As for me, I think I've finished the room loader - I had some major confusion when it came to mapping svg's 2d rotation matrices to pyODE's 3d world. In any case, we've got a Room object now with some ode objects for Adam to work with.
So: a lot of progress today. With luck we'll be moving things around the screen tomorrow. :)
I just posted some new concept art based on last night's discussion in the gallery on blazeofglory.org.
I made a video demo of phil's game utilities to orient our graphics folks. Probably old news to most of you guys if you're reading this... :) You can watch it here. (about 8 minutes / 6MB)
We've got the cvs repository and bug tracker set up. See blazeofglory.org for the links (cvs instructions including a movie are on the wiki)
I hope this is okay. We've got about 11 people on my team, but only the one team entry (except for one guy who already had an account here). Do I need to get everybody into the system?
We're having an open welcome/orientation meeting at 7pm EST in #trailblazer on irc.freenode.net ... If anyone's still looking for a team, feel free to swing by. Sorry for the short notice.