LD22 December 16–19, 2011

‘Shaped’ Post-Mortem (by Eric)

What Went Right:

1) Small and Simple: Simplicity and a small scope is absolutely vital for a small, two-person indie team like ours. Shaped was created for a Ludum Dare game jam, which meant we had to take the game from concept to publishing in 48 hours (it is normally 72 hours, but we could not work on Monday). This small timeframe forced us to keep the game super tiny, meaning one environment, and über simple, meaning just a few mechanics. When the creative juices are flowing, its easy to get swept away in the tide and end up with a game concept far too ambitious to finish yet too beloved to compromise. This has happened to me with more game ideas than I would like to admit. Luckily, our short deadline forced us to reject ideas, no matter how great, if they would add more than 30 minutes to our production time. While Shaped is a short game, it is a complete one. Completion, we’ve found, is crucial for morale. If you are a small team like ours, I cannot recommend simplicity and limited scope highly enough.

 

2) Good Team Dynamic: Derek’s already said much the same in his post mortem, but it remains true nevertheless. Having people with whom you can be productive and simultaneously have a good time with is key. Not only does it keep the energy and optimism up, but it creates an comfortable atmosphere where all ideas and feelings can be expressed and considered. Most of my ideas are utterly bad, but Derek will always genuinely consider them as if they were great ones. Perhaps more importantly, he will give me honest criticisms which I can take without clamming up and getting defensive. What it boils down to is respect and the right attitude. With Shaped, we kept the environment fun and supportive and that really contributed to swift decision-making, quality work, and a fun development process.

 

3) Unity3D: Having never taken a computer science course in my life, I find it somewhat strange that I ended up as the programmer. What I have taught myself over the past few years,  I largely credit to Unity3D and its superb community. The visual nature of the engine allows for non-code-savvy teammates to understand and contribute to the process without having to look at a line of code. This also helps self-taught programmers like myself to understand what, in general, my code is doing. The way in which variables are displayed and the ability to adjust them during gameplay helped us both hone and test player and NPC behaviors until they felt just right. Lastly, the ease with which we could import assets from one another and get them up and running was incredibly valuable given our brief timeline. Other than a brief moment of glitch-induced panic due to hosting our Unity project files on Dropbox, the entire process of building with Unity was streamlined and fast. It is for these reasons and many others that we will be sticking with Unity for the foreseeable future.

 

4) Give Yourself Audience: This one may sound weird but filming our process really helped us to not only feel like “real” game developers but it also made the process more fun in general. Even if it is a Youtube video that nobody but you will ever watch, positioning yourself as if there was an audience really helps you to stay on task. Instead of treating the game development process as something that maybe comes after a few episodes of your favorite TV show, filming it gave us an audience (however imaginary) that we had to answer to and work for. I guess it’s where the adage, “Fake it till you make it” comes in. You and your team may not be Valve yet but if you treat the game development process as if you were that awesome, you probably stand a greater chance of finishing your game than if you think you and your game idea is unimportant and unnoticed. For Shaped, Derek and I did a Justin.tv/Twitch.tv live stream as well as a time-lapse using Gawker and it kept us honest. It also made the process more far enjoyable. Why? I will not speak for Derek, but for me it was vanity. There is something rewarding about being on screen and feeling like you are important and, hell, if you can harness some of that vanity to make your game development process more enjoyable, do it. Whatever keeps the ball rolling. If you do not like being on camera, write blog posts and tweets. You may find more people are following the development process than you think.

 

What Went Wrong:

Derek and I had such a positive experience with Shaped that it is a little hard to find things we did wrong. Perhaps we just didn’t have enough time to make significant blunders, or maybe I am still just riding the high. The few I could think of are below.

 

1) The Cold: Stay warm, your code-per-minute rate and immune system will thank you.

 

2) Not understanding 3D programs very well: I think if Derek and I had more of a grasp of 3D programs like Blender, 3DSMax, or Maya, we would have had accurate colliders for the more difficult shapes instead of primitive colliders that come with Unity. Getting knocked down a level in Shaped by an invisible sphere collider far outside the edge of an NPC’s visible edge is frustrating and, in the end, inexcusable.

 

3) Space-Heaters Don’t Burn Down Villages…Actually, they could so please follow the directions: Did I mention that weekend was as cold as the windswept plains of northern Skyrim? Well it was, and you know how the Frost spell slows you down as well as causes damage? Well, the cold room was like that on my hands and joints as I tried to code. I felt like Tin-man without his oil-can.

 

All in all, our experience creating Shaped for Ludum Dare 22 was a superb experience and has really inspired us both to pursue game development as a living. Stay tuned for more games from Send More People! Good luck with your games!!!

Lost in the Woods Post Mortem

For my entry I made a little point-and-click adventure game without the clicking.  If you haven’t already, you can play it here.


What went right:

Music – going into this I was fairly certain that I would be using some sort of chiptunes generator, but when the theme “Alone” was announced I figured there was no way I would get a chiptunes to work with the mood of being alone. I had given up on music within the first hour of production, but at the end of Saturday I got a little tune in my head, nothing fancy but it just might work. Sunday morning I got out a guitar and found a microphone and started recording just to see if I could make something. What I ended up with may not be fancy, but I like it and I think it is definitely better than silence. Though, since I went with live music I don’t think I should have used sfxr to generate sound effects, I think they kind of clash.

“Just do it” Attitude – When the theme was announced, I was at a loss for ideas. Fearing I would just give up if I didn’t do something, I started drawing a little sprite protagonist. After seeing him walk around I thought “he needs to be crushed by a tree.” The act of starting something allowed other ideas to flow and created a game for me, all I had to do was finish it.

*Crushed*

I'm about the get crushed. That's what went wrong.


What went wrong:

“Just do it” Attitude – By just starting right away without a plan, towards the end I had to start hacking things together in order to make them fit. Not having a plan before hand meant that I didn’t realize just how many assets I had to draw (as you will see, I’m terrible at drawing assets). And the code it cobbled together and held there with duct tape. I found myself writing the same thing over and over because the base class wasn’t created properly because I didn’t really know what it was going to be used for. Had I started with a decent plan I might have saved enough time to put in a small tutorial.

Theme – I was all prepared to create a tile based platformer and was hoping the theme would present a neat mechanic that could be used in the game. But when “Alone” was announced, all that went out the window. I was at a complete loss for ideas and nearly gave up right there. I actually wrote down several ideas for the themes from round five, but “Alone” was one of two that I couldn’t come up with a decent idea for. In the end, all I had was the vague idea “environment for the enemy” and I tried to make the best out of it.

Lack of instructions – If you watch the timelapse you may be able to see that there was an “Instructions” field in the main menu all the way up until about an hour before the end of the contest. I had intended to include just one screen explaining what type of game this is, what types of interactions the player has with the world, what clickable objects look like, and a hint to where to find the kitten. In retrospect, this really shouldn’t have been cut because without prior knowledge it isn’t obvious at all what the player can and can’t do.

The would-be Instruction screen

This is what the instructions were supposed to look like


Lessons Learned:

Take time to make a plan – I think next time I will dedicate the first hour to planning out what I’m going to do

Have completed basecode – There were still many things missing from my base code, like collision detection and a way to do fade outs. I didn’t want to look up anything while in the contest as it would waste time, so I made due with what I knew how to do at the moment (and that is why screen transitions are screen wipes).

Be strict about friends/family not bothering me – In the middle of Sunday I was called away by my family by what I expected to only be an hour which turned into five. Whenever I look at this game now I think what I could have done with those five hours.

 

All in all I learned a lot from the LD22 weekend and look forward to participating again. And please, if you haven’t, could you play and rate my game.

Tags: LD22, post-mortem

Fitness

Cremas para la celulitis no son naturales. También contienen sustancias químicas como la aminofilina, que estimula la producción de enzimas que ayudan a des-consolidar los depósitos de grasa, por debajo de la piel, por lo que son absorbidos en la sangre. El producto químico más potente ayuda a fortalecer los músculos y suaviza la apariencia de la piel. Artículo recomendado por Fitness

I Need Someone – What I Learned

During this Ludum Dare, I learned a lot about many different aspects of game development, and about myself. I didn’t enter the competition to win, nor did I ever think I might. My reason for entering was more of a personal challenge, and I managed to achieve my goal. That alone taught me a lot about my personal strengths and weaknesses, which I’ll be working on in the future. As a student working toward achieving an animation degree, I realized that beautification near the beginning of a production is vastly unimportant (to say the least) when compared to creating and shaping a great gameplay experience. While I don’t think my game is a jewel in any way, I appreciate the fact that I had the ability to go back and change things that I at first thought were going to be fun and appealing. These things turned out to be boring, and removing them seemed to make the game feel much more fun and playable. I believe this is an invaluable lesson to learn, for any game developer, and I’m glad I had the opportunity to learn it in this way.

For those wondering, my game can be found here:
http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=8692

I managed to get it working on Windows, Mac, and in-browser.

Here’s are some screenshots:

Let me know what you think! :)

Descargar Messenger

Eran las prácticas dudosas comprometido a News of the World causados ​​por la concentración de la propiedad de los medios de comunicación? Er, no. De hecho, la teoría de funcionamiento de por qué estos trucos sucios se emplea es que la competencia en el mercado de la prensa del Reino Unido es tan feroz y despiadado por lo que los documentos que recurrir a cualquier cosa para obtener la ventaja sobre sus rivales – incluso en la misma cuadra. Artículo recomendado por Descargar Messenger

Empresas de Limpieza Madrid

Desde 1975 la enseñanza único ha sido una condición previa indispensable una medida de la complejidad de la universidad rosters.These seguir siendo orientado a ayudar a educar a los estudiantes, además de instrucciones debajo de discapacidad, así como sobre problems.Classes emocional permanecer en adolescentes a menudo menos de grosor y para que todos y cada uno estudiante universitario puede experimentar como rodar sin contar al frente de un tratamiento por debajo de su educador como profesores possible. Artículo recomendado por Empresas de Limpieza Madrid

A PostMortem for Maze Explorers — or how I finally sat on my ass and completed my first computer game EVER.

Since the weekend forced me to take a break on my review series, I have decided to take this chance to sit back and think about how the LD22 weekend worked out for me.

Maze Explorers
was not the first time that I tried to make a computer game, but it was the first time I managed to ¨complete¨ my effort. I can thank the 48 hour deadline for that. I feel that after completing this LD, something clicked on me, and game making is not something as mysterious and arcane as I thought it was. I hope this means I can turn my ideas into real games more often in the future.

Now for the obligatory ¨what worked¨ and ¨what did not work¨ lists:

What Worked

  • Having friends test my prototypes mid game: I had some very awesome friends test my prototypes as I submitted them, and provide me feedback. Some of the most important suggestions included: A highscore feature, zooming in the game area when the light radius was limited, and making sure my tiles were colorblind friendly (<3 colorblind friends).
  • Having a Ludum Dare ¨partner¨: In terms of motivation, I was lucky to have entered the LD with a friend of mine. We were constantly IM´ing each other, talking about bugs and landmarks, and just ranting. It gave me a sense of duty — he was putting effort on it, so I´d better put some effort too! I´m sure I would have procrastinated a LOT if not for him.
  • Deciding my theme/game design quickly: After the theme was announced, I sat on my sofa and did not leave until I had the complete game on my head. I found a kinda interesting, not too ambitious idea. Years of programming/Dungeon Mastering helped me keep the scope of my game reined in. I managed to complete about 90% of the planned features for my game, and even to sneak a few more in. Even when it looked like a stupid idea, I stuck to my guns and kept going on.
  • Familiarity with the Language/Environment: I have been working with Java and Eclipse for a few years (although only in the realm of scientific computing), and even though I did learn a new thing or two, this familiarity helped a lot.

Thanks for reading so far! I hid the kitten easter egg pretty well, so here is a hint: there is one control key in the game that apparently is not useful for anything. You need that key to find the easter egg!

What did not work

  • Unfamiliarity with Game Programming: This goes without saying, but I spent too much time figuring out things like “which class I should store my resources in”, “where to call transitions”, “how to properly program my tile engine”, etc. I was reinventing the wheel way too many times.
  • Unfamiliarity with the game library: Related to the previous one, even though slick2D is a pretty simple and straightforward library, I think I spend the majority of my time peering through its class documentation. Finding out how to change the size/color of a font was a pain. Luckly, this means that next LD I should have more time to spend on the game itself.
  • Making Levels: A large part of the theme tie-in in my game depended on level design. Levels should have at least two solutions — an “alone” solution and a “with company” solution. Unfortunately this means that designing levels took quite a while for me, and I only managed to complete 5 levels before the deadline. Fortunately, having the player try for the best score increased playability a bit beyond just beating the 5 levels.
  • Sound: Sound and Music were always my weak point. I know nothing about sound terminology and technical aspects, and I wouldn’t even know where to begin to try and make some music for my game. sfxr helped me a bit with the sound effects, but I ended up botching the synth voice effects: its volume is too low, and either you can’t hear them, or the stepping sound effect gets too annoyingly high. I need to practice this a bit before the next LD. Suggestions for programs to make music out of thin air appreciated.
  • Environment: My environment was far from optimal. I didn’t get enough good food, and ended up eating too much junk food (I had enough water, though). Also, even though I divided my 4 virtual desktops well (net/docs/programming/resource-terminals), a second display was sorely missed.

What now? There are many things that I didn’t manage to finish in my game: Transitions, a few more levels, music, something to fill the bottom of the screen, background screens. There are also some things that the reviewers (thanks!) asked for: better sounds, not getting stuck with a companion on your back (thinking about it, we don’t really need this for the game to be hard).

I might make a post-compo version with the above, for the sake of completeness. On the other hand, I might keep the game as is, for archiving sake, and move on with trying to make some new games to get more practice with the gaming library and with game coding in general.

Thanks for reading, and make sure to try out Maze Explorers and tell me what you think about it :-)

Cheers,

Tags: easter-egg, easter-eggs kitten-challenge, postmortem

Comments

02. Jan 2012 · 12:40 UTC
Lovely Post-Mortem. We were wondering if you’d like it to appear in indie(Magazine);. Please reply to this if you’d like to give us permission to use it in the magazine.

Rate ALL the things — Part 6!

After a healthy break over the weekend, it is time to rate a few more games. This time I’m highlighting games with low number of votes, but bring something interesting to the table. Go rate them!


Alone .. Developer — I’m glad someone had this idea and actually went through and made it happen! This is a game about controlling a lone programmer as he tries to make a game in 48 hours. Sounds familiar? You have to manage his food/stamina/productivity levels through a wholly unhealthy sleep cycle. The bad endings are hilariously extreme. Unfortunately, the game does not have a good ending.

Diggy Dig — This is a very cute game about a naked dwarf miner. You dig away the dirt with your mouse, and try to grab the treasure. Beware not to paint yourself into a corner! I like games with novel mechanics like this one. But you also can’t win this one yet. Also: kitten power!

Alone with Zzzobmies! — This was the first LD22 game that made me actually scared! Great mood, even though problems with collision detection make the game a bit frustrating. Kill those creepy zombies with bricks! Oh, and this game DOES have an ending.

Squido does not like being alone — An addictive arcade, you have to control squido as he tries to make friends… unfortunately, sharks and zoidberg will kill your friends all the time, and you have to make MORE friends. Maybe a bit on the tragic side, but a very fun game — how many squid friends can you keep at the same time?

Alone in the Clouds — A very beautiful puzzle platform. You have to go to the end of the stage by managing your limited “superjumps”. In normal mode you can recharge your superjumps infinitely. In hardcore you can’t, and things get really difficult. Beautiful background and transitions + robot in a balloon. There is an ending, and a side door near the end that I didn’t manage to open.


Rating and commenting on every game is hard work. My hats off to those who have already rated more than 30% of the games! At my current rate, I don’t think I can make the 25% treshold, but I hope the devs enjoy my commentaries to their games. If you liked this review, make sure to check my journal for a few more.

Happy new year everyone!

Tags: ratings, review

Infographic: Survey Results

Participants of Ludum Dare 22 were asked to fill out a survey on their experience. A whopping 747 people filled out the survey.

Thanks for taking the time to fill it out!

I love this enthusiastic and supportive community.

Here are the results (click to zoom).

 

Survey Results: click to zoom in.

An in-depth analysis of the data will appear in the upcoming book, the Game Jam Survival Guide. Briefly, people had a lot of fun. The majority were either first-timers or not experienced game jammers. Most are happy with their games, of which about half work in a web browser. In order to finish on time many people had to cut features and simplify their designs. Not everyone was as familiar with their tools or basecode as they should have been, but only a few tried to learn a brand new engine.

Most games did not run on mobile devices, but many were cross-platform. On average most people did not spend time watching TV or movies, going outside, visiting with friends or playing other games.

Contrary to expectations, almost nobody drank coffee, energy drinks or alcohol. Virtually nobody used version control (such as SVN) or time-management techniques (such as pomodoro). Surprisingly, not many reported having difficulty with packaging, installers or submitting.

This infographic would be complemented by additional stats work. For example sorting the results by the most common response, or by questions with the most “no, not at all” answers would show some interesting trends that aren’t hinted at in this chart. Overall, however, even this cursory examination of the 747 survey results sheds some light on how Ludum Dare game jammers spend their weekends.

Tags: infographic, McFunkypants, postmortem, tips

Post-compo fix attempts: Gamemaker 1 – me 0

So it looks like drawing the characters to a surface, then blitting that to the screen on every draw would be the way to go for sprite fonts in GameMaker.

This is the story of what happens when I do just that on my Final Score screen.

SURFACES

Beginning to think just rewriting the thing entirely in Unity or pygame would be better for my sanity. Beginning to think that GM4Mac is just a wee bit broken.

 

Technically, I guess, it IS drawing the font sprites…

Feeling Alone Post Mortem

Hi everyone,

This was my first Ludum Dare entry.
It was a lot of fun doing it!

What was important for me was to learn some tools that I haven’t used yet,
and to make a complete game that is playable and hopefully fun.
My graphic skills are very limited, so I decided to go on pretty abstract graphics and use a lot of particle systems for effects.

I used the starling framework for AS3, and its particle systems engine for the effects.
These were the new tools I enjoyed learning and using. I think in these kind of 48-hour effort you can really get a good experience with a library or technology,
and I’m sure it will help me in future games.

I started the contest with about 1-2 hours of thinking and pretty much knew what I would do.
Then I started programming the mechanics. I intended to finish them, and when I’m happy with how things were to move on to graphics, music & sound.
However, after about 6-7 hours of working, and having slept not that much the night before, I was too tired to continue with solving some bugs (even though they weren’t many),
and felt I’m pretty closed on the mechanics and that they are working. Even though I didn’t have any level designed yet except for the simple first one.
So I moved on to deal with the effects and music. I ended up the day very late, but with most of the graphics done and with a simple music which I felt decent with
and hoped to improve it if time permits.

I think that was my first mistake, at this point, I should have built levels and tested the game play some more, since the following day I made some drastic gameplay changes without having
enough time to balance them. What I decided on the second day was that the ship didn’t move in an astroids-like manner physics, and couldn’t rotate while moving. This turned out to be crucial
for the gameplay, since it forced the player to plan his path wisely, so that shooting didn’t cause him to turn specifically. However, I still kept the ship accelerating a bit, so that moving
in long straight lines was better than moving in short more frequent straight lines.

This made the game fun in the difficulty level and playability, but very unintuitive and strange for most players.
I didn’t have much time to thing about this, and left it as is. But I believe what was important to do at this stage was either change the ship metaphore to fit the new mechanics
(maybe a soldier walking, pulling his gun only when he stops, and then rotating turns the gun, or something the like) or forfeit the nice game play I had and move back to astroids-like movement
to keep the intuitivness of the game intact.

Anyway, I think I learned a lot from this experience.
I find it very interesting to think about how players will react to the mechanics.

I think if at some point on the early second day I would have gotten some people to play the game and tell me what they think,
this would have pointed out the mechanics problem earlier and allowed me enough time to fix it.
Once you decide the mechanics are done and start working franticly on the other details, it’s hard to take a step back and think if any major thing needs changing.

I ended up the second day with the level design and balancing of the times. I was happy with that.
I took the time to make sure the game is possible to solve and that I managed to solve it.
Many people thought the times were too tight, so maybe I was too harsh with that.
I might have deducted 10% of difficulty out of each level just for fairness and the possibility to appeal to players that are less good at the game than I was,
after playing quite a lot for testing I might say.

And one last lesson – it’s very hard to call it a night on the first day when you feel you didn’t accomplish enough to finish it.
I couldn’t do it. I kept on going until I was happy and that was what forced me to do music and graphics instead of the core mechanics issues & bugs.
I think at this point, I should have gotten some sleep, and started fresh on day 2.
It’s hard starting day 2 since it’s the last day and you want to be closed on a lot of things to feel less pressure, but at the end it was a bad decision,
since I was much less effective without the sleep I needed.

I would be happy to hear your thoughts about my conclusions and the game itself!

Here’s the game: Feeling Alone

#gallery-1 { margin: auto; } #gallery-1 .gallery-item { float: left; margin-top: 10px; text-align: center; width: 33%; } #gallery-1 img { border: 2px solid #cfcfcf; } #gallery-1 .gallery-caption { margin-left: 0; } /* see gallery_shortcode() in wp-includes/media.php */ feeling-alone1 feeling-alone2 feeling-alone3

Thanks,
Idan

I want to review some games focused on atompshere and narrative

I’m interesting in rating some games (I’m thinking 30ish?) that are focused on creating an interesting atmosphere or narrative, and than writing about my observations from playing them.

I tend not to be into “interactive fiction” for the following reasons.

- Non-intuitive control schemes (I’m looking at you, text-parser.)

- Boring opening situations (I’m looking at you, I’m-somewhere-but-I-Don’t-know-Why)

- Find-the-Authors-Solution-Through-Trial-and-Error (I hate you, every puzzle revolving around kitchenware)

However, if your “interactive fiction” doesn’t feature any of those qualities strongly, than we’ll talk :)

If you comment that you want your game to be rated, I’d probably be somewhat critical about it. Not actually that critical, because I’m a big softie who spent 3 days doing the same thing you did and thought it was totally awesome that you did, but still somewhat critical.

4

This entry was posted on Wednesday, December 28th, 2011 at 2:53 pm and is filed under LD #22. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Postmortem: Sat-E

This is my postmortem for my Ludum Dare 22 entry, Sat-E. You can find the timelapse over here.

The Good

Motivation

I was really motivated for this dare and it showed in the game and outside it. It’s super hard to make a game in only 48 hours but this time it went pretty well. My previous attempts went okay, but there were always something lacking. This time the game feels a little bit more finished so I’m going in the right direction.

After the game the programming motivation continued and with it I’ve been improving my small fast prototyping framework I use when making games. I got a lot of ideas on improvements during the weekend so that’s great.

The feedback

I was moderately happy with how the game turned out, it didn’t contain everything I had envisioned after all, but I got a ton of positive feedback anyway which is wonderful! It seems like some thinks that my game is good and there’s nothing better for your game making confidence than a bunch of flattering words. I’m even considering developing the game more, maybe spending a couple of days here and there on it during a couple of months when I have the time?

I learned a lot!

The best way to learn something is just to do and it’s still true. I’ve found a bunch of ways to improve and shorten my code, I’ve made an “infinite” space constructed by individual chunks and that game physics != real physics. Awesome.

Game design is a pretty fascinating creature. Sometimes you give it your best but the resulting game isn’t funny, other times you think your game is shit but then you get comments on your “amazing” game! This time I was certain the game was crap, a neat idea wrapped behind a boring gameplay but turns out it maybe wasn’t that boring after all?

I got this comment:

“Also the fact that when that happened the game didn’t simply reset, I lost my money but not my items,
literally stopped me from rage quitting. Bravo”

My thougts? Wait that’s a bug! Hmm…

My girlfriend

Of course as I live together with someone it’s quite hard to devote an entire weekend, plus the extra time before and after, with my computer. Veronica handled it wonderfully well and she was very supportive which means a lot to me and it helped a ton.

The Bad

The music

There’s no music but I had grand plans for making music for the first time ever! It failed hard though. Which brings me to the next point…

Not familiar with the tools

I used my own framework for the game, which is fine, but my last game with it was in May 2011! Which is a looong time ago. I was a bit (a lot) out of practice with this whole pixel arts thing. And of course I had never used LMMS to make music and that didn’t happen. I was short of time and it was too big of a deal to start it with the last minute.

Not enough time

Even though I had the whole weekend planned for the dare and I skipped practice on Sunday I was still short on time. I’m not really sure why though. I made a pretty simple game, not a lot of art and I generated sound with bfxr which took no time at all… The reasons really must be:

  1. Not enough practice.
  2. Unfamiliarity with the tools. Correlates closely to #1.
  3. I’m bad and LD is hard.

When I see all these amazing games I’m reminded on how much better other game makers are. I need more practice and I need to make more games. I should enter the next dare, enter the experimental gameplay project and just make more games.

And let’s face it: Making a game in 48 hours is frickin hard.

The Ugly

The art

Oh god… I suck at making art. Let’s just leave it at that.

The code

There’s a lot of bad and wrong in there, it works but it’s not pretty. In fact, it’s ugly.

The gameplay

This is a tricky one. I thought about placing this in the bad section as I didn’t find the game very pleasing at all. The beginning was too slow, the ending too long and there wasn’t enough incentive to continue flying through endless space I thought. But I got a lot of positive comments and reactions which is wonderful! I don’t fully understand why yet so I’m tagging the gameplay as ugly. After all the gameplay wasn’t like in my dream…

Ending thoughts

Before entering the competition I’m always nervous but high spirited. That feeling is always crushed during the weekend and when I finally get the game done and uploaded I think it’s the worst game ever. Luckily I’m greeted with positive feedback and that was the case this time again. Maybe they are okay, not super of course, but simply okay.

This time the dare came at a time where I felt I haven’t done anything meaningful for a long time, it’s just school, little programming and no game making. Now after my spirits are high and I can face a new year with many more games to come!

Until next time, cheers!

Tags: postmortem

A question to Linux and Windows Users

I’m currently in the process of producing a makefile to compile my (future) game. However, In my interest to target as many people as possible I would link to know the following:

  1. What OS are you using? (Windows / Linux – Include which version if you so desire but it is not necessary)
  2. Are you using 32Bit or 64Bit? (This is the biggy)
Also, If there are any veterans who read this, what platforms do you suggest? (32 + 64, 32-only, 64-only)

Tags: architecture, C++, community, compiling, linux, Operating System, platform, question, target, veteran, Windows

Comments

ScreamRawr
28. Dec 2011 · 19:53 UTC
I use Windows Ultimate 64bit. Also, if you make it for 32, then the 64 users will be able to use it as well. So that’s probably your best bet.
SirNuke
28. Dec 2011 · 20:09 UTC
I personally use 64-bit Windows 7 and 64-bit Ubuntu 11.10.
28. Dec 2011 · 20:43 UTC
For publishing a game, you’re going to want it to be as multi-platform as possible (granted it works on those platforms stable)
28. Dec 2011 · 21:47 UTC
Mostly Mac OS X (64bit) and Linux (32bit).
28. Dec 2011 · 23:18 UTC
I compile everything statically from linux for windows 32, linux 32 and 64. As someone said, 32 bit binaries on 64 bit linux run very well but you may need some libraries you don’t have by default. 64 bit windows binary is a gimmick but on linux it may improve the chances to run.
29. Dec 2011 · 02:28 UTC
I have winXP 32-bit, win7 32-bit and win7 64-bit running at home.

As others have said if you target 32 bit windows 64-bit users will still be able to run it.
Raptor85
29. Dec 2011 · 05:19 UTC
64 bit linux, i can run most 32 bit stuff but not all due to library versions (the 32 bit compatability libs tend to lag significantly behind the 64 bit native ones). I’d love to go back to a non-multilib 64 bit system but there’s just too much still being released as 32 bit only binaries :/
30. Dec 2011 · 01:43 UTC
I use 64-bit windows and 32-bit linux, but only because my seller recommended it, i preffer 32-bit apps because 64-bit can run it with no issues.
Osgeld
30. Dec 2011 · 14:47 UTC
64 bit windows 32bit debian (based) linux
30. Dec 2011 · 20:43 UTC
Windows 7 64bit

Finally, Time Lapse.

Hey everyone! We’ve finally got our time lapse videos up!

For our programming timelapse, go here: http://www.youtube.com/watch?v=-cU2_m4gkz8&feature=youtu.be

For our art timelapse, go here: http://www.youtube.com/watch?v=hb6UBkAgrfg&feature=plcp&context=C3854edbUDOEgsToPDskJvdVApGT52a5yIinw4kVse

Please play and rate us here: http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=7415

We hope you enjoy!

 

 

 

 

 

 

 

 

 

 

Tags: timelapse

More updates!

I’ve just released yet another update for our game Follower (submission page here). Thanks to everybody who played and commented our game, I was able to patch in a few post-compo bugfixes and additions, so that you won’t jump out of a 12th-story window screaming after playing our game. Please feel free to play it and leave behind a comment or two! All of you who already did, we really appreciate it. Thank you Ludum Dare community members!

One of a Kind: Extended post-mortem

Alright!  Finally got around to doing this post.  This is going to an extended look back at the development process of One of a Kind, which you can download, play, and rate here.  It’s going to be a lot of walls of text, so if you want the shorter, regular port-mortem with “what went wrong vs what went right”, you can instead read this post.

That said, onto walls of text!

First off, timing.  LD22 was just not really at a convenient time for me…it was right after finals week, and though I normally don’t have many problems at all with finals, I -did- have some final project work I needed to finish up, and I was busy doing Christmas letters and stuff like that as well.  Initially I had intended to use the weekend/week before Ludum Dare to try out making an extremely simple shmup with SDL.net.  I had been eyeing SDL.net and wanting to try it out because it was C# just like XNA, but with SDL.  I knew I really liked developing in C# from my previous work on XNA stuff, but the major downside of XNA is that it locks you into the microsoft/windows platform.  Now, SDL.net isn’t really totally geared to being cross-platform either because you still need to use Mono to get the .NET stuff in there.  But from what I’ve seen, mono with SDL.net at least works better than monoXNA, which seems to be -really- immature.

Anyhow, I was intrigued by SDL.net but was still a little bit wary of whether or not it would really work the way I wanted it to.  If I could get working in it rather quickly and it did cross-platform okay, then that meant I had a winner.  So pretty soon I had a spaceship sprite moving up and down and left and right and shooting bullets on my Visual Studio 2010 setup.  Okay, great.  But then I noticed that I was getting some slight jerkiness, and not totally smooth motion even though my movements were all whole-pixel amounts.  Okay, a lot of referencing later, I’ve read stuff like the “Fix Your Timestep!” article and I actually for the first time am wrapping my head around the finer points of timesteps, framerate, vsync, and all that.  Since SDL.net doesn’t seem to have vsync (unless you use OpenGL, which I wasn’t willing to do because it was going to be a little more trouble for performance/etc gain that I probably didn’t need, and I -really- didn’t have time to write up OpenGL sprite functions or anything anyways), I concluded that the best thing I could do was to have an unlimited graphics framerate, while keeping a fixed game logic step.  The only bad part about that is that there’s possible tearing, but I was willing to accept that over the alternatives.

Meanwhile, I’m trying to get SDL.net working on my macbook classic in OSX (normally I’m booted into windows), as well as my linux VM.  This takes…quite a bit of effort, actually.  And my time is running REALLY short.  As in, the theme is going to be announced and I’m still trying to get things working on the OSX side (linux was a bit easier).  Theme gets announced and I go “huh…”, and then I actually get a .app on OSX that runs and gives me my spaceship, and keyboard input actually works! (for a while it wasn’t)

Though I still haven’t really solved the porting problem, I decide that this is good enough for me to go the C#/SDL.net route.  It’s something that I wanted to try out at some point anyways, so I might as well do it now and see how it goes.

After that, I went to a social dance event where I…didn’t really brainstorm any ideas.  After that I came back and don’t think I really got too much done as I was pretty pooped and had accumulated some sleep debt.  So despite the fact that it was like 9 hours into LD and I hadn’t really done anything, I just went to bed and decided that I’d get a real good full night’s worth of sleep.  I could have short-charged myself on sleep, but dammit, I was tired, and it’d just end up biting me in the ass later if I didn’t anyways.

So, Alone.  I started thinking pretty early on that I’d do a 2D platformer.  Yes, I know 2D platformers are really common in LD, but I’ve never actually done one before, and I figured that it’d be a good way to invoke the emotional atmosphere that I was going for.  Here’s my first brainstorming note sheet:


To me, “Alone” as a theme is nice because it doesn’t immediately bring any sort of content to mind like some of the other themes do, nor does it immediately call out some sort of game mechanics.  Take that in contrast to something like “dinosaurs”, for example, where you know all the games are going to have dinosaur characters in them, or “randomly-generated” where you already know that randomness is going to play a pretty big element.  So “alone” is pretty abstract and lets you go in a lot of possible directions.

I thought it would be really nice if I could manage to achieve both an overall mood of “alone-ness” and a somber feeling, but at the same time think of some kind of game mechanic that ties in with “alone” somehow.  Already I was thinking a lot along the lines of The Company of Myself (which by the way probably would have fit right in with this theme), and you’ll see a lot of that influence play in everywhere.

Eventually I settled on what I initially called an “alone-ize” ability, where the character can “alone-ize” an object, meaning all other objects of that type will disappear from existence and therefore leave that object “alone”.  The tie to the theme was slightly strenuous but I was generally happy with it and how it fit into my sort of vision so I decided to roll with it.  My only worry at this point was whether or not I could actually come up with any interesting gameplay out of the concept (which seemed cool).  This would end up biting me in the ass later…

But for the time being I set up really simple platformer physics, with placeholder graphics.

This actually ended up being really easy.  I knew C# was easy to develop in, but I didn’t think making my physics would be THIS easy.  The code was super-simple too, and I’m honestly a bit surprised that it held up so robustly.  The only weird part of it is that the character has 2 sets of coordinates–one real set of floating-point coords that I keep myself and one set of integral coords that’s used by SDL.net for blitting (since we’re extending the Sprite class), and so I have to make sure to keep those synced.  If I were doing things properly, I’d do something like make get/set functions and such, but I was doing pretty messy quick-and-dirty coding, so I just kept them in sync myself, and luckily this never bit me in the ass.  Note that the reason I needed floating-point coordinates at all was for vertical motion, as if you try to restrict yourself to integral coordinates, jumping looks…really really weird.

Anyways, other than that, everything was super-simple.  I could test for collisions using SDL.net’s functions which just did simple rectangle-intersections based on sprites, which was good enough.  So then I just did simple logic like if you’re holding right, move one to the right, unless that causes you to collide, etc.

I ended up coding a really simple thing that used pixel values of .png files to load in the map.  So actually every white tile that you see is a separate entity/sprite, and when I collision-detect I just see whether you intersect with any of them.  This ended up actually being a performance bottleneck, which I didn’t really realize until later.  Unfortunately I didn’t know how to easily profile my code automatically and I wasn’t about to try and find out, so my performance tuning consisted mainly of me realizing my game was stuttering, turning off various parts of the code (rendering?  logic?  collisions?) and seeing whether the stuttering went away.  Eventually at some point after I added the “reflection” mechanic I realized that the reflection was causing a huge performance hit, and realized that it had to be some code in the Character class, since I duplicated that code for the Reflection class (yes, code duplication, evil but necessarily in LD).  After I verified that it was the collision-checking I just optimized it by simply only checking objects that are within 2 tiles of the character’s position; and that solved things very nicely.

Speaking of performance bottlenecks, I also figured out that having alpha channels in my surfaces really slowed down blitting a lot, so I tried to avoid those (this was most important for the huge 640×480 backdrops).  I also needed to convert surfaces to the video screen format after loading them–I think that also made a difference (there needs to be an automatic way to do this).

Speaking of alpha channels, apparently in SDL.net (and in regular SDL), you can’t mix per-pixel alpha with per-surface alpha.  Which means that if you have a .png with some 50% opacity pixels, you can’t draw the whole thing at 50% alpha, or fade it in or out.  This actually took a little bit of time to look up and discover, and unfortunately it meant that my “alonify” sparkle sprite needed to use color-keying and couldn’t have translucency if I wanted it to fade.  On the plus side, the animation looks good (maybe even -better-) without alpha anyways, so it was fine.  Another consequence of this is that I ended up using separate sprites for the “nonexistent” versions of blocks, which was slightly inconvenient to make a second set of sprites, but ended up working okay.  Yet another consequence is that the text rendering couldn’t use anti-aliasing (per-pixel alpha) because it needed to fade in (per-surface alpha).

Speaking of the blocks…so, two things about that.  One is that in my initial “alonify” concept, I simply had the other like-colored blocks disappearing completely.  After thinking about that for a bit and trying to reason about puzzles, I realized that it was….not really quite that interesting at all.  So then in a flash of insight I had the idea that the others wouldn’t disappear completely, but instead would become passable so that you could “realonify” them.  Another thing is that at some point I actually made “walls” which were thinner versions of the blocks.  My reasoning was that with the block graphic, people might see it and get the idea that they can push them around.  I even considered perhaps making the blocks pushable, but never really ended up seeing any interesting puzzles that could be made involving that.  Eventually I decided that it was better to just keep things consistent and make everything blocks.

When I was drawing the character animation, I intentionally wanted to make the character graphic very plain, because I wanted it to be a vessel for the player to place themself into.  If I made it some emo guy with long hair or something, then the feeling would be more like “that character is alone” rather than simply the player experiencing it more directly.  So I didn’t use any colors and didn’t add much detail.  I didn’t have many pixels to add detail with anyways.

Speaking of pixels, I should note that I actually started making the game at 320×240 upscaled to 640×480, but then realized that at that size the maps were just too small to get interesting level designs, so I upped it.  This also happened at the same time that I was running into performance issues trying to upscale every frame, so whatever.  This wouldn’t have been an issue at all if I had been using OpenGL, but again, I didn’t want to go that route for this project.

So then I had a lot more space to work with.  This screenshot also shows the “walls” that I had in place of the blocks in an early version.

Once I had my actual character animation in, the block sprites and the gray tiles in, I also did sound effects with a mix of bfxr and FL Studio.  Once I had those, things were already looking like the beginnings of something cool, so I knew I was on the right track.

Unfortunately, I had a disaster incoming in the form of level design…

So, designing the puzzles for the game ended up being the most stressful part of the whole ordeal.  Well, closely followed by the initial start of LD where I was caught unprepared, and porting and distribution.  But puzzle design definitely caused me to bang my head against the wall most…or more accurately, it caused me to just sit at my computer and generally get nothing done for hours.

The problem was that I had no idea what kinds of interesting puzzles and puzzle concepts were possible using the whole “alonify” mechanic.  In fact, I didn’t even know if there were =any= interesting puzzles I could make.  I didn’t really know all of its implications and how it really worked.  Pretty early on I came up with the idea of having puzzles where there are multiple different corridors you pass through and each corridor has a certain sequence of colored blocks, and you’d have to go through and alonify the right blocks in order to pass.  And so I ended up with a bunch of sheets with grids of numbers trying to construct a non-trivial puzzle that looked like that, and…well, nothing I tried seemed to really work.

It was looking pretty hopeless at some points.  I even tried looking at some videos of Closure, that game where only things that are in the light exist, but that didn’t really spark anything either.  I kept on trying to think of something else I could add besides the colored blocks.  Enemies wouldn’t really be good, because “alonifying” an enemy doesn’t really make sense.  Switches/pressure plates/etc. didn’t really seem to make much obvious sense to me either, and seemed a little complicated.  Keys/locked doors didn’t make sense either–why would you ever “alonify” a key?  It didn’t really seem like I was getting anywhere with my ideas, so I think what happened was I just called it a night and slept for a while before waking up again.

Eventually I stumbled upon the puzzle above, which was kind of a eureka moment as it’s actually non-trivial.  It’s not -hard-, but not totally straightforward either.  I eventually realized that having blocks form floors was a useful trick, as a kind of one-way drop.  I also got the idea of having a narrow corridor at the right end of the room with a bunch of “target” blocks indicating that you needed to alonify some other block of that color before you could proceed.

Eventually I started to come across this sort of more standardized type of puzzle, with multiple rows and a sort of pyramidal structure.  After thinking about it a little I realized what actually makes these sorts of puzzles tick, which is that the blocks in the middle column are “protected” by the blocks on either side, which creates a sort of dependency chain.  Again, not exactly the more interesting or difficult thing, but it was all I had at the moment and it wasn’t -boring-, so I went with it.  And of course, I came up with a few variations, such as the room where you can’t alonify any blue blocks because you need the blue floor to be there.

So, despite all the troubles, I actually managed to come up with puzzles that IMHO worked decently (not great, but not bad).  In contrast, the earlier screens were pretty fun and easy to design, and each one actually has a fair deal of thought put into it.

Because I didn’t have any sort of instructions or tutorial, I needed the first few screens to both teach the basic controls to the player, as well as set up the mood and connection to the theme.  The first screen does -exactly- that.  It establishes the #1 basic action of a 2D platformer (walking to the right) and introduces the recurring theme of the character feeling “unspecial”.  I should mention that I actually had some different ideas for endings to the game, and one of them involves you finding a mirror at the end (the sprite for that is actually still in the content directory) and using your “alonify” on that, essentially suggesting that you “found what is special in yourself”.  When I came up with the actual mirror character concept, I decided that it would make more sense to have the ending work with that instead.

Again, introducing jumping to the player (and forcing them to use it in order to advance), while also strengthening the mood.

While the rest of the game doesn’t really require much in terms of platforming ability, I still needed to introduce the restarting ability, which is necessary if you ever make a mistake in any of the puzzles.  So I made some pits where you’d have to restart, so that the player would try out that ability.  It should be noted that this is probably very, very similar to how the restart ability is presented in The Company of Myself.

This room is actually more for flavor than anything else.  I needed these two lines of narration in order to explain that the character has the ability to “see what makes something unique”, which ties into the next room where you first learn about the “alonify” ability.  This is actually the one room that I sort of screwed up on, as the platforming here is unnecessarily hard.  Granted, anybody who’s familiar with standard platforming will have no problems with this whatsoever, but for those who aren’t, this screen might actually pose some difficulty.  So if I were to redo things, I’d make this particular room a little bit easier.

After that we go into the main rooms where we introduce the alonify ability and in each room we kind of explore a new concept based on it.  First we introduce the ability itself, then we show that the ability isolates based on the colors of blocks.  Then we force the player to realize that you might need to alonify things while you backtrack.  Then we introduce the “one-way” aspect of having colored-block floors, and then use that in a basic puzzle.  The next puzzle after that is the one where you’re allowed to approach the rows of blocks from both directions, then one where you’re allowed to approach the rows from both directions until you alonify the blues, and then after that the one where you aren’t allowed to alonify the blues at all.

Then we introduce the mirror character, which I really have to thank the gods for as it was a really good insight that came to me and was really necessary to make this game complete.  I struck on it with probably less than 6 hours to go and decided that it was worth it to try implementing it and seeing how it went.  I just created another class that was almost identical to the main character class with some key differences.  Of course, one tricky part was getting the reflection to start out in the same place that the main character does so that they aren’t desynced–at least, not in the beginning of a screen.  And I needed that to work with respawning too.  So what I ended up doing was that the reflection starts as inactive, and is constantly checking the spot that’s half a screen height below it to see if the main character is there.  If he is, then the reflection activates and starts responding to input.

One other tricky part was how to handle the case where both character and reflection alonify blocks of the same color.  I’m actually still not sure exactly how the situation works, but I think what happens is that it alternates each time, which is good.  But yeah, that took some tweaking.

The reflection puzzles honestly aren’t quite that interesting, and could have probably been better, but I had to rush through some of them for the sake of time.  On the plus side, I had already finished most everything else at this point, so I knew how much time I had to work with.  And even though the puzzles themselves aren’t that interesting, the narration ties in well.  I like the “pyramid of gold” idea on the 3rd to last screen–that was actually sort of a happy accident that I came up with that idea.

One thing that worked well for me was taking breaks from level design and such to work on other things, such as music and artwork.  This was especially important because of how much time I was “stuck” and feeling unable to make progress on levels.  So I tried to not waste time by using those periods to work on other things.

The music was super-easy to make, to be honest, since I have so much practice producing things in very short time periods.  Once the first few piano notes were in, the rest of the song basically flowed very naturally from that.

As for the stage backdrops…they took a bit longer.  I wish I would have had a way of just doing them totally automatically, but I didn’t have time to do anything like that, so I just drew all the levels myself.  Thankfully I managed to work out a pretty quick way of doing it, involving clever selection growing/shrinking and flood-fills to save time.  In the end it still looks really simple, but -infinitely better- than if I had just kept the solid gray blocks.  Those black outlines and dark/light shading really, really do make a big difference.

And I think that’s an area where I really succeeded-making a game that looks, feels, and sounds pretty polished.  I think that’s something that’s really nice to get, especially in Ludum Dare where a lot of other entries have really rushed MS paint-style sprites that aren’t animated and placeholder graphics everywhere and no shading and such.  So I think mine really succeeded in standing out in that respect.

Also, a note on the ending–there’s actually a sort of secret where, on the last screen, if you instead have your mirror alonify you (as opposed to you alonifying your mirror), the screen flashes cyan instead of white.  That’s it.  Yeah, okay, not really much, but I put it in for fun anyways 😉  The ending is kind of ambiguous as to what actually happens, which is…totally fine by me.  I think it works; or works well enough for what I had to work with, anyways.

After everything was set and done, I had some time left over for packaging and distribution, which was kind of a nightmare.  On the windows side, my binary produced by Visual Studio required the .NET framework, so I instead compiled using MonoDevelop and that ended up solving that issue.  Unfortunately I still ended up forgetting a Tao DLL at first but I fixed the package soon enough, so Windows was set.  Linux wasn’t that hard to set up, but unfortunately requires you to install mono which has a lot of dependencies.  Plus, I don’t think it works on 64-bit Linux.  OSX was really terrible and I couldn’t find any way to package it without requiring additional installs until I finally just tried Wineskin, which worked but I needed to bloat the download to 150MB.  Ugh!

So, overall, SDL.net was pretty nice to work with.  I really really like working in C#.  However, I can tell from this experience that it’s not the magic bullet that I’m looking for.  So my next target will either be to try out pygame, or maybe even try a browser-based game using Flixel or one of the multitude of other tools that seem to get a lot of use during LDs.  I probably want to try both at some point…maybe I’ll try each at least once between now and April so that I have more options for next time.

When all is said and done though, I managed to make a pretty awesome game, despite some troubles with level design and not really starting off on the right foot.  I don’t think I regret a single part of the process, besides perhaps making that early platforming room a little harder than it needs to be.  Well, and also making the initial screen go away on mouse click instead of just keyboard hits.  I know that I was sort of dealing with an element of uncertainty in that I based my game on an “unknown” mechanic and therefore didn’t know whether I could really take it anywhere, but I don’t really regret taking that risk, and it certainly turned out well enough.  But again, the biggest accomplishment was how the whole package came together–pixel art, animation, music, and narration really worked together to make a very coherent piece and I’m really happy with how that turned out.

Hope to try this again in April. :)

Tags: C# SDL.net Porting Distribution Music Game Development Journal Notes, LD22, postmortem

Rambling Post Mortem – Fernands War

Ludum Dare 22 Post Mortem
December 2011 – Game: Fernands War.

Pre-compo prep.
Last year I found out about the Ludum dare competition and was really interested in doing something, unfortunately I didn’t have the weekend totally free to commit to making any real attempt, but I managed to crank out a tiny little endless runner in a couple of hours and catch some of the live recordings (Notch’s one mainly). It was interesting to see the fruits of every-one’s labours, and the community spirit here is really inspiring.
So as I hadn’t managed to make a decent attempt last time, I had planned to jump in properly for LD22. In preparation I had made all the necessary requests for that 48 hour period to be free and started thinking about the tools I would use to make the game.

Physmo is a 2 man team, I do the art and design and @physmotone is the chap with the coding skillz. We had talked a bit about entering the jam as a team but were struggling to both get the time off we needed so I planned to enter solo. This meant coding the game myself; I am a programmer but I’m certainly no game programmer so I realised this would be tough. I’m sure Tony would be shocked by all the fundamental coding mistakes I made while making my entry, stuff he has the experience now to avoid, but I learned a lot doing this, especially about the architecture of making a game, the game states, resource management etc – all that tricky stuff we can take for granted sometimes.

In the week before the theme was announced, I decided I would choose Java as the language, and Slick2D as the graphics library for drawing the sprites (It also does a great job of loading graphics, sound and level data.) I’m not a java programmer but it seemed close enough to C++ to be easy to pick up, but mainly I wanted something that would be multi platform with the vague possibility of embedding in a web page (this didn’t happen). I didn’t know what kind of game I’d be making but assumed it might need level data, and I had heard of a map editor that was supported by Slick2D called Tiled, so I downloaded that and made sure I knew the basics of how it worked. In the prep week I didn’t find as much time as I would have liked to do actual prep but I did get a few hours to find some java tutorials and create a small test application that demonstrated loading and displaying sprites, loading and playing sounds and reading a Tiled level. I didn’t want to waste much of the 48 hours being stuck on some trivial problem like not being able to draw a font to the screen so I investigated the font libraries too (Angel code fonts I think it was). I had the small test app running, the final thing on my list of prep was to actually package the program to be runnable on other computers.
This was a couple of days before the announcement and I could not for the life of me package this thing properly. Eclipse is the IDE I was using and it’s pretty complicated if you don’t know it, and I had no idea about how to create Jar packages (which is what I needed to make the thing runnable). I tried every combination of including the platform specific .dll files, the library .jars for Slick2D and LWJGL, and did a lot of googling for the problem. Fortunately (?) many novices seem to have a problem with this step, and in the end I reluctantly tried using another app to package all of the files up into a fat jar, which worked. i say reluctantly because even though it worked in the end, I still don’t have a good understanding why it didn’t work and why it does now, but hey, it works! This was a real problem just before the compo started though. If I couldn’t find out how to package the game, there would be no point in working on a game. I would heartily recommend anyone taking part in a time limiting game creation competition to build a full app end-to-end before they take part.

The graphic and audio tools were to be Photoshop, SFXR (of course) for sound effects and Audacity in case I needed any sound effect editing. In the end I did install audacity in the final hour to tweak the ship thruster sound effect but that’s all.

Announcement
I’m in the UK, so the announcement came at 2am our time. The plan was to stay up for the announcement, have a think about it and then get some sleep.
The theme is announced. “Alone”. I stare at the screen for a few minutes. My first thought is, “Well at least I won’t have to code any enemy AI”.
At Physmo we have a folder full of crazy game Ideas and prototypes, but we have never really considered a thrust style game. I used to like thrust style games though, and I though it would be within my skill range to make a good attempt at one. Quite soon after the announcement I had come up with some ideas for a decent plot – I wanted to have some narrative in the game that would be explained as you play and I really wanted to have a good twist in there too. I had my general story Idea and style of game I wanted, I could now sleep (and secretly hope to come up with good ideas in my dreams).

Oh, this post mortem is going to be a total spoiler for the game, so please play it first if you intend to… I’ll give you a couple of minutes, just watch out for the spinning sawblades, the collision on them is a bit saucy.

For the plot of the game, I wanted the player to have unwittingly done something really terrible. This idea made it into the final game but was very scaled back. The initial idea was that you would be flying a ship around a room with some kind of reactor in the middle, there would be a cage full of energy capsules milling around that you would have to pick up and drop into the reactor. At some point you would realise that this is not the true reality of the situation, the reactor is actually a horrible mind controlling alien, the energy capsules are really other human members of your crew and the alien has tricked you into feeding your crew to it.
This was the plan until the end of day one, I didn’t think I would have time to code the mechanics for all this, the switching level graphics, picking up and dropping the crew etc, so at the start of day 2 I decided to change it slightly so that you were a security guard of a mining colony, who was going mad. It seems like at first you are being attacked by aliens, but as you progress through the game you can read log files that gradually explain that the aliens are really just the colonists, and by the end of the game you will be alone, having killed them all. It’s nice to end on a cheery, up-beat note.

It was time to start programming. But first I went to my trusty Photoshop and drew some sprites: A yellow ship, some bullets, some white splodges to use as particles and a simple tiling foreground and background tile sprite. The spaceship made it into the final cut of the game with no modifications as I quite liked it. NOW it was time to start programming! First I needed some classes to represent the ship, bullets and enemies. That’s what the game needed, they are an integral part of the game. You can’t have a game without them. That’s why, like an idiot, I spent the first couple of hours making some pretty particle effects.
Ok, Basic particle engine created, I now really HAD to start creating the game objects. I found a nice tutorial about creating game entities, and then creating generic behaviours that could be inserted into them, this seemed like a cool Idea and one I had never tried before so I gave it a shot (I’ll try to link to these tutorials and things at the end of the post). After stealing the code to create the framework of the entities, behaviours and renderers, I derived my own object classes for them, starting with the players ship movement code. This was easy as I had used some basic maths like this a lot in some processing toys I made a while ago. It’s useful to know so I’ll write it out here:
Horizontal Thrust = sin(ship angle of rotation) * force;
Vertical Thrust = cos(ship angle of rotation) * force;
So everytime the thrust button is pressed, I add these values onto the ships velocity on the x and y axis. Every time through the game loop, I add the velocity vector to the ships position, and that moves the ship. And at the same time I dampen the ship’s velocity by multiplying it by a number slightly less than 1.0 (0.98 or something). That reduces the ships motion over time and eventually makes it stop in a pleasing way.

Ok, next big problem. In my processing (processing is a simple java-like programming language) experience, the main loop is locked to a certain frame rate, but in the Slick2D framework it isn’t. This means the loop runs as fast as it possible can – maybe hundreds of times a second – but it will vary from computer to computer and will vary depending on how much is being drawn on the screen too. To handle this, the update loops are passed in a variable that represents the number of clock ticks that occurred since the last update, and using this I could feed it into all the motion equations. Essentially, every calculation that results in something moving on screen needs to be scaled down by the number of clock ticks, so that the movement is nice and constant. I forgot to do this to the scrolling routine though so sometimes the scrolling can be a bit slow if your machine is struggling. That’s a bug but would be easy to fix.

I now had a ship swishing around the screen nicely, with lovely particles firing out of it’s bum (and me making “woosh” sounds) so I flew it around the screen for half an hour thinking how awesome I was to have achieved such a thing. Next I needed some background to be drawn. The Slick2D libraries can load and display level data from Tiled map files, although they couldn’t handle (as far as I could tell) drawing level sprites scaled up, but it was quite easy to parse through the loaded level file, find what tile is at what location and draw it scaled up myself. I got this running surprisingly quickly (well it wasn’t very complicated) and then added some scrolling offset code, and voila! I had a ship flying around a scrolling level. Flying right through the walls though. Next step was to detect collision on the walls, so I wrote a routine that given a point in the game world, would find the foreground level sprite, and check if the pixel was filled or not. It worked and that is the basis of all the collision in the game. To collide the ship off walls, I check around 10 points in a circle around the ship to see if they are touching a solid part of the background. If they are, i calculate the vector from that point back to the centre of the ship and add that to the ships velocity, I was amazed that this works but it resulted in some pretty solid feeling collision (I was worried that the collision would be awful in this game) so maybe this is what real collision is based on.
I created some simple behaviours for the player bullets that I reused for enemy bullets (The entity system worked well here) then I added some basic enemy types. I regret not having the time to make the enemies do more, but in the end I just had static enemies that varied in the speed that they fired bullets at you and the number of shots it would take to kill them.
I added a lot to the game in the last half day, as the main mechanics were there. Different sprites for the enemies, more particle effects and the log file objects that can be picked up. Some trivial looking things took more time than expected, for instance displaying the log file text on screen and making the rest of the game pause while it was displayed. At this point I realised I would have to start thinking about game states, so I changed the main class to be a state based game state using the Slick2D libraries and created another state for the main menu screen, then worked on getting this to transition back and forward and make sure that the player could die and the game would switch back to the main menu. This is something I wish I’d thought about a lot more at the start as game states are a tricky thing to to if you aren’t used to it.

Panic was setting in in the last few hours of the 48, there was a lot to be tidied up. The collision between bullets, player ship and enemies was quite off so I modified the renderers to display the collision box and that helped me track down and fix the issues there. One big problem that I regret not fixing is that the hit-boxes for the circular saw blades is a square, not a circle and this makes for some really unfair deaths in the game. I realised I had no time left to fix this so I modified the level to move the saws and give the player more room to move around them, still it’s disappointing to get unfairly killed by them.

The game was looking quite finished, all the log files were placed and the end could be reached, but it was quite hard, so at the last minute I made the players health slowly regenerate over time. In the last half hour I feverishly added a lot of minor details: The player health bar, more particle effects for killing enemies, more sound effects and a dodgy system for playing the ships thrust sound. Panicking further, I played through the game one more time and hit the build button to build the final Jar file, and opened slick jar (i think) to package it up into a runnable jar file. With minutes to spare I clicked the Jar file and it seemed to work, phew! Opened my web browser, and went to www.ludumdare.com …… wait a … WTF .. oh MAN! Why is the site not working! Through lack of sleep and burnout I thought all was lost, I refreshed the site and still nothing. Thinking that all was lost, I gingerly climbed onto the window ledge, and, oh wait, the site loaded! Wheee! Well, at least, I saw a message from the site saying they would accept entries for an hour or two after the closing time. I eventually uploaded the game and could relax, but those last few minutes leading up to the deadline were some tense minutes let me tell you.

In closing this rather rambling post, I did enjoy the experience. I think I made a decent, complete game that I hope you enjoy playing – it’s quite short. I’ve learned a lot about what should be prioritised next time, and I feel like I was part of something big and crazy 😀

Please try it, it’s called “Fernands War” http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=5349

We have a full game called Mos Speedrun too, for iPhone and Mac/Pc, you might like it.

Thanks!

Nick

@physmo
http://www.physmo.com

Tags: java, post-mortem, slick2d

My Experience With My First LD

Hello! I am static_boy123 and I just wanted to share my experience in my first LD, and first game, with others:

I found out about this competition last year when Notch(The maker of Minecraft) entered Prelude of the Chambered, I immediately said to myself,  “I will do this next year.” So now I did it, I entered in my first, but not last, Ludum Dare.

I was watching tv one night when something popped into my mind, the Ludum Dare. I checked the website to see when it was, two hours. I ran to my computer and started memorizing my basic -5 file- library inside and out, after an hour I was able to repeat most of it from memory and the rest, thankfully, wasn’t needed. So I waited the longest hour of my life hoping the theme would be kittens.

Once the competition finally started I cursed everyone who voted anti-kitten, opened up handy dandy Visual Studio, and got to work. I typed out what I remembered of my library only two classes, but I was able to make a bunch of edits to one to make a new class. I had lots of trouble starting and coming up with ideas for what to do, but I did the basic things, like changing the screen size and creating the controls for moving.

After an hour of sitting and thinking I had an idea, a game that is more based on story than game play, but still has game play. I sat down and started, I added in textures, added a way to shoot, and realized just how inexperienced I am when it comes to game making.

Coding was crazy, I had tons of road blocks; bugs, bugs, and more bugs. I had to go into untraveled land to create the game, and I also spent plenty of time in well worn territory. Overall my game was very fun and frustrating to make, but it was well worth it.

 

Now a list of what was good and what wasn’t:

 

Good Things:

  • It was fun
  • I learned a lot
  • I coded in XNA which I am very comfortable in
  • Everybody was very supportive of my first game
  • I am happy with my work
  • My coding works
  • Others enjoyed my game
  • The ultra great graphics game “Real Life” didn’t distract me that much
Bad Things:
  • My entry has two huge bugs
  • I didn’t get to finish
  • My original texture looked more like a guy masturbating than holding a gun(tip: if this happens move the arm higher on the body and refine the angle :P)
  • It was very frustrating
  • The story wasn’t clear because it wasn’t finished
  • I spent a lot of time doing nothing during the challenge(SLEEEEEEEEP)
Conclusion: Coding is very fun, but can be frustrating, therefore it is good to have time between each competition. It is also great to get feedback from a good community who knows what you go through to make a game for your first time, because they had to do it themselves.(And it was most likely as crappy as yours) So I would like to thank all who read this, and hope you enjoy my game. You can play my game and view it at http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=6108 Thanks for reading, -Static

Tags: C# XNA, compo, Experience, First Time, My, postmortem, SuccessStory, tips, XNA Game Studio

Alone In Space… Postmortem

Ludum Dare #22 was my third consecutive time participating in Ludum Dare. Reflecting back on my past entries I can see clearly that each time the quality of my entry improves.  This time was no different, you can play my entry Alone In Space… here and be sure to submit and check out the Leaderboards here.

What was left out: (but I wanted in)

> More resource types, I wanted you to be able to gather gas from the nebula’s, that would have been worth more than ore.

> Two more types of asteroids. As it is you have no control over whether you mine metal, or Ore. I wanted different asteroid types to allow you to hunt down just Ore, or just metal.

> More Dialog, as it was I wrote the small bit of introduction dialog within the last hour of working on it, to try and set the scene.

What went Wrong: (I’m still  a pessimist)

> The length of the game, is too long for the type of game. It takes around half an hour to upgrade the ship so that you can easily defeat the waves of enemies. I wanted it to take around 15 minutes to upgrade, and defeat the waves.

> The difficulty is to hard. I didn’t get the enemy ship AI quite how I wanted it, I wanted them to fly side by side, but instead they stack up on top of each other. There are also some cases where they fire more shots than they should be able to. They should be able to fire four shots at a time, but there are times when eight or more are fired.

> I wanted the mini-map to show incoming ships, and the location of the drone (used to trigger the enemy ships) but it was causing an error that made the game unplayable. I changed it to show you the location of the station, as well as the location of asteroids (after you pickup a kitty).

> The graphics, they are almost how I wanted them, but I never had a chance to revise them. I wanted to add some lines to the ships and space station to imply joining pieces, and curves. I’m also not happy with the particle trail for behind the ships, its not that its wrong, its just not what I pictured.

Too Many shots...

What Went Right:

> The music and Sound effects. Although the mp3 don’t loop correctly (I’m not sure how to make them loop, or what format will loop. I still felt the music was a success. I used GreaseMonkey’s script to generate the .it files, then converted to mp3 using VLC. For sound effects I used sfxr, and though the sound effects added to the game.

> The Gameplay was how I intended for it to be, I wanted you to have to venture out from the station to mine, and in doing so you would find the kitten, and the drone. As I mentioned before I wanted the game to play out faster, but that would be achievable with more control over what you collected, so you could earn more money from one load.

> The Leaderboard/ Online High Score table, I had most of the game finished before I decided to add in the highscore table, but I’m glad I did. It add a sense of achievement when you set the highest score, for all to see. I just wish I had the time to add an in game viewer for the leaderboard.

What Comes Next:

I plan to continue with Alone In Space… I want to work on a revised version and over the coarse of a month create a more polished game to release. I’ll be blogging about the progress on the 1 Month Game Website. I will probably start the revision next week. Off the top of my head the revision will include everything mentioned in the What Went Wrong section, as well as more levels, and anything else that I think of while working on it.

Tags: postmortem