- Maker: Aidan D. Rivas
- Genre: Game/Software
- Level: Graduate
- Program: Composition, Rhetoric, and Digital Media
- Course: WRIT 5400: Technical Writing
- Instructor: Dr. Eric Mason
- Semester Created: Fall 2021
Introduction
Some of my favorite video games to play are fighting games. Arcade classics like Street Fighter, The King of Fighters, Mortal Kombat, and even more unique modern fighters such as Super Smash Brothers all have a special place in my heart. Fighting games as a genre are somewhat unique in that the method of input from players is often consistent between games, with certain “motions” appearing across different titles. Adding to their uniqueness, they also suffer from a potential issue in that the character the player controls is often locked into actions, requiring the player to wait short periods of time before their character can complete certain actions. This is a disconnect between the genre and other video game genres like Shooters or Action-Adventure Games. In other video games, your character would most likely respond to your inputs with 1:1 accuracy, moving when you tell the character to move or attacking when you tell them to attack, and allowing the player to seamlessly move between such actions. In fighting games, that delay is there to leave “openings” and create competition, allowing players to punish each other for recklessly moving or attacking. It’s the fun part! It’s also the hardest to wrap your head around.
While the project is not complete, it serves as a proof of concept for a browser-based tool built to allow fighting game fans or those new to fighting games to practice those difficult concepts and build some confidence. To try the program for yourself, click the banner image at the top of this post.
Where the Idea Came From
The idea for this project spawned from exactly where you might assume it would: an issue that I took personally with practicing a hobby of mine. Fighting games are notoriously difficult to learn, and I don’t always have the time to put in as much practice as I’d like. The main issues I experience are related to location most of the time, as I don’t always have access to the game I’d like to practice, and I’m trapped crafting theories for what might work in my head. Even though Knuckle Up doesn’t allow me to find out if a specific idea would work on a real opponent, it does allow me to scratch the itch I get to practice.
How It Works
Knuckle Up is coded in Scratch, a visual coding interface that allows for programming through dragging and dropping “blocks” that represent instructions for the program.
Knuckle Up functions by using this interface to create events that are triggered by specific actions. For example, in the screenshot above, you can see an example of a script that causes the menu to progress past the main title screen. “When any key on the keyboard is pressed (as long as the menu hasn’t changed yet), send out a message to the rest of the program that plays a sound, makes the button change colors to provide feedback, waits a moment, then hides all images, displays the new menu images, and disables the script.” It sounds much more complicated than it is, but the simple instructions pile up. It’s also fairly easy to write simple code that interferes with other code in the same project. You can write “If [x] variable is set to 1, then hide this image and display another one instead. Otherwise, show the image.” However, you can write the same code on a different picture, referring to the same variable. All of a sudden, both images are showing at the same time even though you asked it to hide it. This type of error occurred really often, because it’s easy to forget that the word “otherwise” refers to literally any situation other than the specified one.
Besides errors like that, my goal was to have a program that was usable with any controller in any location. This was fairly easy to achieve using the browser extension “Scratch Addons” which features a toggle-able setting enabling Scratch to respond to the inputs of any given controller or DirectInput device. Using codes like these, I was able to get it to respond to button inputs in certain circumstances or mouse/keyboard inputs if the user so chose:
The assets for the project were drawn in Adobe Photoshop in the style of 90s arcade games. Funnily, building the assets to be manipulated took the least amount of time compared to troubleshooting bugs with the code. Character animations, backgrounds, and background animations were sourced from the 1999 game Street Fighter III: Third Strike.
Why It Matters:
“Knuckle Up!” is a piece of software I decided to develop based on a simple need: sometimes I’m out of my house and itching to continue building the muscle memory for fighting games that require practice to play well. Executing inputs with precise timing, sometimes with only up to a 0.1667 second timing window, is a demanding task, and doing it on the first try is near impossible. Much like practicing a sport or an instrument, the only way to learn it is to expend time on practice.
Unfortunately, practicing these inputs often requires being at your home, connecting your preferred peripheral, opening up the game, waiting for it to start, then navigating through the game’s interface until you’re finally playing. Fighting game players know what they’re signing up for, but it doesn’t change the fact that there could be a convenience factor to simply practicing. The ability to perform these motions and understand the concepts in fighting games is applicable across games, a phenomenon colloquially known as “legacy skill.” Learning it once is enough to assist you through your career as a player, and is often the reason long-time players succeed competitively in newer games even without practice. It’s like riding a bike. The issue is that all of that takes way too long, and sometimes can discourage practicing in the first place. And as we all know, practice makes perfect.