This has been my first LD ever, and I have to say that it’s been quite a satisfying experience, from which I’ve learned some interesting lessons. To tell the truth, I wasn’t sure that I would end up submitting an entry at all, so I didn’t take it seriously enough and devoted less hours than I would’ve liked to, but still, I am proud that I applied in the end.
What went right
Having a clear objective.
I already had some ideas for games based on evolution, so once the theme was announced I only had to choose between two different approaches to develop it from a common core concept: an evolving ecosystem. Thus, that core concept was always in the horizon, which helped me not to ramble too much.
Focus on simple goals.
Rather than getting lost in architecture details, that frequently lead to a dead end (well, at least that tends to happen to me), I split the steps to reach that goal into small, simple tasks, so that I could iterate quickly and had new things to show (not necessarily in a visual sense) all the time. The feeling of accomplishment is really rewarding, and pushes you further towards the next goal.
What went wrong
I really like programming in C++, and I’m always eager to keep learning and improving at it, so I take advantage of every opportunity that allows me to do that. However, and despite what I previously said about the feeling of successfully reaching some minor milestones, the main objective of the Ludum Dare is to develop a game in a really short time. This means that we should be smart enough to choose wisely the language, tools,etc, that will allow us to optimize that time and, especially, reach a larger number of people.
To code a full game from scratch in 48 hours (well, in fact I would say the actual time devoted to it would be more or less one third of it) using C++ is probably much less time efficient than the other alternatives I’d considered (AS3, Pygame), even if I had the feeling that I was spitting out features at a relatively high speed. Yeah, it is more powerful but, being realistic, a game intended to be finished in less than two days will not probably require that much.
And then, of course, there is the issue of distributing your game.
I only did a Windows release, so that leaves Linux and Mac users out of the equation (even though a port to Linux could be more or less immediate, but I don’t have any distro installed on my laptop). What’s more, even for Windows the probability of errors or crashes due to missing DLLs, incorrect build executables, etc., to appear is relatively high, which puts an additional barrier to your public. To top it all, since I finished quite late, I couldn’t playtest it with friends or family, so I could only trust my computer.
This led to some chaos on Monday, where the initial build submitted was using a debug executable and crashed in several machines, or there were strange frame rate drop issues (about the frame rate, I realized that the main loop implementation I chose left to be desired, too…but the disparity spotted in one case was unreasonable). I submitted a fixed build, but there are still some crash reports.
So, the conclusions are: First, think carefully about what you want to achieve: is it learning? Ok, but then don’t complain if you spend twice or thrice the time and can’t have so many things done; Is it developing a fun game? Then use something that allows you to have a fun game FAST. Is it a mix of both? (Yeah, I’m stubborn) Well, in that case, FFS, USE SOME CODE BASE. A basic game core, functionality for rendering text (which isn’t trivial using SDL_ttf plus OpenGL as I did), sprite drawing, sound, UI components…all of these can really help reducing the time spent developing low-level stuff, leaving you more time to make the game fun and cool-looking, which is what matters.
Second, if your application artifacts are platform-specific, test it, test it and test it once again in as many different computers as possible. And, if you’re making a multiplatform game, test it, test it and test it in as many different platforms, browsers and devices as possible.
Lack of overall focus
This may sound as if it contradicts one of the epigraphs in the “What went right” section, but in reality they’re two different things… Here I mean that my commitment to start coding wasn’t 100%. I would wake up in the morning and debate between overall procrastinating, playing something or developing the game, and when I realised I’d wasted several hours. Yeah, once I launched Visual Studio and started typing I’d enter the “flow state” and I could spend hours coding non-stop, but all that time lost was invaluable. Of course, the final result has resented.
Gameplay? What gameplay?
Being a gameplay programmer myself, this is probably my main grip.
Since I’m interested in genetic algorithms and evolution, I focused too much in having a simulation running with mutations, crossing and selection of the fittest. Once I had that, I would then give the player the ability to interact with the world and give them some challenges. However, on Sunday morning and during most of the afternoon I barely did anything until a couple of hours before the deadline, which means I ran out of time to put on the actual “game”. I just threw a couple of unbalanced or just plain useless actions to alter things such as reproduction rates or…let’s call it “non-organic food”.
A player would have a toolbox or options to give advantages/disadvantages to the survival of creatures. The goal of a level would be to get to a given number of specimens fulfilling a set of traits in a set number of generations. Since she can’t choose the traits directly, all she has in her hands is the power toolbox. Thus, she might raise a plague affecting…let’s say “mostly blue” creatures. Or perhaps provoking a flood. In addition to cooldowns, using those powers would use some amount of an undetermined resource.
Another really basic feature that I regret that I couldn’t implement was AI. I don’t mean flocking behaviours or anything like that (at least in the beginning ^_^), but simply giving preys the ability to detect and flee from predators, and make these able to chase them would have been a really interesting thing to do.
In the end, creatures were left with a really limited set of genes: speed, the way they got the energy, how they reproduced, their starting life…and not too much. I regret not having put things such as “sight”, “locomotion”, or “personality”, for example.
Some other, more advanced features that I had in mind included a somewhat hostile environment, and some resource management aside from the living creatures interacting with each other. This would have opened the door to new creature traits (flying creatures, amphibious, temperature…the possibilities are endless), and new ways for the players to alter the world conditions and make thing easier to increase or decrease the odds for the creatures to survive.
As you can see, the whole concept can become too complex really easily, and you have to constrain yourself to something doable in 48 hours. A noob’s mistake =_=
No polish at all
Again, as a consequence of the lack of time, I couldn’t go past the primitive-based procedural shapes and put something nicer instead (actually, procedural wouldn’t have been that terrible if I could have done something similar to Dawkins’ biomorphs). Some sound or music could have been nice, too.
TL;DR: For the next time, I’ll try to start small, with a clear, complete idea. Then, iterate over it, getting incremental, but working and testable functionality, and commit to the jam 100%. Also, I should favour web deployable solutions over C++ unless I had a minimum set of libraries to save some time and focus on gameplay. Last, think of the childr…eeer, of the public (meaning: test it if possible in more than one machine, and try to port it to Unix-based systems it it’s not a web release)