Inspiration
I was inspired by memories of playing the platformer, fighting game Super Smash Bros. at friends’ houses. I enjoyed that it’s a fast-paced, fighting game that is fairly well balanced, so that experienced and novice players can play together. I was also inspired by Mario Party and the chaotic experience of its minigames, where the game was unknown until you started, items might fall or appear randomly, and you had to think and move quickly. Lastly, I was inspired by Horizon’s own Super Rumble, with the variations in weapons and how you have to pick up weapons from around the map.
What it does
KnockOut Mayhem is a chaotic, fast-paced platformer fighting game where players are spawned into random arenas and must quickly find a weapon that drops from the sky to attack the other players. Each hit knocks the player back and increases their damage score. A higher damage score will increase how far back a player is thrown, until they are ultimately knocked out of the arena and eliminated. But wait! There’s still hope as players might double jump their way back into the arena and to survival. Whoever survives to the end is declared champion of the round!
In the style of the Obby/Platformer genre, each arena has moving platforms and obstacles that may help or hinder the players. For example, an obstacle may stop you from getting knocked out of the arena, or it could get in the way as you try to jump your way back to survival. Similarly, a trampoline may help you bounce to higher platforms out of reach of other players, or it may bounce you high into the air and disorient you.
Weapons include melee, shooter, and explosive types. Players can adjust the chances of different weapons spawning and thus alter gameplay for new challenges. It’s playable across VR, web, and mobile platforms, making it great for cross-platform play at parties or remotely. And it has custom music and sounds!
How we built it
Coded in TypeScript, I began with setting up the core mechanics and testing the “feel” of the game, testing the double jump, baton hit, and being thrown back and out of the ring. Once I had the core mechanics, I built out the player detection systems in the game manager to determine whether a player had joined the arena and whether they had been knocked out. The detection for getting knocked out of the arena is a cylinder that encompasses the radius and height of the gameplay area. If a player is detected as “out of bounds,” they still have a chance to jump back in bounds. However, if they touch the lava or stadium ring outside of the arena, they are eliminated from the round. Next was coding the weapons and their spawning systems with weighted chances for spawning that can be customized by players in the UI after the first round. There are two main melee weapons - the baton (fast, but weak) and the club (slow, but strong) - a shooter weapon, the paint gun (fast, but weak) and a (future planned) cannon (slow, but strong). The paint gun also has a melee option to swing it. Then there are explosives - the bomb and the dynamite (planned).
I used the world streaming function in Horizon to spawn in different arenas into the main stadium. Level design went through many iterations. I designed them to amplify chaotic gameplay in close quarters. I also wanted to challenge players to jump between higher and lower levels while avoiding obstacles and watching out for other players. Currently, I have a beach arena and a bouncy inflatable arena, with more planned.
The music and most of the sounds are custom and composed in Ableton with samples from Splice. The KnockOut Mayhem logo and How To Play instructions were created in Adobe Illustrator. The other UI was designed in Horizon with Custom UI.
Many of the skills and software were learned during this competition. I’ve made games before for VR, but not using TypeScript, Custom UI, and the Horizon Desktop Editor.
Challenges we ran into
Learning on the fly was a big challenge during this competition, as it sometimes meant building and then rebuilding after finding something didn’t quite work as well as I wanted. It was important to me that the game be easy to understand, quick to get into, and run as smoothly as possible to keep players engaged.
I ran into difficulties with how to go about designing complicated systems. With the player-hit system, I tried colliders, which were ideal for collision information, but they didn’t interact as expected - collision didn’t consistently register. Triggers allowed objects to pass through and still detect a hit, but they couldn’t detect projectiles like the paint gun. I moved to sending network events to a player when they were hit. I avoided this method initially because of a concern about delays, but it turned out to be negligible. Then, with the system to detect if players were in the arena, I ran into difficulties with triggers not detecting players/entities that were within them at the time of activation (affects starting next round).
Lastly, a big challenge I’ve encountered is balancing the weapon and health systems so that no one weapon is too powerful compared to another, and health (used as a power multiplier) doesn’t rise too quickly. This is important to ensure gameplay is fair and fun.
Accomplishments that we're proud of
I’m proud of the game mechanics, weapon variability and arena level design finessing that I feel brought together the vision of chaotic, fast and fun gameplay for players of all skill levels. It was important to me that it was a game for everyone to maintain the vision of a game that brings people together in friendly competition. I’m also happy with how the custom music and sounds add to the polish and uniqueness of the game. I’m also proud of how much I learned about TypeScript and Custom UI.
What we learned
I learned a lot about working with TypeScript and Custom UI. I also learned how to import custom assets, work in the desktop editor, and debug, debug, debug! I also learned how to send events between sublevels (worlds), which was helpful in getting major events in gameplay, like round start and end, to sync with other scripts.
In learning to import custom assets into Horizon, I also learned a fair bit about using Blender and how to name materials and textures to be recognized by Horizon. This was not the most intuitive process, and it can turn into trial and error to find the right method. Unfortunately, I was never able to get transparency working as intended, but I worked around it.
In building across mobile, desktop, and VR, I had to test the game mechanics and UI a lot to try to make things work nicely across all three platforms.
What's next for KnockOut Mayhem
I want to add special achievements per round and all-time, for example, having the highest damage while remaining in the game, using the most items during a round, most wins, etc. I also want to add unlockable items based on achievements that can give the players something to work towards.
I also have plans for more weapons, arenas, and custom music. I specifically want to add power-ups to affect player abilities and NPC “weapons” with area effects.
With the ability to change arenas, making seasonal variations could be a fun way to keep players returning throughout the year.
Built With
- ableton
- adobe-illustrator
- blender
- horizon
- meta
- typescript





Log in or sign up for Devpost to join the conversation.