Posted October 19, 2019 by Pandaqi
#godot #level design #pickup houses #simplicity #new level 1 #old level 2 #I don't know how to use these tags properly
Welcome to the seventeenth devlog!
Last devlog, we finished level 1. I wrote that devlog a week ago, and this week … I realized I needed to create a different level 1 and rethink my strategy for designing these levels.
Why?
In short: the first level is more suited for level 5 or something. I need to start much smaller and simpler, making the game accessible for everyone.
So, this week I’ve been doing everything necessary for the switch to these new systems: designed a completely new level 1, introduced a tutorial overlay, and made deliveries simpler and more forgiving.
Let me show you a clip of the old level 2, as I was developing it. I think it will immediately be clear why this level was too big and too complex for a level 2.
This level had:
Way too much for a level 2. (Maybe even too much for any level.)
It looks nice, sure, but it’s too much.
I moved my current level 1 and level 2 to a folder called “future levels”, and started from scratch.
I thought: what’s the absolute SMALLEST level I can design, that still teaches the mechanics well and needs some cooperation. The level I came up with has already been featured a few times throughout these devlogs, but here it is another time:
The huge crane is still in the center, but now it rotates by itself (no need to push buttons or anything), and it has two platforms.
These decisions weren’t immediately obvious to me – the first design still had buttons, and only a single platform. It took a few iterations before I realized I could improve the level even more: by removing the buttons, the level was less cluttered and I needed to explain fewer mechanics. By adding a second platform, using the crane to transport yourself/packages become a more viable option than walking.
Around the crane are two small islands. Each island has a single spot where packages start, and a single “dropzone”. (As you can see, I completely removed the idea of “pickup zones”, and replaced them with the little houses you see here. I’ll explain why in a minute.)
Most importantly: packages ALWAYS need to go to the other side. This forces players to always be on the move, to work together if they don’t want to walk long distances. It’s really simple (just a few lines of code), but it improved the level immensely.
After that, I just played a little with my physics parameters (how fast the crane moves, how stable it is, how fast players can move with packages in their hands, etc.) until it felt right.
I’ve playtested the level countless times, everytime improving a certain aspect of the level or the game in general, until I felt I had a good start. I learned a lot about designing good levels (like “separation of players” and “placing the thing you need the most all the way on the other side of the level”), which I can use when designing all the other levels.
NOTE: To make sure the crane didn’t block the view, I made the ropes a lot longer. This also made the platform more “swingy” and “unstable”. For now, I’m fixing this by “angular locking” a few rope pieces at the top of the chain => this simply means that these pieces cannot rotate, but will stay fixed instead, which essentially reduces the movement freedom of the rope.
NOTE 2: At first, I had a single scene for the construction crane, which allowed both ROTATION and ELEVATION (moving the platform up/down, like an elevator). But this proved a very annoying task for the physics engine, and I decided to create two separate crane objects: one that can only rotate, one that can only move the platform up/down.
From the start of the game, deliveries used two zones: the “pickup zone” where each package started, and the “drop zone” that represented the destination of the package.
As I tested the game, I noticed that the dropzones worked well, but the pickup zones were problematic:
The last bullet point says it all: I needed something that allowed you to grab a package of a single type. In the future, a delivery might say “hammer + wood”, and you would need to grab these two components at different locations.
And so … the idea of the “pickup house” was born. I call them houses, but in reality they are “machines that produce packages”, and will have some significance within the story of the game.
Whenever a new delivery is created, they “spit out” the package of the correct type. The animation is funny, players find it more intuitive, and it creates levels that are much easier on the eye.
In the video below, focus on the little houses on the left/right of the dropzones. (Because I played solo mode, new deliveries mostly occurred right after I delivered the previous one. But sometimes, if you're unlucky, it doubles up and a new delivery is spat out while you're still busy with another one.)
From the start of development, this game had a golden rule: there could NEVER be two deliveries of the same TYPE or with the same DESTINATION.
Yeah, that rule doesn’t work if you have only two zones or two pickup houses.
I tried a few different systems, and eventually decided on the following:
The last bullet point is a system to help the player. The game automatically marks the delivery with the highest priority (aka least time left) as delivered, so players don’t need to remember which package belongs to which delivery.
Implementing this system seemed like a nightmare, at first. When a package was dropped in any way (delivered, thrown off the level, etc.), I needed to check if it was the package with the highest priority. If not, I needed to switch lots of variables around and instead work with another delivery.
But … I found a better way! I will try to explain:
I don’t know if this is clear. It’s a purely visual solution to a problem, and it feels like a hack, but it’s actually completely stable and simplifies the code immensely.
Sometimes, I like to use these kinds of “visual solutions” One of the first developers I heard about it was “2kliksphilip”, but there are certainly more.
What is a visual solution? Well, let me give the example from my own game:
Hmm … still don’t know if this is clear. Maybe I’ll find a better explanation in the future :p
I always like asking myself these types of questions, just to make sure I’m making the right decisions.
I think the ideas above improve the game immensely because:
The last few days I’ve been working very hard on creating the first playable demo (only level 1, for the time being). I created and refined the actual level, I created a tutorial overlay, I created a starting screen where people can assign controllers/keyboards to play with, etc.
As I write this, it’s finally done! The core game loop (select level, loading screen, play level, game over screen) works and contains almost all necessary ingredients. From now on, it’s all about designing the levels, squashing bugs (or just bad systems in the game), and of course (heavily) polishing the game.
Tomorrow, I will put the demo online and make an announcement. I would be more than grateful if you would try the game and give me feedback!