Ok so prathun is still busy with a lot of stuff but he hasn't forgotten about us. In the mean time he has provided some of the code that is used in hth calculations. I am hoping someone can understand this before I try and figure it out myself so lets get to work. if (AttackerIsMelee && AttackerLevel > 50 || AttackerIsMonk) { maxextra = 220; chance = 45; minusfactor = 100; if ((AttackerLevel > 50)&&(AttackerLevel <= 55)) { maxextra = 245; chance = 35; minusfactor = 80; } else if ((AttackerLevel > 55)&&(AttackerLevel < 60)) { maxextra = 265; chance = 28; minusfactor = 70; if (AttackerIsMonk) { maxextra = 285; chance = 23; minusfactor = 65; } } else if ((AttackerLevel >= 60) && (AttackerLevel < 63)) { maxextra = 285; chance = 23; minusfactor = 65; if (AttackerIsMonk) { maxextra = 290; chance = 21; minusfactor = 60; } } else if ((AttackerLevel >= 63) && (AttackerLevel < 65)) { maxextra = 290; chance = 21; minusfactor = 60; if (AttackerIsMonk) { maxextra = 295; chance = 19; minusfactor = 55; } } else if((AttackerLevel >= 65) && (AttackerLevel < 67)) { maxextra = 295; chance = 19; minusfactor = 55; if (AttackerIsMonk) { maxextra = 300; chance = 17; minusfactor = 50; } } else if((AttackerLevel >= 67) && (AttackerLevel < 70)) { maxextra = 300; chance = 19; minusfactor = 55; if (AttackerIsMonk) { maxextra = 310; chance = 17; minusfactor = 50; } } else if(AttackerLevel >= 70 && (AttackerLevel < 72)) { maxextra = 305; chance = 19; minusfactor = 55; if (AttackerIsMonk) { maxextra = 320; chance = 17; minusfactor = 50; } } else if(AttackerLevel >= 72 && (AttackerLevel < 75)) { maxextra = 310; chance = 17; minusfactor = 50; if (AttackerIsMonk) { maxextra = 325; chance = 15; minusfactor = 45; } } else if(AttackerLevel >= 75 && (AttackerLevel < 77)) { maxextra = 315; chance = 17; minusfactor = 50; if (AttackerIsMonk) { maxextra = 330; chance = 15; minusfactor = 45; } } else if(AttackerLevel >= 77 && (AttackerLevel < 80)) { maxextra = 325; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 335; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 80 && (AttackerLevel < 82)) { maxextra = 335; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 345; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 82 && (AttackerLevel < 85)) { maxextra = 345; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 355; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 85 && AttackerLevel < 87) { maxextra = 355; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 365; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 87 && AttackerLevel < 90) { maxextra = 365; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 375; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 90 && AttackerLevel < 92) { maxextra = 375; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 385; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 92 && AttackerLevel < 95) { maxextra = 380; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 390; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 95 && AttackerLevel < 97) { maxextra = 385; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 395; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 97 && AttackerLevel < 100) { maxextra = 390; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 400; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 100 && AttackerLevel < 102) { maxextra = 395; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 405; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 102 && AttackerLevel < 105) { maxextra = 400; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 410; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 105) { maxextra = 405; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 415; chance = 15; minusfactor = 40; } } } else { maxextra = 210; chance = 49; minusfactor = 105; } int basebonus=attack-minusfactor; int percent; int dmg_d=damage_done; int extrapercent; basebonus = basebonus / 2; if (basebonus < 10) { basebonus = 10; } extrapercent = roll0(basebonus); percent = 100+extrapercent; if (percent > maxextra) { percent = maxextra; } dmg_d = (damage_done * percent) / 100; if ((AttackerIsMelee || AttackerIsMonk) && AttackerLevel > 54) { dmg_d++; } damage_done = (int)dmg_d; return(damage_done);
Please reformat that into [ code ] all of that monk math right here [ / code ] but without spaces. Please.
This is what he provided exactly how he provided it. didn't want to mess up anything so posted it as I received it.
Just special rules for Monks so their mods are stronger then rest of melee Damage bonus mods used to be bigger difference too :\
Here try this for readability: Code: if (AttackerIsMelee && AttackerLevel > 50 || AttackerIsMonk) { maxextra = 220; chance = 45; minusfactor = 100; if ((AttackerLevel > 50)&&(AttackerLevel <= 55)) { maxextra = 245; chance = 35; minusfactor = 80; } else if ((AttackerLevel > 55)&&(AttackerLevel < 60)) { maxextra = 265; chance = 28; minusfactor = 70; if (AttackerIsMonk) { maxextra = 285; chance = 23; minusfactor = 65; } } else if ((AttackerLevel >= 60) && (AttackerLevel < 63)) { maxextra = 285; chance = 23; minusfactor = 65; if (AttackerIsMonk) { maxextra = 290; chance = 21; minusfactor = 60; } } else if ((AttackerLevel >= 63) && (AttackerLevel < 65)) { maxextra = 290; chance = 21; minusfactor = 60; if (AttackerIsMonk) { maxextra = 295; chance = 19; minusfactor = 55; } } else if((AttackerLevel >= 65) && (AttackerLevel < 67)) { maxextra = 295; chance = 19; minusfactor = 55; if (AttackerIsMonk) { maxextra = 300; chance = 17; minusfactor = 50; } } else if((AttackerLevel >= 67) && (AttackerLevel < 70)) { maxextra = 300; chance = 19; minusfactor = 55; if (AttackerIsMonk) { maxextra = 310; chance = 17; minusfactor = 50; } } else if(AttackerLevel >= 70 && (AttackerLevel < 72)) { maxextra = 305; chance = 19; minusfactor = 55; if (AttackerIsMonk) { maxextra = 320; chance = 17; minusfactor = 50; } } else if(AttackerLevel >= 72 && (AttackerLevel < 75)) { maxextra = 310; chance = 17; minusfactor = 50; if (AttackerIsMonk) { maxextra = 325; chance = 15; minusfactor = 45; } } else if(AttackerLevel >= 75 && (AttackerLevel < 77)) { maxextra = 315; chance = 17; minusfactor = 50; if (AttackerIsMonk) { maxextra = 330; chance = 15; minusfactor = 45; } } else if(AttackerLevel >= 77 && (AttackerLevel < 80)) { maxextra = 325; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 335; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 80 && (AttackerLevel < 82)) { maxextra = 335; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 345; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 82 && (AttackerLevel < 85)) { maxextra = 345; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 355; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 85 && AttackerLevel < 87) { maxextra = 355; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 365; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 87 && AttackerLevel < 90) { maxextra = 365; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 375; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 90 && AttackerLevel < 92) { maxextra = 375; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 385; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 92 && AttackerLevel < 95) { maxextra = 380; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 390; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 95 && AttackerLevel < 97) { maxextra = 385; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 395; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 97 && AttackerLevel < 100) { maxextra = 390; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 400; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 100 && AttackerLevel < 102) { maxextra = 395; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 405; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 102 && AttackerLevel < 105) { maxextra = 400; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 410; chance = 15; minusfactor = 40; } } else if(AttackerLevel >= 105) { maxextra = 405; chance = 17; minusfactor = 45; if (AttackerIsMonk) { maxextra = 415; chance = 15; minusfactor = 40; } } } else { maxextra = 210; chance = 49; minusfactor = 105; } int basebonus=attack-minusfactor; int percent; int dmg_d=damage_done; int extrapercent; basebonus = basebonus / 2; if (basebonus < 10) { basebonus = 10; } extrapercent = roll0(basebonus); percent = 100+extrapercent; if (percent > maxextra) { percent = maxextra; } dmg_d = (damage_done * percent) / 100; if ((AttackerIsMelee || AttackerIsMonk) && AttackerLevel > 54) { dmg_d++; } damage_done = (int)dmg_d; return(damage_done);
Making sense of this: This is the part of player damage that is referred to as PC_DAM, damage table, or melee table. Specifically the maxextra. minusfactor makes it harder to roll higher. It is subtracted from attack (calc isn't shown) which I assume is the portion of your attack that is rolled against the "AC sum" or mitigation AC. The ol' "damage interval 20" stuff. If it is, it's based on skill, str or dex (for archery/throwing), and atk from items/spells. damage_done (not shown ) is equal to random(1 to 20) * weapon_damage / 10. Which isn't really random, based on your stats and the NPC's stats (this is the mitigation rolls). I would love to see the stuff not shown! I also noticed chance isn't used
These are known values. My question is, does the damage bonus seen on equipped weapons apply to open fist attacks? Does it scale to 38/39 delay? Or do the tables above justify the lack thereof? Thanks for any clarification.
These tables apply to every melee damage. EDIT: So not really. There are a few things missing from this snippet. I believe if "attack" mentioned in here has to be greater than 115 for this to apply. Chance I believe is also a chance not to apply it, which appears to be missing from this snippet as well.
This will be the base melee hit maths. Nothing really new here, but it's good to see confirmation. On top of that the various single-hit skills (like massive strike, thunderfoot, etc) that have skill_attack listed in them will be plugging into this with a fixed damage_done. Normal weapon hits will be DI roll (1 to 20) * weapon_damage / 2. Code: my $hit = $db_dex + ceil(int($roll20*$wdam*$skill_mult/10+0.5)*$pcdam); Backstab, and probably kick and similar skills also uses a skill bonus multiplier. Itr'll be 2+(bs_skill/50.0), fractional. The real interesting thing that has never been worked out before (although we know the shapes and where the asymptotes are) is the AC vs Attack equation. Ie how the DI roll actually works. Edit: actually there is something knew in that code, to me at least. I'd always assumed the PCDAM roll was simple between 100 and <something large>, capped at the PCDAM_MAX value. Eg random between 0 and 500, add 100, and then cap to maxextra. What the code here shows is that the <something_large> for the roll is (attack-minusfactor)./2, so more attack not only changes the DI roll but also the PCDAM roll too. Its probably a very minimal change though given it's not uncommon for a good third of hits to be at max value. Keep meleeing people & a happy new year... Brogett (retired).
h2h damage (this is the same as weapon damage) for monks greater than 46 with epic equipped skill is 280 unless your actual skill is higher than 280 Code: skill / 15 + 3 For delay, same thing with epic applies for skill value and iksar will be 1 for iksar and 0 for non. It also appears iksar will be 0 if an iksar has their monk epic. (this should be milliseconds?) Code: 100 * (iksar - skill / 21 + 38)
Since I have apparently missed something, what was the point in him giving this info to us? Is there something that they are going to do to further change hth? Because as it is the Damage portion is working as intended. It was the delay side that was not matching the information we were given years ago when they revamped bare HtH dmg to be based off of skill vs level.