Neongarten Postmortem

Years ago, I played a small indie game called Luck Be a Landlord. It fancies itself a roguelike slot machine, but it's a long way from a traditional roguelike. (There's a whole post waiting to be written about the history of what roguelike means over the years. It would interest dozens of people!) I see it as part of the Slay the Spire lineage - roguelike deckbuilder with artifacts and post-encounter deck additions. In Landlord, each pull of the slot machine brings 20 random symbols from your 'deck' into a random position on the board.

The charm and depth of Landlord comes from its huge variety of symbols and the effects they have on each other. A dwarf might consume nearby beer for bonus coins. A vandal could kick over adjacent graves (+coins). An arrow might give a multiplier to every symbol in a line. There are some 150 symbols, and each often belongs to a broader category such as food, people, rocks, or card suits. These categories lead to different builds. Successful play involves reading the symbols and artifacts offered to you and knowing when to abandon your current build when a stronger one becomes available.

It's a great game, and one we casted on before. I only had one problem with Landlord - I didn't like how swingy the randomness of the game could be.

For Season 4 of Tiny Mass Games, I wanted to do my own take on Luck Be a Landlord. I wanted to go with a minimalist take on a city builder, building a cyberpunk tower chock full of weird and entertaining structures. I had the perfect music in mind to use for the game, too.

I was also looking to switch from Unity to Godot due to certain foot-guns Unity's executive leadership fired off last year. While looking at different starting points in Godot, I found Kenney's excellent City Builder Starter Kit. It served as a perfect introduction for Godot and gdscript - it had some basics like saving / loading, camera controls, and user input already implemented. I could hit the ground running. Using Kenney's AssetForge 3D modeling program, I was able to generate 3D models of buildings for my game easily without having to learn something complicated like Blender.

My initial design for the game was prototyped within a week. Each turn, you'd choose between three building options and place one inside a 4x4x4 grid. Each building could producea a 'slot machine' symbol, symbols would fill a 4x4 grid layer, and then symbols could be transformed as they fall through each column. The game was working, but the game design wasn't. Even with some basic material production chains implemented, symbols (like "iron ore") would have to land on an exact spot in order to be processed into "steel" or further steps. The chains were an all-or-nothing proposition, and it felt too swingy. So, I took drastic action. I scrapped symbols and had buildings take their place. Now, each building provides adjacency bonuses to specific other buildings. Once you placed two buildings down next to each other, that 'combo' would last until the end of the game. Without the randomness of the symbol draw and placement, the game was far from a deck builder - I had stumbled into a city builder.

The game ends up with a good flow. Like Landlord, you'll try to build combos and synergies between different buildings. Unlike Landlord, these combos are frozen in place inside the 4x4x8 building grid. Instead of having a single "build" that you're going for, subsections or neighborhoods of your city have "builds". For instance, you might have a stack of factory buildings on the back row, a park-based nature preserve on layer 2, and a corporate cluster on the front row of layers 4 - 6. The nature of building up from the ground leads to interesting decisions, too. Maybe you have an empty spot on the ground layer that would net some major cash if you draw an Organ Harvesting building. Do you leave that spot open, hoping for a lucky roll for your building options? Or do you close it off, giving you more flexibility on the layers above? (Waiting comes with risks, too, as a few shanty apartment buildings appear in random spots at the start of each week.) There's a nice pull of risk and reward.

Another great choice for Neongarten was the cyberpunk theming. It allows for a striking visuals, lights, and color, and I could sneak in some little bits of dystopian humor. (My two favorite bits: one of the (rare) buildings available is "An Actual Tree", and one week now lasts eight days - Corpday is now between Thursday and Friday. Hurray for our corporate overlords.) It's a fun environment and setting to play around with.

Closing out the postmortem, here's what I learned while making the game:
- Learning Godot went smoothly, especially starting off from a starter pack.
- AssetForge was a great way to quickly adding new buildings.
- Having a solid idea of what game you want is key, but you also need to be flexible once you see how a prototype plays.
- It's easier designing a cohesive look and style around a strong theme.
- When the game was first released on itch.io, it only had around 20 buildings. This has since doubled, and the newer buildings tend to be more complicated. I recently added in building unlocks so that new players aren't overwhelmed by complexity, but I should have designed for that from the beginning.
- The lofi hip hop soundtrack by Audimus worked great for setting the mood of the game. I had that music in mind before I wrote a single line of code.


Neongarten will be part of the Steam Next Fest in June 2024! You can wishlist the game and try out the demo right away. The full game will be released in Fall 2024.