# Linearize the effects

## Abstract

This is about making ships and modules effects bonuses additive rather than multiplicative.

## Issues

This aims at addressing the issues :

- stacking penalty is a complex system that aims to reduce the exponential increase of some modules. It is not needed and nobody can tell for sure how things actually work - unless they test that thing specifically.
- several skills/ effect have increased potency the more you invest in them. if you have two modules that reduce cap recharge rate by 50%, and your cap recharge is base 100, one module gives +100, the second one gives +200.
- ability to add specifc effect on weapons, to differenciate them even more

## Implementation

We check fist the general formula, and then some specific examples.

The actual implementation must be done on a step-by-step basis. For some effects it’s just not usable

### General formula

Instead of using the raw value modified by effects, we use :

effect =

( base + flat_bonus )

× ( 100 + skill_inc) / ( 100 + skill_dec )

× ( 100 + eff_inc × 100 / ( 100 + eff_coerc) ) / ( 100 + eff_red × 100 / ( 100 + eff_resil ) )

, with

- base is the value we have now. It can be or not modified by other effects, which in that case would not be additive. This helps migrate from a model to another.
- flat_bonus is the flat values added. Typically shield extenders’ shield and sig increase go in here, as well as plates’ mass.
- skill_inc is the increase provided by skills.
- skill_dec is the decrease provided by skills.
- eff_inc is the sum of the increase provided by effect.
- eff_coerc is the sum of coercion effect, basically the neutering of the increase
- eff_dec is the sum of the decreases provided by effect.
- eff_resil is the sum of resilience effect, basically the neutering of the decrease

All values besides the base have a default value of 0.

If the effect considered is negative ( sig radius, mass, resonance) then the coercive and resilience effects are swapped.

### Example 1 : speed

The propmods are weird so we discard them.

We however consider the speed increasing modules / rigs and the counterpart webification.

#### Discarding propmods

We don’t consider AB/MWD because they already have a double multiplicative effect :

speed ×= (100+module_mult) / 100 × ship_thrust /ship_mass

- with mass being modified before the speed is changed
- as well as ship_thrust using the module mass and thrust.

So this part is kept as a modification of the base value in the formula.

#### Overdrive

Let’s consider the overdrive T2. Its attribute is +12.5% to max speed. If we consider the module should be as strong as bow with one fitted only, that is we want parity with one module (p=1), then the new attribute speed_eff_inc of the module, that would also be added to ship when fitting that module, is also +12.5 .

# fitted | inc% now | inc% change |
---|---|---|

0 | 0 | 0 |

1 | 12.5 | 12.5 |

2 | 24.72 | 25 |

3 | 33.62 | 37.5 |

4 | 38.35 | 50 |

If we consider the module should be as strong with 4 modules fitted(p=4), then the new value would be 38.35/4 = 9.59

basically inc = ( ( (100+m) / 100 )^p -1 ) ×100/p for non penalized modules.

this value of p is a choice to be made.

#### Stasis webifier/grappler

Let’s consider the stasis webifier II with -60% max velocity bonus.

This would affect the eff_dec of the ship targeted. The value to match it is

eff_dec = 100×(100/(100+mult) -1 ), with mult the bonus (here -60).

Table :

mult (% decrease) | additive decrease |
---|---|

-10 | 11.11 |

-20 | 25 |

-30 | 42.86 |

-40 | 66.67 |

-50 | 100 |

-60 | 150 |

-70 | 233.3 |

-80 | 400 |

-90 | 900 |

-100 | +inf |

So basically when changing the implementation, the webifier II get a +150 to speed decrease on target to keep the same effect.

The issue here, is for serpentis effect : +50% to 150 means a 225 speed decrease, which is way below what is required to have the present -90% ( that is, 900 speed decrease). So the obvious change is to add another effect that increases the speed reduction attribute by 500% (150 × 6 =900 )

However, stacking those modules would be weaker,

- now two -50% modules multiply speed by 0.283 ; with that change it would multiply speed by 0.333
- now two -60% modules multiply speed by 0.191 ; with that change it would multiply speed by 0.25
- now two -90% modules multiply speed by 0.0218 ; with that change it would multiply speed by 0.0526

#### resilience and coercion effects

The overdrive would also provide some speed resilience (like, 25) that would reduce the effect of incoming webs. With 4 modules each with 25 base resilience it means the effect of webs is halved . Different faction modules could have different values for resilience, making more choices available for fitting.

In the same way, different webs/grapplers/burst/scrambler would also apply different speed coercion effect. like base is +40 for M0, +30 for scoped, +50 for T2, and add +10 for navy and +20 for pirate

### Example 2 : resonance

It’s pretty much the same as webification before, but simpler because there is no negative effect besides env.

It’s weird because it’s a negative effect , more resonance = more damage incoming. (highisgood=false)

The base is ship_value multiplied by env effect and DC/siege/RAH.

Nothing updates the value with skill so we keep as is (default 0)

What changes however is the effect of rigs/modules that affect “resistances”. Just like the web, a module that has a -20 to armor em resistance would instead apply a +25 to armor_mult_em_eff_dec - effectivelly adding 25% to your rep and EHP on the armor layer.

I don’t think we should add coercion here because it would feel weird.

### Example 3 : cap/shield recharge

Only talking about cap, shield is the same.

#### Cap regen

The present formula is basically

gain = t × 10 × C / T × ( sqrt(c/C) - c/C )

- t the server tick diff
- C the ship max cap
- c the ship actual cap
- T the ship recharge time

There are two ways to increase the recharge (of course at t and c/C given) : increase C or decrease T.

We can translate the decrease of recharge time into actual increase of the recharge rate.

#### Base value in linear

The base value becomes C/T , with C containing cap battery flat effect and T the BASE ship cap recharge time.

#### Skill effects

Regarding the skills, we want to have the same effect at max skill level. So the “capacitor systems operation” that give a -25% to recharge time at level V, so a +33.33% to cap recharge rate, should instead give +6.667 to recharge rate per skill level. This translates to a -6.25 reduction to recharge time at level 1, therefore the skill would be more effective at lower skill levels - but the exact same at higher ones .

#### Modules effect, parity level.

Regarding the modules, we need to know where we want parity. Just like overdrive before, depending on the number of items we want to achieve parity, the new value of each individual item would be different.

A CapacitorControlCircuit T2 is -20% to recharge time, so one module is +25% recharge rate. Two modules however are +56.25% recharge rate, and three are +95% . If we want parity at one module, then the new attribute cap_recharge_increase is +25 ; if we want parity=2, it is +28.12 and for partity at 3 modules, it’s +32.

Basically for an item with multiplier m (here -20) and desired parity at p (eg 3) then the new increase attribute inc should be inc = ((100/(100−m))^p−1)×100÷p .

As many fit use several modules of the same effect for correct usage, I believe a parity of 4 should be used for shield regen and 3 for cap regen. This would however greatly increase the efficiency of the individual modules, typically the CCC for a p=3 parity would go from +25% to +32% effect for a single module fit, that is +28% module efficiency. If we go for parity p=4 then it’s +44% efficiency for a single module (but same efficiency at 4 modules installed)

#### Migration

Basically, the migration of the modules would be

- add ship attribute and module attribute
- update the recharge formula to take the ship recharge_rate_inc attribute into account.
- add a dogma effect to update the ship attribute from a module
- add the attribute recharge_rate_inc to all items that decrease recharge time, with value based on the parity level expected.
- update those modules to have the new effect and remove the old one.

## Opened options

Since the skills effects are now all “positive effect”, it’s now possible to have skills over 5 without imbalance the game (no more -105% to sig bloom for MWD at interceptor VII ^^ ).

The coercion effects can be added to weapon in the game to differenciate them.

- cap coercion can be added to lasers,
- velocity coercion can be added to projectiles,
- local and remote rep coercion can be added to hybrid.

With lower values for smaller guns, like 8/12/18/27 for small/medium/large/XL (+50% per size up)