About LoneStranger of LoneStranger Designs (twitter: @lnstrngr)
Ludum Dare 26
Ludum Dare 25
Ludum Dare 24
Ludum Dare 16
Ludum Dare 15
Ludum Dare Donor Award
Awarded by PoV on May 27, 2008
I had originally planned on collaborating with a friend on the Ludum Dare 26 Jam, however, plans started to fall apart Friday morning when my sister went into labor. Long story short, the baby was born later that evening, and along with other family commitments, took up most of the weekend.
On Sunday I was finally able to sit down and start working on something. My mind kept going back to some sample code I had given a FlashPunk user in Afternet’s #flashpunkers earlier in the week. He was asking for pointers on a drag mechanic and I was able to offer a little help. This sample code was still sitting in my initial basecode project in FlashDevelop and I just started going with the seeds of a simple idea.
I wanted a game where the player had to think fast, but didn’t have multiple types of actions to perform. The Drag mechanic is simple, and everyone who uses computers should be familiar with it. I also didn’t want to have to explain the rules to the player. I wanted them to be able to discover the rules with visual and audible hints. I decided that simply moving objects into a target would be adequate to satisfy those two pieces.
So I worked on Sunday night and before long had the basic functionality down. There were some overlap issues that I had to figure out due to me forgetting that I was centering the origin, but that was probably the only thing that was a pain. After more work on Monday night, it was ready to turn in. I ended up with a progression of levels that started simple and ended up fairly frantic. I knew I was going to be dinged by some voters if I completely avoided instructions, so I put a little blurb on the webpage about discovering it as well as adding a hint to the end game screen if you didn’t make it past the first level or the first level with multiple colored targets. I hoped this would be enough to keep people from being frustrated or downvoting me because they couldn’t understand it.
(I have to say that with the Minimalism theme it is hard to balance the polish. I decided that not only is my gameplay going to stick with one basic action, but the graphics would be minimalism with simple shapes. However, I know someone is going to downgrade the graphics because there are so many more entries that are fantastic graphically. Should they be voted higher because it looks better? Or should the simple graphics games be voted higher because they are following the theme? I don’t know, there are many entries where I can’t for the life of me figure out what is being interpreted as minimal but will probably score high because they are good.)
Here is a video of myself playing the game. Reviewers have apparently done a good job scoring higher.
I think the fact I kept the gameplay simple but had something challenging and fun was great. I was focused on that without having to prepare and test other mechanics. The progression of difficulty was simple and changed things around while still keeping that simple dragging mechanic.
I would have liked a high-score option that reported to my webpage or Twitter, or at the very least kept your own personal high score offline. I didn’t get a chance to do that before the time limit. I also had to skip the sound/music toggle which would have been a nice polite addition.
I had the same thought that showed up in many LD comments: It would be fun on mobile. I would like to explore this. I think I’d have to change the underlying code for handling the dragging to support two at a time, because I know that would be intuitive on a device.
If you would like to give it a try, please go it’s LD page.
I’m in again for Ludum Dare 26, after a successful entry (translate: submitted) in December’s You Are The Villain jam. This time I’m bringing in reinforcements. I am really looking forward to working with my friend Kilnik to collaborate on a Jam entry. He will likely do most of the art and probably level design, should we do a game that requires that. While I would love to give Unity another go (he’s using it for another project), I need a more relaxed atmosphere to properly get my bearings with it. Instead, we’ll continue to use the same tools that I have been using for the past couple years and Flash as the engine.
- pencil, paper, eraser, ruler, iPad
- Google+ Hangout
Using Google+ Hangout is new. I think it will be a good tool for collaboration since we are a few hundred miles apart. It allows video conferencing and screen sharing.
As is usual for the April and August competitions, it falls on the same weekend as a baseball game that I am scheduled to attend. I will lose likely eight hours, but will definitely be thinking of the project and how to move forward with it.
It is pretty depressing to work on your idea for a few hours on Friday night only to realize that at least one other person is doing the same thing as you. I had looked at a Google image search of “Atari 2600″ just to see some basic game implementations and ponder how to reverse them. When I saw the Pacman game, I realized that it was something simple enough to do in 48 hours, and complex enough to not be just a concept demo (I think I fell somewhere in between). A game where the ghosts are trying to trap the Pacman wouldn’t terribly difficult: minor AI, simple screen, few animations, basic controls. It seemed like a good idea, and it was, which is probably why someone else selected it, too. After Friday I refused to read the “other” journal for fear of 1) unconsciously directing my creativity choices and 2) to not get discouraged and quit early. I continued on.
On Friday night I decided I wanted to use a mouse select->command scheme for control. Ghosts randomly move around the map until you click the ghost and tell it where to go. It will follow the path to the destination, where it will return to roaming. I didn’t want them to just stop somewhere because then you’d be able to camp out and essentially block Pacman while you herded the ghosts at your own whim. Having them roam would make it more difficult to trap Pacman. Friday night, after I created the map and creature code, I implemented the pathfinding system.
Most of my wasted time on Saturday was spent implementing the pathdirecting and pathfollowing system. This drove me nuts and I nearly threw it at the wall. I don’t think I ended up using most of what I did because it got to complex. I was able to rewrite it so it made more sense and was easier to debug. Once this was done, the ghosts could be directed, but also wander. I added some sounds and replaced some of the placeholder rectangles with bitmap graphics. At this point I had the makings of a game, but not things to make it an actual game: game over condition, accomplishment measurement or general polish.
I don’t actually remember much of what happened on Sunday. I worked on some of the same things, but by the time there were only a handful of hours to go, I knew I wasn’t going to be able to make it. The deadline came and went, and I was onto the Jam. Monday I had to work, but I was able to spare a couple hours afterwards to add the game conditions and finish the UI to give the illusion of a finished product before submitting.
What Went Right
placeholder graphics – Usually I sketch things out while I flush out design and end up using them as the graphics. I like the resulting style. It give it that cheap cartoon animation feel. For this entry, however, I didn’t sketch a thing and used placeholder squares and lines. It let me implement features earlier instead of spending time trying to animate or adjust images. I don’t think sketching things is ever bad; it can help you bring your game idea to life even if you never use the image in it. Placeholders force you to work on what is more important and spend less time on things that would get removed or reduced near the deadline.
pathfinding – I used a couple AS3 classes from Untold Entertainment (which only needed a couple tweaks, see their comments) and it worked out really well. There are a few things that I could do to make it more efficient, but it was good for this task. I will definitely use it again.
codebase experience – I’ve been using Flashpunk for a couple years now, so I am getting much more familiar with it. I have built up solutions using it and have been able to leverage those solutions in future projects, reducing some wasted time trying to ‘reinvent the wheel.’
I submitted it! – At the end, I managed to get something that could actually be considered a game, even if it’s not up to the finished idea in my head. I really didn’t want to submit a demo or sandbox because that doesn’t really count as a game.
What Went Wrong
endgame came late – I didn’t actually get the endgame stuff in there until the last hour before I submitted. I should have worked on this earlier. I think next time I will be sure to add the endgame circumstances, even if the rest of the gameplay isn’t there. I still have to write gameplay before the end, but this would allow me to push the more dropable stuff to the end in case time got tight.
reconnaissance – I probably should have investigated my partner-in-idea’s logs at some point to see if there was something I was indeed missing. Based on the review comments so far, I really should have added a better method to select the ghosts, perhaps buttons on the screen and/or keys on the keyboard.
AI – I initially thought the AI was not going to be hard, but I ran out of time and never really had a chance to implement it. The Pacman and undirected ghosts are essentially random. I wanted to have them show a little personality, perhaps chasing or trapping the Pacman, but not so much that you don’t have a job when you play.
random change of position – I don’t believe the real Pacman game allows the ghosts to change direction except at an intersection (or when a power pellet is used). It’s been awhile since I played, so I might be wrong. Anyhow, a lot of my wasted time was trying to get them to not return to the just-traversed hallway without going around. I eventually gave up. Looking back now, it doesn’t seem like it was that big of a deal to warrant that much time spent on it.
node/tile types – I designed the game to keep pathfinding nodes separate from map tile data. The pathfinding system uses nodes with only three options: edge, wall and hall. At some point, however, I realized I needed more than just those three tile types or would have to hack in other properties. I would have to go back throughout the entire pathing code to implement new types. This introduced a few problems and I even had to back out a couple hours of changes. I think next time I am going to go with a standard tile that doubles as a node and contains properties that can be used instead of checking specifically for certain tile types.
I have to rate this as a successful competition because I was able to submit something that I can consider a game and not just a pile of crap that lets me vote on entries. I’m not completely content with the end-of-compo result, but I don’t know that it is possible to ever be fully happy. I’m probably sitting somewhere about half satisfaction. It was a great experience, however, and I can really tell that I have made progress over the years. Can’t wait for the next LD competition in April.
I took the results of the four preliminary rounds of voting and graphed them to see how popular certain themes are compared to the others. I ranked them by the sum of the pluses and minuses. The top twelve are in the Final Round.
[click image to embiggen]
Looks like there are three themes that are obvious favorites over the others–End of the World, Construction and You are The Villain–with between 800 and 1000 plus votes (green) and around 500 minus votes (red). For the most part, pluses and minuses for themes stay between 500 and 800 of either kind of vote. The neutral votes (yellow) stay fairly flat, but you can see what appears to be climb on the left side of the neutral votes before it starts it’s up-and-down. I believe what sets those three highest themes apart from the others is that they managed to get more people than average to select plus instead of neutral, as well as have less people vote negative. In other words, they’re more polarizing. P.S. I don’t know what I’m talking about, look at the pretty colors.
My official prediction is that the top vote getter End of the World is going to be the final round winner. The timeliness is perfect and probably what drove it’s numbers in the first round. We won’t get this chance again, whether the Mayans were right or not.
UPDATE: I added another pretty graph. Since each round had a different open/close time there is obviously a flux in the number of votes cast in each one. Also, some people actually refrained from selecting an option, even neutral, for some themes. This graph shows the percentages of total votes plus or minus based on the number of votes cast for that theme.
I am declaring my intent to participate in Ludum Dare XXV. Last time out was one of my more successful entries, even if I only got what I would consider a passing score. This time I plan on taking it further. Here are my tools:
- pencil, paper, eraser, ruler, iPad
My usual set of guidelines:
- KISS – Keep It Simple, Stupid! Making something too complex is just a recipe for a headache at 1pm on Sunday afternoon.
- Finish most of the work by Saturday night so I can spend Sunday polishing.
- Don’t run into dumb problems that eat up eight hours.
- Doodle/Pixel art style. I usually sketch something and then do some post-scanning modifications. I’m not a great artist, so sometimes I’ll just draw half of the object and mirror it to keep it symmetric. I now have an iPad, so I will probably experiment by drawing on it with a stylus.
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.