AllStar is a multiplayer couch-competitive preparathon game where players build up spaceships to compete in a gauntlet of minigames.
The game was created for my Master's Thesis, built from the ground up using my own homemade engine, written in C++ and using OpenGL for rendering.
The game has two phases, the Assembly phase and the Challenge phase. Players start in Assembly mode, where they are dropped into an open arena.
Players are given 5 minutes to roam around the arena and collect various pickups and equipment for their ships, fight AI enemies and players, and prepare for the unknown challenges upcoming Challenge Phase.
Once the 5 minutes are up, players are thrown into a gauntlet of 3 random minigames, using their custom built ships to compete. Whoever wins the most points during the minigames will
be crowned the winner!
Players can teleport using the left trigger, warping forward a fixed distance in the direction of their choosing.
Teleporting can be used to avoid enemies and obstacles, and gives all ship builds a quick movement option.
This feature ended up being one of my favorite learnings about game design that I took away from working on this game.
I had initially created this as one of the original active pickups for the game, along side some of the other active abilities.
When I playtested the game with all of the new abilities, however, this ended up not only the most fun option, but it was the best-in-slot ability and blew the other abilities out of the water.
While I could have attempted to balance this ability with the others, I realized that I'd stumbled upon something awesome, and I decided to promote it to a native movement option for the game.
This was the best choice, as it not only gave every player one of the most satisfying ways to move in-game, but gave the game an incredible amount of depth. Combat was no longer just about who
had the better ship build, but more skill-oriented thanks to the teleport emphasising mobility, spacing, and trickery. As a limited resource, players have to think carefully about when and where
they use it, creating interesting choices in battle and exploration. No matter how slow of a ship you created, you always had a burst movement option to surprise opponents or get out of trouble.
Battles transformed from spray-and-pray engagements into a struggle where players zip back and forth, teleporting to surprise an opponent and sneak in some damage before their target can react.
I learned firsthand that balance problems can be solved in vastly different ways, and what might appear to be an issue at first could be a brand new avenue for adding value and depth to your game.
AllStar has three different weapon pickups aside from the default laser gun.
The Wave Gun fires three shots that all converge on a point, which encourages targeting enemies in the sweet spot for massive damage.
The Spread Shot shoots a multitude of close-range bullets, giving players who enjoy up-close and personal battles an advantage.
The Missile Launcher unloads missiles that home in on nearby enemies, which create damage-on-contact explosions in their wake.
During assembly mode, I wanted a series of interesting trade-offs while building your ship, giving players the opportunity to build their ships around different play styles.
When it came time to create weapons, I took some inspiration from one of my favorite game designers, Masahiro Sakurai. In the Super Smash Bros. series of games, there exist three characters (Marth, Roy, and Lucina)
who, through different iterations in the series, all had the same exact moveset. However, by changing the "sweet spot" on their swords (which part of their blade did the most damage) they all managed to derive completely
different playstyles from what was essentially the same character. By changing up the incentives for long-range versus short-range combat on each character, Sakurai was able to stretch his development resources and provide meaningful choices for players.
Considering I was facing a short timetable for the project, I focused on creating a weapon for each of those distinct playstyles, covering a large spectrum of gameplay options with only three equippable guns.
The Spread Shot was the "Roy" gun, where I wanted to create a weapon that encouraged close-range combat. The inclusion of this gun gave more meaning to the Tank Chassis, which moved slowly but could take a lot of hits, and players could
combine this ability to shrug off enemy bullets while approaching with the punishing damage of a point-blank Spread Shot attack. This also empowered stealth builds which utilized the Cloak passive (granting invisibility while motionless) and
hiding in nebula, making sneak attacks easier to pull off on unsuspecting opponents.
For players who wanted to focus on mobility and staying just out of reach, I added the Wave Gun, inspired by Marth's spacing-oriented gameplay. The weapon features three shots that all converge on a focal point, and
skilled players who are able to keep their opponents in that sweet spot can take advantage of the increased damage output. Builds with more mobility, such as those using the Speed Chassis (which improves base Top Speed and Acceleration),
are able to benefit from the weapon the most, avoiding enemy fire while swooping in for the quick sweetspot kill.
Finally, for players who pine for a more generalist playstyle, I created the Missile Launcher. Because Lucina had no sweetspot on her sword in Super Smash Bros., she was able to adapt to any situation her opponents put her in, at the expense of
specializing in one area. The Missile Launcher provided a good option for this playstyle, and also made for an accessible choice for users newer to twin-stick shooters by lessening the need for precise aiming. This weapon also enhanced the
Black Hole Chassis (providing a homing boost for your bullets, at the cost of bullets homing in more easily on you), making the missiles even more deadly on the battlefield.
All ships leave behind a colored trail in their wake that matches their ship color. This not only looks pretty and adds polish, but serves
gameplay by making it easier to find other players in the arena.
With combat as a core aspect of AllStar's gameplay, I wanted to ensure that players would be able to bump into one another amidst the arena from
time to time, sparking interesting decisions (fight or flight?) and interactions between players. By giving the ships trails, each ship leaves "ripples"
in space, allowing any player who passes nearby to learn the direction towards a nearby enemy or player ship. This extends the visibility of a "near miss"
of two ships passing by each other, making it easier to find and sneak up on an unsuspecting opponent.
When looking at a screenshot of an AllStar ship battle, you can clearly see the last couple seconds of each ship's history, where they moved and how they
I also had to expand on my new particle system in my engine to support this feature, creating new Ribbon Particle rendering. This type of particle
renders differently than the sprite based particles, but utilizes a lot of the same functionality. While the ships travel, they drop behind points
in space like a standard particle emitter, but instead of spawning particles at those locations, I instead use them to construct a mesh on the fly.
By drawing quads between each of the points, I'm able to take the path the ship took and render the trail along its past positions. When the ship
makes an important movement, such as teleporting, I drop an extra point to ensure that the ship's motion is captured and rendered appropriately.
Because this extends the regular particle functionality, I leveraged the age per-particle and faded out the ship's trail towards the end of its lifetime,
shrinking both the width of the line segment as well as reducing the alpha.
As part of the procedurally-generated arena of Assembly Mode, wormholes can spawn on the map, linking two random points on the map together.
Going into the center of one will teleport you to the other, and any objects or entities can travel through them. They pull anything nearby into their
center, which is a problem if you cross paths with their red-colored variant, the Black Hole, which deals damage instead of teleporting you.
To make the wormholes feel more powerful, I added a vertex-pulling effect that makes any nearby objects appear to be pulled towads the center of the wormhole.
I made the default vertex shader for all entities in-game take in a uniform block of the wormhole positions on the map, and then compared the current vertex against that list.
Since all of my wormholes are the same size, I was able to make a quick distance check to see if I was within the radius of that wormhole. If this vertex happened to be, I would
begin blending that position towards the center of the vertex, giving the object the appearance that it was getting pulled into the wormhole with a light-bending sort of effect.
These changes were purely visual, as modifying the colliders of the ships and bullets would actually look incorrect, as all entities get pulled towards the wormhole at the same rate.
I did, however, add a physical pull so that anything would feel like it was getting sucked in to match the visuals. I also gave a velocity boost to the ship when it was exiting the
wormhole to ensure that nothing would end up trapped in between the wormholes, being juggled for all eternity.
Each player has a shield to protect them from some initial damage when engaging in combat. The shield recovers energy at a steady rate,
but stops recovering for 3 seconds whenever the player takes damage.
I had to do a lot of iteration with shields in AllStar, as initially they had absorbed too much damage and would widen a skill or equipment gap into an unwinnable fight.
Iteration helped me to realize that I wanted to use them as a buffer for player reaction time, and by making shield breaking a big event, players would have time to make a fight or flight decision during any combat.
I added the visual effect to better convey when your shield breaks, as early playtesting showed that players weren't able to determine
when they had their shield available. It creates a distinct effect that you notice anywhere on your viewport, without being obtrusive.
Since health recovery options are scarce in AllStar, once your shield is down, all damage you take while it's down will be carried forward with you.
By drawing attention to shield breaks, players can make the choice to double down and risk their ship for the rewards of combat, or quit while they're ahead and flee.
The visual effect when your shield breaks is a combination of multiple shader experiments I made. I was trying to
figure out a way to make a full-screen pixelation fragment shader that became more pixelated the lower the fragment's Y-coordinate,
and during my experiments I discovered that VHS-like noise effect. Jumping on the inspiration, I added in a brief chromatic abberation
effect to further polish the visuals.
The first half of the game, the Assembly Phase, is where players are given 5 minutes in a procedurally-generated arena to scavenge for resources and build their ships.
Players will use these ships in the Challenge Phase against each other in a series of minigames, where victory depends on how well the players prepare during Assembly.
It's a mad scramble to get the best resources while keeping your opponents from getting them first!
Assembly mode is the heart of AllStar's experience, and is what generates the frantic, fast-paced tone pervading the "preparathon" gameplay (players scrambling to prepare for an unknown series of events).
AllStar draws inspiration from Kirby Air Ride’s “City Trial” minigame, and attempts to create a more competitive and progression-focused game as a standalone experience.
While "City Trial" did a great job of pioneering preparathon gameplay, combat in the game was awkward and unweildy, as the minigame was built on top of a racing game, resulting in jousting while driving past one another at breakneck speeds.
I created Assembly mode with certain elements in-mind to help encourage conflict between players, adding ship trails to make others easier to find, wormholes to make hot spots for player contact, and enemy AI to ensure that players were always
fighting to get what they wanted. The asteroids littering the arena provide temporary cover from fire, and Black Holes create risky spaces to lure enemies to their destruction.
You can look at page 8 of my Master's Thesis if you'd like an in-depth breakdown on how I procedurally generated the arena.
The Challenge Phase is the gauntlet of minigames that follow the Assembly Phase. Players are thrown into 3 random minigames that test various skills, giving
a fair chance to all kinds of ship builds. Whoever wins the most minigames will be victorious!
The ultimate goal of the Assembly Phase is to prepare for the Challenge Phase, which rewards players based on a combination of how prepared they are and how skilled their play is.
Instead of doing a single minigame, where the winner could be decided solely on the luck of the draw, I decided to go with a gauntlet of three minigames. This way, a player who has an unbalanced
ship, such as an all-speed build, would have less of a chance of winning by virtue of competing solely in speed-focused minigames, and is forced to use their speed creatively to win other modes.
There are minigames that prioritize the three different stat categories (Attack, Defense, and Speed), as well as a few gamemodes that have no focus (such as the Coin Grab minigame) giving room for
other players to catch up and pit players' skills against one another. The minigames struck a balance between luck and skill, giving clear advantages to players with specific builds at random, but leaving
enough room for any skilled player to upset the luck of the draw and grasp victory.
Scattered throughout Assembly mode are Power-Ups, each of which increases one of your twelve stats. Any power-ups you can hang on to until the end of assembly
will be kept for the entire duration of the Challenge Phase, and will give you an advantage during the ensuing minigames. You can acquire power-ups by
opening crates, killing AI ships, destroying asteroids, and by defeating your fellow players and taking some of their power-ups.
The twelve stats in AllStar are broken up into three categories; Attack, Defense, and Speed. The power-ups in-game have an associated color to demonstrate
which group they belong to, and are organized in the pause menu in their respective areas. A player's ship build is dependent on collecting these power-ups,
as they are they key element of progress and growth throughout the game. Each power-up adds one to the player's level, located in the bottom-left corner, which
describes roughly how far along in the game they are. Players can specialize their ship builds by targeting crates with pickups they want (as demonstrated by the pickup on top).