Rambles about games…

Play-Cycle Numbers: Graphs & Fortnite Battle Royale

Wait! Before you scroll past and mutter some abuse in my direction about this being another Fortnite: Battle Royale article let me assure that this is mostly about graphs and numbers… OK… I see it now, that’s not much better either….

I’d be lying if I said I had been playing any less Fortnite: Battle Royale (F:BR maybe?) in the past few weeks. Sure there has been the odd interlude, but I keep coming back to this free to play gem from Epic Games (and if you havn’t heard about why I prefer this to to that other 100-players-in-one-player-out-fest PUBG, then check out the piece I wrote a little while ago) and it’s catchy brand of cartoonish style mixed with slick gameplay. In the past few days they’ve rolled out a pretty excellent bug fixing update (keeping in mind we’re still in that seemingly perpetual early access) that has dramatically improved network performance and also added a temporary new 50 vs. 50 gamemode which has ramped up the action giving even feeble players (like myself) a chance at some solid combat experience.

There is one thing that keeps jumping in to my mind every time I drop out back to the lobby and almost immediately manage to join another game; Player Numbers, they’ve been the downfall of many promising online multiplayer experiences. I’m sure this is an experience shared by many; your favourite online game with ghostly servers… or worse, stacks of full servers but not enough people persistently looking to play to fill another one. The interesting thing about F:BR (or PUBG for that matter) is that there always seems to be enough players to fill a 100 player game, so how does that work? I guess it would be easy to shrug your shoulders and say “Meh, probably just popular games“, but I’ve got a habit of overthinking things so I decided to investigate a bit further and answer a question:

How many players are required to be able to drop out of one game of Fortnite: Battle Royale and almost immediately join another?

I’ll kick off by outlining my terms; I’m only considering the solo game (100 player join, last one standing wins) here and I’m imagining that the server ‘power’ is essentially limitless (i.e. is there needs to be another game then there’s no technical reason why it can’t happen).

First up I looked at the play cycle of the game. Everyone thinks about the game time itself, but there are other times in the cycle where the player is not actively in a game; for F:BR it looks something like this.

This is basically what a typical F:BR game cycle look like.. play time variable!

This can be simplified a little more; the time the player spends in the lobby and in the pre-match warmup up until the countdown to the battle-bus leaving can be called ‘Waiting Time’. Based on some rough stopwatch work, I decided that ‘Continuous Play’ could be defined as having to wait no more than one minute.

Following the countdown to launch, there is a short time flying in the bus ‘pre-jump’, followed by a jump window. To keep things simple I decided to assume that although all 100 players are in game at this point none of them will be eliminated*. This length of time I decided to call ‘Locked Time’, as the players are locked in the game, and it’s a little variable in length (it depends on the vector the bus takes across the island) but again it usually adds up to about one minute. The remainder of the time is ‘Play Time’.

Overall the entire cycle takes about 22 mins (I’ll come to that later) so you could make a really rough assumption and say that to have one game begin every minute there needs to be at least 22 games running, and as each game holds 100 players the minimum number of players is 2200 to keep everything running smoothly. Of course it’s not as simple as that because as soon as ‘Play Time’ begins, bullets fly and the players start dropping back out to the lobby, so it is only the initial stage where there are 100 players in game.

It quickly became clear that I needed to collect a little more information about the rate at which players leave the game. Luckily the game structure contains specific time intervals between the ‘Eye-of-the-Storm’ (play area) shrinking. These moments are punctuated by on screen messages and a timer counting down to the next important moment and the time intervals look like this:

I do not have the multitasking ability to notice when these are happening, making a note of the players remaining… and still attempt to play the game, so I jumped over to YouTube and watched some gameplay. I randomly clicked on ten different F:BR videos, scanned through to the critical moments and noted down the remaining player numbers. Plotting the number of remaining players with respect to Play Time gives this:

Maybe I’m just weird, but I found this graph distinctly pleasing; despite all the chaos in game, the pattern with which players are eliminated shows surprisingly little variation. I had imagined seeing at least one outlying point where everyone disappeared much faster, or an anomalous round where a good chunk of players survived until late in the round, but it seems as though the player numbers at any one time in a round is largely predictable. Of course I’m not naive enough to assume that this is a complete study, but for the purposes of getting the idea of how a ‘normal’ round runs this data seemed to agree with my own experiences of the game.

… as a side note, wouldn’t it be cool to see player paths plotted on a map to see where the hotspots and chokepoints are, or how the battle-bus vector influences where combat occurs… or how the shrinking storm drives player movement and elimination…

The lines looked so predictable that I decided to try to fit a trend to the data to come up with a neat expression for predicting the number of players with round time. To any real mathematicians and statisticians out there, I’m sorry, I used Excel’s standard trendline function which I know isn’t the best, but the data was already in Excel so it was easy (This is an application of the Farnsworth “….buuuutt I am already in my pyjamas” argument).

Urgh, that’s pretty horrible! So this ugly 5th order polynomial expression fits quite well, but it proved impractical for prediction as I ended up with inaccurate results because of Excel’s standard double accuracy for floating points. Taking a more simplistic approach I decided to simply break the graph down in to what is happening at each point.

Looking at the player numbers like this it becomes apparent that one of the biggest tricks that F:BR has up its sleeve is that dramatic initial drop in player numbers. Sixty players drop out in under the first five minutes of play, this frees them up to go and join another game. It also presumably has the added advantage or reducing the load on the hosting computer; it could be my imagination, but once that had occurred to me I seemed to notice more network stutters towards the beginning of the round supporting this idea.

The initial drop in players is followed by a steady state decline for another ten minutes followed by a final five minutes of tense combat involving five or fewer remaining souls.

… at this point I began to unravel a little as my thought process went something like this “Sooo… if 25 players are lost in the first minute and the next round needs to begin one minute after the first players start dropping out of the round then four game beginning simultaneously would generate 100 players to begin another round, but them there are 300 players still in partially finished rounds who need another game to begin as they drop out, and another game with 100 players just having started and so there needs to be another set of four games….”.. this resulted in no progress and much staring in to the middle-distance…

Instead I decided to go back to the idea of that first very rough estimate and look at the total player numbers ingame given rounds beginning at regular intervals. As the entire round (not including waiting) takes 21 minutes this would mean that if only one game was running then a round would begin every 21 minutes; for two games one would begin every 10 mins, 30s; for three one would begin every 7 minutes…. all the way up to 21 simultaneous games with one beginning every minute. In this scenario the maximum total number of players ingame would be the minimum number required to sustain a new game beginning each minute with no player waiting more than one minute to join a round.

Before I reveal the final score, take a look at the 1 game and 2 game curves on the graph; it’s pretty cool how there only needs to be around 125 players to sustain two simultaneous rounds… and that’s pretty much the entire trick, only a relatively small increase in player numbers (considering this is pitched as a 100 player game) allows for many more games to be in progress simultaneously which keeps the waiting time low considering the format.

So to meet that magic “no player waiting more than one minute to play” target, I predict that there would need to be only 702 players connected to the server.

So, what do you think? Is this a reasonable estimate? … is my math shamefully wrong?

*…this isn’t quite true, as a player could land and quickly eliminate someone during the jump time