View Single Post
  #19  
Old 07-30-2021, 01:08 AM
Torven
Sarnak
 
Join Date: Aug 2014
Posts: 52
Default

I have recently done more research into EQ's resist logic and I will outline it here.

First I want to preface this with a reminder that EQ supposedly had three 'resist eras' where the resist logic behaved differently. The resist logic had an overhaul just prior to PoP's launch, then again (supposedly) in 2006 when Rashere modified it. The current Live resist logic is the same as outlined by Prathun in a 2010 post, so presumabely this is the result of Rashere's modifications.

I have gigs of Al'Kabor logs to pull data from, so this is data from a server that uses code from the second era.

First, I was able to verify that the level difference resist modifier (levelDiff^2/2) matched AK data. I AoEd a lot of NPCs in fungus grove on AK, and I parsed these on Live servers to get their resists. Resist values on Live for most common NPCs in classic through Luclin was 35 points and the FG mobs also were. When AoEing level 51 NPCs on level 59 characters on AK, I got very few resists, then got zero resists at level 60. This matches the Prathun logic. (35 - (8*8/2) = 3 resist value; 35 - (9*9/2) = -5 resist value)

Second, I was able to verify that Prathun's partial resist logic also matched AK data. I know this because my level 59 character AoEing level 51 NPCs would always do half damage when the spell partial hit. When this character was level 58, meaning the effective resist value was now 11 (35-(7*7/2)=11), the partial damages were always one of 7 values. This matched the output of Prathun's formula of: ((150 * (resist chance - roll)) / resist chance).

I was also able to verify that AK used the 600 scale for partial hits by checking raid boss AoEs on players.

So, I'm having a really hard time finding differences between AK and Prathun's resist logic. Which is strange because Rashere went at considerable length to outline how he was modifying the resist system in 2006. But I also happened to find this:

https://www.shamanscrucible.com/foru...php?f=6&t=3083

Quote:
Originally Posted by Rashere
We're going to hold onto the resist changes for a bit longer. I really want to release them along with the ability to remove the resist cap, which we weren't able to get done during this cycle. There are some resist tweaks that will stay in place, mainly some of the NPC specific changes we made, but otherwise we're going to use the old resist system for now and then get this up on test where it can bake a bit more and be released along with the removal of the caps.
Quote:
Originally Posted by Rashere
The resist system we know and "love" is going to stay for launch. The NPC specific changes I'm talking about are tweaks we made to the resist values of specific NPCs that were gaining a bit of resists under the new system due to how it makes those with low resists able to resist spells a bit more often. I didn't want that affecting NPCs, just PCs (PCs with low resists get a boost under the new system), so we lowered their resists a bit to compensate. That's staying in put, which is a bit of an issue since it means they'll resist spells a bit less than they did before and when we do put the new system in, they'll be back where they should be...which of course wil be seen as a nerf. But its the lesser of two evils here.
So seemingly two days after telling the userbase that large modifications were coming to the resist system, he reverted it, said he would put it in later, then didn't. I also want to mention that I found considerable differences in the resist rates on Planes of Power NPCs on Live vs. what I see in AK logs. I can calculate a resist estimate using logs where AoE spells were employed (PBAoEs or wizards quadding) which provide a reasonable sample size. Mobs that have 50 resist on Live seemed to have about 65 resist on AK. I also found mobs that have 65 MR on Live having about 80-85 on AK. (e.g. PoFire flameheads) BoT minibosses (the level 65 ones) also resisted slow A LOT on AK, and their current 155 MR on Live is just too low to match AK logs. I had also done some crude MR tests on Diaku ogres on AK to find the best charm pet, and the results indicated higher MR on AK. (except for one which was oddly lower) Just about every mob I could check from AK logs showed higher resists on PoP NPCs, but I can only check a handful of NPCs because large samples are required. These NPCs could have been modified by Rashere in 2006.

Another thing I wanted to verify was Prathun's 200 roll. His Pseudocode says this:

Quote:
Originally Posted by Prathun
Roll a random number between 0 and 200.
If the roll is greater than the resist chance, spell lands.
If the roll is not greater than the resist chance and the spell does not allow partial resists, resist spell.
Is this roll 0-200? 1-200? 0-199? > or >=? This has sigifnicant implications for charm and root which I will outline in another post, so I wanted to know for sure.

Testing for this on Live servers is somewhat straightforward. Find mobs around 1 and 199 resist then do long parses on them, then compare to simulations.

Here is a level 65 wizard casting on level 61 NPCs which have 50 base MR, with Tashanian on them, resulting in an effective MR of 1:

Code:
A Crystalline Arachnae (level 61) : All-Or-Nothing resist mod: -8;  DD resist mod: -8

Lower Element I - 3801 casts
Full Hits: 3785 (99.5%)  Full Resists: 16 (0.4%)

Project Lightning - 1797 casts (53 critical)
Full Hits: 1797 (100%)  Hits: 1797 (100%)  Full Resists: 0 (0%)

----------------------------------------------------------------------
A Crystalline Crawler (level 61) : All-Or-Nothing resist mod: -8;  DD resist mod: -8

Project Lightning - 1310 casts (42 critical)
Full Hits: 1310 (100%)  Hits: 1310 (100%)  Full Resists: 0 (0%)

Now the same mobs with Wind of Tashanian, resulting in an effective MR of 2:

Code:
A Crystalline Arachnae (level 61) : All-Or-Nothing resist mod: -8;  DD resist mod: -8

Project Lightning - 1841 casts (60 critical)
Full Hits: 1833 (99.5%)  Hits: 1841 (100%)  Full Resists: 0 (0%)

----------------------------------------------------------------------
A Crystalline Crawler (level 61) : All-Or-Nothing resist mod: -8;  DD resist mod: -8

Project Lightning - 1315 casts (34 critical)
Full Hits: 1311 (99.6%)  Hits: 1315 (100%)  Full Resists: 0 (0%)

To produce those results, you have to roll 1 to X and use a >. That's the only way it works. If you try using a roll of 0 and a >=, it won't produce those results. (X being 200 or 199) Furthermore the partial resist formula doesn't work with zeros for the roll and resist value and you end up with a zero divided by zero if you use a greater-than operator. That can be easily handled in various ways but it's not mentioned in the Prathun pseudocode.

I do however have strong evidence to suggest that AK used a 0 to X roll instead of 1 to X. The charm data I have from AK logs is somewhat shorter in average duration than Live for starters. (I will outline that in another thread) But I also have that data from a level 59 cleric on AK casting AoE spells on level 51 NPCs that I mentioned previously; these NPCs having an effective resist value of 3 against the cleric. The cleric got 31 full resists and 12 partial hits in that level, with something like 2300 casts on level 51s. On Live servers which use a 1 roll, at 3 resist, the partials and full resists should both be 0.5% each at 3 resist value. If however you change the logic to roll from 0 instead of 1, the full resist rate goes to 1% while partials stay at 0.5%, as rolls of 0 and 1 result in full resists and a roll of 2 results in 50% damage. (this requires accounting for the divide by zero issue)

Incidentally I do recall wizards complaining in 1999 that Ice Comet could be fully resisted by a level 1 NPC. This actually makes sense if the following is true:

- The resist roll started at 0 and used a >
- The NPC's effective resist was prevented from going negative (seemingly no longer the case post Luclin)
- A zero roll results in a full resist vs. a target with 0 effective resist value like AK might have


Now, what about X? Is it 199 or 200? I can answer that for Live at least.

I parsed an Honorable Protector in HoHB, which likely has 235 MR. Then I parsed it twice:

Code:
Level 65 Wizard vs. An Honorable Protector (level 64) debuffed with Wind of Wind of Tashanian (-40 MR); effective MR = 195
Lower Element I - 20648 casts
Full Hits: 501 (2.4%)  Full Resists: 20147 (97.5%)


Level 66 Wizard vs. An Honorable Protector (level 64) debuffed with Mala (-35); effective MR = 198
Lower Element I - 16180 casts
Full Hits: 162 (1%)  Full Resists: 16018 (98.9%)
The results indicate X is 200 on Live. That's enough casts to rule out margin of error. Its MR could be 234 but I really doubt it.

TL;DR

- Live's resist roll is 1-200 and uses a > (extremely likely)
- AK's resist roll was either 0-200 or 0-199 and uses a > (very likely)
- Rashere's supposed resist changes in 2006 were very minor or non-existent and Prathun's pseudocode almost entirely applies to PoP era
- PoP NPCs (and perhaps GoD through Prophecy) had their resists modified at some point, probably in 2006 by Rashere
Reply With Quote