View Single Post
  #17  
Old 12-07-2016, 01:25 AM
Torven
Sarnak
 
Join Date: Aug 2014
Posts: 52
Default

I've discovered a very serious balance issue with the spell code logic. IsPartialCapableSpell() is not accurate.

While I was parsing Luclin bosses for AC/ATK, I noticed that some spells were hitting me even beyond the expected 200 scale. It became clear to me that these spells were using the 600/partial scale even though the spells had effects like AC debuffs and stuns.

Interestingly, I did some searches through old logs and discovered that Anarchy (the enchanter DD) used to follow the 200/all-or-nothing scale back in Velious, but sometime around Luclin's launch, it began to partial hit. Apparently Sony changed the spell logic to allow them to create spells that could partial hit and also have debuffs in them around that time, then implemented the NO_PARTIAL_SAVE field to flag spells like necro snares to still use the 200 resist scale.

The fix is simple:

Code:
bool IsPartialCapableSpell(uint16 spell_id)
{
	if (spells[spell_id].no_partial_resist)
		return false;
	
	// spell uses 600 (partial) scale if first effect is damage, else it uses 200 scale.
	// this includes DoTs.  no_partial_resist excludes spells like necro snares
	for (int o = 0; o < EFFECT_COUNT; o++)
	{
		uint16 tid = spells[spell_id].effectid[o];

		if (IsBlankSpellEffect(spell_id, o))
			continue;

		if ((tid == SE_CurrentHPOnce || tid == SE_CurrentHP) && spells[spell_id].base[o] < 0)
			return true;

		return false;
	}

	return false;
}
DDs that partial hit have damage in the first slot, then stuns in the second. Stuns with a damage component (cleric, wizard stuns) have a stun in the first slot, damage in the second; those spells are all-or-nothing. Furthermore, all raid boss spells that I've found that used the 600 scale had damage as the first effect. Spells that used the 200 scale and had damage as the first effect all ended up having NO_PARTIAL_SAVE=1. Druid magic DoTs and necro fire DoTs did not have the NO_PARTIAL_SAVE flag and they in fact use the 600 scale, which makes these spells even easier to land than DDs.

I'm not 100% certain this logic is correct, but it fits all the spells I've verified the resist scales for. Certainly the current EQEmu code is incorrect and making raid bosses in Luclin and beyond much easier than intended. Peer review is welcome as always.
Reply With Quote