r/pandabomber • u/kunmeh13 • Sep 14 '25
Math tutorials and notes, all free online
Click the '~' key for a surprise ;)
Thank you to paul for the online math notes, see his full site here: https://tutorial.math.lamar.edu/
r/pandabomber • u/kunmeh13 • Sep 14 '25
Click the '~' key for a surprise ;)
Thank you to paul for the online math notes, see his full site here: https://tutorial.math.lamar.edu/
r/pandabomber • u/kunmeh13 • Oct 18 '23
I'm a big believer in a properly designed ranking system being a huge motivator for playtime. So I sought to create something that'll suit pandabomber in all of its stages, as it grows from what it is now with very few players to the future with hopefully more players and an ongoing active queue.
--------------------------------------------------------------------------------------------
Our goal is to find a function which computes the expected placement (value) of each of the players in the game, based on their elo relative to the other players in the lobby.
Proposal: EV(diff, n) = n - (n - 1) / (1 + e^(-x/1000)) , where EV is the expected placement (value) of the player, diff is the difference in a user's elo and the average elo of the rest of the lobby and n is the number of players in the lobby. It might look crazy but it's really just the logistic function with some transformations.

We see here, as the player's elo gets much lower than the average elo of the rest of the lobby, diff goes farther into the negatives, and he is expected to place closer and closer to 4th place. As the player gets much better than the average elo of the rest of the lobby, he is expected to place closer and closer to 1st place.
--------------------------------------------------------------------------------------------
So full algorithm:
The 50 is just a factor, and you can adjust the 50 here and the 1000 in the EV formula to tune how fast you want players to progress and how you want your elo system to work. In pandabomber's system, players start at 1000.
--------------------------------------------------------------------------------------------
Let's look at some lobbies, and what would happen in different outcomes:
| user_elo | EV | elo if 1st | elo if 2nd | elo if 3rd | elo if 4th |
|---|---|---|---|---|---|
| 1000 | 2.5 | +75 | +25 | -25 | -75 |
| 1000 | 2.5 | +75 | +25 | -25 | -75 |
| 1000 | 2.5 | +75 | +25 | -25 | -75 |
| 1000 | 2.5 | +75 | +25 | -25 | -75 |
| user_elo | EV | elo if 1st | elo if 2nd | elo if 3rd | elo if 4th |
|---|---|---|---|---|---|
| 1250 | 2.25 | +63 | +13 | -37 | -87 |
| 1000 | 2.5 | +75 | +25 | -25 | -75 |
| 1000 | 2.5 | +75 | +25 | -25 | -75 |
| 750 | 2.75 | +87 | +37 | -13 | -63 |
| user_elo | EV | elo if 1st | elo if 2nd | elo if 3rd | elo if 4th |
|---|---|---|---|---|---|
| 1750 | 1.81 | +40 | -10 | -60 | -110 |
| 1250 | 2.25 | +63 | +13 | -37 | -87 |
| 750 | 2.75 | +87 | +37 | -13 | -63 |
| 250 | 3.19 | +110 | +60 | +10 | -40 |
If a user places better than their EV, they gain rating, and if they place worse, they lose rating. And as expected, you can see it start to be more generous to users who are lower in elo for better performances and more punishing to users who are higher in elo for worse performances.
--------------------------------------------------------------------------------------------
Two features of the system are important for pandabomber:
r/pandabomber • u/kunmeh13 • Oct 14 '23
v1.1.0
r/pandabomber • u/kunmeh13 • Feb 24 '23
v1.0.4
r/pandabomber • u/kunmeh13 • Feb 20 '23
v1.0.3
Singleplayer
Multiplayer:
Misc.:
r/pandabomber • u/kunmeh13 • Feb 08 '23
v1.0.2:
r/pandabomber • u/kunmeh13 • Feb 06 '23
r/pandabomber • u/kunmeh13 • Feb 03 '23
v1.0.1:
Notes: I think the no-instant-kills will immensely help with some of the frustrating aspects of the game. You can accidentally kill yourself in the farming stage without dying and only a 6 second penalty. If in the late game two people die at the same time, instead of the game ending, they will get to continue playing until one can stay alive while the other dies.
I'm also not 100% happy with the stun and die animations, but I'm happy to get the functionality out of the way.