Percentile-based payout model for Ball Race

Current model

Currently, Ball Race uses the following payout system:

In addition to this table, courses that are harder get a small multiplier. (x1.3 maximum for very hard courses)

As we can clearly see here, the most amount of units come from getting 1st, 2nd, and 3rd places. Thus, I call this a rank-based payout model, as it significantly favors players who are able to get first 3 places within a given game.

Current model’s limitations

I think the current rank-based payout model has several limitations:

  1. “Given the opportunity, players will optimize the fun out of a game.” I believe, Ball Race has most fun when playing with a lot of people with different skill level. However, the current payout model:
    • Incentivizes players to play with those who are less skilled, so they get better rank, thus more units
    • Incentivizes players to play in 3-player groups, because (1) 3 players are the minimal requirements for getting rank rewards, (2) they are always in the top 3, and (3) the chance of them getting the first place is much higher with less competing people
  2. Since getting 4th place yields the same amount of units as getting 5th place and so on, many players start to “actively collecting melons” (= go around just to get melons) instead of finishing the course as fast as possible once they are behind. This is sometimes very unpleasant to spectate. The payout system should encourage players to go as fast as they can, instead of encouraging them to slow down and making others wait forever.
  3. It does not provide proportional award to courses that takes significantly more effort to finish. For example, just finishing a level in Midori should be much harder than getting a first place in a GLXY level with 2 other rookies. The current system does not consider that.

My proposal

Given these limitations, I propose that a new payout system is added to replace or accompany the old rank-based system.

Basically, I suggest that players get rewarded based on how well they do globally. That is, after each level, the time that player got is compared with time of every other attempts (include both passed & failed attempts) made by other players in that level. Then, based on this relative ranking, a percentile is generated. According to that percentile number, an reward of units is given. This relationship between percentile and units awarded does not have to be linear. For example, getting a 50th percentile time may give 200 units, a 15th percentile time may give 500 units, while a 5th percentile time may give 1000 units.

This proposal addresses all three limitations mentioned before:

  1. Players will no longer try to play with less people or people that are less skilled, since their unit rewards are no longer/less based on their performance against other players within the same game.
  2. Getting to the goal faster always gives a better percentile, which means at no point, players should just stop trying to go fast.
  3. Courses that are significantly harder will inevitably have much more failed attempts. Which means, merely finishing the course will guarantee a much better percentile, and thus more units.

In addition to these “fixes”, this proposal also provides some additional benefits:

  1. Players will be able to immediately know how well they do globally after each attempt, instead only knowing the absolute ranking after getting a personal best.
  2. Provides a sense of achievement when getting a really good time but a little bit worse than the personal best. (“Ah! That was in the 2nd percentile! It knew it was going to be good when I merely made in that cycle”)
  3. Getting less frustrated when losing to some pro, as players will be able to understand how well they are actually doing.

Technical Limitations

I do understand that recording every single attempted ever made in Ball Race will be expensive (computation-wise and storage-wise). To mediate that, I think a compromising solution is to only record last 10,000 attempts in each level. As new records come in, instead of adding them to the database, they update existing rows. (For example, attempt 20,238 will be put in row 238) This way, there will only be 10,000 rows at any time in a table.

As a bonus to this rolling record system, when the developers makes small changes to the map, it will not require wiping the data - as new attempts coming in, the old, somewhat outdated records will be gradually replaced. Nevertheless, large changes/reworks do need to wipe all attempts data.

Please read my reply here for more information regarding technical feasibility.

Other time based payout model suggestions (And why I think mine is better)

There are some other suggestions made prior to this post. They both suggest giving rewards for beating a preset cutoff time:

I think having a fixed time that players will have to beat to get additional units have 3 issues that do not exist in my proposal:

  1. Does not actually fix the limitations 2 and 3 I mentioned before. (players will give up once the designed time is passed & does not award more for just finishing those hard levels)
  2. The cutoff time is hard to determine and difficult to maintain as maps getting changed/reworked
  3. Having a cutoff time makes shortcuts either mandatory (if shortcuts are considered when determining the cutoff time) or overpowered (if shortcuts are not considered when determining the cutoff time).


I really like Ball Race in Tower Unite. However, I do think my suggestion will make Ball Race better. Please consider it. Thanks for reading.

For more detailed reasoning for this proposal, you can read my reply here.

P.S. Also, English is not my first language, so I apologize for any mistakes.

As much as I think this is a great idea, I don’t think this is technically possible with the current system. Consider that as far as I can tell, only the top time is stored for each level in regards to each player. A max of 10K records for each level for each player would be a massive amount of data to store and handle and this is only for one game mode in TU. I don’t think there is a Steamworks API endpoint or steam tool that will allow the devs to do this, meaning they would need to reprogram it and manage scores entirely over their own servers (more overhead on already high-usage servers). This would be a huge task just for one game mode and if it were to be expanded to other gameworlds it’d be just that much more logistically challenging to execute. As much as I think this would be a cool idea, I don’t think it would make a drastically noticeable difference that would merit development on other things being halted/postponed to work on.

That being said, I think it might be more probable if it’s possible to make this system less of a massive data hog and to be able to remain using Steam’s APIs to store historical data on Ball Race.

(I’m not a dev and don’t want to be speaking for everyone but this kind of stuff really interests me and I’d like to chime in when I can)

It is not 10k records per player, it is 10k records per level. (a table for a level records last 10k attempts made in that level by all players.) So there will be less than 2000k records in total (I don’t know how many levels are there in total. If there are 200, then it will be 2000k records in total). If a record takes 1KB of storage (counting the index), the total will only be 2GB, which is nothing when stored in databases. Also, 10k is a number I made up. In reality, it can be less. For example, 1k per level will be ok as well.

And yes, you are right. Developing something like this is going to take some time. But I do believe that the developers will be able to implement this within a reasonable time period.

However, as I said, the actual storage/update/query of data should not be monetarily expensive. Given my observations (and guess), it will probably make 1 query every couple seconds across entire Tower Unite. 1 qps in tables with 10k record is really light on any database system even with very crappy hardware. I estimate that the cost of running a server instance solely for that purpose will probably cost less than $5/month.

Ah ok, if it’s 10k per level that’s not nearly as much. My concern with this then (albeit a much smaller concern) would be that unit rewards in Ball Race would no longer be static. One week you could get 950 units in a level for completing 1st place and another you could get 650, for example. And if the difference in units isn’t that large in the first place, what would be the point of the system? A minor influence on the existing rewards numbers by even just something like 20% is still not that much to be making an entire system of storing global data and calculating percentile for imo.
It’s that you are no longer in full control of how much you earn based on your skill, other players’ skill will then influence your own as well, and if you’re a new player that will almost always harm you.

And then we have the issue of consistency. It’d be very odd for Ball Race to be the only game in TU to have a percentile-based score system, don’t you think? To ease that, other gamemodes will need to get this system. Think of having to explain a scoring system to a new player that only applies to one section of the entire game. Having to make somethig like this for other gameworlds will (like I said before) exponentially increase the amount of work needed to make it happen, further increase server load, and further destabilize the scoring system.

These aren’t as immediately critical issues but I think they’re important to mention as they can be especially jarring for new players that want to get into the game. Inconsistency in what they earn for completing the level and different methods of scoring in different game worlds would be confusing just to marginally improve the experience for one.

Let me clarify that, one of the major benefits of my proposal is indeed making the unit rewards static (relative to one’s skill), instead of not static (as you perceived). In the old system, how many units you earn is mostly not decided by your skill, but other players’ skill within the same game. For example, when playing with rookies, your unit earning per round can be up to *2.7x times more than what you earn when you are playing with pros, even if your time did not change at all.

*2.7 = (200 + 750) / (200 + 150)

However, with the percentage-based model, this is no longer the case. If, for example, getting a 12.34 seconds on a level gives you 500 units for being in the 10th percentile, it is very likely that even if in the next month, getting a 12.34 second on the same level will place you somewhere very close to the 10th percentile, and give you something very close to 500 units. By using a percentile in a 10k pool, this model effectively reduces noise introduced by individual variance. That is, the distribution of those 10k records should look pretty much the same for as long as there is no major change.

With that established, I think argument you provided in the first paragraph no longer stands.

Well, technically, this system can be ported to Zombie Massacre and Acceleration (when out) as well. Even though I am not sure about ZM, I do believe Acceleration will benefit greatly from this system (for almost the same reason).

Also, being unique (or odd) is not really a valid counterargument. You cannot dismiss ideas just because they are different from existing ones.

In contrast, I believe adding this system to other gameworlds (when applicable, so obviously not Little Crusaders) should be much simpler then creating the first implementation as there should be a lot of reusable code. Even if there isn’t any reusable code (which is unlikely), it definitely does not require exponentially more work. In the worst case, they just had to write the similar logic twice.

Ok, here is where I think you might slightly misunderstood what I am saying. Again, my English is far from perfect, so I apologize again if I created confusion.

What I proposed, is not a scoring system. As title said, it is a payout model. Existing scoring system (time), achievements, and leader boards, should stay the same. My proposal only affects how many units are given out. (Use global percentile instead of ranking within the game)

There should be no confusing even for the first time players. For example, the payout popup may simply say: “Your time xx:xx is in the y th percentile globaly, thus you get zzz units”. I believe people are intelligent enough to understand that even if it is their first time playing.

I know, you are going to come up with some other minor drawbacks within my proposal. However, I think you underestimated the great benefit that this percentage-based payout system can bring. This is not me whining for more units. This is me suggesting a system that can psychologically improve players’ feelings.

As we all know, Ball Race is inherently competitive. However, competitive games do not need to be frustrating when losing. Usage of clever design can mediate such negative feeling. For example, I think Tower Unite’s units/exp system is excellent for this goal - no matter what place you got (or even failed the round), you always get some units/exp. This creates a sense of accomplishment to combat the frustration that may arise.

I don’t know how much experience you have with Ball Race, but I believe that most ball race players, when in a game with pros, think that they hoped that those pros are not there, so they can get better ranks in the game and thus gaining more units. I personally find myself thinking that all the time. I do not think such thought is a positive thing to have - players should be glad when playing with better player instead of feel resentful. This is the reason that I first think a new payout system is needed in order to reduce such feeling.

Truthfully, there are many ways to solve this issue. Overall, as long as the unit payout is less dependent on players within the same game, this issue should be resolved. Thus, I perceived a lot of alternatives:

  1. Cutoff time points
    • This is the first idea I came up with. However, it suffers a lot of issues as mentioned in my thread (hard to adjust & makes shortcut less shortcut-y).
  2. Use remaining time to determine how many units to give
    • It is really hard to determine the relationship between units and remaining time.
    • It makes death too punishing
  3. Use z-score
    • The actual distribution of a given level is not necessarily normal. Attempts where there is no death will have very different time compared to attempts where there is one death. Thus, z-scores does not really make sense on those weird shaped distributions.
  4. Use percentile, but with leader board data
    • This will avoid the usage of storing new data. However, the score on the leader board will only increase. That is, unit payout for a exact same run will decrease as time goes.
  5. Use percentile, with all attempts (instead of best ones)
    • This immediately solves issues created by those 4 former approaches:
      • The cutoff time (or the payout distribution) is automatically and dynamically updated as players are playing the game
      • There will be attempts with death in the record, thus how punishing death should be is automatically accounted for
      • Percentile always makes sense no matter the shape of the distribution
      • The unit payout is always stable, as you are always comparing with other attempts instead of best recods
    • It also provides 5 additional benefits as described in my thread
    • This, however, creates the problem that a scaling amount of data is required to be stored.
  6. Use percentile, with last 10k attempts <- My current proposal

Seriously, I went through a ton of brain storming to get to this point. All problems that I can think of has already been ironed out. Again, if you still really want to point out some minor flaws, please reread the benefits of this proposal and consider that whether this flaw outweighs the benefit. Even if you do not think resenting pros is a bad thing, please note there are at least 5 other benefits I mentioned in the thread. I think improvements like making players less focused on melons, organically give more rewards to harder levels, and give players better feedback all very significant benefits of this proposal. Please don’t ignore them.

Thanks for reading.

Alright, that’s fair. I was moreso confusing changing the way payouts are handed out and entirely revamping how scoring is distributed and such. And I can see how it wouldn’t be confusing for new players considering all it needs to inform you of is that you met a certain percentile.

I still feel that it would be more reasonable to work on something like this much later in development (considering there are much more crucial features like the arcade and community condos coming up), but I can see how Ball Race (and potentially other gameworlds) would benefit from something like this. Maybe it wouldn’t be too difficult to do and could be changed in a patch sooner, or w/e, it’s ultimately up to the devs and if they are interested in implementing something like this.
But yes, thank you for clarifying because I initially did have some confusion. This is very thourough, and explains your idea well.

One thing I wanted to note: When I was commenting that Ball Race being the only one with a different payout model would be confusing, I didn’t mean “unique idea = bad”. I meant that it could confuse players when every other game world has a different payout system than Ball Race, for instance if a new player is expecting the same style of payouts for each. Although, all of them already have different payouts tailored to each game so it wouldn’t make much of a difference anyways. I’m aware it’s a non-issue, just wanted to clarify that’s not what I meant in my original post.

I’ll just pop in with a simpler take.

I agree that Ball Race should have some payouts beyond the 1st, 2nd, 3rd ones. Although I see the technical/mathematical reasoning for a system based on global leader boards/percentage, I feel like there’s value in payouts being pretty simple.

External values like leader boards make payouts a bit more confusing, and you’d have to deal with issues like outliers/exploits skewing payouts, but all in all it’s better to be simpler if you can.

The core problem with payouts can be solved with stuff suggested before that you mentioned (Timer challenges, or a “par” time to beat), which although might be a little tough to maintain, Minigolf pretty much has the same thing going on, and it doesn’t seem crazy unreasonable.

The other problems/benefits I feel like can be tackled by different systems, and some of them aren’t really “flaws”, like melon collecting, which may need some smoothing to be less tedious for spectators, but I still think people have a right to do that, melons reward units for a reason after all, and for some people the game isn’t really about speed.

Some other quality of life things would be good for speed runners, like showing your time per life, and global ranking even if you didn’t set a record, but that doesn’t need to coincide with a new payout system.

I overall agree with the sentiment, but I think there’s a simpler way to achieve these goals.

1 Like
  1. Does not actually fix the limitations 2 and 3 I mentioned before. (players will give up once the designed time is passed & does not award more for just finishing those hard levels)
  2. The cutoff time is hard to determine and difficult to maintain as maps getting changed/reworked
  3. Having a cutoff time makes shortcuts either mandatory (if shortcuts are considered when determining the cutoff time) or overpowered (if shortcuts are not considered when determining the cutoff time).

If there were multiple cutoff times, such as gold silver and bronze rewards, there wouldn’t be these issues. Maybe if someone knew what the bronze time was they’d give up when they passed it, but they’d also do that if they knew what time the percentile ranking wouldn’t give worthwhile rewards.

I think Ball Race should definitely get time based rewards in it, right now you aren’t motivated at all to go fast if there’s less than 3 players or people already placed, but I don’t know if a percentile system is necessary. I’m not strictly opposed to it, but I don’t think all the effort needs to be put into making this system when they could just add a few preset times to the courses.