Page 1 of 1

Something that bugs me about current damage calculation

Posted: Wed Jan 30, 2013 5:38 pm
by Agata
Some of you might have noticed you do lots of 1 damage against the strong monsters, and they do lots of damage to you. It has always been like this on WoD, but veteran WoD players never noticed because old client 2.0.0b doesn't show you the damage numbers, while our new client 7.0.15.1 does. I have been reviewing this, and would like to change it. Here is how it currently works:

Code: Select all

	//Hit! Figure out how much raw damage the attack did, then modify it be tactics and strength
	var raw_damage := CalculateAttackDamage ();
	var modified_damage := CINT ((raw_damage * (GetAttribute (attacker, ATTRIBUTEID_TACTICS) + 50 + CINT (GetAttribute (attacker, ATTRIBUTEID_STRENGTH)/5)))/100);

	//Get the defender's AR rating and reduce the damage by 50-100% of that value
	var defender_ar := CINT (GetDefendersAR (defender)/2);
	if (defender_ar > 0)
		modified_damage := modified_damage - RandomInt (defender_ar) - defender_ar - 1;
	endif

	//Always do at least 1 damage
	if (modified_damage < 1)
		modified_damage := 1;
	endif

	//Now check parry, if the defender has a shield
	var shield := GetEquipmentByLayer (defender, LAYER_HAND2);
	if (shield and IsShield (shield))
		var defender_parry_skill := GetAttribute (defender, ATTRIBUTEID_PARRY);
		if (RandomInt (200) < defender_parry_skill)
			//Successful parry, reduce damage
			modified_damage := modified_damage - shield.ar;
			SendSysMessage (defender, "You parry the attack!");

			//if no damage left, quit now
			if (modified_damage <= 0)
				return 1;
			endif
		endif
	endif

	//Players take 1/2 damage
	if (defender.acctname)
		modified_damage := CINT (modified_damage/2);
	endif

	//Do the damage
	DoDamageByType (attacker, defender, modified_damage, DAMAGETYPE_PHYSICAL);

	//Check for critical hit
	if (GetAttribute (attacker, ATTRIBUTEID_ANATOMY))
		if (RandomInt (1000) < GetAttribute (attacker, ATTRIBUTEID_ANATOMY))
			SendSysMessage (attacker, "Critical hit!");
			if (CheckSkill (attacker, SKILLID_ANATOMY, 80, 0) )
				DoDamageByType (attacker, defender, modified_damage, DAMAGETYPE_PHYSICAL);
			else
				DoDamageByType (attacker, defender, CINT (modified_damage/2), DAMAGETYPE_PHYSICAL);
			endif
		endif
	endif

The CalculateAttackDamage() function determines the weapon damage based on weapon type, quality and current weapon hp. For our evaluations we will focus on a magical (exceptional, 1.2 multiplier) weapon with full hp. Lets ignore Parry and Critical Hits for now and focus on this case:

Attacker with 100 Str, 100 Tactics, and a rune blade of destruction (OLD DAMAGE before I did some changes to weapon damage (4d6+8) * 1.2 )
Defender is an Ancient Dragon (40 AR, 600 str)

Min raw damage: 14
Avg raw damage: 26
Max raw damage: 38

Min damage modified by Str and Tactics: 23
Avg damage modified by Str and Tactics: 44
Max damage modified by Str and Tactics: 64

Minimum reduction for 40 AR: 20
Average reduction for 40 AR: 30
Maximum reduction for 40 AR: 40

======
VS NPC
======
Min damage vs Maximum reduction: 1
Avg damage vs Maximum reduction: 4
Max damage vs Maximum reduction: 24

Min damage vs Average reduction: 1
Avg damage vs Average reduction: 14
Max damage vs Average reduction: 34

Min damage vs Minimum reduction: 3
Avg damage vs Minimum reduction: 24
Max damage vs Minimum reduction: 44

=========
VS PLAYER WITH 40 AR (current scripts halve damage done to players)
=========
Min damage vs Maximum reduction: 1
Avg damage vs Maximum reduction: 2
Max damage vs Maximum reduction: 12

Min damage vs Average reduction: 1
Avg damage vs Average reduction: 7
Max damage vs Average reduction: 17

Min damage vs Minimum reduction: 1
Avg damage vs Minimum reduction: 12
Max damage vs Minimum reduction: 22
=============
Now lets think of an ancient dragon...
600 str, 100 tactics, damage 7d6+12

Min raw damage: 19
Avg raw damage: 36
Max raw damage: 54

Min damage modified by Str and Tactics: 51
Avg damage modified by Str and Tactics: 97
Max damage modified by Str and Tactics: 145

======
VS NPC
======
Min damage vs Maximum reduction: 11
Avg damage vs Maximum reduction: 57
Max damage vs Maximum reduction: 105

Min damage vs Average reduction: 21
Avg damage vs Average reduction: 67
Max damage vs Average reduction: 115

Min damage vs Minimum reduction: 31
Avg damage vs Minimum reduction: 77
Max damage vs Minimum reduction: 125

=========
VS PLAYER WITH 40 AR (current scripts halve damage done to players)
=========
Min damage vs Maximum reduction: 5
Avg damage vs Maximum reduction: 28
Max damage vs Maximum reduction: 52

Min damage vs Average reduction: 10
Avg damage vs Average reduction: 33
Max damage vs Average reduction: 57

Min damage vs Minimum reduction: 15
Avg damage vs Minimum reduction: 38
Max damage vs Minimum reduction: 62


=============================================
The problem with this formula is: It doesn't scale. so strong monsters deal lots of damage and the armor absorption becomes insignificant.

I have been exploring a new proposal and will be posting it here later today.

Re: Something that bugs me about current damage calculation

Posted: Wed Jan 30, 2013 8:48 pm
by Agata
The new proposal is to change the Armor Protection to Percentual. First I would change the Armor Ratings to the following:

Type, Normal AR, Exceptional AR, Invulnerability AR
Leather, 30, 36, 46
Studded, 35, 42, 52
Bone, 38, 45, 55
Ringmail, 40, 48, 58
Chainmail, 45, 54, 64
Platemail, 50, 60, 70

Now with this percentual protection, the reduction is fixed, and the only random thing is the damage. Against the same Ancient Dragon from the old post, we get the following (assuming we don't change the dragon's AR)

Player with 100 Str and 100 Tactics and (4d6+8)*1.2 damage weapon
Min damage modified by Str and Tactics: 23
Avg damage modified by Str and Tactics: 44
Max damage modified by Str and Tactics: 64

======
VS 40 AR
======
Min damage: 13
Avg damage: 26
Max damage: 38

=========
VS 70 AR (platemail of invulnerability) without halving the damage
=========
Min damage: 6
Avg damage: 13
Max damage: 19
==================================
Now lets think of an ancient dragon...
600 str, 100 tactics, damage 7d6+12
Min damage modified by Str and Tactics: 51
Avg damage modified by Str and Tactics: 97
Max damage modified by Str and Tactics: 145

======
VS 40 AR
======
Min damage: 30
Avg damage: 58
Max damage: 87

=========
VS 70 AR (platemail of invulnerability) without halving the damage
=========
Min damage: 15
Avg damage: 29
Max damage: 43
========================
This gives us a more decent armor rating. Please note that in these calculations, I am NOT halving the damage for players. Think of your henchmen having armor this good, they will survive. I think it wouldn't be necessary to halve the damage done to players anymore, as the armor ratings now scale.

Even if the damage from the ancient dragon vs 40 AR seems high, remember that is most likely to be a newbie character, the mages fighting ancients will usually have studded or bone armor of protection at least (48 and 51 AR respectively), and there are buff spells like Protection, which can raise your AR by around 15, plus Polymorph and Liche giving an additional 6-8 AR.

As for the limits on how much total AR a player can have, I plan it to be 75, just to make sure the magical buffs don't overpower anyone.

===

As for weapon damage, I already raised it a bit, and made the damage less random. I haven't updated the WoD Manual with the data because I don't want to change it over and over, but you can test the new higher weapon damages right now. The max damage is the same as in the manual, the only difference is the min damage, which is considerably higher.

Re: Something that bugs me about current damage calculation

Posted: Wed Jan 30, 2013 10:52 pm
by Sei Ryu
Go for it. That will definitely make things better, and less confusing :)

Re: Something that bugs me about current damage calculation

Posted: Thu Jan 31, 2013 6:26 am
by Jon Leir
I agree, go for it. With the percentage scaling it will allow for future development of new mobs and armors. I have not been to the new lands yet but I believe this change will help smooth out game play, making the damage less random and more natural feeling. If I'm fighting a Giant Ancient Dragon it shouldn't hit me for 1 damage, it has big mean teeth ;).

Plus this allows for henchmen to be useful, they felt as if they got in the way the other night while I was hunting and not a needed part of my hunt. as they could not hold their own even for a few seconds against the trolls I was fighting

My 2 cents
Jon Leir

Re: Something that bugs me about current damage calculation

Posted: Thu Jan 31, 2013 6:30 am
by Lancelot
40 AR is kind of low though. I usually have around 58-65 when buffed, no shield. I killed a couple Ancient Dragons the other day with my brother when we cleared Despise and sure, they hit hard, but it wasn't unmanageable. My brother could pretty much just sit there and tank with a shield on. We still had to kite them a little though.

Ancient Dragons feel like they are in a good place challange wise. I do see how all this could become a problem though in the harder area. If only there was an easy way to have two different sets of rules, one for each area.

Re: Something that bugs me about current damage calculation

Posted: Thu Jan 31, 2013 7:10 am
by Agata
It's fine for players, since the combat scripts multiply the players' defense chance by 1.2 and divides the damage they receive by 2, but a henchman is very easy to hit by an Ancient Dragon (they have 150 Wrestling), and they are a 1-hit kill to them even while fully buffed.

Re: Something that bugs me about current damage calculation

Posted: Thu Jan 31, 2013 5:03 pm
by Agata
Okay, the changes are up for everyone to try, and the player AR cap is 85. It is definitely necessary against the new strong monsters with their stats updated.

I made a new character named Amanda for testing. So far the graveyard is fine, just the skeleton archers that hit HARD. It's advised to new characters to have at least 60 parry and a shield.

In the following days I will be updating the enemies' Armor Rating, so in the meantime some of them might seem about right and others might seem too weak.

Monsters in Tokuno already have their AR updated.

Re: Something that bugs me about current damage calculation

Posted: Thu Jan 31, 2013 5:22 pm
by Sei Ryu
Tested in Tokuno, the hiryu is tough but manageable. The oni is very tough as well, but I could kill it. So far seems good.

Re: Something that bugs me about current damage calculation

Posted: Fri Feb 01, 2013 7:29 pm
by Agata
All monsters and NPCs had their AR updated.