Hello, everyone! Have you every wanted to play Extermination, Tug of War, and Race all at one time? Well, now you can with ROLLER DERBY.
Roller Derby is what I am now coining as a a hybrid gametype. It is a game that uses kills as a means to improve other aspects of gameplay. Let's get into how it is played!
For the uninitiated, Roller Derby in real life is a fast paced game played on an oval shaped track. There are two types of players, Blockers and Jammers. Each team has one Jammer and the Jammer's job is to lap the opposing team's players as many times as possible scoring points for every player lapped. The Blockers' job is to, you guessed it, block the opposing team's players to make them easier to lap and block the opposing team's Jammer to prevent them from advancing.
To adapt this to Halo 5, I used the minigame gametype to take advantage of the different trait options. Each team still has one Jammer who will be clearly labeled by a nav point of their team's color. They are invincible and do very little damage. There job is to circle the track as quickly as possible. To keep things a bit simpler, the Jammer only scores points when they pass the other team's Jammer, not Blockers. The Jammers will see the enemy team nav point also says "LAP" as a reminder to them of their goal as they circle the track counter-clockwise.
The Blockers have a much different job. Because it would not make sense to just have the Blockers use their player's physical area to block other players, their job is instead to "exterminate" the enemy team. For every player on the enemy team that is dead (up to three players), your Jammer gets FASTER! To make the game run more smoothly, the blockers are not limited to the track to kill. They may pass through the mid area as long as they don't take too long to return to the track. They have increased melee capabilities as well.
The Jammer will start at 150% movement speed
1 enemy dead = 200%
2 enemies dead = 300%
3 enemies dead = 600%
The respawn timer is 10 seconds long meaning each boost will last for up to 10 seconds. When a player respawns, the Jammer will automatically drop down to the next lowest speed setting for the amount of time left on the next respawning player's respawn timer. If you are curious why I picked the speed settings I did, you will find that they equate to a constant 25% decrease in time taken to complete the track from the base 150%. There are boards on each end of the map that tell you what speed increase you are at (arrows) and for how much longer you will have that speed increase (timer) which auto updates when each player respawns.
To make things a bit more comprehendable for the average player who may not read this post, I added color coded cones that act as a Tug of War progress indicator.
The Jammer may notice that as they move counter-clockwise around the track, the cones will light up either their team's color or white. The goal is to light up all of the cones with your team's color which signifies you lapped the other team's Jammer. If the enemy team's Jammer is in front of you, you will notice the cones ahead of you will be lit their team's color and the cones you pass will become white AKA neutral. However, if you overtake the enemy team's Jammer, the cones you pass will become your team's color until the enemy team's Jammer passes them.
To make sure this game ran smoothly, I added some fail-safes to the map. If the Jammer dies due to standing in the mid area of the map too long or leaves the game, a new Jammer will be chosen immediately and given all of the benefits of being a Jammer while the old Jammer will become a Blocker. I did not include team switching on this map as it can cause some funky stuff as the dead body is still on the other team and the alive player is unlabelable because of the dead body, etc. If the Jammer get's confused and runs out of bounds or clockwise, a white nav point that says "GO TO" will remind them where they need to return to to progress their team's score. There is no way to go backwards through the track and win; it will without a doubt end in loss. Players also can't jump. You wouldn't be jumping much on skates anyway but this was done to keep players from exiting the track since invisible blockers take up a large piece count and really drag the load time of the map down. I chose kill boundaries instead which also opened up the mid area as a cut through for Blockers which positively affected the gameplay.
As always, I hope y'all enjoy this minigame and keep an eye out for Easter eggs!
Map Variant - Monk's Roller Rink
Gametype Variant - Roller Derby
How It Works
Essentially, the track is lined with 40 boundaries for each team, but only one is active on the track at a time; that one being the boundary directly counter-clockwise of the Jammer. When a Jammer runs through their team's boundary, the activated boundary moves away and the next boundary in line position resets in front of the Jammer. I chose to use position resets for two reasons: 1) spawning objects takes a whole script per object equaling 80 scripts. when instead, I could 2) use spawn orders and position resets to instantly and reliably put the next boundary in place regardless of how fast the players are moving. When a player goes through a boundary, it increments the number of the associated cone (using spawn order and label inclusion) by +1 for Red and -1 for Blue. When a cone equals +1 it will appear Red and, you guessed it, Blue when it equals -1. If a cones value reached +2 or -2, that signifies that a team has lapped the other team and they deserve a point. When a point is awarded, the cones all decrement by +1 or -1 depending on the scoring team. It does not go up infinitely as I don't want one team to ever be more than a single lap behind. It would be very unfun to see that the enemy team is 3 points ahead but you can't even start to score until you lap them three more times.
To get the death clocks working, I had to add some workaround finesse. For some reason, early on, half way through the first round, my player would either become super fast or immobile. I narrowed it down to some very odd labeling issue and hence the reason for a overly complex but robust system. To get this working, you can't just count the dead bodies on the floor as dead bodies stay active for 30 seconds and using the player boundary exit sends a signal when a player dies and when they're dead body finally cleans up. I also have to worry about the case that two or more players die in one instant. To account for this, I kept a count of the previously dead and newly dead players at all times. If the new dead count was greater than the old dead count, the old dead count would increment by 1 and send the speed up signal repeatedly until it reaches the new dead count. If the new dead count is less then the old dead count (i.e. a dead player's body cleans up) the old dead count sends no signals and changes to the new dead count. This keeps everything activating the moment that it happens. This signal that is being sent essentially tells a script brain to simulate the death of a player. It is much easier to count the number of labeled script brains that have a 10 second respawn timer than it is to mess around with those persistent bodies.
On top of this there is a standard scoreboard and a board that tells the speed you are at and for how much longer. Whenever a player dies, a timer starts on one of three globals. If one player is dead the first global jumps to 10 and one arrow shows up. If another player dies in that 10 seconds, the timer will not change as you will only be at that increased speed for the time until the first player respawns, but the next timer global in line jumps to 10 and another arrow is added to the board for the remaining time. When that time expires, one arrow will be removed and the first global will take the remaining value of the second global which is equal to the remaining time left on the second dead player's respawn clock.
There aren't really any bugs that I haven't tried to work out in this. Early on, there was a problem stemming back to labels and traits that I never even put into the gametype being added to players. Definitely a bug on 343's end since you can't script or forge traits. The game lags a bit on the first round start just because it has so much **** to load in at once but it is smooth sailing after like the first 5 seconds. It is hard to test every case with this. I made scripting tools to simulate death and trait additions, but I think we all know how hard it can be to coordinate the 8 minimum bodies I need to fully test this game in a productive way without crashes.