To summarize all the below Tyler, as it's me rambling on how I figured this out:
For the spell effect Spirit of Vesagran (6721) to work, change the max value in slot 9 from 60 to 0, then change base2 value in slot 10 from 0 to -1, and I think it'll be solved.Ok, I think to fix the spell damage mod Tyler you change the max value data from 60 to 0. This is a dump of the spellfile comparing Call of Power vs. Bard epic clicky:
Spell info for spell #5388:
name: Ancient: Call of Power
player_1: PLAYER_1
....
base[12]: 35, 35, 0, 70, 0, -2, -4, -8, -17, -18, 0, 0
base2[12]: 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, -858993460
max[12]: 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
effectid[12]: 124, 119, 137, 134, 138, 136, 136, 136, 136, 136, 311, 254
Spell info for spell #6271:
name: Spirit of Vesagran
player_1: BLUE_TRAIL
base[12]: 0, 0, 0, 0, 0, 0, 0, 1000, 60, 35, 0, 140
base2[12]: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -858993460
max[12]: 0, 0, 0, 0, 0, 0, 0, 0, 60, 35, 0, 0
effectid[12]: 10, 10, 10, 10, 10, 10, 10, 100, 124, 185, 138, 254
124 = spell dmg boost
and here is why, in source zones/spdat.h line 228 #define SE_ImprovedDamage 124
then in spell_effects.cpp line 3609:
Code: Select all
case SE_ImprovedDamage:
switch (focus_spell.max[i])
{
case 0:
if (type == focusImprovedDamage && focus_spell.base[i] > value)
{
value = focus_spell.base[i];
}
break;
case 1:
if (type == focusImprovedCritical && focus_spell.base[i] > value)
{
value = focus_spell.base[i];
}
break;
case 2:
if (type == focusImprovedUndeadDamage && focus_spell.base[i] > value)
{
value = focus_spell.base[i];
}
break;
case 3:
if (type == 10 && focus_spell.base[i] > value)
{
value = focus_spell.base[i];
}
break;
default: //Resist stuff
if (type == (focusType)focus_spell.max[i] && focus_spell.base[i] > value)
{
value = focus_spell.base[i];
}
break;
}
break;
the source is switching between the max[i] value to figure out what is supposed to be done with the data, and if it's 0 it should run the first line which is a check on focusImprovedDamage (which is the only spell type that is going to make it through the Slot 11 Detrimental Only check). Meaning as is, this effect due to it being max[i] of 60 is going to do the default: line , which i'm not sure what that does. XD
Then on to the damage modifier, line 293 of spdat.h shows #define SE_DamageModifier 185
Let's see.. Let's find a spell that's previous in there for comparison.
Spell info for spell #4601:
name: Rage
player_1: PLAYER_1
base[12]: 30, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
base2[12]: -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -858993460
max[12]: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
effectid[12]: 185, 168, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254
Another spell, Daggerfall uses this system.
Spell info for spell #6174:
name: Daggerfall
base[12]: 10000, 275, 160, 200, 0, 0, 0, 0, 0, 0, 0, 0
base2[12]: 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, -858993460
max[12]: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
effectid[12]: 184, 169, 185, 186, 254, 254, 254, 254, 254, 254, 254, 254
Rage is a berserker AA ability that boosts damage all around from him. The value is set to -1 on base2. On Daggerfall, you will see base2 is set to 8. Skill Id 8 is backstab in the source. On the epic effect we are using the value 0.
Peeking at source on the section talking about SE_DamageModifier you can find on line 1071 (and line 1072) of bonuses.cpp a condition check
Code: Select all
newbon->DamageModifier = effect_value;
newbon->DamageModifierSkill = spells[spell_id].base2[i]==-1?255:spells[spell_id].base2[i];
That essentially says if base2 is -1 set DamageModifierSkill to 255, otherwise utilize whatever base2 is to be the DamageModifierSkill. This means if you set it to -1, it will apply the damage modifier to all skill damage (255). In Daggerfall, it only applies to BS (8). With how bard epic is right now, it only applies to skill ID 0, which is #define _1H_BLUNT 0, so I think right now it's only being applyied to 1 hand blunt damage. Will have to test that.
