Originally published on Feb 28, 2024
Something that didn’t occur to me until I programmed the movement for my own game is how much the moment-to-moment experience of moving the player character dictates the player’s expectation of the overall gameplay experience. When I first picked up Game Maker, after working through a beginner’s tutorial project that has you recreate the arcade game Asteroids, I started exploring my options for player movement on the Sad Land project. Initially, it made the most sense to try and recreate the player movement from The Legend of Zelda: Link’s Awakening as that game was acting as the core inspiration for my project. The movement in Link’s Awakening allows you to navigate swiftly in 8 directions (the four cardinal directions as well as diagonally). The speed and simplicity of this movement fit the gameplay so well as it facilitates combat and traversing a large map. There’s power and freedom in the way you control Link.
With the very early stages of my prototype (initially titled ‘game boy test’), I programmed a movement that not only resembled that of Link’s Awakening but was also very simple to implement. Within a black room with grey walls, the rudimentary player character, a solid-colored square, could traverse the space quickly and concisely.
This type of movement is incredibly easy to program, even for beginners. Within Game Maker, when you create an object for the character, it is assigned an x and y value. The x value is a point on the horizontal axis and the y value is a point on the vertical axis. You then add an event for each input (up, down, left, right) that will be used to move the player, and within each event you manipulate the x or y coordinate of the player character.
If x and y both start at 0, coordinate (0, 0) and you add +1 to the character’s x value, this will move the character one increment to the right, with a new coordinate of (1, 0). With each new input, you will be updating the x or y value based on which keys the player presses. To double the character’s speed, you can replace the 1 with 2 and now each input will move the player by 2 increments.
As an aside, adding values to the y axis to move down and subtracting values to move up has always been a counterintuitive system for me as any plotting I did in high school math was done the other way around: adding values to go up and subtracting values to go down or into the negative. In general, high school math did set the groundwork for the coding I do for my game, but in this one specific instance, that prior knowledge trips me up.
As an aside, adding values to the y axis to move down and subtracting values to move up has always been a counterintuitive system for me as any plotting I did in high school math was done the other way around: adding values to go up and subtracting values to go down or into the negative. In general, high school math did set the groundwork for the coding I do for my game, but in this one specific instance, that prior knowledge trips me up.
The image above is a screencap of the actual functioning code as it appears in Game Maker. If you are curious as to why the formula is slightly different than what I wrote earlier, the formula x -= 1 functions identically to x = x - 1 and is a minor simplification you learn early on to streamline these types of code blocks to make them simpler and more readable.
Coding movement for my first prototype that wasn’t a tutorial was exhilarating. In fact, every new mechanic I realized felt like a revelation – changing the sprite to face the direction the player moved, shifting the player into a new room when they passed through a door, creating non-player characters for the player to collide with or interact with – the possibilities of making a real playable experience were taking shape.
Although anyone who’s ever picked up a guitar knows that successfully playing a chord is not the same thing as writing a song. I soon realized this movement was not right for my game. I envisioned a game without combat, where the player would move thoughtfully through their environment, ambling through smaller areas and talking to NPCs as a gentle slime. Moving quickly through the game with 8 directions of freedom was the movement of a twitchy, combative warrior, not a conscientious blob.
After some research and thought, I ended up reprogramming the movement to resemble Pokémon Red, one of the few other Game Boy games I fell in love with as a child. The movement is slower and rigid but carries with it expectations of slow, relaxed exploration.
Coding movement for my first prototype that wasn’t a tutorial was exhilarating. In fact, every new mechanic I realized felt like a revelation – changing the sprite to face the direction the player moved, shifting the player into a new room when they passed through a door, creating non-player characters for the player to collide with or interact with – the possibilities of making a real playable experience were taking shape.
Although anyone who’s ever picked up a guitar knows that successfully playing a chord is not the same thing as writing a song. I soon realized this movement was not right for my game. I envisioned a game without combat, where the player would move thoughtfully through their environment, ambling through smaller areas and talking to NPCs as a gentle slime. Moving quickly through the game with 8 directions of freedom was the movement of a twitchy, combative warrior, not a conscientious blob.
After some research and thought, I ended up reprogramming the movement to resemble Pokémon Red, one of the few other Game Boy games I fell in love with as a child. The movement is slower and rigid but carries with it expectations of slow, relaxed exploration.
Making this choice carried with it a new design element that would define how I would build out the game: the grid. Since each step moves the character 16 pixels at a time in only the four directions, any decisions involving collisions were made for me. The character could either move into a square or not. Not only does this cut down on potential glitches/bugs down the road, this style of movement is also welcoming to those new to video games as it is both mechanically simple to understand and similar to how many board games function as you move your player, one space at a time.
Sad Land, as well as nearly every other game idea I’ve been developing, doesn’t have movement mechanics that rely on quick reflexes or precision timing, however, I do play a lot of games where this type of interaction is core to the experience. There are hundreds of games where running and jumping on screen are the most common inputs, but the weight of each character, their speed, how they accelerate, how quickly they can change directions, and how fast they fall are all set up differently based on how they were programmed.
Back in 2022, Mark Brown of Game Maker’s Toolkit released an interactive video essay called Platformer Toolkit that allows you to play around with the different movement variables of a platformer character. It gives you a peek under the hood of the ways a developer might explore different movement options as they are homing in on how their game will feel.
The Writer, Director, and co-programmer of Celeste, Maddy Thorson, expounded upon how you narrow in on character movement when she was interviewed on the podcast Eggplant: The Secret Lives of Games.
You try to get it as good as you can at the start but inevitably you can’t get it perfect because you don’t know how you’re going to use it in the level design totally and you don’t know how other people are going to experience it. It’s definitely a back and forth especially near the start of the project, like, these seem good enough, I’m going to try to make some levels.
She goes on to say that even long after the game’s release, the physics of the movement are still being patched. Much like the level design of a game, player movement is too a facet of a game that can be altered and tweaked throughout development.
The concept of a game being patched after release is still conceptually fascinating to me even though it is completely ubiquitous today. Anyone who has ever purchased a physical game release in recent memory will know that the moment that game file is read by your console, a new update will be queued up for download. Growing up, the console games I played never got patched. The code that was manufactured and sent with the cartridge was the final game. Any bugs, exploits, or typos living in the shipped code would stay on the cartridge’s memory indefinitely. Back in the 90’s, the only games I’d played that were given updates were Super Mario All-Stars, a Super Nintendo upgrade of 4 Super Mario games from the previous console generation, and Street Fighter II, a game that had several iterations on the Super Nintendo, but I only ever played Street Fighter II Turbo, an updated version of the base game with rebalanced controls and some extra content.
The concept of a game being patched after release is still conceptually fascinating to me even though it is completely ubiquitous today. Anyone who has ever purchased a physical game release in recent memory will know that the moment that game file is read by your console, a new update will be queued up for download. Growing up, the console games I played never got patched. The code that was manufactured and sent with the cartridge was the final game. Any bugs, exploits, or typos living in the shipped code would stay on the cartridge’s memory indefinitely. Back in the 90’s, the only games I’d played that were given updates were Super Mario All-Stars, a Super Nintendo upgrade of 4 Super Mario games from the previous console generation, and Street Fighter II, a game that had several iterations on the Super Nintendo, but I only ever played Street Fighter II Turbo, an updated version of the base game with rebalanced controls and some extra content.
I never got into fighting games except for Super Smash Bros., a game with so many mechanics outside the norms of a fighting game that I hesitate place it within the ‘fighting game’ genre, with games like Street Fighter, but Smash carries with it something that all fighting games have in common, which is that it doesn’t have a main character but a sprawling cast of potential fighters. Every character, outside of cloned/reskinned fighters, has their own precise move set tailored to a unique playstyle. Each character too must be balanced against the other players so that no one character has the advantage. Whether you like to play a slow, strong character or a svelte, quick character, whatever fighting game you play probably has you covered.
When I was a kid, I was never drawn to these types of games, seeking instead single player games with puzzles and exploration. As an adult, I recognize that fighting games have their own version of puzzles and exploration within the mechanisms of combat. To spend hours controlling a fighter is to explore their every nuance in movement. How the fighter blocks, how quickly they dodge, how to counter or respond to another fighter’s special moves. Your hands start by mashing buttons like a child in an elevator and before long you’ll be pressing inputs with the focus and dexterity of Django Reinhart romancing his fingers down the neck of a guitar.
Game journalist, developer, and YouTube eccentric Tim Rogers has an excellent, albeit lengthy, article on Kotaku titled In Praise of Sticky Friction where he explores the topic of satisfying movement in game design. “Sticky Friction,” as he puts it, is the type of enjoyable movement physics that elevates a player experience from good to great. Rogers writes:
When I was a kid, I was never drawn to these types of games, seeking instead single player games with puzzles and exploration. As an adult, I recognize that fighting games have their own version of puzzles and exploration within the mechanisms of combat. To spend hours controlling a fighter is to explore their every nuance in movement. How the fighter blocks, how quickly they dodge, how to counter or respond to another fighter’s special moves. Your hands start by mashing buttons like a child in an elevator and before long you’ll be pressing inputs with the focus and dexterity of Django Reinhart romancing his fingers down the neck of a guitar.
Game journalist, developer, and YouTube eccentric Tim Rogers has an excellent, albeit lengthy, article on Kotaku titled In Praise of Sticky Friction where he explores the topic of satisfying movement in game design. “Sticky Friction,” as he puts it, is the type of enjoyable movement physics that elevates a player experience from good to great. Rogers writes:
It is the inertia of Mario's run that endeared him to us. It didn't have anything to do with brand strength or graphic design. Those things were secondary. It was all about the inertia, the acceleration, the to-a-halt-screeching when you change direction. You can feel the weight of the character. People never put these feelings into words when talking about games, though they really, really are everything.
This is something that makes Super Mario Bros. on the NES so playable, even to this day. And following that title, Mario’s movement evolved in different ways but always carried with it the persistent joyful movement. Playing Super Mario Bros. is like pressing the weighted keys of a Steinway piano: it feels good and once you have it to compare against the alternative, it’s hard to go back. I was at a party talking to a friend a couple of months back and I brought up Super Mario 64, the first game in the Mario series that brought the character into the third dimension and a game I will talk to anyone about, especially if they’re interested. He said that he’ll sometimes pick up the game, not to beat it or play any particular level, but just because it’s fun to move around. It doesn’t get stickier than that.
Sincerely,
Neil
Sincerely,
Neil
NEIL JOHNSON ©2024