It seems like SkillMult is there to balance the leveling speed, whereas overriding base cost is there to control the balance. It seems like this mod (or alternative etits) is essential for any serious rebalance of magic system!
The mod you mentioned is already deprecated by Scrambled Bugs. Use it instead.
If you're not using any custom magic mod then you don't need this either. Because all vanilla spells have their cost set to auto-calculated. The bug only happens when the spell that has its cost manually set which does not exist in vanilla. Only modded game has them.
I don't use those mods so I don't know if they need this fix. But you can install this along those mods. If the spells are using auto calculated magicka cost then this mod will do nothing. But if they're setting the cost manually then this should make them give the correct EXP according to magicka cost.
Thanks for the mod. One question/suggestion: Afaik player gets exp from each magic effect used spell has. Would it be possible to add an option to ignore number of effects and use only one?
With this mod, any spells with auto calculated magicka cost will reward EXP normally(it does nothing for those spells). Only the spell with the magicka cost manually set will be affected and by default, it only used one effect already(it uses the costliest spell effect for skill use multiplier) and no other effects will be used.
The formula is like this: EXP = (Multiplier of costliest spell effect) x (spell total magicka cost)
Hm, in my game it gives exp for every effect using costliest effect multiplier. For example, vanilla Ice Spike spell with manual cost set gives exp for damage and slow effects (and also for stagger and freeze if player has perks), though the multiplier is indeed used from the main effect. There is nothing else that messes with this stuff in my modlist.
Well, that's weird. I don't know how that happen. If you mean the skill EXP report in the console, it also report the normal auto calculated spell too. But no EXP correction is done on them.
In case you're curious about the code used then see below: bool shouldRewardEXP = func( a_this, a_skillUsage ); if( shouldRewardEXP && !a_this->IsAutoCalc() ) { float realCost= a_this->CalculateMagickaCost( nullptr ); auto mainEffect= a_this->GetCostliestEffectItem(); if( realCost > 0 && mainEffect ) { if( mainEffect->baseEffect->data.skillUsageMult != 0 ) { if( g_ignoreMultiplier ) a_skillUsage.magnitude = realCost; else { float expReward = realCost * mainEffect->baseEffect->data.skillUsageMult; // Reward EXP must not exceed spell cost to prevent human error when assigning multiplier // Because multiplier higher than 1 is usually the hacky way author used to work around auto calc problem a_skillUsage.magnitude = min( expReward, realCost ); } } } }
You can see that there is no for loop and only the main effect counts.
It seems to me that this function is called per effect and not per spell (at least in my game). Also yes, i'm sure it's not just console report but actual exp gain.
I'll look into that later. Maybe something's wrong about the condition that checks for the main effect so all effect is considered main when it should not.
For me, It was Arcanum and Overlord mod. Some of their spells have its magicka cost set manually and give too little or none of EXP at all. There are probably more of them, but didn't test all of the spells from magic mods I installed.
Other mod like Apocalypse has its spell cost set correctly with auto-calc and I have no problem with it. Even some of its spells which do not give the EXP on cast has its skill use multiplier correctly set to 0 so my mod won't trying to reward EXP for those spells. (They have a script that gives EXP when the condition is met.)
It should be about the same as vanilla spells. Those spells usually have their multiplier set to 1 so they give the EXP equals to their base magicka cost. This mod cap the multiplier to 1 if the mod author somehow set them to above 1 to prevent those spells from giving too much EXP.
21 comments
If you're not using any custom magic mod then you don't need this either. Because all vanilla spells have their cost set to auto-calculated. The bug only happens when the spell that has its cost manually set which does not exist in vanilla. Only modded game has them.
Afaik player gets exp from each magic effect used spell has. Would it be possible to add an option to ignore number of effects and use only one?
The formula is like this: EXP = (Multiplier of costliest spell effect) x (spell total magicka cost)
In case you're curious about the code used then see below:
bool shouldRewardEXP = func( a_this, a_skillUsage );
if( shouldRewardEXP && !a_this->IsAutoCalc() )
{
float realCost= a_this->CalculateMagickaCost( nullptr );
auto mainEffect= a_this->GetCostliestEffectItem();
if( realCost > 0 && mainEffect )
{
if( mainEffect->baseEffect->data.skillUsageMult != 0 )
{
if( g_ignoreMultiplier )
a_skillUsage.magnitude = realCost;
else
{
float expReward = realCost * mainEffect->baseEffect->data.skillUsageMult;
// Reward EXP must not exceed spell cost to prevent human error when assigning multiplier
// Because multiplier higher than 1 is usually the hacky way author used to work around auto calc problem
a_skillUsage.magnitude = min( expReward, realCost );
}
}
}
}
You can see that there is no for loop and only the main effect counts.
Other mod like Apocalypse has its spell cost set correctly with auto-calc and I have no problem with it. Even some of its spells which do not give the EXP on cast has its skill use multiplier correctly set to 0 so my mod won't trying to reward EXP for those spells. (They have a script that gives EXP when the condition is met.)