Adjust Skills Filter
There is a function in the runtime engine named 'AdjustSkills'. You can see a diagram of it. The 'Adjust Skills Filter' is activated before the first code in that function. The Filter receives the following parameters :

- 0 - character index ( 0 to 3 )
- 1 - skill number ( 0 to 19 )
- 2 - experience to be applied ( should be positive )
- 3 - why the function is being called ( See list below )
- 4 to 8 - Parameters from a previous 'SetAdjustSkillsParameters' in a DSA. These parameters initially contain zeroes.

The why paramater is an integer:
enum ADJUSTSKILLSWHY
{
ASW_Unknown = 0,
ASW_PhysicalAttack = 1,
ASW_WarCryEtc = 2,
ASW_Attack = 3,
ASW_CastSpell1 = 4,
ASW_CastSpell2 = 5,
ASW_MonsterDamagesCharacter = 6,
ASW_SkillIncreaser1 = 7,
ASW_SkillIncreaser2 = 8,
ASW_ThrowByCharacter = 9,
};
The Filter can change any of the parameters and the changed parameters will be used by the function 'AdjustSkills'. Only the first three ( character index, skill number, and experience to be applied ) will have any affect on the assignment of skills. The remaining parameters are simply for the Filter to use to orient itself and make decisions.