CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.08k stars 4.1k forks source link

Normalizing Threshold Breach Chance #60055

Open Stadler76 opened 2 years ago

Stadler76 commented 2 years ago

Is your feature request related to a problem? Please describe.

Currently breach power math is not considering different mutation categories. For example the black dragon mutation from Magiclysm has 112 breach power with all pre-thresh mutations while for example alpha category has 45 pre-thresh breach power.

Solution you would like.

This should be normalized so that every mutation category has nearly the same chances to breach the threshold including mods and categories yet to be added to vanilla or to a mod.

Describe alternatives you have considered.

No response

Additional context

No response

Maleclypse commented 2 years ago

Thanks for writing this up. I'll add some of the comments from Discord here.

Breach chance should start at 15% once you have 2/3rds of the total number of mutations in a tree and be go up X% per every mutation over 2/3 so that trees that have few mutations breach in a similar fashion to large trees.

One idea is, that the game generates a pre-thresh / post-thresh breach power table on loading a save. Like what the breach power test does, but without discarding the numbers.

Stadler76 commented 2 years ago

@Maleclypse said:

Breach chance should start at 15% once you have 2/3rds of the total number of mutations in a tree and be go up X% per every mutation over 2/3 so that trees that have few mutations breach in a similar fashion to large trees but I have no idea how to do that in c++. IMO

I'd say, it shouldn't depend on the number of mutations, but on the current breach power math. For example a lizard with all pre-thresh mutations currently has 73 breach power, so we have stored 73 pre-thresh breach power in our internal table (I might add a table with a few symbolic mutation categories later here). I'll use RBP for Raw Breach Power, which is 73 at max for lizards and NBC for Normalized Breach Chance from here on.

So as per your suggestion, the player would hit 15% NBC at $2/3 73 \approx 48.67$ RBP or ≈66.6% RBP. Side note: Old was: needs 30 of 73 breach power, which is: $30/73 100 \approx 41.10$ for our lizard mutant. I'd say it should still require 30% NBC to start rolling on threshold breaching.

Note: Consider we have a graph with 0-100% RBP on the x-axis and 0-100% NBC on the y-axis for the following. Considering the dreams the player can get, we have 15, 22 and 30 RBP currently so let's use the same values, so that we get 15%, 22% and 30% NBC for the dreams the player could get. I want NBC to be hardcapped at 75%, meaning, that said lizard wannabe would have a 75% chance to breach the threshold at 73 RBP or 100% RBP.

I want a curve that goes through a few values:

Note 2: xx% RBP means means xx% of 73

[Edit:] I might adjust the numbers a little more later since I want a more reasonable chance for the dreams. [Edit 2:] Although, this could be a hint to make lizard mutation more complex, especially since this would relieve us from the burden of the breach power test, as this would successfully obsolete it. [Edit 3]: Changed the values a bit.