Armor Decay Testing Results - VU 9.1

If your armor protects 10, and the mob hits for 8, you take 1 point of damage, and the armor only absorbs 7, not 8.

Nope, it doesnt work like that. And it need some coding to change that. Is it realy important?
 
Nope, it doesnt work like that. And it need some coding to change that. Is it realy important?

Yes, ofc it is important ;)

I guess now you just look at the protection offered by the armor/plates compared to the mob damage, then calculate decay on the lesser, then for damage taken use Max (mob damage - armor protection - plate protection, 1).

I suppose it doesn't make a big difference on the higher damage hits, but at the low end where I live, it does :laugh:
 
lol, no rest for poor Witte. :whip:
 
Yes, ofc it is important ;)

I guess now you just look at the protection offered by the armor/plates compared to the mob damage, then calculate decay on the lesser, then for damage taken use Max (mob damage - armor protection - plate protection, 1).

I suppose it doesn't make a big difference on the higher damage hits, but at the low end where I live, it does :laugh:

You are correct about how it works ;) I have added these two lines of code:

if (totalabsorbedarmor > damage - 1) totalabsorbedarmor = damage - 1;
if (totalabsorbedplates > damage - 1) totalabsorbedplates = damage - 1;

You will have to test yourself if it works though ;)
 
Last edited:
You are correct about how it works ;) I have added these two lines of code:

if (totalabsorbedarmor > damage - 1) totalabsorbedarmor = damage - 1;
if (totalabsorbedplates > damage - 1) totalabsorbedplates = damage - 1;

You will have to test yourself if it works though ;)

Thanks a ton :) And you know how I love to test things out :)
Must spead rep

Tested pixie -v- exa using minimum damage, and that worked out.

EDIT: Tested Bodyguard L against Kerb, and it didnt come out right. It seems the damage absorbed was reduced by 1 even though all the hits were for more than the scant 1.5 points protection of the armor. Decay should be 0.072 for the 1.5 points, but is shown at 0.045 which is the min decay for that armor. Damage is shown correctly at 8.5 using the max damage setting, and 3.5 using the min damage setting.

Hmm, worked fine for ghost -v- aetherix, where the damage was greater than the protection. Trying ghost L next.

Hmm, for ghost L it put the min damage of .84 instead of the correct 1.246. It seems that for the L armors, it is grabbing the min decay amount when it shouldn't. After more testing, it looks like the min decay is being used for L armors all the time, no matter if the hit is max or min for the armor.
 
Last edited:
Hi all,

I’ve seen your formula on entropiawiki.com

For armors with durability below 10000 the formula is:
Decay = (0.003 x dmg^1.75 + 0.05 x dmg) x (1 - Durability/100000)

For armors with durability above 10000 the formula is:
Decay = [0.0015 x (3-Durability/10000) x dmg^1.75 + 0.05 x dmg]x (1 - Durability/100000)

First of all I doubt that there are 2 formulas for calculating the decay. Let’s try to think as an product manager at MA.

First of all you decide how much decay one damage point should be. I suggest 0,0625 PEC is a good value (This is 1/16, which is at least for a computer system a nice value). Secondly you give the people the chance to have damage points absorbed for free (without decay) – this is done by the durability. And the last thing you have to decide is the type of function for the decay. I guess you all have done a great job finding this function, which looks like “some kind of damage” + “some kind of damage”^1.75.

Let’s go a bit deeper. What does durability means? I suggest that durability will reduce the damage from the mob that has to be absorbed by the armor (before calculation the decay). In fact that could mean your armor will protect more than the max protection (but the test results look like the cut of the max protection is done before the durability is used in the calculation). For me the factor looks like (1-durability/75000), which means:

Damage still to absorb (dmg_r) = damage hit by the mob * (1 – durability/75000)

Now that we know how much damage we have to absorb (dmg_r) we can put this value into the calculation of decay.. As an assumption the damage is split 17,5% : 82,5% over both functions (linear, exponential). Note: dmg_r is the already reduced damage.

Decay =0,0625 * ((dmg_r * 17,5%)^1,75 + dmg_r * 82,5%)

I checked the formula with the values on the first page of this site. Nevertheless I’m uncertain about the 1/75000 value of the durability, because 1/100000 looks “better”, but the influence is to less with 1/100000. It might even be 75008 (which is 12500 hexadecimal). The nice or bad look depends on the mathematical system you are using.

Could anyone of the people having done a lot of research please have a look at this formula and let me know the points of mismatch. We might be able than to adjust the formula a bit better.

Thanks
Julian
 
First of all I doubt that there are 2 formulas for calculating the decay. Let’s try to think as an product manager at MA.

Marco has as good as told us there are two formulas (they can be joined into one non-smooth function) in his post earlier in this thread.

Given that Coop's formula works perfectly for all data points, apart from 3 that need to be rechecked, I'm not sure there's much need to start guessing new formulas until we're certain there's data points which don't fit the formula?

It is possible there's a more simple formula, with something like your dmg_r that we've effectively approximated somehow - but since durability/75000 is very small, the approximation is likely to be good enough. I've had a look at the formula but can't find any obvious simplification.

Your listed formula gives 0.904 for Ghost on 13 dmg. Our data point is 0.898 so its close (considering the numbers in your formula seem to be arbitrarily chosen?) but its producing errors. I've checked for a few other points too - its generally pretty close to the data points but not spot on...

I think Witte's first observation that got us thinking about modified damage and modified decay was largely similar to your comments about dmg_r. But we couldn't quite find a good fit using it so Coop played around with it and got to the formulas we have now.
 
Last edited:
I convey the following from the Dev Team:

1. The armor decay algorithm is a continuous (but not necessarily smooth) mathematical function of damage absorbed and durability.

2. The same function can be applied to both limited and unlimited armors.
--

Thanks for guiding me to the article. Marco stated that there is only 1 function for both type of armor and this function is continuous. This means it’s something like a polynomial function, a rational function, exponential function, logarithm, square root function, trigonometric functions or absolute value function, etc. He also stated that the function is not smooth, which means the function does not have to have derivates of all orders. In fact this could mean everything, but as we all know that Entropia likes waves (rather than linear things) it could mean that there is something like a sinus or cosinus function in the decay algortihm to make a bit jumping up and down. It would not surprise me. ;)

And I might give an explanation of the points which are a bit "out of line".

Julian
 
Thanks for guiding me to the article. Marco stated that there is only 1 function for both type of armor and this function is continuous. This means it’s something like a polynomial function, a rational function, exponential function, logarithm, square root function, trigonometric functions or absolute value function, etc. He also stated that the function is not smooth, which means the function does not have to have derivates of all orders. In fact this could mean everything, but as we all know that Entropia likes waves (rather than linear things) it could mean that there is something like a sinus or cosinus function in the decay algortihm to make a bit jumping up and down. It would not surprise me. ;)

And I might give an explanation of the points which are a bit "out of line".

Julian

I don't disagree with that. But he clearly makes a point of the fact that the function is not smooth. If it were smooth he probably just wouldn't have said anything about its smoothness at all. So from his point we deduced the function is probably not going to be smooth (which we now know for a fact due to the truncation issue - all armor decay is truncated up to a round 0.001 pecs).

I honestly don't see a problem with the fact there's two formulas for different durability regions. It is quite plausible. Prior to this VU all armors were under 6000 durability, and presumably obeyed one formula. Then this VU, the L armors received a sudden 10000 durability push. Perhaps MA looked at the results and decided they wanted the L armors to decay a little less for high hits so added another term.

I accept we may not have the exact formulae MA use. But I don't see much need to search for a new formula, when the current formulae we have predict the experimental results exactly, with the exception of 3 data points for which there are reasons that lead us to believe they may have been spurious in the first place (they were tested on mobs that do different damage types than originally thought). If those data points are retested and found not to fit with the formula or if other data points are found that don't fit with the formula, then sure we need to rethink a bit.

Right...gonna go try and find me a piece of serum/sema :D

EDIT: testing Serum now
 
Last edited:
First test: Two against hits of Serum (L) against Nexnecis Alpha (Cut and Stab for 30 dmg absorbed). Decay=4.166. Decay per hit = 2.083.

Formula predicts 2.0837283 which truncates to 2.083. ie. Formula works for Serum L, 30. Previous data point was incorrect.

Now testing on big Sumima for the 25 point.
 
Thanks a ton :) And you know how I love to test things out :)
Must spead rep

Tested pixie -v- exa using minimum damage, and that worked out.

EDIT: Tested Bodyguard L against Kerb, and it didnt come out right. It seems the damage absorbed was reduced by 1 even though all the hits were for more than the scant 1.5 points protection of the armor. Decay should be 0.072 for the 1.5 points, but is shown at 0.045 which is the min decay for that armor. Damage is shown correctly at 8.5 using the max damage setting, and 3.5 using the min damage setting.

Hmm, worked fine for ghost -v- aetherix, where the damage was greater than the protection. Trying ghost L next.

Hmm, for ghost L it put the min damage of .84 instead of the correct 1.246. It seems that for the L armors, it is grabbing the min decay amount when it shouldn't. After more testing, it looks like the min decay is being used for L armors all the time, no matter if the hit is max or min for the armor.


Ah yeh made a stupid error, fixed now. Tnx for testing :)
 
Test 2: Serum L vs Sumima Guardian (Impact, Burn, Electric - Serum protects 25)

Decay: 1.651pec

Formula: 1.6519055 which truncates to 1.651.

Formula works, what's all the fuss?
 
Test 2: Serum L vs Sumima Guardian (Impact, Burn, Electric - Serum protects 25)

Decay: 1.651pec

Formula: 1.6519055 which truncates to 1.651.

Formula works, what's all the fuss?

:yay:

Thanks for testing those out. I'll sleep a bit better now ;)
 
No problem :)

I tested two L armors, Rascal L and Aurora L, using the auction method, and they came out exactly the same as the sweat method. Have others measured decay happening below the millipec level, on say weapons or faps or tools?

I checked this. The auction can appear to give more accuracy if you're not careful but it is just due to rounding errors arising from the fact the markup is always given to two decimal places.

A simple test is to put a piece in that has tt less than 10. I did it with a few near-broken Zombie pieces. One piece had a tt of 7.46. When I put it into auction with a start bid of 7460980 the markup read as 100000000.00%, implying it has a tt value of 746.0980 pec. All the other pieces I tried with tt less than 10 turned out similarly (with the final digit in the start bid always being 0 to get a markup of 100000000.00%). This would seem to strongly suggest 0.001 pec is indeed the smallest measurement of anything in EU.
 
... He also stated that the function is not smooth, which means the function does not have to have derivates of all orders. ..

I guess not smooth means that there are parameters that get acivated with unlimited armoras, i.e. a*(1-UnLimited) where Unlimited = 0 or 1 with 0 = Limited and 1 = unlimited.
 
First test: Two against hits of Serum (L) against Nexnecis Alpha (Cut and Stab for 30 dmg absorbed). Decay=4.166. Decay per hit = 2.083.

Formula predicts 2.0837283 which truncates to 2.083. ie. Formula works for Serum L, 30. Previous data point was incorrect.

Now testing on big Sumima for the 25 point.

Ok for me this is the last confirmation this is the same formula as MA uses. Case closed.

Looking foreward to MA changing it again :laugh: Well done to everyone that participated in this, hmmm, lets call it event ;)
 
I guess not smooth means that there are parameters that get acivated with unlimited armoras, i.e. a*(1-UnLimited) where Unlimited = 0 or 1 with 0 = Limited and 1 = unlimited.

I used int(durability/10000) to perform the same function, 1 for durabilities 10000 and above, 0 for below 10000. Based on what Marco said, I think it's the durability rather than L/UL that makes the differece. Theoretically they could create a UL armor with over 10000 durability. Ofc if they make an armor with 20000 or more, this form of the formula probably wouldn't work right.
 
Ok for me this is the last confirmation this is the same formula as MA uses. Case closed.

Looking foreward to MA changing it again :laugh: Well done to everyone that participated in this, hmmm, lets call it event ;)

Yeah, I think its pretty conclusive. Every data point we have matches the formula perfectly (given the fact that everything smaller than 0.001 is truncated in EU by the looks of things), apart from the Sema one that needs retesting.

To be honest even as it was, I'd have fallen off my chair had the Serum ones not come out as expected.

Now, someone go buy my Serum! You can find it easy, its the one that's at max tt - 5.817 pec :D
 
Ok for me this is the last confirmation this is the same formula as MA uses. Case closed.

Looking foreward to MA changing it again :laugh: Well done to everyone that participated in this, hmmm, lets call it event ;)

I see it the same. The model works perfectly and I guess I have an explanation for the term (3-dura/10000).

It's similar to a multiple discount (in Italian sconto secondario, in German Kettenrabatt), e.g. discount it first by 10% then by 5% would lead to (1-.1)*(1-.05).
If you write (3-dura/10000) as 3*(1-dura/30000) you have it in the same form.

So I might understand the actual formula as

Dura discounts decay and there is a further discount applied in 2nd order term when using an armor with dura > 10000.
 
I guess not smooth means that there are parameters that get acivated with unlimited armoras, i.e. a*(1-UnLimited) where Unlimited = 0 or 1 with 0 = Limited and 1 = unlimited.

This would have no influence of the question is a funtion smooth or not. As long as you have one funtion only. I guess as we talking about mathematics here, it should be the definition of a smooth function (or in this case of a not smooth function). As Marco already stated that there was no change of the durability calculation in last VU and as we know that the decay of the limited and unlimted armor was the same before VU the funtion cannot be based on the type of armour.

Julian
 
This would have no influence of the question is a funtion smooth or not. As long as you have one funtion only. I guess as we talking about mathematics here, it should be the definition of a smooth function (or in this case of a not smooth function). As Marco already stated that there was no change of the durability calculation in last VU and as we know that the decay of the limited and unlimted armor was the same before VU the funtion cannot be based on the type of armour.

Julian

The function isn't based on whether or not its unlimited. Its based on whether or not the durability is >10000 (which happens to be the same thing at the current time). The two formulae we have coincide at durability=10000. The function obeys the one formula if durability is less than or equal to 10000, it obeys the other formula is durability if more than or equal to 10000. The resulting function is continuous (ignoring EU truncation) but not smooth (at durability=10000).

So the function fits the description given by Marco.

The point about the Durability calculation not having changed needs to be taken in context. He was saying that the durability calculation for armors with durability less than 10000 has not changed. His reason for saying that was that it was previously thought that durability had no effect on armor decay. The point he was making was that we were mistaken about this before rather than it had changed this VU.

Since the were no armors with durability over 10000 previously, there was no formula for decay for armors with durability over 10000 previously. Hence there was nothing to change, rather it had to be created.

The function works precisely for all of our hundred or so data points. Until someone finds a confirmed data point for which the function does not work, there is no other function that can be better than this function - any other function can only be equally good. I'm happy with having just the one perfect function myself...
 
The function works precisely for all of our hundred or so data points. Until someone finds a confirmed data point for which the function does not work, there is no other function that can be better than this function - any other function can only be equally good. I'm happy with having just the one perfect function myself...


That's right ;) But as we take this function and calulate all other values for all other armour with that function there is a risk that at least some of the values are totally incorrect. Nevertheless it's currently impossible to find a better function with the same amount of data points and be sure that the new function is really better. The new one could even be worse.

I still believe there is a better one as I've seen that durability as a non linear impact on the damage. But let's see ;)
 
That's right ;) But as we take this function and calulate all other values for all other armour with that function there is a risk that at least some of the values are totally incorrect. Nevertheless it's currently impossible to find a better function with the same amount of data points and be sure that the new function is really better. The new one could even be worse.

I still believe there is a better one as I've seen that durability as a non linear impact on the damage. But let's see ;)

In the current formula, durability (even below 10K) could be seen to have a non-linear impact on damage. Since damage is translated to decay by a higher order function, then decay is reduced by a linear %age based on durability, the more the damage, the more impact durability has.

For >10K dura, the non linear impact on damage is even more severe, since the over-10K factor is multiplied by the higher order term, and not the linear term.

It would be hard to understate the value of the exactness to which the current formula predicts results. It may be that there is another workable form of the equation, but it would have to be something that could be derived from the current one.
 
I honestly think this is the correct formula. Getting a neat formula that fits so many points perfectly is remarkably unlikely. Added to that all the new points I've found as a result of other testing (since the formula was found) have all obeyed the formula.
 
I understand that we are already in the field of believing or not. In my opinion the developers at MA try to optimize their system as much as possible. Take the price of an Electropositive Modulator as an example. It’s 2,08 PEC which looks a bit strange. Nevertheless 208 (decimal notation) is equal to 0xD0 in hexadecimal notation, which is a perfect value to do some shifting operation on a computer system. And there are a lot of such “strange” numbers. So I doubt that they use such a complex function (time expensive to calculate) to calculate something that’s happens all the time at every hit of a mob. I guess it will be optimized to use shifting operations and integer arithmetic as much as possible. Of course some of the complicated parts could be done in a lookup table. So I believe that’s not the correct function but it’s the best know yet. And it’s a great work!!!


In the current formula, durability (even below 10K) could be seen to have a non-linear impact on damage. Since damage is translated to decay by a higher order function, then decay is reduced by a linear %age based on durability, the more the damage, the more impact durability has.

Somehow. ;) I believe to find the right function it’s easier to split the calculation into to separate parts. Part 1 the impact of durability to the damage and part 2 the impact of the so calculated damage to the decay. If we know 2 different types of armor which produces the same decay but with different damage hits (currently I didn't found such values), we can calculate the impact of durability on the damage. As the decay is the same for both the input for the second part of the function has to be the same. So with some values of that kind we are able to find the relation between durability and “real” damage done to the armor. After that it’s much easier to find the second part of the function as we have a lot of values from different armors and damage points already.
 
Last edited:
I understand that we are already in the field of believing or not. In my opinion the developers at MA try to optimize their system as much as possible. Take the price of an Electropositive Modulator as an example. It’s 2,08 PEC which looks a bit strange. Nevertheless 208 (decimal notation) is equal to 0xD0 in hexadecimal notation, which is a perfect value to do some shifting operation on a computer system. And there are a lot of such “strange” numbers. So I doubt that they use such a complex function (time expensive to calculate) to calculate something that’s happens all the time at every hit of a mob. I guess it will be optimized to use shifting operations and integer arithmetic as much as possible. Of course some of the complicated parts could be done in a lookup table. So I believe that’s not the correct function but it’s the best know yet. And it’s a great work!!!

That's a good point about computing time. However, the decay reduction multipliers could be coded into the armor itself, since they don't change for a given armor. So each armor would have two multipliers attached to them, A=(3-durability/10000) for durabilities over 10K or A=2 for durabilities under 10K; and B=(1-durability/100000).

Then the decay formula becomes a simple Decay=(0.0015*A* dmg^1.75 + 0.05*dmg)*B
 
I understand that we are already in the field of believing or not. In my opinion the developers at MA try to optimize their system as much as possible. Take the price of an Electropositive Modulator as an example. It’s 2,08 PEC which looks a bit strange. Nevertheless 208 (decimal notation) is equal to 0xD0 in hexadecimal notation, which is a perfect value to do some shifting operation on a computer system. And there are a lot of such “strange” numbers. So I doubt that they use such a complex function (time expensive to calculate) to calculate something that’s happens all the time at every hit of a mob. I guess it will be optimized to use shifting operations and integer arithmetic as much as possible. Of course some of the complicated parts could be done in a lookup table.

Well, to be honest once you put in the fact that dmg absorbed can be any number from 0.1 to 150.0, and then you have to raise that to the power of 1.75, I think the remaining work from the constants is pretty small in comparison. wrt to the (1-durability/100000) and the (3-durability/10000) these wouldn't have to be recalculated each time as they could be stored.

So I believe that’s not the correct function but it’s the best know yet.

Perhaps. But like I said earlier - until we find a data point for which the formula doesn't reproduce the exact decay, there can be no better function.

We have no idea how MA have coded the system. All we can work with is the data, and we have a function that not only works perfectly for all the data but so far works perfectly for every new data that has been acquired since. Until that changes there's no need to find any other function.

MA could have coded the system in any sort of manner. There's no way we can logically deduce the form of the function by trying to think how we would have coded it, since we don't know how they coded it.
 
Last edited:
That's a good point about computing time. However, the decay reduction multipliers could be coded into the armor itself, since they don't change for a given armor. So each armor would have two multipliers attached to them, A=(3-durability/10000) for durabilities over 10K or A=2 for durabilities under 10K; and B=(1-durability/100000).

Then the decay formula becomes a simple Decay=(0.0015*A* dmg^1.75 + 0.05*dmg)*B

I doubt they even do this - computing A*dmg^1.75 + B*dmg each time a mob hits your armour is expensive in computing time, when you consider that so many players are having armour hit every second.

The multiply will be fast - it's the ^1.75 that's nasty. A smart developer would not want this to be repeated thousands of times a second for a minor aspect of the system's operation. I know we criticise MA's developers sometimes, but I think they know their job well enough to realise this would be stupid.

The problem is that damage absorbed is not always an int, since it's limited to the max of the armour, and that reduces as armour decays. So unless this max protection drops in linear steps as the armour decay occurs, you could have any value for absorbed damage.

This absorbed damage has to be computed for each hit from a mob since it's needed to determine your health reduction.

So there are 4 options:
- they use an approximation (ie a series expansion) for the ^1.75
- the damage in this formula is limited to integer or tenths of integer values (or some other set) and they use an armour specific lookup table
- the damage is always the full damage which the armour would protect and decayed armour reduces the decay some other way like a linear factor in the formula (unlikely) and again they use an armour-specific lookup table
- they have an armour decay server dedicated to working this stuff out

One good test to do would be to see what the decay is from hits when the armour is decayed to 85% say. Do you get the expected decay from the reduced damage protected.

Is there an easy to compute series expansion for ^1.75 which is adequately accurate with just 2 or 3 terms?
 
- the damage in this formula is limited to integer or tenths of integer values (or some other set) and they use an armour specific lookup table

Damage received is displayed in tenths of integer values, so its quite possible the system doesn't work with anymore detail than that (it certainly does work with at least that much detail).

That would mean a lookup table would have about 2000 entries (don't know if that's good or bad speed-wise) for the very uber armors.
 
Calculation time isnt realy an issue. The computation power of nowadays computers are massive. Plus we know each area has its own server, so the number of calculations for each server isnt big.

To illustrate this, try: Entropedia: Creature Maturity Levels

There are ~900 maturities. When you add an armor, for each maturity the fumula is calculated 10 times (to calculate avarage). You can add 10 armor without noticable slowdown. That means 900*10*10=90000 hits are calculated within a second. And thats on a shared webserver that isnt optimized at all to do this kinda tasks. I dont think the overall hits/second in entire EU doesnt even come close to 90000 TBH.
 
Back
Top