This episode is about learning new things.
First and foremost: Working out what you need to do and actually getting it done are two completely different feats. Keep this in mind if you ever start working on a project.
Running In The Dark (Name Pending) is a game I’d liken to the area in Spark Mandrill’s stage (Megaman X1) where you’re expected to platform while the lights flick on and off mixed with Flash Man’s ability from Megaman 2 mixed with an infinite runner.
The stage is completely dark, so you can only see your character. You can activate the lights to see where the platforms are, but this stops you from moving, forcing the player to memorize upcoming elements in order to get through them. All this would be done while the player is getting chased by an enemy. As a bonus, the stage would be procedurally generated by loading in new platforming sections as the player ran along. Theoretically, this should keep the game interesting, as it prevents any players gifted with an eidetic memory from memorizing the entire stage layout and losing that constant flow of discovery and puzzle solving.
As far as coding the game goes, this can be broken down to four basic elements: 1) The generated stage elements, 2) Player movement, 3) Enemy movement, and 4) The light functionality.
Today’s goal was to have a functioning demo of the stage generating function. But how do we go about this? To my surprise, it was significantly more involved than I expected.
If you build out a stage, there’s little to no randomization or change to it. The dungeons in Zelda 2 are static, while the dungeons in Spelunky change every time, for example. You can memorize the layout for Parapa Palace.
Imagine a game like Megaman or Mario, where, rather than designing whole stages, the games features a selection of stage chunks which would then be put together like a puzzle in order to create different level layouts. You make a list of 20 or so stage chunks and a script to randomly cycle through them and load them in and you’re right as rain.
There are quite a few different ways to go about this, and I won’t go into the myriad tutorials I looked at today, but suffice to say the intention is to minimize the amount of work I have to do while maximizing the fun output. Rather than draw out each stage segment, we could use strings to represent each segment, have Game Maker read those strings, and convert them into stage segments. Let’s use the chunk on the top left in the above screenshot.
Each example chunk is 5 blocks across and 10 blocks down. A simple binary string could represent 0s as blank spaces in the map while 1s would be the blocks. Used this way, the set of 0s and 1s below could be used to tell Game Maker to generate the top left chunk:
If we tell the script that each chunk is going to be 5×10 blocks, then we can just write each stage string like so:
Rather than having a folder full of seperate room segments, you get a list of strings neatly tucked into a script. It takes up less space, and it looks a little prettier, too!
Unfortunately, I have to admit that after hours of tackling this off and on from a few different angles, the working demo didn’t happen.
The takeaway today is: While I know what I want the game to do, I don’t yet know how to convey this in a way the software understands. I’ve been at this off and on all day today, and I’ll be tackling it again in the morning, but what I want to pass along to any game-making hopefuls out there is: If you want to do something you’ve never done before, something that might be a little outside of your expertise, don’t expect to skim a tutorial or two and be done with it. And don’t be afraid to reach out and ask questions.
Technology can be hard to predict, and if you’re planning on taking part in a future game jam, Be prepared for something to go awry or one piece or another to not work the way you expected it to. It could wind up throwing off that already tight schedule.
Hopefully, I’ll have a functional platformer tomorrow. If I can get the other basics out of the way, I can focus on the platform generation without worrying that I still have to make the rest of the game.