As the dust settles...

This was our first proper attempt at a Ludum Dare, after years of dreaming but never having time. I thought it'd be nice to write up my thoughts from the experience - process the hazy blur of a weekend. Considering we started somewhat disheartened by the theme (It was the only one our entire team lacked ideas for!) we managed to land on a concept we could appreciate.

Planning and Compromises

One of my goals for this Ludum Dare was to gently test the waters of making something 3D, and learn a bit of Godot. Historically, I've only worked on 2D games, and solely in Unity. Honestly, either one of those challenges was probably enough to be learning while on a tight deadline, buuut I am a glutton for punishment.

A limited scope concept

To compromise, we tried to keep the game as simple as we could; removing potential pitfalls like fighting to get nice cameras - a common problem in quick 3D games when you lack experience. We opted for a faux-isometric view, so we could keep a fixed camera angle.

With this in mind, we landed on the concept of a sort of town-building board/card game. Something with minimal 3D world interaction, primarily UI driven, with minimal asset requirements. We were already aware of great tools and asset packs from Kenney.nl, which allowed us to create our own simple 3D building models very rapidly, despite absolutely zero 3D software experience amongst our time.

(Chris Neal)[https://twitter.com/CDPNhyphenK], our resident art and narrative expert, crafted a wonderful little setting for our city to live in, and set about crafting the details of the world and its inhabitants. While myself and my partner (Lizzie Davison) dove headfirst into tackling the programming and asset creation. Lizzie's decades of Sims addiction really came into full swing with Asset Forge.

Grids

Originally, we really wanted to experiment with some more organic grid generation, to emulate a more natural city environment, inspired by great examples like (Townscaper)[https://twitter.com/osksta/status/1301816247479345152] and Medieval City Builder. Unfortunately we rapidly concluded that we could spend the whole weekend (and more) just faffing with that tech, and had to abandon that idea. Instead, we settled on a simple hex grid using some existing models. A far cry from what we dreamed of, but it allowed us to keep moving and start working on the game loop.

We're considering updating the game further over the next 3 weeks, so maybe I'll get a chance to dive back into the wonders of abstract grids. I think it would really help improve the overall vibe.

AI

Ideally, we really wanted interesting personable AIs driving the other councillors, with their own motivations. Unfortunately, as the weekend melted away, we rapidly realised this was a pipe dream. Despite our best efforts to cut scope, we still needed a fairly broad number of assets to make the gameplay loop interesting.

As such, our AI remained dumb and chaotic, with no strategy. This makes it fairly easy for savvy player to win consistently - as Lizzie frequently proved to us!

VFX

One of my personal biggest disappointments here was being unable to flex my creative coding muscles. I really wanted to do some custom shader treatments for the 3D environment to pair the world with the art Chris was creating for us. Unfortunately, with Lizzie tied up in asset generation, the bulk of the gameplay programming was down to me. I kept bumping the shader and particle work down the priority list, until we were reaching closing time, and nothing had happened. More for next time I suppose.

Panic! Is this fun?

After a busy Friday night and most Saturday getting the grid and core UI in place, it was time to sit down and get the core gameplay loop implemented: Each player given 10 seconds to make their turn, to select a card and place it down, to be revealed at the end of their turn timer. Suddenly, the grim realisation dawned that we never truly defined how the game played (what fools we were). We had concepts, sure, and lots of fun fluffy ideas, but nothing that I could take and implement. Every approach landed at the same damning conclusion: This is slow as hell and not fun for the player.

After some panicked discord calls and rethinking, we honed in on the issues present, and came up with the best compromises we could. We staggered the player turns, we redefined the interaction loop, presented the player with more information. We were closer to something that could be enjoyable.

Unfortunately, the biggest problem remained: The AI were too stupid to pose a challenge, and we lacked meaningful decision making that encouraged player thinking time. Without thought, the game descends into a mindless block-placing experience. Zen in it's own way, but hardly the strategic problem solving we longed for.

Alas, with time ebbing by, we were too far gone to change tack now. We were now nearing closing of sunday, and we still lacked UI, narrative text, and we only had a 1/3 of our models ready to go. Risks were mounting.

The final frantic rush

As Monday rolled round, the true rush began. Lizzie churned out an additional 6+ buildings and various colour swaps over the day, and then proceeded to architect the scoring system in its entirety. Meanwhile I entered full scattershot development mode. Update UI. Find Bugs. Add additional districts/multiple rounds. Setup text, barks, completions. Add the music tracks provided late on Sunday by Rob Nuttal. Around 7:30PM BST, 3:30 hours to go, Chris showed up, with a collection of PSDs for UI assets and reems of text to add in where ever possible.

Honestly, I can't count how much we did in those last few hours, trying to bring it together. We had to fully replace all UI elements from placeholders to finished art assets. Add in the music and set it to change with district. Hook in various win/lose conditions and different text for each. Build a variety of different scoring methods and assign them to all the properties in the game. And that's not even counting the enormous mountain of bugs.

We published our page with less than 15 minutes to go. And then we started finding even more bugs by the minute. All of the last minute asset additions had resulted in a lot of hacky solutions by myself, and the cracks were showing. We did our best to patch as many immediate, game-breaking bugs as we could. We just about completed a build, and updated the itch and LD page, with 3 seconds to spare.

... And then we realised the damn build was broken. A bad git merge at the last second. An asset file path casing issue, of all things. Not enough to break the editor, but enough to break a build.

We finally got a functioning build uploaded by 12:07, 7 minutes past the deadline.

Screenshot 2022-10-04 175953.jpg

The following day

Unfortunately, that was not to be the end of our issues. Last minute changes always create problems. As our feedback received thus far shows, text rendering on the cards is poor - often illegible. The descriptions hastily copy and pasted from a spreadsheet lacked clarity in a lot of places, making it hard for a player to comprehend.

A last minute update to the grids had resulted in unreasonably large grid sizes, causing the first round of the game to take an average of 6 minutes to play. Completely unreasonably long to give Ludum Dare players any feedback on what-the-hell it was they just played.

However, we still did it. 72 hours and we made a game. None of us had ever finished a full game project, let alone on such a strict deadline. It was both an overwhelmingly stressful and joyful experience, and I can't wait to try it again.

We're going to try to fix as many of the issues as we can in the coming weeks, and hopefully do our weird idea justice in the end.


This got increasingly rambly as it went on, but it was good to write down my thoughts. Thanks to anyone and everyone who looks at or plays our game.

Someone suggested I should probably add a link, so here's is our entry to Ludum Dare 51!

Sinister Urbanism