Pickup changes summary
Posted: Wed Dec 02, 2020 2:11 am
A few days ago some people on discord and I had a little discussion about how the pickup system of the game could be improved and balanced a bit. Huki asked for a recap of what we said on the forum to not lose it so here we go.
The objective of the discussion was tweaking the pickup weight system. Right now each pickup weight is hardcoded and has been modified only once that I can recall, to fix the incredible abundance of stars, but never once was ever considered to balance the rest of the pickup weights and even less changing properties of existing pickups.
The first suggestion is to softcode the pickup weight table and put it in an editable text file, possibly allowing more than one table to exist. People should then be able in the rvgl.ini or directly in the game as UI to choose which table to use.
The second suggestion is to allow the host to send this text file(s) over to the clients that will load it at the race start, this to ensure everyone is playing with the same pickup weight table and avoid unfair gameplay.
The third suggestion is to softcode each pickup properties and set them in the aforementioned text file: for example some times the host may want to reduce the amount of time an oil can exist, or the amount of time a zap stops you for; basically not to alter the functioning of stock pickups, but to customize some of their properties.
The fourth suggestion is to be able to limit in the same text file how many of the same item can exist at once: for example if someone gets the track star, everybody else won't be able to get a random star until the other person uses its star; if n oils already exist both on the track and in someone's item slot other people won't be able to get an oil.
The fifth suggestion is to introduce timings and limits in the pickup system. For example, nobody can get a star or a zap in the first 10 seconds of the race; nobody can get 2 oils back to back; nobody can get a zap after having the zap effect active and after it has disappeared for less than 5 seconds ago.
The last suggestion is to be able to dynamically download tracks, cars and pickup weight tables directly from a dedicated server.
Summary of the discussion that took place on discord:
The main issue with pickups at the current state is that the pickup rates are not balanced at all. You can get incredibly powerful items in first like zaps and oils (both at 18%) that will allow evenly skilled players to run from the havoc that's happening behind them, you can even get batteries at 8%. That's incredibly unbalanced, once first place is 50 meters away, if he gets very unlucky and gets a couple of bombs maybe can still be reached, but otherwise he's gone. At the same time, the player in last has the highest chance of getting the item that most will be useless to him, a ball at 21% (why?), while also having 2% chance of getting a bomb. To put it in perspective: imagine playing mario kart, but you can get a star or mushrooms in first and break away immediately while other people fight in the back. Having custom weight tables means that I/O can move away from stock pickup %s and experiment with their own balanced tables, other communities can also find their own set of rules and those who want can still play with the stock system, this way everyone will be happy and compatibility is not lost.
The suggestion for custom pickup properties arose from the fact that some items are broken (op) in the current state in some tracks: for example oils in museum 1 can be put by the player in first in the triceratops section and hit everyone else up to 2 times, incredibily increasing their lead while not really closing up the pack either. A zap kill time of 4 seconds may sound nice in a track like toytanic 1 where you can make up for the time lost with a battery or generally by driving well, but it's a complete disaster in shorter tracks like botanical garden or in tracks where it's very hard to gain time on other people due to the geometry of the track itself, so being able to reduce it to something like 2 seconds would make it less useful and thus allow for closer racing.
Being able to limit how many of the same pickup can be in play would also be beneficial to races in various ways, like for example less chaos in short tracks.
The timed item suggession is specifically to avoid the first zap havoc. With this, each host can specify how long do you need to wait in seconds after the start before being able to find a certain item, to avoid events like someone zapping or oiling the whole lobby at the first turn. It should also specify a cooldown for each specific item, so that you can't get back to back zaps and just be impossible to overtake in tighter tracks.
About the server, of course a centralized server to be able to download pickup weight tables, tracks and cars on demand based on the track/cars of the host would be amazing but I'm no server expert so somebody else can take on that suggestion.
To make the table txt packs, I was thinking of using multiple txt to put in a folder, every file will contain only one pickup/property table and people can overwrite/update files without affecting other tables.
Each actual pickups.txt can should the pickup weight table along with some other custom properties that come with the pickups.
If I missed anything feel free to add it here, I really hope for custom pick rates to allow for exclusive events and finally some balancing in the game.
The objective of the discussion was tweaking the pickup weight system. Right now each pickup weight is hardcoded and has been modified only once that I can recall, to fix the incredible abundance of stars, but never once was ever considered to balance the rest of the pickup weights and even less changing properties of existing pickups.
The first suggestion is to softcode the pickup weight table and put it in an editable text file, possibly allowing more than one table to exist. People should then be able in the rvgl.ini or directly in the game as UI to choose which table to use.
The second suggestion is to allow the host to send this text file(s) over to the clients that will load it at the race start, this to ensure everyone is playing with the same pickup weight table and avoid unfair gameplay.
The third suggestion is to softcode each pickup properties and set them in the aforementioned text file: for example some times the host may want to reduce the amount of time an oil can exist, or the amount of time a zap stops you for; basically not to alter the functioning of stock pickups, but to customize some of their properties.
The fourth suggestion is to be able to limit in the same text file how many of the same item can exist at once: for example if someone gets the track star, everybody else won't be able to get a random star until the other person uses its star; if n oils already exist both on the track and in someone's item slot other people won't be able to get an oil.
The fifth suggestion is to introduce timings and limits in the pickup system. For example, nobody can get a star or a zap in the first 10 seconds of the race; nobody can get 2 oils back to back; nobody can get a zap after having the zap effect active and after it has disappeared for less than 5 seconds ago.
The last suggestion is to be able to dynamically download tracks, cars and pickup weight tables directly from a dedicated server.
Summary of the discussion that took place on discord:
The main issue with pickups at the current state is that the pickup rates are not balanced at all. You can get incredibly powerful items in first like zaps and oils (both at 18%) that will allow evenly skilled players to run from the havoc that's happening behind them, you can even get batteries at 8%. That's incredibly unbalanced, once first place is 50 meters away, if he gets very unlucky and gets a couple of bombs maybe can still be reached, but otherwise he's gone. At the same time, the player in last has the highest chance of getting the item that most will be useless to him, a ball at 21% (why?), while also having 2% chance of getting a bomb. To put it in perspective: imagine playing mario kart, but you can get a star or mushrooms in first and break away immediately while other people fight in the back. Having custom weight tables means that I/O can move away from stock pickup %s and experiment with their own balanced tables, other communities can also find their own set of rules and those who want can still play with the stock system, this way everyone will be happy and compatibility is not lost.
The suggestion for custom pickup properties arose from the fact that some items are broken (op) in the current state in some tracks: for example oils in museum 1 can be put by the player in first in the triceratops section and hit everyone else up to 2 times, incredibily increasing their lead while not really closing up the pack either. A zap kill time of 4 seconds may sound nice in a track like toytanic 1 where you can make up for the time lost with a battery or generally by driving well, but it's a complete disaster in shorter tracks like botanical garden or in tracks where it's very hard to gain time on other people due to the geometry of the track itself, so being able to reduce it to something like 2 seconds would make it less useful and thus allow for closer racing.
Being able to limit how many of the same pickup can be in play would also be beneficial to races in various ways, like for example less chaos in short tracks.
The timed item suggession is specifically to avoid the first zap havoc. With this, each host can specify how long do you need to wait in seconds after the start before being able to find a certain item, to avoid events like someone zapping or oiling the whole lobby at the first turn. It should also specify a cooldown for each specific item, so that you can't get back to back zaps and just be impossible to overtake in tighter tracks.
About the server, of course a centralized server to be able to download pickup weight tables, tracks and cars on demand based on the track/cars of the host would be amazing but I'm no server expert so somebody else can take on that suggestion.
To make the table txt packs, I was thinking of using multiple txt to put in a folder, every file will contain only one pickup/property table and people can overwrite/update files without affecting other tables.
Each actual pickups.txt can should the pickup weight table along with some other custom properties that come with the pickups.
If I missed anything feel free to add it here, I really hope for custom pick rates to allow for exclusive events and finally some balancing in the game.