Game title: Panspermia.
You control the destiny of a race of plant-like creatures on a faraway world. As they reach the verge of self-awareness, they realize that their planet is dying and they must spread their vines throughout the cosmos to survive.
Or something like that.
Awesomest Acorns Ever
Presented by pymike
Ratings (show detail)
Judges vs file order for PyWeek 8
Judges vs order in PyWeek 8
Production vs innovation graph for PyWeek 8
Production vs fun graph for PyWeek 8
Innovation vs fun graph for PyWeek 8
Spreadsheet of the pyweek 8 ratings
Cut from the team
Screenshot, 01 May
Sorta playable demo
Screenshot, 29 April
demo with selectable units
Screenshot, 28 April
Screenshot, 27 April
playable stage demo
Screenshot, 26 April
Warmup game complete
You can temporarily download it here.
I decided to focus on my weaknesses for this game, so it kind of sucks. During the competition, I'll focus on my strengths. The style's all inconsistent, and there's no innovation at all. Still, I accomplished my goals, which were:
- Refamiliarize myself with python/pygame. Check.
- Practice some pixel art. Still needs work.
- Try out my new Wacom tablet. I drew the fish with it, so check.
- Find online and use at least one free image, sound effect, song, and font. Check with some reservations. aenigmafonts.com seems to be great for novelty fonts, but I mostly want a good selection of normal fonts. And I couldn't find a sound effect anywhere of a game show buzzer (for a wrong answer).
- Add in-game documentation. This seriously hurt my PyWeek 6 entry. Ideally the Readme will be completely superfluous.
- Modularize my code. Better than last time, but still needs improvement. I'm still not sure what's the best way to handle the game data that needs to be accessed by several different modules. Should it be global? Stick it all in a huge struct that gets passed around? Also the cutscene dialogue, even though there's very little in this game, always takes up way more code than it seems like it should. I put it into a separate file rather than dropping it in the main loop. That's something, anyway.
- Try out pygame's Sprite and Group classes instead of rolling my own. I'm glad I did: it took a little getting used to, but the Sprite.kill() method alone makes it worthwhile.
- Use the Skellington and the creation script. Check.
- Pay attention to what takes the most and least time. No huge surprises, but I realized that there's a point - about 2/3 of the way through this time - when everything comes together. The code goes from being a bunch of tests into being an actual game. When I hit this point, I get so enthralled with what I've done that I spend a lot of time just playing around.
The one goal I didn't accomplish was including the pygame library with my distribution. Still working on how to do that.
Well, let me know if you've got any feedback, especially DNWs!
First night: got an idea
My game will be... well.... 8 years ago we would have called it a real-time strategy or god game. Today it would probably be called tower defense. I'm worried that this will be a common usage of this theme, so I was hesitant to go with it, but how can you say no to this little guy?
You can't really tell how cute he is, though, without seeing him scuppering around, so I uploaded my code so far. Here's the link. At least mine takes place on an actual lawn. Okay, an actual field. Okay, an actual forest understory. Close enough.
This game, the more I think about it, has a lot of similarities to my Pyweek 6 game: it's an RTS where you have to escape the planet before it's too late, and the story incorporates a classic sci-fi hypothesis. What can I say, I know what I like. This one should have much higher production value, though. But since I only know Pygame at this point, I may have to compromise. We'll see.
Second night: whole buncha acorns
Not much superficial progress tonight, but I modularized my sprite code. Now I can have more than one sprite at once, yay. I also did some extremely rudimentary avoidance algorithm, so that they don't all stand in the same place when you tell them to go somewhere. It's not nearly as smooth as C&C, but it'll do for Pyweek.
I added a few sprite classes. In addition to the acorns, I added little water droplets as resources (that's what plants eat, right?) and some kinda leaf thing that's a stand-in graphic for a structure. Isn't that great?
I also have a much better idea of where I'm going with the gameplay. Can't overlook that!
Third night: selectable units
I realized that selecting units is going to be more of a pain than I originally thought, so I decided to implement that right away. As expected, it was tough, but I got something that at least works:
I refactored my sprite classes, and I think they'll be much more expandable now. But now my selector classes need refactoring. Ah well, that can wait.
I'm not sure if the interface I chose is all that good, so I'm looking for feedback. Download my code here, if you're interested. It's all controlled through clicking, dragging, and right-clicking, and you use Shift-click or Shift-drag to select additional units. All you can do so far is tell them where to go.
So tonight was kind of boring, but I'm glad I got it out of the way. Hopefully tomorrow I can add some more interesting sprites and maybe even some gameplay!
Fourth night: some new sprites
No major breakthroughs today, but I did add a few new sprites, and the building progress indicators, shown in the latest screenshot:
I guess the week is half over now, and I don't feel like I'm half done yet. The essential part of the gameplay is almost ready, but there's menus and audio and transitions and more art still to do!
I should be able to finish, but it'll take a lot of work this weekend!
Fifth night: still working on gameplay
I didn't reach my goal of making the first level playable. But, I'm making a lot of progress behind the scenes, so I think things will come together nicely soon, hopefully tomorrow. I refactored my cursor class so menus should be easier now. I used "exec" for the first time, and now I can make sequences of movements for the units.
I also added a few little touches that I probably should have saved for later, but the more fun a feature is, the more I'm inspired to work on it. I spent over an hour working out the formula for a parabola so the acorns could bounce onto the stage. But I think a lot of my game is going to ride on how funny the little movements of the acorns are, so maybe that isn't wasted time after all. I also got the little glowy bits working. It's starting to feel a whole lot like the Kokiri Forest.
No new screenshot. I only added one sprite, so it doesn't look different enough.
I'm having trouble thinking of enemies. I draw really slowly, so I ideally need something that only takes one frame. If it needs to be animated when it walks, or it looks different from different angles, it'll be tough. I certainly can't do a sprite that does both. So, maybe some evil blobs? We'll see.
I've apparently got 1049 lines of code. Feels like a lot more.
Sixth night: finally playable?
I just about killed myself getting it to a playable state tonight. It's still not what I would have called playable a little while ago, but since I have to wake up for work in an hour, my standards are significantly lower. Here it is anyway.
The controls are still a bit confusing, but I hope to make some in-game explanations to clear them up. For people who want to try it, fertilizing speeds up buildings in progress: select an acorn, move it next to a building, and pick Fertilize. Dew drops recover damaged buildings. This is complicated. Select an acorn, pick Get Dew Drop, move it next to the damaged building, and pick Use Dew Drop. I'll try to have a button that does that all in one click.
I need to tweak about three dozen numbers to get the challenge level right. It's currently way too easy. The object is to "cover" at least 90% of the lawn. An area is covered if it's within range of a Star Plant. The only way your victory is acknowledged at this point is with a subtle effect of those glowy bits.
One more night and one more day left. Here's looking forward to the end!
If the game's too hard or it crashed and you don't want to redo the whole thing, press 1 through 6 on the title screen to skip to that level!
I went all out from Friday evening up through the deadline, not even pausing to make a diary entry. I really burned the candle on both ends this time. Without taking time off from work, I still spent at least 6 hours on it every night. I've been getting about 4 hours of sleep a night.
Also, I don't think I could possibly have done it any faster. I never changed my mind about where the project was going or had to roll back any ideas. (I refactored the first half of my code, but I think this is essential in order to write the second half.) The only thing I wound up not using is this vegetable-looking thing. So a lot of work went into this. My gamelib directory is 74kb, and I pretty much wrote every single word of it.
Does that make for a good game? Well....
Lesson #1: It is hard to level design for real-time strategy. Good design is hard for all games, of course! But for a platformer or an adventure game or a puzzle game, you can draw the level and see what it looks like. For an RTS, the "design" is all in the units' stats. It's very abstract, and there's no way to anticipate what it'll all be like without actually playing it. And if there's any randomness, you need to play it multiple times. And there aren't even any enemies until level 4! I can't imagine what it's like with a wide variety of enemies.
You also need to test out different strategies, to make sure a really dumb simple strategy doesn't work. I think my game probably has this flaw. For this reason, I think it's particularly hard to make a "fun" RTS in a week, working by yourself. You can make reasonably good game mechanics, and I'm happy with mine, but the fun probably won't be there. I'm in this for the fun, so maybe next time I'll try a different genre.
In Pyweek 6, if you look at the rankings by category, I got something like 3rd on fun, 4th on innovation, and 20th on production. I hope this time I get a big step up in production, though I may take a hit on the other two.
One surprisingly frustrating thing is that the game looked almost exactly the same from 8 hours in (when I took my first screenshot) up through the final version. This is because I chose a visual style that I liked at the beginning and I just stuck with it, but I kept hoping the visuals would evolve along with the mechanics.
This entry wouldn't have been ambitious for everyone, but it was ambitious for me. I find that this really inspires me during the competition. The danger, of course, is not finishing, so ideally you want something ambitious that can be shortened without DNFing.
Oh yeah, one more thing is that I didn't have a consistent mood. The subject matter is really serious and humorless, but the acorns running around is just too funny. I liked them both, but I don't think they work so great together.
Well, I'm sure nobody's read this far.
Thanks for another fun contest, richard!
Response to comments
This entry exceeded expectations: I didn't expect first place by a long shot. Thanks so much to everyone who played the game. Congratulations to the other high scorers! I'm especially surprised to do well because I found the individual competition particularly strong this time: pymike, syntaxglitch, cyhawk, and gcewing all made amazing entries. Be sure to check them out if you haven't yet. I don't think I'll be able to pull this off again, so I look forward to losing to them next time! :-)
I hope to work on this game some more! All further developments will appear on the Pyggy page.
Now for response to comments. First: bugs. It's apparently possible to lock up the game, which is something I never saw. The lesson here is: try as hard as you can to break your own game. Jam keys, click wildly everywhere, whatever it takes. Also, the game crashed for one person who must have had an older version of pygame; I used a feature new in 1.8.0. I'll be sure to make it check for the version and output a more helpful error.
Show covered area any time you click the 'Build Star Plant' wouldn't be better ?
That's how it is now. Maybe you meant, show it all the time? I'm not sure what's best.
I found it quite boring to be honest
Didn't seem to be an object to the game or any conflict.
it would have been nice to make more use out of things like the cannon
the (last?) level is too hard - The on ewith the UFO attacking your main-plant.
All true. I feel like I have a lot of work to do as far as the level design goes to make this a fun game. I hope to have some rich strategy by the time I'm done, but I think it's going to be a lot of work, as I said in my last diary entry.
Also, the autobuild type function for the starflowers was nice but it would have been good to have something similar for fertilizing.
Spot on. If you look in the code, you'll see that this was half-implemented and triaged.
Ah great, I was adding the ending last-minute, and I'm glad I decided not to drop it. (You can tell the ending screen was shoddily drawn.) But I feel like the ending makes the whole rest of the story worthwhile. Plus, the title foreshadows it, if you know what "pan" means, and how often do you get to use foreshadowing in PyWeek? :-)
wonderful, except... the very end.
In response to all the positive comments: thank you! I'll leave it at that.
Thanks again to richard, the community, and all the judges! See you in PyWeek 9!