PDA

View Full Version : Improving the Absroption Formula


Bluddy
02-22-2011, 05:10 AM
In this thread, I'll try to come up with ways to improve the current formula. I believe the problems we're now discovering with the formula are the reason for people experiencing imbalance at higher levels.

For an absorption formula, we want the following things:
- Different armors should absorb roughly set proportions. Off the top of my head, cloth armor should absorb around 10-20%, leather 30-40%, mail 50% and plate 60-70%.
- There should be a cutoff (as there is now) at some percentage so that 100% is impossible. That would make for a boring game and impossible monsters.
- Diminishing returns is probably desirable so that we don't just bump into the cutoff. However, we also need stronger effects at higher levels to counter increasing damage by the monsters. (It's possible that something like a cubic formula, which starts slowly, then gets sharper, and then tapers off, would be better.)
- We want to feel the difference between armors and minimize the feel of diminishing returns.

Meet the current formula:
Absorb % = armor / (armor + (attacker level * 25) + 50)

This function shows that the absorption percentage depends on both the attacker level and your current armor. If you stay at the same armor level while the attacker level goes up, your % absorption will go down and you'll get hurt :)

But if we substitute values for attacker level = 1 into the function, we'll see that it simplifies to the following function:

y = x / (x + 75) where y = % absorption and x = armor.

This function behaves quite nicely, since it tapers off to 1.0 (100%). This is convenient since 100% is our maximum absorption (though the game limits absorption to 75%). It also rises pretty slowly, which equates to diminishing returns. You can see what it looks like in the picture (current_func.jpg).

Notice that the function has a faster, almost linear pace up to around 75 (trust me, that's more or less where it's at). After that, it slows down significantly. This is a source of problems for us, because it means that people at the high end of the curve (high armor) will experience very slow growth.

Notice what happens if we now substitute into the function level 50 rather than level 1: the simplified function now becomes
y = x / (x + 1300) which looks like current_func_50.jpg. The previous function at level 1 is also pictured there for comparison.

Remember that y is % absorption, x is armor. Notice that the function is now flatter as it covers the greater distance all the way to 1300, even in the earlier, fast rising part. Basically, at level 50, armor levels (aka x) are higher (in the thousands), the function needs to accept these higher armor levels without jumping to 100% armor (as it would have in the level 1 function). This is the reason for the higher constant. Another reason is that the old armor needs to become less effective -- remember that if you stay with level 1 armor (x) at level 50, you'll get hammered. Using the level 50 function, armor of 200, which would have given you 72% absorption in level 1, will now give you a measly 13%.

You may not be able to tell from the picture, but once again, after x=armor=1000, we get a very slow increase ie. diminishing returns. Once again, this is really frustrating for high level, high armor characters. Any point investment they make has very little effect, and plate armor seems to be of little use as well. Plate armor will try to raise the armor level by a certain amount, but because we're in the diminishing returns region, it'll have minimal effect and not really be worth it.

What can be done to improve this situation? We can treat the function in several ways. One option is to reduce the amount that our constant has to grow between levels. The constant has to be able to handle the highest armor possible at each level. But the more it grows, the flatter it makes our function. The flatter the function, the less impact moving along it has. What we can do is to shift the function to the right mathematically. If we change the formula to be

Absorb % = (armor - (1 * level)) / (armor - (1 * level) + level * 25 + 50)

we can shift the function to the right by the amount specified as 1 * level here. Every increasing level shifts the function a little to the right. This makes sense: A function shifted to the right will produce no values (0) or negative values at lower armor (x) levels. At the higher levels, the shift increases, and this corresponds with the fact that at those high levels, your armor is pretty much worthless anyway. This gives us the ability to reduce the constant of the function, reducing the flattening effect. At level 50, our new function would simplify to
Y = (X - 50) / ((X - 50) + 1050)
this approach only makes a small difference that's barely visible, so I won't provide a picture.

Another option is to utilize what we noticed about this function: it's much more linear in the lower part, and tapers off after passing the value of its constant. What does this mean? If we adjust the function so that the constant at each level (for the simplified function) will be about equal to the highest possible armor we can get at that level, we'll essentially only be using the linear, fast growing part of the function. The problem will then be that even at our maximum, the % values will be rather low since we aren't using the WHOLE function; we're just using a part of it. To fix this, we multiply the function by another constant, for example 1.5. The result will look like

Absorb % = ( armor / (armor + (attacker level * 25) + 50) ) * 1.5

We would play with the constants to make sure we cover the realistic armor values. Sure, we'll have some percentages greater than 100% when we pass the maximum armor values, but since we limit our maximum percentage, that's not a problem (anything over 90% is equivalent to 90%, for example). This option produces quite a strong effect (see mult50.jpg).

If you want to play with these constants, you can use my excel sheet at http://www.mediafire.com/?aavhm44ml01ao6m (it's too big for the forum). There's a sheet for the old formula and one for the one I'm trying out. The constants are all at the top, and they correspond to a full equation that includes both solution 1 and 2 which I mentioned above. Going from left to right, the constants are D1, E1, F1 and G1 (named for their cells). They correspond to:

Absorb % = (armor - (D1 * level)) / (armor - (D1 * level) + level * E1 + F1) * G1

There are other options as well. Who's to say that % blocked should depend on the attacker level? If we can state that 2000, for example, is around the maximum armor, then we could use a linear or non-linear function to turn any number out of 2000 into a percentage. This actually makes a lot of sense: characters will slowly be working up their armor percentage until the end game when their armor will be strongest. Absorb percentage would never go down just because you're fighting a higher level monster. Monster hits already get stronger with levels, and high level armors have minimum level requirements, so it really does seem like a good idea. Also, armor points seem to increase non-linearly with levels already: relatively speaking, plate armor gets gradually stronger than cloth armor at the next level -- they don't maintain the same ratios. I really think this is an idea worth seriously considering.

Other options yet would be to switch to a linear function or some other function, while keeping the current variables intact.

The most helpful thing you guys can do to help come up with good adjustments to the formula is experience from characters: what's typical cloth/leather/mail/plate armor for each level? What's the maximum at each level? The minimum? Uploading your characters to the Character Repository thread would really help with that.

Bluddy
02-22-2011, 07:20 AM
I played around some more, trying a linear function instead of a non-linear one, and it seems pretty good. Updated my excel spreadsheet at http://www.mediafire.com/?nnas66mec6bi95c with the 'Linear' sheet.

The advantage of linearity is that you never get a feeling that you're not rewarded -- every advance carries you forward by a couple of percentage points at least. In general, the rewards in DC seem better suited for a linear function since they, for example, include non-linearity already in the armor values. I think this might be the best direction to go in.

The function is something like
Absorb % = ( (armor - (attacker level * 0.8)) / ( 60 + attacker level * 40) ) * 0.9

The constants in the excel sheet correspond to (based on their cells):
Absorb % = ( (armor - (attacker level * D1)) / ( E1 + attacker level * F1) ) * G1

The important thing is, once again, knowing the min and max values at each level. It's not terrible if they're exceeded -- the result would just be clamped to the maximum (0.9 in this case). Negative values should become 0.

Maledictus
02-22-2011, 10:56 AM
Some impressions:

First, I'm trying to understand what you're saying:

Absorb % = armor / (armor + level * 25 + 50)
Really, this function is just
y = x / (x + 75)
In my view, the current formula expresses a direct relation between level and armor value; let armor value lag as you level up and you'll suffer. The second formula doesn't show that. Could you elaborate? Also, level here is player character level, correct?

Notice what happens around level 50: the function becomes
y = x / (x + 1300)
Using this formula to calculate absorption doesn't click with me. What is the basis for the armor value here (which I assume to be x in this formula) ?

Also, does this imply that absorption is absolute, in the sense that if it is 25% for a character, that 25% is applied to monsters above and below the character's current level? If so, that sounds wrong to me.

Forgive me if I ask stupid questions here, but reading your post without full context (i.e. not being the developer of the game) is tricky at best, I'm first of all trying to understand the situation.

Bluddy
02-22-2011, 11:11 AM
Some impressions:

First, I'm trying to understand what you're saying:

In my view, the current formula expresses a direct relation between level and armor value; let armor value lag as you level up and you'll suffer. The second formula doesn't show that. Could you elaborate? Also, level here is player character level, correct?

Yes, sorry. I tried to generalize. What I wanted to show is that the function is simply the mathematical function y = x/(x+C) where C is a constant . What I wanted to study was the behavior of that function.

It's true that there's a relationship between attacker level and armor value. But decomposing it into parts, the role of the level is just to add to that constant (C). As the level goes up, the constant gets bigger and bigger, changing the shape of the function.

The practical result of that is that staying at a certain x (aka armor level) while the level goes up, will cause the % absorption to go down.

Using this formula to calculate absorption doesn't click with me. What is the basis for the armor value here (which I assume to be x in this formula) ?

I hope it's a little clearer. Looking at the function itself, I noticed that it's problematic at areas of higher armor (high x) and high levels (high constant). That's what I'm trying to address.

Also, does this imply that absorption is absolute, in the sense that if it is 25% for a character, that 25% is applied to monsters above and below the character's current level? If so, that sounds wrong to me.

No, it goes by attacker's level, not the defender's level.

Forgive me if I ask stupid questions here, but reading your post without full context (i.e. not being the developer of the game) is tricky at best, I'm first of all trying to understand the situation.

No problem. I tried to get through a lot of stuff and probably didn't explain myself well enough. I'm glad you asked.

EDIT: I edited the first 2 posts trying to make them more reader friendly. Hope that helps somewhat.

Maledictus
02-22-2011, 12:11 PM
Ah, yes. I now get the current situation/problem and your interpretation of it. Now studying the rest...

Edit: Some thoughts... Please comment and point out the flaws in my thinking, should there be any.

Currently absorption can never reach a value as high as 90%. What you're suggesting is essentially a formula that allows absorption to (potentially) get to 90% (max) when a char reaches level 100. That in itself is a rather linear approach for this problem. Turn this around: if I absorb 90% of the damage, I'm virtually immortal. That removes the threat of running into level 100 monsters. I assume this formula is only for melee damage, so the threat would then come from elemental and/or magic damage, which might then require tweaking of it's own if the balance is shifted with regard to melee damage.

Maximum armor values for a given level can never be ascertained, given the random nature of the game. I assume that's (at least partly) the reason the absorption formula is shaped the way it is.

If we can state that 2000, for example, is around the maximum armor, then we could use a linear or non-linear function to turn any number out of 2000 into a percentage. This actually makes a lot of sense: characters will slowly be working up their armor percentage until the end game when their armor will be strongest. Absorb percentage would never go down just because you're fighting a higher level monster.

I disagree:
- a max armor value for a character can not be stated.
- this setup would diminish the relation between the attacker and defender in terms of their respective levels. This can be seen as personal taste though; I don't think a potentially linear progression of absorption towards 90% is a good thing.

When looking at this, should we not also look at the damage formulas for the attackers? Perhaps answers and insights lie there, and at the very least it's connected.

I do understand however that the current setup makes high-level armor values lose too much power (the diminished return issue is perhaps too effective for high level characters). A tweak for that might be beneficial, but 90% absorption should never be reached.
In short, as fas ar the numbers go I don't have a problem with the current setup. I have yet to experience the problem though; my highest level sofar is 27 so perhaps I'm not qualified to speak. And I might change my tune when I get to 90...

I'll study this some more, I'll update if things come to mind.

alstein
02-22-2011, 02:09 PM
Changes

a) Make the cap 90% not 75%.
b) Armor values need to increase more heavily with increased lvl requirements for cloth/leather, and much more heavily with str reqs for chain/plate. Maybe exponentially so.
c) +% armor bonus skills need to increase, and the plate armor skill should give a massive +% armor with each level. Right now it's a skill you take 1 level in and that's it. Either that or give those chars plate at creation.

Resistance formula needs to be tweaked as well, because right now even with a demonologist or warden and lots of spirit, I'm only getting 10-15% reduction on elemental damage.

This is a large reason why the game isn't fun past lvl 20. It's real fun until then, but once you get past a certain point, the game breaks down and is less fun. Many skills/spells become unviable, and the only way to play the game effectively for your combo is very obvious.

Bluddy
02-22-2011, 02:31 PM
Currently absorption can never reach a value as high as 90%. What you're suggesting is essentially a formula that allows absorption to (potentially) get to 90% (max) when a char reaches level 100. That in itself is a rather linear approach for this problem. Turn this around: if I absorb 90% of the damage, I'm virtually immortal. That removes the threat of running into level 100 monsters. I assume this formula is only for melee damage, so the threat would then come from elemental and/or magic damage, which might then require tweaking of it's own if the balance is shifted with regard to melee damage.

Actually, the maximum limit for absorption is arbitrary. Currently, 75% is the maximum absorption in the game. In reality though, it seems like it's much less because of the diminishing returns effect of the function. Better and better armor (plate etc) at those levels has almost no effect. I personally think a character with plate armor + armor skills + armor rings should be able to approach 90%, but that's just my personal preference. It's not really a part of my suggestion.

While it sounds like all that's needed is a slight tweak of the numbers (ie. not the solutions I suggested), I don't think that's good enough. The function is built to cause diminishing returns at high levels. Without modifying the actual build of the function in some way (or switching to linear functions), I think this problem will stay. Also, this problem also exists in the resistance function (which I haven't examined properly yet) where the game often rewards 10 points of resistance which quickly become almost meaningless at higher levels.

Another important point is that whatever the maximum is set at, it doesn't mean many characters will reach it. It can be set higher than any normal character can reach.

Maximum armor values for a given level can never be ascertained, given the random nature of the game. I assume that's (at least partly) the reason the absorption formula is shaped the way it is.

Even though the armor values are random, they cluster around certain values (by design). The mix of all armor pieces together tends to produce certain maximum values. The current function as it is also assumes certain maximum values -- they're just not precisely tuned. That's why for level 1 the constant is just 75 -- it basically assumes you won't get values too far above 200-300 for level 1. Each level has its spread of possible values. I'm just trying to get enough of a sampling of values to tune the function, mostly because I'm not so good at interpreting Shadow's armor balance factors :(

It's not a big deal if the maximum armor value is passed - the maximum percentage value will then be used. This isn't very different from what happens in the current function -- when you pass the maximum assumptions of the function for that level, you'll get for example 57.1% instead of 57.0%, with increments getting smaller and smaller, essentially blocking you at 57%. You're essentially getting blocked in the same way.

- this setup would diminish the relation between the attacker and defender in terms of their respective levels. This can be seen as personal taste though; I don't think a potentially linear progression of absorption towards 90% is a good thing.

After playing around with it, I found that a pure linear function without the attacker level isn't really great. I do think that a linear approach like my 2nd post above would probably be best though.

When looking at this, should we not also look at the damage formulas for the attackers? Perhaps answers and insights lie there, and at the very least it's connected.

Damage formulas for the attackers are quite easy to predict -- they seem to be generated in a fairly simple way. However, because we're dealing with percentages here, it doesn't really matter. We want percentage absorbed to behave a certain way for different armor types, and to keep working as characters go up in levels.

In short, as fas ar the numbers go I don't have a problem with the current setup. I have yet to experience the problem though; my highest level sofar is 27 so perhaps I'm not qualified to speak. And I might change my tune when I get to 90...

Right. I also haven't experienced this. I just saw people complaining, and after testing the function (do check out my excel sheet!), found what I think is the source of the problem. What's more, a low armor (cloth/leather) character, which is what many people here, including myself, usually play with, won't feel this issue even at high levels.

Bluddy
02-22-2011, 02:37 PM
a) Make the cap 90% not 75%.

That's my preference as well.

b) Armor values need to increase more heavily with increased lvl requirements for cloth/leather, and much more heavily with str reqs for chain/plate. Maybe exponentially so.

Might be necessary, but I think once the absorption function is fixed, the higher values of plate/chain might already make a big difference.

c) +% armor bonus skills need to increase, and the plate armor skill should give a massive +% armor with each level. Right now it's a skill you take 1 level in and that's it. Either that or give those chars plate at creation.[QUOTE]

How much extra does each skill level give you?

[QUOTE]Resistance formula needs to be tweaked as well, because right now even with a demonologist or warden and lots of spirit, I'm only getting 10-15% reduction on elemental damage.

Yeah I think that should probably be linear as well. And since the maximum for resistances is pretty low (I think), it might be best to have just one linear scale for resistance, w/o accounting for attacker level. I have to look into it though.

Crisses
02-22-2011, 02:41 PM
If cloth only absorb 10-20% mages may never be endgame-viable. With great armor for my level, I'm being killed constantly with a fire Mage. I can't kill stuff at my level before it closes in on me and if it gets into melee range I have big problems staying alive. No potions, pure character stats apps level 24or so, and same level opponents. Help me, Teleport, you're my only hope!

And the ceiling caving in on me doesn't help much :)

Bluddy
02-22-2011, 02:45 PM
If cloth only absorb 10-20% mages may never be endgame-viable. With great armor for my level, I'm being killed constantly with a fire Mage. I can't kill stuff at my level before it closes in on me and if it gets into melee range I have big problems staying alive. No potions, pure character stats apps level 24or so, and same level opponents. Help me, Teleport, you're my only hope!

And the ceiling caving in on me doesn't help much :)

:) I'm pretty sure the current formula only allows mages to reach 10-25% absorption at most. I think mages are expected to use teleport, shield spells and potions, and to die a lot.

Bluddy
02-22-2011, 02:50 PM
I think it may be important to state that my suggestions don't change the current formula that much. Even my favorite option right now, which is the linear formula (post #2), keeps most of the values just about the same, especially around the lower levels/armor values. It's higher levels/armor values which are affected.

Speaking of which, does anyone have a plate/mail wielding character to donate? I really would like to get some samples with high armor values.

Crisses
02-22-2011, 03:47 PM
:) I'm pretty sure the current formula only allows mages to reach 10-25% absorption at most. I think mages are expected to use teleport, shield spells and potions, and to die a lot.

Actually, it would be nice if Cloth (and maybe Leather) armor -- especially body armor -- got a bonus that no other type of armor gets. For example, how about up to an extra 2 enchantments? Or stronger enchantments.

The D&D reasoning for mages "not being able" to wear metal armor is that it somehow blocked or reflected the magic of the environment that the mages needed to gather to power their spells. After D&D made this choice, all role playing games since have basically followed suit. Utter fabricated nonsense, but if we go with that reasoning, metal armor types wouldn't be able to have as many enchantments -- some bonuses could reflect superior craftsmanship, species workmanship, etc. but you would find less actual enchantments on metal armor/objects. Ok, we're not going there sooooooo----

What if mages, instead of avoiding metal armor because it somehow blocked their magic (it doesn't seem to in Din's Curse) preferred cloth armor because of it's special powers or bonuses. The mage schools do not encourage or train metal armor use BECAUSE it's worthless in some way compared to using cloth armor. i.e. what if Gandalf or Merlin wore robes BECAUSE they were robes, not because they were the last resort resembling armor that they had to settle for. Is that silver thread in the lining? Is that a symbol stitched on the inside of the sleeve? Was that hood woven with unicorn hair? How much EXTRA enchantment could you give to such an item? What is a perk that cloth armor could have that would make even a hybrid say "Hrm, maybe I should wear that quilted vest."

Another thought is more set armors for cloth (and leather) than for mail & plate. i.e. incentives to collect and use cloth, and possibly leather.

Right now there's basically only 1 reason to have a pure mage. The ability to specialize in fire or ice AND be able to teleport at the same time. You can't pour enough points into being offensive AND defensive. I wanted a fire mage with ice protections -- simply isn't happening. I had to pull all my points out of the ice chain because I simply am not hurting critters fast enough -- with only 2 offensive fire spells! So basically the character has 4 skills: Fireball, Fire Storm (is that what it's called?), Fire Mastery & a point in Teleport. I'd frankly prefer to have a hybrid with either a healer, a fighter or even possibly hunter or rogue to get the better armor, weapons and actually be able to defend myself because all my points in area effect fire attacks isn't enough to keep critters from beating me up.

I'll keep up with playing the class but it's already seemingly pointless to have chosen the pure-class -- maybe I'm wrong and it evens out quickly.

Bluddy
02-22-2011, 04:03 PM
Actually, it would be nice if Cloth (and maybe Leather) armor -- especially body armor -- got a bonus that no other type of armor gets. For example, how about up to an extra 2 enchantments? Or stronger enchantments.

Not a bad idea. But it can't be a big enough advantage to offset the armor disadvantage, or else leather characters will wear only cloth. It's a little screwy that the warrior gets the best armor AND the best weapons, no? Oh well.

Right now there's basically only 1 reason to have a pure mage. The ability to specialize in fire or ice AND be able to teleport at the same time. You can't pour enough points into being offensive AND defensive. I wanted a fire mage with ice protections -- simply isn't happening. I had to pull all my points out of the ice chain because I simply am not hurting critters fast enough -- with only 2 offensive fire spells! So basically the character has 4 skills: Fireball, Fire Storm (is that what it's called?), Fire Mastery & a point in Teleport. I'd frankly prefer to have a hybrid with either a healer, a fighter or even possibly hunter or rogue to get the better armor, weapons and actually be able to defend myself because all my points in area effect fire attacks isn't enough to keep critters from beating me up.

Yeah it seems like spells are still weak. It's been mentioned elsewhere. The spell skills need to increase naturally with level, or perhaps with intelligence. Priest spells should increase with spirit. But that's a discussion for another thread.

BTW the other advantage wizards are supposed to have is very high resistances, but right now I don't think those work too well with the current function -- they don't go high enough.

Crisses
02-22-2011, 05:42 PM
Not a bad idea. But it can't be a big enough advantage to offset the armor disadvantage, or else leather characters will wear only cloth. It's a little screwy that the warrior gets the best armor AND the best weapons, no? Oh well.


I don't think of this as an "oh well" thing. A big strength of Dins is mixing hybrids but two or thee classes seem like a waste of time. If you Have To hybrid all the Mage or priest classes to make a viable character the game is out of balance. Over 10 years later people are STILL playing Diablo2 and the classes there are very well balanced.

Most of a fighters power comes from their equipment which is independent of skill point allocations. Stat pts only act as gatekeepers and when the stat drops the weapon or armor remains functional. That is broken in terms of game balance between classes. A goon pumped on potion steroids with a big sword hits hard no matter where he put his skill points. Priests and mages MUST rely on skill allocations for their effectiveness in game play. But what if a cloth robe gave you an extra 5 skill pts when you level? Or experience bonuses? Etc. Something serious without it being a direct boon in battle.

Maledictus
02-22-2011, 07:02 PM
I'm having a hard time reading that sheet. The anchor value for any calculation is armor, so as far as I'm concerned the need for min/max determination is not relevant (although I get why you would want to do that, given the spikes at the high end of the linear sheet values). The current (old) function produces consistent (and correctly related) values across the spectrum, it strikes me as being of a simple elegant beauty. The linear function spikes weirdly at high armor values. Also, the current function has it's primary effect in the area of enemylevel-10 to enemylevel+10 (and it is consistent in this), which is as it should be in my opinion, while the linear function can produce wild fluctuations within that same area. This means that the current function will always produce a workable value, no matter what the entered armor value is.
Finally, in it's current incarnation (with the current constants) the absorption % is lower for any location in the 'linear' sheet than it is for that same location in the 'old' sheet (as far as I can tell from sampling a number of armor/level relations), but this can be attributed to the constants (what am I missing here?).
From this I'd almost conclude that it's not the current function that is wrong, it's the limited availability of armor value at higher char/enemy levels.
Again, this is my interpretation and I could be completely off my rocker. Blame that on ignorance.

On a sidenote: a player's experience (hard/easy), and therefor his/her frustration/elation level, is directly connected to the choices made at town creation; enemy level is x levels above current char level, etc. This taints the observations, in my opinion. As I said elsewhere, the game should be balanced for fun factor and difficulty at a given level "enemy level=char level+x", where I would think x should be one value for all test situations (0, I suppose). Meaning, if someone says "I get killed all the time by enemies 10 levels higher than me", I'd say "and so you should be".

Good grief, past midnight here... Spent another evening on studying instead of playing... Must say though this is very entertaining, and educational.

Bluddy
02-23-2011, 12:11 AM
I'm having a hard time reading that sheet. The anchor value for any calculation is armor, so as far as I'm concerned the need for min/max determination is not relevant (although I get why you would want to do that, given the spikes at the high end of the linear sheet values). The current (old) function produces consistent (and correctly related) values across the spectrum, it strikes me as being of a simple elegant beauty.

I'm glad you're looking at the sheet. First, look at the old function at level 1. You see that after 300 it passes 80%. By 700 it's at 90%. After that you get less than 0.7% per 100 points! This is as 'spiky' as the linear function, since you have to cap the maximum somewhere anyway, and 100s of points get you almost nowhere.

Now let's look at level 50. Notice that the constant (2nd column) is 1300. That means that around 1300 the function, which is very flat as it is because the constant is so big, becomes very slow. At 1300, an extra 100 points of armor gives you only 2% more! At 1600, an extra 100 points gives you only 1.5% more. 200 points can be the difference between mail and plate, or leather and mail! You're getting virtually no return for getting much better armor.

In contrast, the linear function splits things evenly. You get over 5% between each 100 point gap, and 200 points gives you a 10% advantage over the previous armor. I still need to tweak the linear function to realistic values found in the game, but the 'spiking' really doesn't matter since there's a maximum % value. The nonlinear function may be more 'elegant', but it kills the higher levels unless armor starts giving massively bigger numbers at the high end.

Baki
02-23-2011, 12:37 AM
Now let's look at level 50. Notice that the constant (2nd column) is 1300. That means that around 1300 the function, which is very flat as it is because the constant is so big, becomes very slow. At 1300, an extra 100 points of armor gives you only 2% more! At 1600, an extra 100 points gives you only 1.5% more. 200 points can be the difference between mail and plate, or leather and mail! You're getting virtually no return for getting much better armor.


Please do not forget while trying to balance things that raising the absorption from 40% to 50% your damage mitigation isnt raised by 10% but by 10 percent points. The number that matters is the dmg taken in %. by raising the absorption from 40% to 50% you lower your dmg taken by 16,67% (1/6). To give an extreme example: if you have 99% absorption and raise it to 99,5% you cut the damage taken in half.

a linear armor -> aborption formula is nearly never a good idea. Gaining the same dmg taken mitigation in percent per additional point of armor should be the target.


On a sidenote: a player's experience (hard/easy), and therefor his/her frustration/elation level, is directly connected to the choices made at town creation; enemy level is x levels above current char level, etc. This taints the observations, in my opinion. As I said elsewhere, the game should be balanced for fun factor and difficulty at a given level "enemy level=char level+x", where I would think x should be one value for all test situations (0, I suppose). Meaning, if someone says "I get killed all the time by enemies 10 levels higher than me", I'd say "and so you should be".


you would think so but if the player can 1 hit level+10 monsters and still dies while he tries to be no glass cannon he will probably also vs monsters level+0 monsters.

i hope i got the correct data here:

MinDamage 1.0
MaxDamage 2.5

MinDamagePerLevel 0.5
MaxDamagePerLevel 1.2

BaseStrength 3
StrengthPerLevel(warrior) 4.0

assuming a monster gets 1% dmg per str a level 50 monster would have an avg dmg of 44,25*3,03~134

level 60 would be 52,75*3,43~181

thats an increase of 35%. Yes, you also get a bit less mitigation and the attack rating is higher but it won't matter that much. If you die within a second vs 60 monsters you would probably die within 1,4 seconds vs level 50 monsters.

I am not saying Din's Curse should be made easier. I only say 1 hitting and getting 1 hitted isnt fun. Let me be able to take a bit more damage and do the same for the monsters.

Bluddy
02-23-2011, 02:31 AM
Please do not forget while trying to balance things that raising the absorption from 40% to 50% your damage mitigation isnt raised by 10% but by 10 percent points. The number that matters is the dmg taken in %. by raising the absorption from 40% to 50% you lower your dmg taken by 16,67% (1/6). To give an extreme example: if you have 99% absorption and raise it to 99,5% you cut the damage taken in half.

a linear armor -> aborption formula is nearly never a good idea. Gaining the same dmg taken mitigation in percent per additional point of armor should be the target.

It's true that the damage percentage change is not the same as the armor absorption change -- I'm not sure how that changes things, though. If a monster hits me for 200 points and my armor absorbs 40% damage, I get hit with 120 points of damage. If that changes to absorbing 50% damage once I put on plate, I get hit with 100 points of damage. I don't want a big armor upgrade to move me from from 40% to 41%, which will reduce 200 points of damage to 118 instead of 120. That's pretty much useless, and that's what the current formula does.

Not in response to you, but to restate the problem: as character level goes up, the armor function needs to cover a bigger scope of possible armor numbers. This stretches the function out (like a string), making each increment smaller, and nullifying armor increases. The problem is much worse because the function is non-linear, making the big increases at the bottom (where they matter least) and leaving even smaller increments at the top, (where you really need them at higher levels) . I propose 2 possible solutions: a linear function that evens out all the increments, or modifying the use of the non-linear function so that the 'meatier', more linear part is used mostly, making the increments bigger that way.

Bluddy
02-23-2011, 02:42 AM
OK Baki, after seeing those character stats you posted in the repository thread, I realize there's just no way a linear curve could do the trick. If armor can get to 4000... 7000 - forget it, it's completely non-linear. I'll work on the non-linear function and see if I can get it to something that constitutes an improvement.

PS. I really should look through the "show your character" thread for stats.

Baki
02-23-2011, 03:28 AM
It's true that the damage percentage change is not the same as the armor absorption change -- I'm not sure how that changes things, though.

It shows the flaw of linear armor -> absorption formulas

WoW has a good armor -> mitigation formula and dins curse currently uses a similar formula with different values iirc.

this is a good read: http://www.wowwiki.com/Armor

i think we just have to tune the numbers a bit. it has been done alrdy with the last patch but it wasnt enough.

Maledictus
02-23-2011, 08:13 AM
look at the old function at level 1. You see that after 300 it passes 80%. By 700 it's at 90%. After that you get less than 0.7% per 100 points! This is as 'spiky' as the linear function, since you have to cap the maximum somewhere anyway, and 100s of points get you almost nowhere.
Up till now I found it tricky to put into words why I feel the way I do when I look at all this, but this statement above has helped. As far as I see it, it has no relevance with regard to gameplay. The sheet shows that the diminishing return might be a bit harsh, but there's no way in hell that this situation (level 1 with 300, 700 or 800 armor) will occur. So the 'problem' in this example is entirely academic, and though it may help in determining the problem details, I do not see this situation as a fault. Even if this situation would occur, from a gameplay point of view you'd be pretty much immortal, so in that respect it works.
Now let's look at level 50. Notice that the constant (2nd column) is 1300. That means that around 1300 the function, which is very flat as it is because the constant is so big, becomes very slow. At 1300, an extra 100 points of armor gives you only 2% more! At 1600, an extra 100 points gives you only 1.5% more. 200 points can be the difference between mail and plate, or leather and mail! You're getting virtually no return for getting much better armor.
Yes, when presented like this in a sheet it looks dramatic, but if I look at this from a gameplay perspective, I still feel it is alright. It does however hi-lite a potential problem with regard to armor types and their expected effects (plate should work much better than leather), as has been stated elsewhere, but this is only an issue for high-level characters.
i think we just have to tune the numbers a bit. it has been done alrdy with the last patch but it wasnt enough.
What are you thinking of?

The diminishing returns show up when the character has an armor level that approaches the constant (i.e. 2550 for level 100). This means to me that the armor levels are 'penalized' if they pass certain values as determined by the current function. I suppose that is what you (Bluddy) wanted to address in the first place, but I'm still not sure on how to go about that. I have the feeling that possible solutions lie in tweaking other factors, like the added armor values that are given out on stat increases (as done by some passive initial skills), or perhaps adding armor bonusses to (certain) higher level items.