All in all, I felt like the story, the gameplay, and their interconnection delivered what I intended and the game was well-received. Out of something like 900 entries, I placed 34th for Mood, 101st for Theme, and 115th Overall. The real surprise for me was that I ranked 119th in the Humor category. I wasn't really going for a funny game -- indeed, the overall message was dark and dystopian. In general, the responses I got reinforced the satisfaction I already had with my LD48 entry,
Decommissioner.
Learning About ProgrammingDesigning a game from the ground up by myself in such a short time frame was... an interesting experience. I learned
a lot. But I also knew that I wasn't crafting elegant code. My code was limping around on a crutch because one leg was tangled up in the far-too-voluminous sleeve of its other arm. It was akward, it was clunky, and it was dressed very, very badly.
But I really like
this game concept, I thought.
I want to see how far I can take it. It really deserves to be treated better. And so I embarked on a quest to clean up the code and make the game more extensible. Over the past few months I've worked on improving it here and there, but various things kept me from devoting a great deal of attention to it until a week or so ago, after I started buckling down on learning pyglet for this month's LD48.
Ironically, I still haven't made any changes to the game involving graphics or sound.
The pyglet tutorial I'm using takes the reader through the process of creating an Asteroids clone from scratch. It starts with zero files and, using good coding and Python module conventions, ends with a lot more than zero user-created files. The tutorial carefully explains when to create new files, where to put them, and into which file each snippet of code goes.
Now, I'm a fast reader. I achieve this partly through fast processing, but partly through skimming and skipping parts. Learning to skim articles is a skill any whipper-snapper raised with the internet picks up, I think. In this case, however, that has been the opposite of helpful. At first I skim-a-dee-doo-dah'd down the page, missing some key instructions and finding myself with code that was hangy like a game of hangman two eyelashes away from doom.
At first I arrogantly assumed that there was something wrong with pyglet -- I'm using a 64-bit Mac OSX installation to do my programming, which means using the alpha build. The things I hadn't missed in the tutorial gave me enough information about how modules are built to start fiddling with the pyglet files, looking for the particular classes and functions I was using to see if I could find any errors in the code. Errors I did not find, but in looking for them, I started to better understand the nature of modules and gradually came to the realization that I must have missed something in the tutorial instructions.
Sure enough, I had -- and when I went back and reread the tutorial more carefully, everything worked just fine. I started to advance through the tutorial again, but it wasn't long before I stopped playing with the pyglet-based Asteroids clone and started applying what I had learned about module composition to
Decommissioner.
Over the past few days, most of my .py files have been moved into folders and divided into smaller files so that I can avoid importing more than I need. Subsequently, my import statements are a lot cleaner across the board.
You wanna know what the best part is, though? It's that my game's directory
looks like a program directory!
You can see the difference between the
original and
post-LD improvement branches on my GitHub account.
Why This is ImportantI started college as a Computer Science major, intending to be a game programmer for a living. For reasons that, in hindsight, were very silly I switched to being a Japanese Studies major during my second year. While I don't at all lament the time I spent getting my bachelor's degree or the things I've done with it since, I'm looking forward to returning to North America and making games for a living.
To that end, I find myself needing to relearn everything I knew about programming and learn all the things I didn't learn in the first place. Rather than try to explain the things I don't know or don't think I know or didn't know and do know now or whatever, I'd just like to talk about Asteroids clones.
The asteroids clone on which I am working now is merely a tool for learning how to make pyglet work. It covers a variety of things any game developer might want to do with pyglet: make images and text display; make things move; make static and moving objects display at the same time; add player controls; etcetera, etcetera. Furthermore, since Asteroids is a simple and classic arcade game which a student can easily learn about if they aren't already familiar with it, students can easily tell without help if the game is doing something it shouldn't be doing. As a teaching tool, it hits everything the tutorial needs and is easy to diagnose.
This is exactly why we used it in my computer graphics class back in college. Different language, different syntax, but we used the same game for the same reasons. Speaking as a teacher (albeit of a far different subject), I can now appreciate the value of such a tool.
During that college class, however, I was just... uninspired. Uninterested. My classmates really got into it. They came up with some impressive Asteroids clones, with rule variations and nice graphics. Mine was just kinda... meh. I've never done well with cookie-cutter art projects. Making the same thing as everyone else is boring.
But here and now, this pyglet Asteroids clone has caught my attention. There are two reasons for this. One is the reason why I started doing it in the first place: I want to be able to use pyglet for LD48 #26, and this tutorial is a means to that end. The second reason is that every non-pyglet-specific thing I learn is something I can immediately consider applying to
Decommissioner, about which I care a great deal. I therefore have internal motivation to work on this Asteroids clone and -- more importantly -- to eke out of it all the learning about Python and Pyglet I can find.
I'm having a blast right now, working on these projects and getting ready for the next LD48. What saddens me is realizing that my computer science classes would have been far better with more open-ended projects than clones of preexisting games.