Is there a way to change the selection (e.g. limiting the choice to a couple of basic spells and leaving higher level spells or more powerful spells to learning manually) or disable the 2 free wizard spells per level? If not, I would like that to be part of the custom spellbooks.
Can we have 1st class support for Theurges like Mystic Theurge, Arcane Hierophant and Ultimate Magus as well? You can almost kind of do it NWN 2 with some huge caveats.
NWN 2 handles prestige classes that advance spell casting by having a 2da file that maps feats to classes. So you would have a feat called "Eldritch Knight Spellcasting (Wizard)" and this feat would be referenced in the 2da file.
You can give a prestige class 2 bonus feats on 1st level to select 2 of these feats, but it breaks because NWN 2 will only ever let you pick new spells for one class at level up. This still allows you to make Theurges for classes that either know their whole list (Cleric/Druid/Paladin/Ranger) or Wizards (since they can learn spells from scrolls).
You *can* also advance spontaneous casters with it provided that you mix this class with one of the ones above. This spontaneous class also has to be above the other class in the classes.2da file... so basically your only options are Bard/any of above or Sorceror/Wizard.
I hope we will be able to do that in the future, which is why I encourage my friends who recently bought NWN: EE on sale to vote on Trello. This is an important feature!
Note: Last post was almost a month ago and so I might also be posting for that reason.
According to the latest development build patch notes, this has been implemented! I'm going to play around with it, hopefully get something together in the next week or so!
What does this mean for being able to fully grant another class true casting levels? Can PM levels now contribute to casting level for purposes of buffs resisting dispel magic (without labor intensive workarounds) and spells defeating (monk) SR?
What does this mean for being able to fully grant another class true casting levels? Can PM levels now contribute to casting level for purposes of buffs resisting dispel magic (without labor intensive workarounds) and spells defeating (monk) SR?
that has nothing to do with custom spellcasters and because it was not mentioned in patch notes there is no reason to think it will be doable now
What does this mean for being able to fully grant another class true casting levels? Can PM levels now contribute to casting level for purposes of buffs resisting dispel magic (without labor intensive workarounds) and spells defeating (monk) SR?
I believe I saw Pale Master come up while leveling the assassin. Presumably this would mean the spellbook would also continue to level up if Assassin was the only arcane class.
The script function that determines spell caster level is hardcoded (GetCasterLevel), but there are workarounds like ShadoOow's CPP or my 1.69 updates to mr_bumpkin's caster level scripts.
EDIT: Can confirm that Pale Master will work just fine with Assassin and Harper Scout, behaving exactly the same way as with vanilla content.
Dragon Disciple and Pale Master do not follow their counterparts in pen and paper as neither class gain their spell casting abilities. As such on the Trello boards I voted for both.
Custom spellcasting classes are one of the best changes to the engine so far! However, the next hurdle is what ildaron mentioned in the OP. This is a significant change from vanilla behavior, so it should probably be in ruleset.2da. However, I believe it is important for Prestige Classes that advance base class spellcasting to allow for selection of new spells on level up.
I propose one ruleset item PRC_ALLOW_SPELL_SELECTION to allow sorcerers, bards, and any other spontaneous spellcasters to select new spells on levels where their effective level increases. For example, a Sorc 6 should be able to select new spells when taking the 1st, 3rd, 5th levels of Pale Master. (This should not be based on the Pale Master alone, instead looking at ArcSpellLvlMod and DivSpellLvlMod in classes.2da as appropriate..)
The other issue is the GetCasterLevel() NWScript function. Currently it only returns the base class's raw caster level. For example a Wiz 5/PM 9 will return "5". I propose PRC_ENHANCE_CASTER_LEVEL that will slightly rewrite that function to add caster PrC level. The same Wiz 5/PM 9 will return "10" in this case. **Note: The GetCasterLevel() issue can be and has been worked around through scripting, but it'd be nice for this not to require workarounds. This should also not be made specific to the Pale Master.
Dragon Disciples are a strange case because they grant new spells known but don't raise caster levels or new spell level capabilities. That is, the ArcSpellLvlMod is appropriately "0". You'd almost need a new column like StatGainTable in classes.2da, instead called SpellGainTable. In fact, such a new column could be used to completely override the functionality of ArcSpellLvlMod and DivSpellLvlMod columns if formatted correctly.
While adding a spellbook to a class is now trivial and only takes minutes of 2da edits the other things are a different topic. Not to mention there are bugs and some of the assumptions that values of the new columns make are "hardcoded" i.e. school/domain/companion/familiar selection is the same for every class. It would really need things like spell schools in a list and all the selection screens with with 2da driven filters for class/feat/level where appropriate.
Of course a new update isn't a panacea to address all extant problems. . .
I may be wrong because I haven't checked recently but you'll probably run into issues if you have two arcane casting classes with palemaster because NWN fundamentally does not check nor present the choice of which class to extend. Have a wiz and sorc with high enough ability scores, race them side by side, add some pale master levels, then level one over the other, and then the second over the first. This was one of the few things that NWN2 actually did better.
So unless it has been fixed specifically there is no real quick solution to it. Recalculating caster level isn't difficult and I would argue it's necessary if you ever want to add interesting things that affect caster level. The issue with prestige classes is really about how prestige classes extend casting as a whole.
Refer to NWN2 which has such a column as WodahsEht suggests except it is called BonusSpellcasterLevelTable which refers to a 2da that outlines progression, with the associated column BonusSpellcasterFeatByClassMap which refers to a 2da that maps the class selection by feat acquisition.
Another "nice to have" column would be HasInfiniteSpells which would be useful for say Warlock and Psionics. Moreso for implementing Warlock, while Psionic classes could use a very high daily use on spells to track power point usage, the problem with that is uses are capped at 256 and would need to be at least 512 or 1024 to give room for that to work.
While it seems like we're griping about all sorts of things I might as well also mention that we're still lacking nwscript functions for:
GetSpellSchool(object oCreature)
GetHasDomain(object oCreature, int nDomainID)
LearnSpell(object oCreature, int nSpellID)
UnlearnSpell(object oCreature, int nSpellID)
SetSpellSchool(object oCreature, int nSpellSchoolID)
RemoveSpellSchool(object oCreature, int nSpellSchoolID)
SetDomain(object oCreature, int nDomainID)
RemoveDomain(object oCreature, int nDomainID)
Shadooow, I think it may be a bit of an issue for older characters and ELC. Other than that I doubt anyone wouldn't want it.
No it isn't, my plugin allowed this and ELC worked properly, in fact ELC already thinks you have spells of level 9 despite you didn't get them from Pale Master class.
Even if it was an issue, ELC can be changed to address it. It is not like you would be able to use character from latest patch with 1.69 or previous stable anyway so what is the issue here?
Essentially it should always be enabled since the current situation isn't rules legal, it's more of a bugfix like when they changed how RDD works so that it works as it should.
Comments
Note: Last post was almost a month ago and so I might also be posting for that reason.
I've also added to the Steam Workshop if you find that easier to use.
I believe I saw Pale Master come up while leveling the assassin. Presumably this would mean the spellbook would also continue to level up if Assassin was the only arcane class.
The script function that determines spell caster level is hardcoded (GetCasterLevel), but there are workarounds like ShadoOow's CPP or my 1.69 updates to mr_bumpkin's caster level scripts.
EDIT: Can confirm that Pale Master will work just fine with Assassin and Harper Scout, behaving exactly the same way as with vanilla content.
Custom spellcasting classes are one of the best changes to the engine so far! However, the next hurdle is what ildaron mentioned in the OP. This is a significant change from vanilla behavior, so it should probably be in ruleset.2da. However, I believe it is important for Prestige Classes that advance base class spellcasting to allow for selection of new spells on level up.
I propose one ruleset item PRC_ALLOW_SPELL_SELECTION to allow sorcerers, bards, and any other spontaneous spellcasters to select new spells on levels where their effective level increases. For example, a Sorc 6 should be able to select new spells when taking the 1st, 3rd, 5th levels of Pale Master. (This should not be based on the Pale Master alone, instead looking at ArcSpellLvlMod and DivSpellLvlMod in classes.2da as appropriate..)
The other issue is the GetCasterLevel() NWScript function. Currently it only returns the base class's raw caster level. For example a Wiz 5/PM 9 will return "5". I propose PRC_ENHANCE_CASTER_LEVEL that will slightly rewrite that function to add caster PrC level. The same Wiz 5/PM 9 will return "10" in this case. **Note: The GetCasterLevel() issue can be and has been worked around through scripting, but it'd be nice for this not to require workarounds. This should also not be made specific to the Pale Master.
Dragon Disciples are a strange case because they grant new spells known but don't raise caster levels or new spell level capabilities. That is, the ArcSpellLvlMod is appropriately "0". You'd almost need a new column like StatGainTable in classes.2da, instead called SpellGainTable. In fact, such a new column could be used to completely override the functionality of ArcSpellLvlMod and DivSpellLvlMod columns if formatted correctly.
Of course a new update isn't a panacea to address all extant problems. . .
I may be wrong because I haven't checked recently but you'll probably run into issues if you have two arcane casting classes with palemaster because NWN fundamentally does not check nor present the choice of which class to extend. Have a wiz and sorc with high enough ability scores, race them side by side, add some pale master levels, then level one over the other, and then the second over the first. This was one of the few things that NWN2 actually did better.
So unless it has been fixed specifically there is no real quick solution to it. Recalculating caster level isn't difficult and I would argue it's necessary if you ever want to add interesting things that affect caster level. The issue with prestige classes is really about how prestige classes extend casting as a whole.
Refer to NWN2 which has such a column as WodahsEht suggests except it is called BonusSpellcasterLevelTable which refers to a 2da that outlines progression, with the associated column BonusSpellcasterFeatByClassMap which refers to a 2da that maps the class selection by feat acquisition.
Another "nice to have" column would be HasInfiniteSpells which would be useful for say Warlock and Psionics. Moreso for implementing Warlock, while Psionic classes could use a very high daily use on spells to track power point usage, the problem with that is uses are capped at 256 and would need to be at least 512 or 1024 to give room for that to work.
While it seems like we're griping about all sorts of things I might as well also mention that we're still lacking nwscript functions for:
GetSpellSchool(object oCreature)
GetHasDomain(object oCreature, int nDomainID)
LearnSpell(object oCreature, int nSpellID)
UnlearnSpell(object oCreature, int nSpellID)
SetSpellSchool(object oCreature, int nSpellSchoolID)
RemoveSpellSchool(object oCreature, int nSpellSchoolID)
SetDomain(object oCreature, int nDomainID)
RemoveDomain(object oCreature, int nDomainID)
No it isn't, my plugin allowed this and ELC worked properly, in fact ELC already thinks you have spells of level 9 despite you didn't get them from Pale Master class.
Even if it was an issue, ELC can be changed to address it. It is not like you would be able to use character from latest patch with 1.69 or previous stable anyway so what is the issue here?
This is awesome.