Tednesday

Ludum Dare 45

Finally finished...Slave: Unchained

SlaveUnchainedShowcase1.gif

Finally finished Slave: Unchained!. It's been a wild ride folks! It's amazing how much you learn in 48 hrs, all thanks to Ludum Dare. Can't wait to play other people's games!

Kinda forgot the theme half way through but who cares :D

The bug that took a week to fix VS the game that took 48 hrs

So having finished Slave: Unchained (https://ldjam.com/events/ludum-dare/45/slave-unchained) last weekend I quickly realised it insta crashed on most peoples systems.

SlaveUnchainedShowcase1.gif

First off why? Well turns out I'm a noob at GPU programming and (I'm assuming) I was using features that were not supported on older cards.

I was doing something stupid for my tile maps. I was storing all the texture atlas lookups in a big shader uniforms. Older cards have limitiations to how big these uniforms can be!

So I had to change the entire tilemap implementation. A bug that cauess you to restructure your entire backend? Those the best.

In the end I opted for using a texture as a lookup. The issue there is that openGL is pretty obtuse. I had to make sure that I understood properly what happens to texel values when it's offloaded to the GPU, and the kind of data I was sending was correct.

After wrangling that, I had additional problems. To not get too bogged down, turns out incorrectly using "flat" in shaders creates some odd behaviour in older cards but not in newer ones. Not fun.

This soon went from an afternoon fix to a substantial week long rewrite. Does that follow in the spirit of ludum dare? I dunno. I mean the game is pretty much exactly the same. It's just the behind the scenes, most of it changed.

All in all. Idk. Is it fixed on all cards? Who knows. Do I want to give up forever? Most probably :)

Post Mortem and Update - Slave: Unchained - Rampage Edition!

In the initial planning phase we knew we wanted to create something simple that we could pull off. The aim wasn't really to make a good game. It was to make something that tested the limits of our tools and current skill set.

SlaveUnchainedRampageEditionShort.gif

Play here: https://ldjam.com/events/ludum-dare/45/slave-unchained

The Beginning:

Slave: Unchained is written entirely in a custom engine. As you can imagine that makes everything a pain in the butt. At the start of the 48 hours I had a barebones, skeleton of a tool. There was no infrastructure to save or load scenes. There was very limited support for sprites and sprite animations, and tilemap functionality was... limited.

This all had to be written on top of the development of the game.

A lot of these problems were sleeper problems. I.e. they don't rear their head until later on in development. For example, how do you know what features you need until you need them?

Luckily, I knew this was going to happen, so from the outset I knew compromises had to be made in order to account for the extended time required to implement features.

The theme was the first to go. The theme made the scope too big and the scope needed to be very very small. I've been burned by scope creep too many times. Establish your scope and then half it. You'll get half of that done in double the time. You will crash and burn if you dream too big.

Another compromise was sound. I am not a sound designer, and as much I know the importance of good sound design and good music it was something I knew I could not learn, implement and then polish in time before the deadline.

The Target:

There were a few things I definitely wanted to do. The major one was tight movement. Collision response is difficult to get right. I think we did a good job here. You know when collision is an issue when the players start to notice it. If you never notice it, it means it's behaving like you expect and the suspension of disbelief is maintained. We did well in this regard.

Another goal was to implement something visceral and impactful. The gameplay had to be punchy and weighty and there had to be some consequence to your actions (not moral consequences). The permanent blood had been something I'd been thinking about for awhile. It adds an extra dimension that sells the illusion that you exist in a world. It's also astonishingly violent which actually wasn't my intention. But it felt good to play, so I made it more bombastic and extreme.

The Gripes:

OpenGL sucks. What works on some cards will not work on others. Sometimes it's your own fault. You didn't read the specification. Sometimes it's entirely openGL's fault. What is a fatal crash on one system is not on another. This will often be accompanied without a warning or error code. What is expected behaviour on one card will not be expected on others. This was a headache and soaked up the majority of the post-development and update stages.

Conclusion:

A custom engine grants you one thing and one thing only. Adaptability. The only problem is that it comes with a substantial cost. Time. What will take you N days in one engine will take you exponentially longer in your own. But in another engine you are always constrained by someone elses implementation. Rolling your own means the constraint is only yourself. Sometimes you don't want that. But for a small scope project, without real world demands it can be a rewarding experience.

Ludum Dare 46

Come and play Wayfarers! [WEB]

wayfarersgif1.gif

Come and play and rate Wayfarers!

https://ldjam.com/events/ludum-dare/46/wayfarers

We'd love to share our game with others! We had a blast making it and we hope you have fun playing it too!

Wayfarers: A Retrospective

wayfarersgif1.gif

So it turned out that our game was actually quite good. Which was quite surprising. Atleast to me.

From the outset I thought we'd get too bogged down in learning new tools and learning the boundaries of what we could achieve together as a team. For some of us it was the first time we'd ever been in a team this large.

I'd done enough projects that I knew the key is always to keep it simple. To ask the key question, what is the game actually about? We had a few scope creeps. Suggestions about adding additional resources or more complicated battle mechanics. But at the end of the day additional mechanics didn't add anything to the core concept of the game. If we couldn't get the core concept right then what was the point?

wayfarersgif2.gif

The other things I've learnt from prior projects is that nobody cares about a game unless it feeels good to play. This, to me, is why games are so hard to make. What the hell feeels good to play? A kinda hope we acheived that with Wayfarers but the game is far from being the best it can be. There is so much that can be done to make it better that it boggles the mind

In conclusion Wayfarers is the culmination of a lot of crap that ended up making something quite okay. For ludum dare making something that you can honestly say turned out pretty good is quite the acheivement. Atleast to me anyway :p

Play the game here: https://ldjam.com/events/ludum-dare/46/wayfarers