Creating the topic and reserving posts, will fill in later.
I have a lot of ideas so I rather make one single post with a lot of changes than as many changes.
internal links
Creating the topic and reserving posts, will fill in later.
I have a lot of ideas so I rather make one single post with a lot of changes than as many changes.
internal links
This is about making ships and modules effects bonuses additive rather than multiplicative.
This aims at addressing the issues :
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
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
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.
The propmods are weird so we discard them.
We however consider the speed increasing modules / rigs and the counterpart webification.
We don’t consider AB/MWD because they already have a double multiplicative effect :
speed ×= (100+module_mult) / 100 × ship_thrust /ship_mass
So this part is kept as a modification of the base value in the formula.
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.
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,
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
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.
Only talking about cap, shield is the same.
The present formula is basically
gain = t × 10 × C / T × ( sqrt(c/C) - c/C )
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.
The base value becomes C/T , with C containing cap battery flat effect and T the BASE ship cap recharge time.
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 .
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)
Basically, the migration of the modules would be
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.
With lower values for smaller guns, like 8/12/18/27 for small/medium/large/XL (+50% per size up)
This proposal aims at making the dual shield and armor tanking viable, while also reducing the effectiveness of one-layer tanks and allow to hull tank.
Basically, no defensive layer (armor, shield) protects the hull from 100% damage. The bigger the layer the more damage is absorbed, and the bigger the incoming damage, the lower the part of damage is absorbed.
There are two models : a base one that is more complicated, but maybe more fair, and a simplified one. In the simplified one, shield does not protect armor ; in the complicated one, shield protect hull and armor, armor protects hull only.
Considering a damage ds of a given type (does not matter which) reaches the shield of a ship with shield s, shield resonnance rs ; with armor point a, armor resonance rr ; with hull resonnance rh ; then
Considering a ship with 1000 points in shield, armor, hull, and 0.5 resonance (-50% to all resists).
considering an incoming shot of 100 damage.
Second damage instance of the group
This simplifies the damage application as all the computations are made in a single pass. However more damage is redirected to the hull.
Each part of damage absorbed by a layer is equal to layer_hp/(damage+shield+armor).
We can factor the d / (d+s+a) as shared, then layers take shared × hp × resonance as damage, hull takes shared ×d×resonance…
incoming 100 damage, 1000 hp shield/armor, 0.5 resonance everywhere
Google sheet helps makes the simulation
That’s basically what happens when a 8-guns ships shoots at that target.
hit | 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00 | 8.00 | |
---|---|---|---|---|---|---|---|---|---|
incoming damage | 100.00 | 100.00 | 100.00 | 100.00 | 100.00 | 100.00 | 100.00 | 100.00 | |
shield hp | 1000.00 | 976.19 | 952.41 | 928.66 | 904.93 | 881.24 | 857.58 | 833.96 | 810.38 |
armor hp | 1000.00 | 976.19 | 952.41 | 928.66 | 904.93 | 881.24 | 857.58 | 833.96 | 810.38 |
hull hp | 1000.00 | 997.62 | 995.18 | 992.69 | 990.13 | 987.52 | 984.83 | 982.08 | 979.25 |
shared | 0.05 | 0.05 | 0.05 | 0.05 | 0.05 | 0.05 | 0.06 | 0.06 | |
shield damage | 23.81 | 23.78 | 23.75 | 23.72 | 23.69 | 23.66 | 23.62 | 23.59 | |
armor damage | 23.81 | 23.78 | 23.75 | 23.72 | 23.69 | 23.66 | 23.62 | 23.59 | |
hull damage | 2.38 | 2.44 | 2.49 | 2.55 | 2.62 | 2.68 | 2.75 | 2.83 |
Most of the damage (379 / 400 ) is soaked by the two defense layers
hit | 1.00 | 2.00 | |
---|---|---|---|
incoming damage | 400.00 | 400.00 | |
shield hp | 1000.00 | 916.67 | 834.58 |
armor hp | 1000.00 | 916.67 | 834.58 |
hull hp | 1000.00 | 966.67 | 930.85 |
shared | 0.17 | 0.18 | |
shield damage | 83.33 | 82.09 | |
armor damage | 83.33 | 82.09 | |
hull damage | 33.33 | 35.82 |
Here 330 out of 400 damage is into layers.
hit | 1.00 | |
---|---|---|
incoming damage | 800.00 | |
shield hp | 1000.00 | 857.14 |
armor hp | 1000.00 | 857.14 |
hull hp | 1000.00 | 885.71 |
shared | 0.29 | |
shield damage | 142.86 | |
armor damage | 142.86 | |
hull damage | 114.29 |
Here 285 / 400 damage are absorbed by layers.
The more shots used to apply the same damage, the less % is applied ot the hull. Is it good or bad ? We can always make up justifications later, that what rational means.
What it means is that a high variance makes it more possible to do good damage to the hull.
If a target is one-shot (by a single damage instance) it means that the damage applied to hull and multiplied by resonance, equals the hull hitpoints h :
d × d / (a+s+d) × r = h
=> d² -hd/r -h(a+s)/r=0
The solution is d = h/2r + sqrt( (h/2r)² + h(a+s)/r ). With 0 shield and 0 armor it becomes d= h/2r + h/2r = h/r = hull EHP. With e = h/r this becomes d = e/2 + sqrt( (e/2)² + e×(a+s) ) = e/2 + sqrt( e×(e/4 + a+s) )
Since it’s not possible to fully protect one’s hull, it needs to gain some regen. I propose a constant armor and hull recharge rate, that is layer_max/recharge_time, with an armor recharge time of 240s for s, 360s for m, 540s for L, 810s for XL ; and triple that for hull recharge time.
This is mere number. Remember that the base value for shield is divided by 2.5 and then again reduced by skills.
Assuming a layer takes ONE hit with ONE damage type every second, with resonance r, it remains stable if the damage taken by that layer is equals to the regen in one second. regen is then d× h / (d+h+other_layer_hp) × r .
Several small changes
Small ships go fast, medium go slower, large go very slow, then caps move instant ? WTF CCP ?
=> base warp speed is the same for all ships. A T1 frigate warps exactly as fast as a titan.
Let’s take 4 AU/s as a baseline (cruiser speed).
T2 and T3 ships get 5 AU/s
interceptors, T3 ships with WS sub, angel cartel ships get 6 AU/s
Just remove it. It means that when you go full WS you enter decelaration after 3s, then you are limited by the deceleration limit only and spend 10s decelerating on the last 6AU. It’s useless.
The moment you exit warp invul, you have a small delay before entering warp again. Delay increases with ship size ? The goal is to reduce usability, so need, of tactical bookmark.
When you exit structure or station, you automatically already face your target, in the order
Increase station dock range by 500 m
A ships accelerates to a max speed with an exponential formula, this matches a linear friction model with
with
It matches since at vm=v then both forces are equal value, and at v=0 dv/dt = F/M = Vm×10^6/iM according to Acceleration - EVE University Wiki (derivative at t=0)
Since this is a linear friction model, it means the trajectory can be split on the 3 dimensions. It’s not the case for quadratic friction models, so even if friction is usually quadratic at high speed it’s a simplification that allows for fast computation.
If your ship has a direction (a=angle x-y, b=angle x-z) given, a max speed vm, then the max speed on each axis is
for which you can then apply the formula given on the wiki. We can then talk about vx since that can be later applied to the other axis separately.
Note : this formula works for a and v0 having the same direction (=signum), otherwise you start in the past. So from this formula you can have the vx/vmx (which can be negative), which gives you the time elapsed since acceleration (can be negative if you are going in the wrong direction) with the wiki formula.
using this base time, we have the position on the axis x after time t , Px(t) = d(tx+t)
TODO
Basically change the orbit and keep at range to take target and own speed and acceleration into account. It’s very easy because eve drag is linear, so we can evaluate the function on each axis independently.
More distinct roles between ship sizes, and also tech roles
remove all weapon range bonus from non -T1 ships. Only T1 ships are designed to have projection.
Basically those ships become “swiss knife”, with increased damage, tank, over their smaller class but with reduced agility.
Multiply drone capacity by 10. Drones are ammo, they die it’s ok just throw more. Don’t increase bandwith though.
Also increase T1 drones speed by 10% and reduce HP by -25%
T1 are fast, T2 are hard-hitting but slower (but more hps), faction are expensive but elusive, tanky and T1-level DPS.
Then add an option to launch another drone when one dies. with same order, from same group. This option can be activated by group.
However, drones go out limited at 1 every 2 s for small, one very 5 for M, one very 10s for large and sentries.
What’s more, you can only have 5 drones disconnected in space at a time. You can choose if the excess drones become neutral or explode.
Give ALL ship a base ammo bay, also a fuel bay, a consumable bay, and a deployable bay.
Make “specific effect” use fuel : bastion, MJD, cloak use fuel. This means that ships need to operate close to their supply area when working for a long time. I suggest a target resplenish time of 1h. Logistic support ships (command destroyers, command ships and BOps) would have an increased capacity to accommodate resupplying the fleet for longer time
Add a “target amount” option for those bays, also for the drone bay. Those values are those present in a fit, so if I build a fit with eg 10 hobgoblins, then the target amount of hobs is 10 for the ship. And an “repair & autofill” button on stations and structures to automatically take from your own hangar into the ship.
Also make it possible to specify a container as “used to refil” so that refiling takes from that (or those) container before your hangar.
Consumable and deployable bay is important because it allows to specify in the fit and thus, at refil time, what you need to bring. Nothing worse than to realize you forgot to bring the filaments or the drugs or the bubble you just used.
When a ship is destroyed, only players that had a timer with the pilot are allowed to loot it. No more waiting with an alt in a DST. If you want to loot, you need to defend the loot until you can come back, or have your alt become suspect.
Of course this means removal of abandoning cans, except those that you dropped yourself.
This should also be applied to PVE. No more alt looting stuff : drop a MTU and come back in another ship.
This is not only for HS but anti-alpha.
Every second a ship took damage, this ship acquires 4 stacks of “drop ratio”, up to 100 (so after 25s of constant fire).
Every second a ship does not take damage, it loses 1 stack.
When a ship dies, the loot probability for each item is multiplied by the number of stacks and divided by 100. If you alpha a ship, then 0% loot. If you take 13s to kill it with one shot per second, then 50% of the loot.
This would affect PVE and PVP.
Each system has a wastage ratio. This wastage ratio is 0.5 + truesec/2 : in 1.0 the wastage is 100% : you don’t loot a fthing.
Could also use the present function of reward multiplier (1.63-truesec IIRC) as loot multiplier, but of course divided by the maxvalue (=2.63) . So in 1.0 this would be 0.63/2.63 = 23.9% and in -1.0 100%.
This is a huge one. First we need to affirm our model of mining, what is wrong, what needs to change.
Mining is an activity that allows players to “mine” asteroids to acquire resources they can then use to build, or sell other players. This is more akin to harvesting than mining.
This activity is aimed as being slow-paced one, with a large amount of resources to avoid competition. NPCs interactions are very limited, however nothing prevents player interactions. This means players can play together or against the others.
However since that activity is very simple, it is also easily botted, removing the tedious of the activity as well as the interactions with other players.
The goal of those changes is to make the activity less tedious and less bottable.
Instead of having BASE reduction with ME/TE, make it be a WASTAGE reduction :
Same for reprocessing :
CCP already tried to prevent bots from spamming order updates with relist fees. However, it had the opposite effect, as it made small-order spam and constant babysitting more effective - two traits that are found on bots.
The idea is to be sure players lose money when they cut an order by a small amount. The difficult part is to not make it prone to abuse, eg if a player spams a lot of small orders with varying prices then there is no room for competition.
Implementation : considering a 10% threshold, and only SO orders (almost same for BO but region-wide)
When a player places or update an order, he pays more isk than he would have not gained by cutting under the threshold.
example : there is a 1000 isk SO . I place a 999 isk SO. Then I have to pay the broker an additional fee of basically the difference to the threshold : since I cut very close, then the full difference , that is 10% of my order, will be added to the broker fee.
example 2 : there is a 100isk, 2 volume SO, as well as a 105isk, 2volume SO ; I place a SO of 5 volume at price 99.
This should avoid littering market with small orders, since the smaller your order and the closer to an existing one, the more (in %) your fees will be.
This is the same problem as above, but a different approach. Instead of adding a tax, we make the price of the order be changed depending on near other orders.
The main goal is that if you try to cut, then you may fail.
The goals are :
We start with a few definition.
Then, when an order a is created/updated , we find the actual price :
In termes of SQL, this should be something like
select
o.price,
pow( 1 - abs(o.price-price) / (price*ct/100), d) * o.volume_remain weight
from
orders o
where
o.type_id=type_id
and o.is_buy_order <> is_buy_order
and o.order_id <> order_id
order by weight desc
(with a sum over if you want the sum directly)
“order by weight desc” makes it less costly to find the new value if there is a change.
Here we assume a ct=10% threshold and d=1 dispersion.
I want to place/update an order of 10 trit at 3.99 isk while there is an existing order of 10 trit at 4.0 isk. In that case, I have a 50% chance to have my order replaced to 4.0 isk instead : the other order has a proximity of [ (0.399 -0.01)/0.399 ]^1 = 0.975 so a weight of 9.75, while my order has a weight of 10 => 49.37% chance to be changed
Same new/updated order but there also is another order of 10 trit at 4.05. This order has a weight of 10× [ (0.399 -0.06)/0.399 ]^1 = 8.45 . Total weight of all orders is 28.2 so my order has a chance of 10/28.2 = 35% to not be changed.
This model has two variables (base threshold and dispersion) that can be modified dynamically to prevent people (or bots) from adapting to the known variables, without the need to restart the server. Of course the delay between updates should also be random. Typically a 2-20 threshold range and 0.6-1.5 dispersion range seems good, with an update delay in minutes between 15 and 300(5h) . A 10h-period watchdog should be present to restart the job if it did not schedule itself correctly.
Also, the two variables should be updated in two different jobs (so with two different update times)
If this is not enough, we can add other variables to evolve. eg the self_weight sw multiplies the weight of the new order by this value. Range should be 1-1.5 .
Orders have a new “repeat_qtty” attributes. When the order is finished, then a new order is automatically created with the same attributes. For example I can create one SO of 5000 tritanium for 5isk, or one SO of 1000 tritanium and a repeat_quantity of 4000 .
In the later case, if someone purchases 900, the order has 100 remaining ; if the next purchase is of 500, only 100 are taken from the existing order, 400 next are taken from another order, and THEN a new order is created, qtty 1000/100, price 5 , broker fees are deduces, repeat_qtty is 3000 .
This allows to hide what you actually sell.