My Ludum Dare Jam entry is Those Stupid Aliens. It’s a top-down space shooter.
The player is firing from a capital ship at the bottom of the screen. It has just gone through a battle, defeating the enemy battleship, stranding hundreds of aliens. As a result of the battle, it only has enough shields to withstand five hits. Your technicians are routing power and fixing subsystems, but they are tired. When you defeat a wave of enemies, it builds up the morale of the crew and they repair one point worth of shield. And that brings us to Those Stupid Aliens, and your job, as one of the last remaining gunners.
Using the mouse to guide the targeting reticule, and the left mouse button to fire, your goal is to shoot the alien ships that appear. They will show up in groups and express different characteristics based on the makeup of their internal properties. As the game goes on, the successful aliens will have their internal properties inserted into the gene pool, and the next waves will be created from this information. Eventually, you should see ‘smarter’ aliens which are more difficult to defeat.
What Went Right
I used Flash/Flex/AS3 with FlashPunk and the FlashDevelop IDE. I’ve been using them for over a year with a few different unfinished, but ‘demo-able’ projects so I was confident in my ability to use it for Ludum Dare and be able to complete something in 48 hours. I will definitely use FlashPunk in December’s competition and likely beyond.
My last successful entry was in LD48_15. The biggest thing I took away from that was the scope. I was essentially trying to implement a clone of a game I loved to play as a kid. Therefore, I already knew the features that needed to be implemented and tempered my desire to feature creep. For this competition, I tried to make sure that I limited what I intended to implement to make sure the project didn’t get out from under me. I came up with an idea that didn’t require level design or a sheet full of tiles. That certainly saved a lot of time and work. I kept the original , knowing that I wouldn’t have time to implement them all anyway.
I knew I didn’t want the player to have to use the keyboard much–or at all, if possible. Therefore I just implemented mouse movement and single click firing. No other buttons on the screen. If I had to, I was ready to implement a “Shift-Click” for a secondary action, but I never really let one enter the scope. The idea behind keeping the controls simple was that if I made something worthy, I could easily port it to a mobile touch device.
Sound and Graphics
On Sunday morning, updated my placeholder capital ship (which I’m still not really happy with), added sound effects and the explosion particle generator. Once I did this, it’s like the ‘game’ part of the game jumped out at me, even though the gameplay didn’t change. It really gained an old arcade feel and I think was a psychological milestone.
What Went Wrong
I spend too much time doing other things this weekend. Mostly it was stuff with my family, but an hour here and there adds up. When the 48 hours were up, I was not done, and had to fall back on the Jam. Though I must say that this project moved along much better than any previous LD attempt in the past three years.
For the bullet, I took the target location (the mouse click) and projected out the location that it crosses the top of the screen. Each frame it would move towards that location. For the alien movement, I tried to do something similar using the direction of travel (a normalized point relative to the original location) and the current location to create the target on the edge of the screen. That target would be recalculated whenever the alien changed direction based on it’s internal properties. It worked ok, but later I realized I only needed keep adjusting the target point to something beyond the max speed every turn. A simple multiplication instead of trying to figure out the math behind the projection and deal with different quadrants.
One thing I didn’t get a chance to implement, or even figure out a decent signal for it, was feedback on the evolution of the aliens. I wanted to give some sort of indication that the evolution was happening or that there were successful aliens in the current wave. I never really came up with a good idea, so I never implemented it. I think some sort of feedback would have been great as it would help give the player a sense of change, rather than just witnessing wave after wave and having to notice changes all on their own.
I made the music using the online instrument Circuli. It’s a neat thing to play with, but I don’t think what I used fits the game all that well. I purchased the iPhone app, so I’ll probably mess around with it again, but I probably won’t be using it in the post-compo version.
I have a background engine hum during play mode instead of music. I don’t know how annoying it might seem for other people. I debated switching it to music, but the intro music didn’t fit and I didn’t have time to create anything. Since it’s constant, I don’t think it would work out with music at the same time. If the ship moved, then it could potentially only make sound at that point, but it doesn’t, so I think I have to decide which way to move forward with it.
Method of Evolution
I think the idea behind the aliens becoming smarter is good. It’s a survival of the fittest process, with every trait possibly live from the beginning. Every time you play, a new initial gene pool is created from randomized DNA. This makes it impossible to set a difficulty. You may get an initial gene pool that consists of aliens that are slow moving, large, and don’t fire very often. Or you may get small, fast moving sprinklers. I sort of faked some progressive difficulty it raising the number of aliens in the wave. I’m not against that idea, but I wanted it to be gradual.
One of the first things I’d like to do is change the alien graphics. I think I want to use bitmaps, but I also kinda like the vector look. (I’m actually cheating, the vector graphics are really bitmap placeholders.) At first, my intention was to use the look and the colors as purely cosmetic traits, but I to like the idea that they represent something internal. It would be a way to solve part of the problem of feedback that I mentioned earlier.
I also need to redo the evolution component. I never implemented mutations, which would serve to introduce traits that did not exist in the initial gene pool, and reintroduce phased out traits that might have better success in a different combination. I’d like to come up with a way that makes it possible to use the traits to have a couple difficulty modes without relying on wave size. The way I do it now is closer to a true evolution using survival of the fittest (which fits the theme) rather than a carefully planned difficulty progression (which some entries passed off as evolution). Somewhere in the middle is the solution.
Right now the enemies hover near edges, which makes sense since they are introduced there and often don’t have traits that move them away. I need to get them out of the edges without making them predictable at the start of the wave or do something that obviously goes against their internal traits.
I think I’m fairly happy with this project. I ended up with a game that feels like a game. Many times I’ve ended up at the halfway point and I don’t know what I’m doing or how I’m going to make it fun. I managed this time to come up with what I feel is interesting and has promise to be expanded to keep attention longer than a few minutes.
I definitely did better than I thought I would with the theme. I had originally been a big proponent of Evolution a few years ago, but cooled on it when I realized that it would take a long time to get a good algorithm set up. I’ve been thinking of this kind of stuff for over a decade. I used to sit in biology and other classes and diagram out some sandbox DNA projects that I never did implement. I’m surprised at what I have done in the weekend time frame, so I might go back and visit those old notes sometime, now that I’ve had a little taste of it here.
For the past few years I’ve been pretty disappointed in my LD participation over the past couple years. I mostly didn’t finish and gave up. Sometimes it was because I didn’t feel I had come up with a good enough idea on the theme, or ran into problems and didn’t have the heart to finish, or had too many other activities that I couldn’t avoid. After my experience with LD24, I’m really looking forward to December.