I wrote this long essay on why the whole installing bionics system is broken, but it’s too in depth. I can upload it if you want, but (believe it or not) this massive post is a summary.
[b]Main points:
- Chance of success doesn’t change enough when you do (or don’t) have the right stats and skills
- The different failure types when installing (which are only based on your success chance and randomness) are too hard on highly skilled characters and too easy on unskilled characters
- The equation to calculate install skill is a bit off, and the flat “chance of success” curve makes the problem worse.
- Bionics difficulty needs to be tweaked.[/b]
I got excited and spent the last 2 days looking over the code and then thinking about how it could be improved. I think I have good suggestions to items 1-3 on my list above. I won’t mess with bionics difficulty until the other stuff is set.
So here are my suggestions. I’ll try to add them to the code, but a more experienced hand is welcome here too.
SPOILER ALERT: This whole post covers mechanics. Don’t read if you don’t want to know
INSTALL SKILL:
current skill = 0.25*int + electronics + 0.75*first_aid + 0.50*mechanics
proposed skill = int + electronics + 0.75*first_aid + 0.25*mechanics
Increase the affect of Int and decrease Mechanics. Int is costly to increase during character creation and competes with other important stats (i.e. it forces specialization). Mech is easy to increase, and there is already plenty of incentive to do so. Most players will train mech regardless of strategy to get some kind of vehicle.
The other key part is to increase the range of the install skill A big range makes it easier for us to use it as a variable in the success equation. Based on our model low, avg, and high level characters above, the range is:
[table]
[tr]
[td] [/td]
[td]low[/td][td][/td]
[td]avg[/td][td][/td]
[td]high[/td]
[/tr]
[tr]
[td]int:[/td][td]6[/td][td][/td][td]10[/td][td][/td][td]20[/td]
[/tr][tr]
[td]elec:[/td][td]2[/td][td][/td][td]5[/td][td][/td][td]10[/td]
[/tr][tr]
[td]first_aid:[/td][td]2[/td][td][/td][td]5[/td][td][/td][td]10[/td]
[/tr][tr]
[td]mech:[/td][td]2[/td][td][/td][td]5[/td][td][/td][td]10[/td]
[/tr][tr]
[td]current skill:[/td][td]6[/td][td][/td][td]13.75[/td][td][/td][td]27.5[/td]
[/tr][tr]
[td]new skill[/td][td]10[/td][td][/td][td]20[/td][td][/td][td]40[/td]
[/tr]
[/table]
This example doesn’t make all the nuances clear, but int doesn’t matter in the old system. For a level 4 bionic in the old system, a 6 int character with skills at 10 10 10 has a 85% chance of success. Boosting int to 20 makes it an 87% chance of success. Int is soooo useless here. So even though my proposed system starts at 10 instead of 6 for our model low-lvl character, the dynamic range would be 30 (40-10) instead of 21.5. Maybe not perfect, but an improvement. The secret sauce is applying it to the success rate.
CHANCE OF SUCCESS:
The current chance of success is given by the equation:
skill/(skill + difficulty)
While it is nice and simple, install skill in its current implementation does not have a wide range, and difficulty in the denominator makes the curves really flat. Here is what they look like:
It’s pretty easy to get any character to an install skill of 15 or so, which means that building a character with bionics in mind to boost the success chance is stupid. Diamond Cornea will have a success chance in the low 70s at best, and the way punishments are, it’s extremely risky. I really feel like making bionics less accessible for “unskilled” characters and less risky for characters built for them creates a new strategic opportunity in the game (well, it makes it work like I think it was intended anyway).
So here is the same graph based on a new equation that I propose:
I changed two things here. I changed the skill equation to the one I proposed above. Then, to calculate success, I had 3 steps.
First, shift the skill range to between ~0.4 and 30.
Second, use the ratio of skill / difficulty as our metric to success. If skill is bigger than difficulty, this will be greater than one. If skill is less, it will be a fraction. If skill = difficulty, it will be 1.
Finally, use an equation that will give us the curve we want while staying bounded between 0 and 1. When x = 1, this gives a 50% chance of success. The square root term becomes larger as x decreases. As you can see from the graph, this gives us really nice behavior. Our “low” character should not be able to install a bionic. Our average character should be able to install easy bionics consistently. Our high example should be really good at installing any bionic (e.g. no risk of malfunction). The only downside is that calculating success requires using a square root. To do this, we either have to import math.h or use a loop to calculate the square root by hand (not hard. A simple algorithm is explained here: http://answers.yahoo.com/question/index?qid=20081002085704AAeaUPd).
PUNISHMENT:
I showed a graph above of success rates for a range of skill levels. Let me show a similar graph. This one is the odds of different punishments where the X axis is the “chance of failure” (i.e. 1 - chance_of_success).
The chance of no punishment is flat because it is calculated before all the other punishments are considered. For the actual punishments, the main problem with the curves is how slowly they go to zero. This again puts a big emphasis on luck and limits the benefit of improving your skill level. In my opinion, an ideal high-level player installing a tough bionic should never have the possibility of the bionic malfunctioning. It’s game breaking right now. We don’t want to make them permenantly handicap a smart, late-game character because RNG rolled a perfect 99 or 100. I could go into a lot more here, because at a more fundamental level I disagree with the random number distributions that the current system uses. But you get the idea. I’ll stop.
Here is an alternative that lets higher skill players install bionics without fear of permanent damage. The graph first for comparison:
Sorry for the noise in the graph. I made both of these through simulations. I was a little anxious and had smaller sample sizes with this one. Just noticed I missed labeling the axes too. X-axis is chance of failure. Y-axis is chance of a specific punishment if you try to install. If you have better than a 65% chance of success, you won’t get a malfunction. Better than 80%, you won’t lose other bionics. Also, if you fail big on an install, the “no punishment” option goes near zero, and the odds are something really bad will happen.
These curves depend on the “success” variable in-game (e.g. If you had a success chance of 70% and when you tried to install the bionic, the RNG rolled 84%, the success variable in the bionics_install_failure function ends up as abs(70-84)=14) and also the skill/difficulty ratio. The original equation uses only the success variable to decide punishment. Using the ratio as well provides a way to punish players for attempting an install that was too difficult and weaken the punishment for skilled players installing something that should be routine. This mimics real life in a satisfying way and makes a “bionics build” something players can go for. The equations to produce this are:
Nice and simple. Unless the sqrt() kills the speed, it may even be faster than the current method for bad failures.
CONCLUSION:
So that’s it. Those are my suggestions. Please give feedback on the idea of making bionics safer for highly skilled installers and more dangerous for characters with low install skill and low intelligence. Also, please give feedback on the implementation. There is more than one way to mathematically represent the ideas. I will try to make a pull request with these changes reflected in the code (assuming this gets a good response), but I’m not a C++ programmer. Others are welcome to put this in the code.
Edit: had an error in the “x =” equation. Fixed now. Also, this rebalance made is now pulled into the code. Yay!