One of my goals for this year was to take LÖVE and make some games and demos with it. To that end, I spent some time in January and February playing around with a game concept. While I’ve decided not to take the full project to completion, I think what I do have is interesting enough to share and write about.
So let’s get right to it, and look at Atlantis!
What is Atlantis?
Atlantis was a project inspired by three very different games:
These games may not have much in common but there is a tenuous connection that my brain drew between them, somehow. I liked the idea of Jaws, in the sense of roaming the sea on a boat and diving down to find stuff. Instead of being all about killing a shark though, I wanted something more focused on exploration and discovery. To that end, I pulled some ideas from the other two games to form a sort of… underwater Zelda-like where you play as a treasure hunter diving into caverns and submerged temples full of treasure and danger.
The main game loop was supposed to play a lot like Zelda, but instead of roaming the world you would dive from certain ‘entrances’ (beaches, diving spots) into an interconnected underwater world. The loop would be about popping in, exploring and gathering loot, and escaping before your health or oxygen ran out. There’d be a small amount of above-ground exploration (towns, woods, etc) where your ‘kit’ would behave slightly differently, giving a good variety of gameplay.
If you’re curious to see the (very rough and slapdash) demo, it’s right over here.
Why I’m Not Making This
I started working on a demo, and I got a few mechanics working but… it’s just not very fun. The oxygen mechanic forms the core of this game’s loop, and in practice it just makes exploration stressful. Since you don’t know the layout of the world when you first dive in, you often have to ‘guess’ which way might lead to the surface, if you’ll have enough time to get there, etc. and it just feels bad.
I don’t think this is an easy design problem to fix. If I give the player more air than they need, the main mechanic stops mattering. If I give the player a map, there’s less incentive to explore the world. And honestly, even if I do find a novel solution to the oxygen mechanics I don’t really think the game will be better for it. After playing with the idea, I think the time pressure just works counter to the rest of the game rather than enhancing it. Lastly, if I remove the mechanic altogether the underwater setting kinda stops making sense.
This sort of game also needs a lot of content to feel complete. I can’t commit to a big game if the core concept isn’t solid, and this one definitely isn’t. So, it’s time to move on to new ideas.
What Did I Get Out of it?
After a project, I think it’s worth thinking about the takeaways from that project. We’ve talked about the design problems, but was there anything worth keeping?
As a matter of fact, I think there was.
In order to make a top-down Zelda-like, I needed a way to make tilemaps. Instead of integrating a complex tilemap editor, I setup a very simple but effective method using png files.
I think this method was fairly successful, it makes sharing and editing maps very easy. It also has some less-obvious benefits. For instance, this system effectively forces the use of random variations and autotiles to make good-looking environments, because you can’t specify tiles by hand. This restriction has a real benefit, because it makes changing tilesets and adding new variations easy and automatic for your entire game world. Because you can’t “hard-code” the content of your maps, everything is dynamic in a way that lets you make big sweeping changes and improvements easily. I think this is a real benefit when trying to secure the visual design of a game.
Anyway, I like the concept enough that I’ve refactored the relevant code into a little generic API file for later use. I didn’t make any release-ready assets or complete autotile system for Atlantis because it seemed like the wrong focus for the stage it was at, but but the map loader itself will surely come in handy for future projects.
Aside from that, I’m not really married to any of the systems. They’re functional (if very messy), but I don’t think they’re cool enough to be worth lifting out of the codebase for the time being.
I haven’t decided yet! I have a game-adjacent LÖVE project in mind, but I’m also interested in giving Minetest a second look. The team released a new update recently, and while I’m wary of investment I also kinda want to give it another quick shake (and this time, try to ‘play it safe’ with the engine’s current limitations) and see what comes out of that.
The future is bright and productive!