About gustavla (twitter: @sweyla)
Ludum Dare 22
The Awesome Java Game Award
Awarded by LudumFan95
on January 11, 2012
What went right:
- Postnatal: I spent most of the time building the engine, and even though some shortcuts were made (mainly the Level Design one below), a lot of aspects of the engine were quite robust and really nice to work with. If you get this right, adding a diverse set of game elements is easy (for instance, the concept of potions took me 5 minutes too add, including making it something monsters can drop and making it available in the town store. I guess my point is that if you take too many shortcuts, when LD48 ends, that will be the end of your game, you’re never going to want to touch that code again. If you make more of an effort to build a sturdy system, the 48 h session might just be the birth of your game and your post-mortem examination will instead be a postnatal one. I’m pretty pleased with my game in this aspect, but there are many improvements I can make until next time.
- Smooth sailing: I like building everything from scratch, so I only had 160×120 pixels to work with, and I did all the pixel manipulation manually. Sure, this meant implementing for instance alpha composition from scratch when I wanted to have that, but I think those things are fun so I didn’t mind that. This also meant that after the canvas was set up, I had complete control of everything. Getting stuck on API stuff can be frustrating, so I’m glad I was able to keep that to a minimum (I got screwed over on sound though, check below).
- Fun factor: I know the fun factor is quite limited, but there were some shimmers in there, and I did catch my girlfriend playing the game several times on Monday (quote: “Okay, this time I’m going to try to complete it with only a steel sword”). I’m really pleased with the enemies and how much technique counts. Also, even if you know the best technique, it still needs precision and skill to carry out.
What went wrong:
- Sound: My sound threads were piling up on me, causing the game to crash. I eventually had to take it all out, even though all sounds were ready. Lesson: make a more thorough warm-up round if you’re using unfamiliar tools.
- Level design: I didn’t have any software for this, and even though the forests are generated, I wanted to create the city and the houses myself. It was either going to be an image or a text file. I went with a text file, so I could easily throw in some some additional information, etc. Much more familiar with text parsing in Python than Java, I decided to just go ahead and acknowledge that some shortcuts have to be made, so I wrote the parser in Python and made it spit out Java code. It was fast, but now afterwards I feel really dirty generating Java code. Lesson: Take some shortcuts, but not major ones like this. It made me feel less proud of my final product, no shortcut is worth that.
- Name: With 700 entries, you have to be more original than “Leave me alone!”. Also, I must’ve been crazy thinking I had a pretty original idea when I decided to have a person who wanted to be alone (as opposed to the more obvious not wanting to be alone).
- Time for final touches: It was really hectic at the end, and I left a few things hanging. The houses in the city are completely undecorated, even though I even had made at least a bookcase sprite that never made it into the game. Adding them is a matter of minutes, but the final hour stress got the better of me. I also had 4 ready sprites for a bomb that never made it into the game, even though it probably would’ve taken like 10 minutes. I also had a lot more in mind for cool effects. I had for instance written a blur effect, that could’ve been used as scene transition, when hurt, or something like that. It was all ready to be used, but you forget all about that when time is up. Lesson: Leave more time at the end! Or at least, if you make an effect/image that you’ll “put in later”, just put it in right away instead. I even had a 10×10 pixel kitten that I forgot to put in! FUUUUUUUU
I finished my game called “Leave me alone!”. I spent about 95% of the time building the engine from scratch and 5% on making it fun and balanced. This is the wrong decision if you want to make a fun game and the right decision if you want to have fun coding. Luckily, it still turned out pretty fun (well, you be the judge of that). You can get it here: http://g.sweyla.com/ld48/22/
I have never participated before, but last LD48 I was watching Notch’s livestream while programming a little game over the course of 8 hours. This time I’m in it for real.
I really like building the engine from scratch, so I’m going to do it Notch style, and use only a basic Java canvas and manipulate pixels manually.
- Pixelmator (I know, definitely not ideal for pixel graphics. Any suggestion for a Mac user?)
I was considering HTML5/JS too. I have tried several ways of creating a fast low-res canvas (but scaled up), but I’m not pleased with the results. Resizing each pixel manually did not yield the frame rate I was hoping for. Ideally, I’d like to scale up the canvas using nearest-neighbor interpolation, but I have yet to get this to work across all browsers (Safari doesn’t seem to respond as it should to -webkit-optimize-contrast).
Anyway, something tells me I need to go and learn how to draw kittens now.