8 const CalcPatternMod _pmod = JS;
10 const std::string name =
"JSMod";
11 const int _tap_size = jump;
17 float prop_buffer = 1.F;
19 float total_prop_min = min_mod;
20 float total_prop_max = max_mod;
21 float total_prop_scaler = 2.714F;
23 float split_hand_pool = 1.5F;
24 float split_hand_min = 0.9F;
25 float split_hand_max = 1.F;
26 float split_hand_scaler = 1.F;
28 float jack_pool = 1.35F;
29 float jack_min = 0.5F;
31 float jack_scaler = 1.F;
33 float decay_factor = 0.05F;
35 const std::vector<std::pair<std::string, float*>> _params{
36 {
"min_mod", &min_mod },
37 {
"max_mod", &max_mod },
38 {
"mod_base", &mod_base },
39 {
"prop_buffer", &prop_buffer },
41 {
"total_prop_scaler", &total_prop_scaler },
42 {
"total_prop_min", &total_prop_min },
43 {
"total_prop_max", &total_prop_max },
45 {
"split_hand_pool", &split_hand_pool },
46 {
"split_hand_min", &split_hand_min },
47 {
"split_hand_max", &split_hand_max },
48 {
"split_hand_scaler", &split_hand_scaler },
50 {
"jack_pool", &jack_pool },
51 {
"jack_min", &jack_min },
52 {
"jack_max", &jack_max },
53 {
"jack_scaler", &jack_scaler },
55 {
"decay_factor", &decay_factor },
57#pragma endregion params and param map
59 float total_prop = 0.F;
60 float jumptrill_prop = 0.F;
61 float jack_prop = 0.F;
62 float last_mod = min_mod;
79 pmod = std::clamp(last_mod - decay_factor, min_mod, max_mod);
85 const auto& itvi = mitvi._itvi;
88 if (itvi.total_taps == 0) {
93 if (itvi.taps_by_size.at(_tap_size) == 0) {
100 t_taps =
static_cast<float>(itvi.total_taps);
104 static_cast<float>(itvi.taps_by_size.at(_tap_size) + prop_buffer) /
105 (t_taps - prop_buffer) * total_prop_scaler;
107 std::clamp(fastsqrt(total_prop), total_prop_min, total_prop_max);
111 jumptrill_prop = std::clamp(
112 split_hand_pool - (
static_cast<float>(mitvi.not_js) / t_taps),
120 jack_prop = std::clamp(
121 jack_pool - (
static_cast<float>(mitvi.actual_jacks) / t_taps),
126 std::clamp(total_prop * jumptrill_prop * jack_prop, min_mod, max_mod);