So what is Sumo Ball
and how do you play it?
It's a 1-on-1 fighting game where the players compete over occupying the center circle to gain score.
The player that fills all their score bars wins the round! Winning 3 rounds makes you the winner of the game.
Mission statements for Sumo Ball
Easy to pick up and play
Enjoyed by both hardcore & casual players
Enables meta discussion with many layers of strategy
Unlockable skills that hook the players to play more
All players have a standard move called Dash. Dashing into an opponent sends them away.
The longer you charge the move, the harder you hit and further you go.
Dashing is the players main tool for fighting, and the whole game is single-handedly affected by how the dash works. The game had to be fun to play even if both players only had the Dash.
If you get hit while charging Dash, your charge will be canceled and depleted.
The dash canceling prevented the hit opponent to immediately dash back, and also promotes offensive play and charging for longer riskier.
The score bar went through a lot of iterations during the development as it had a large impact on the gameplay.
Here's a summary of the biggest changes I made and why.
I wanted the score bar to be seen well in the peripheral vision. (so the player could focus on the action instead of looking to the sides).
Having one long bar made it hard to estimate how much score one needed left.
Since the bar wasn't decaying the losing player would have a hard time making a comeback. I wanted the game to have "clutch" moments so I wanted the end to feel intense.
Segmented & colored
It became easier understanding the score as the player could think of how many segments they had filled in comparison to their opponent instead of thinking of the percents.
Now the players had to hold their ground until the segment got filled. With this the rounds got divided into smaller battles of who would get their segment filled, and successfully fending off the opponent for long enough gave a sense of triumph and relief.
- Bar filling state colors
One could in their peripheral vision easily see the state of their score bars (whether their score was increasing, decreasing, paused etc.)
- Bar filling state colors
Not knowing what bar belonged to what player made it confusing and the colors had nothing to do with the player colors
- Scrolling Animation
I made the bar filling states extra clear with scrolling movement on the bar, to emphasize if the score is decaying, filling, or paused.
- Player color
Having animations displaying the state of the bar instead of colors allowed me to use the player colors on the bars, to easily see what player is using what bar.
- Animation when segment got filled
To show the player they've successfully filled a segment of the bar.
Instead of having a character select like you normally would in a fighting game, I felt it would be more interesting to be able to select a number of abilities as a "loadout" to use when fighting.
These are activated for a duration of time with a button press.
The player becomes temporarily invisible
Duration: 1.2 seconds
Cooldown: 3 seconds
The player becomes temporarily faster
Duration: 2 seconds
Cooldown: 5 seconds
Temporarily pass through your opponent
Duration: 1 second
Cooldown: 3.2 seconds
These are constantly active "buffs" that affects the stats of the player.
The player becomes heavier, making them harder to get pushed around
Become smaller and accelerate faster
currently in development:
currently in development:
While making the abilities I constantly had the Dash in mind and thought of how the ability complimented the gameplay around it.
I wanted the player to be able to make any combination of any abilities, but to have pre-determined inputs for the abilities would feel awkward. My solution was to merge the process of selecting and assign the ability to the player.
Assign any key to your active ability
I wanted the players to have full control over what inputs or set-ups they wanted. So I let the abilities get bound to any key, with a few exceptions like the Dash button or Pause button.
The input icon for the keyboard keys changes depending on the key that got pressed. Since the name of the key is displayed, I had to automatically scale the text and select image accordingly.
For gamepad buttons I chose to make icons that would somewhat work for all types of controllers, since unique icons for all of them would take too long.
What I want to change:
Clearer differentiation between Active and Passive abilities
I'm not happy with how the player tends to get confused why passive abilities are missing an input icon, or not understanding how to assign it. I wish to make the process for the player more simple and intuitive.
Everything in this game is scripted.
The most important thing I aimed for when I scripted was cleanliness. I wanted the game to be easy to iterate upon; if I wanted to remake something I wanted it to be fast and easy, so I aimed for scripts to "know of" as few other scripts as possible. Because if I changed a script I'd have to make sure nothing broke in how they were used. So the less scripts knew of other scripts, the better.
Also, since I aim for this to be a complete game I had to think of how I could continue working on it in the long run. The system design of my game had to be on point and make sense.
The Player Blueprint
The most complex single script in Sumo Ball
The System Design &
the main blueprints of the game
The most challenging system was the collaboration between the Player Pawn, Player State and the Player Controller.
I wanted their use to be different and clear though they are so heavily reliant on each other.
Also adding the abilities and support for real-time key bindings was difficult but eventually I found a system I was happy with that made the process of adding new abilities easier.
Player Onboardning & Tutorialization
I didn't have enough time to complete what I had in mind for the onboardning of Sumo Ball, but I'll show what I plan to do in the future.
When the game boots up for the first time, the tutorial appears. There are 3 main steps in it.
Spawn: The game waits for any input from two different controllers (keyboard included)
Dash: An input prompt for the dash appears. This step ends when one player dashes into the other.
Occupying Circle: The circle and the score bars appear. When a player enters the circle it works just like in a normal game, but instead of having to fill 4 bars, they only have to fill 1 long bar. No text is shown, and I rely on the intuitive feedback to teach how scoring works. This step ends when one player fills their bar.
Tutorial is finshed: The players that now hopefully understand the basics of the game are taken to the ability select screen.
Keeping the player busy until they get used to the mechanics
This is one thing Smash Bros. Ultimate does very well. After every 10 minutes of fighting, a new character appears, and winning against this character makes them playable. This keeps the player hooked and they want to keep playing and unlock more characters. By the end of unlocking everything the player has become much more comfortable with the controls and the mechanics of the game.
I want to apply this to Sumo Ball by having abilities and different level sets getting unlocked in a similar fashion as you play.
Hinting at more content to lure the player in
I want the player to see that there are a lot of level sets and abilities to unlock, that's why having question marks/ locks on the locked abilities hint at more content to explore.
Challenges I faced with the project
and closing thoughts
A lot of the things I wanted to do in Sumo Ball were things I had to learn from scratch. For example:
UX animations and shaders
System design scripting
Long term planning
Since there were a lot of new things I dove into I had trouble to plan and scope accordingly as I didn't know how long things would take. I had to cut down on may things and I had to largely revise my plan two times during the project.
Although it has been hard I feel like I've improved a lot in these areas, and I'm very happy that I took on the challenge. I hope you look forward to the end product!