vel0h

LD31

“Ludum Dare 31: What went right, and what went wrong.” – a post-mortem by vel0h

The following is a repost of this piece written originally for my dev blog.

As some of you may know, me and Bloxri competed in the Ludum Dare 31 (the Jam). This was a massive learning experience for us both, as neither of us had competed in a game jam before. (does an awful game made in 0 hours count?) Additionally, this was the our first game we made together, as a group. In fact, this was, for both of us, our first serious game development task in quite some time. Needless to say, we were both excited, if not a bit nervous.

For about a week or so before the jam I started trying to learn the Urho3D game engine, as I believed this provided all the functionality needed in an engine in a nice package. However, being unfamiliar with node/component systems (at least at a code level) and not having learned all that much in the time span, the day of the jam I asked Bloxri if he would like to join me, take some of the weight off my shoulders. He agreed, but only if we used GameMaker. So, with the engine having been decided upon and a trusty partner in crime, we set up our tools, made a tiny practice game, and then relaxed with a few rounds of our favourite game before the jam started.

When the theme was released, neither of us could reach the site. Thankfully, I was idling in the IRC channel, and saw the topic change live. Immediately the reactions started to flow in, and it appeared as though to most, the topic hit them like a brick. “Entire game on one screen? Isn’t that all games? What the hell am I supposed to do with that?” Thankfully, Bloxri, with some experience in the development of and a general passion for platformers saw the topic as playing to our strengths. We brainstormed several ideas that would reinforce the same screen idea, and eventually we settled upon a game that did take place entirely on the same screen. An infinitely downward platformer. We titled it infinifall.

Armed with some old movement code (which I eventually got annoyed with, scrapped, and rewrote from scratch) and art assets (which all received a touch-up or rework) from an older platformer made by Bloxri and one of his friends, we set out to work. Most of day one was spend with his the bare minimum of the level the opening hole and that first little drop. At this point we still envisioned a randomly generated world, with some predefined puzzles and pathing between those, with various traps littered about. However, by the end of night one it would be clear that we didn’t have the skill or the time (those two requirements are inversely proportionate) to implement that. On the second day, we settled on a fixed map with a hidden time-attack element that only presented itself upon successful completion of the game. Anyways, the rest of day one was spent getting the physics and movement in place, as well as defining the special characteristics of some of the special blocks. This was from Friday at 9PM until well into the next morning, I’d hazard about Saturday at 4AM. At this point we both went to bed, anticipating the next day.

By Saturday at noon, we were at it again. We started out the day trying to decide on some mechanics which would differentiate this game from other platformers. Not having the skill/time to implement procedural generation, we needed something extra to give it some “oommph.” Eventually we found ourselves going back to an idea I had the prior day during our original brainstorming, a lighting system. Now, I had done some experimenting on Friday night, just to see how a light system would feel. However, we wanted shadows. So we whipped something up real fast.

image

This was not what we wanted.

We found that there was no way we could do hard shadows, shadows that would not expose the next parts of the map without you being in their line of sight, and still have the game feel in any way, shape, or form natural. So that system got scrapped, on of our last ideas before bed. However, revisiting it on day two we had an awesome idea. We would implement a sort of lantern system, a light that game you unobstructed vision in an ever decreasing radius. The further down you travel, the lower the light output of your lantern. Some tweaking about, and this was the final product.

image

image

So now we had our unique concept. (I would later find out that at least two other games

in the jam had some sort of limited lighting system [edit: three][and a fourth]) Next up, finish up the specialized blocks. This included the blocks that effected motion, such as ice, quicksand, or water, as well as the switch blocks and the moving blocks. (the chest system came later) With an array of available blocks we set out to get some early progress on our sort of demo level. I saw demo level because at this time, we still thought we might be able to squeeze in some procedural generation if we had time, despite knowing nothing about the concept before the jam. By the end of this the second night, the “demo level” was just “the level”. At this point, it’s now something like midnight. (I know, “just a lighting system and some blocks in 12 hours? You guys work slow.” Yes, we did. Quiet. There was probably more we did, but right now I’m drawing a blank.) We got some progress on our level, something like a fourth or a fifth of the final product, and it was decided that the game would be annoyingly difficult, but completely possible. (Side note: right before we submit for judging, we had one of our playtesters run through it to ensure the entire thing was not only possible, but possible without losing a heart. He did it, though only once.) At around 4AM on Sunday, with good progress and the knowledge of at least 36 hours left in front of us, we went to bed.

Sunday was the day of heavy playtesting. Bloxri living in a college dorm room, he had other people in and out of his room all throughout the day. Every one of them took a few minutes out of their day to play the game and give us feedback. One of them, a hardcore platformer fan, even took something like an hour out of his day to play it several times, getting to the “end,” or as far down as we had designed, quite a few of those times. It was from this playtesting that many lessons were learned. First off, many people said it felt weird to control, or that the charter felt floaty. An overhaul of the physics system and a complete scrapping and rewrite of the movement system (which was a pain to program new features into, I was glad to see it go) made the character much more fluid and responsive, as well as reducing the amount of time you sit in the air, just waiting for him to fall back down. Additionally, double-jumping was added (although not very powerful, its most effect in just stooping downward momentum) and ladders were made easier to climb. We also added springs, a fun little element originally designed to be helpful, but in the end was mostly just used in particularly devious traps.

This was when I stepped down. After the closure of the compo part of the jam, Sunday at 9PM, we had only 24 hours left. I had school the next morning at 5AM, so I worked for about three more hours, until midnight, and then was off to bed, leaving Bloxri to make use of all the functionality we had put in place over the past two days in a fun yet frustratingly brutal level for our platformer engine-type thing. I came home from school the next day, did some homework, and hopped on at around 5. I was informed by Bloxri that, not wanting to miss the deadline, he had submitted the game. I downloaded it, was more than pleased with the final result.

There are still some bugs. The second chest you encounter is broken and useless. Some of the thinner holes are quite difficult to drop into, particularly the first trap door you encounter. Hit detection is pretty awful, some spikes don’t actually doing anything to you, while in some other cases you’ll land on two spikes, and take two hearts of damage. But I’m happy with what we’ve got. It’s a game, a game that we made, in 72 hours no less, and I love it, all it’s faults included.

That’s not to say that now that the jam is over we won’t clean it up a bit, or finally implement procedural generation. However this weekend will also hold a special place in my heart. The first time I completed a game with someone else. The first time I made a game in a game jam. The first time I made a complete game in GameMaker. The first time I saw a game through to completion with completely original code AND assets. And, the first time I made a game that I’m proud to look back on and say that, despite all the hardships along the way, I couldn’t be more proud.

Ludum Dare Submission

itch.io Page

Game Jolt Page