Home > Suggestions

True Specialist Wizards and Clerics with real domain slots.

I'm not sure if this is doable or not, it depends solely on whether you can look at the spells a player has memorised and whether you can change them.

During the rest script this would happen before resting actually takes place (you'd probably also run this subscript when they log in)

1) What it would do for specialist wizards would be to look through their spell levels and make sure that ONE slot (lets make it the first one) is either empty or ONLY contains a spell of the particular sphere they specialise in. For spheres like divination there isnt a spell of each level 1-9 that you can use so certain replacement spells would need to be considered to be replacements.

E.g A level one illusionist having 3 magic missiles is illegal for example, ONE slot MUST be an illusion (or the nominated substitute spell)

When any spell level is illegal it will CLEAR the offending slots, and then stop rest and report what the problem is to the player so they can reselect and rest again.

This algorithm would simply look at the spheres of each spell in the spell level. If it doesnt find at least one of the specialist sphere (or the substitute spell) and there is no empty slots this is illegal.

2) For clerics it's much the same though the script would make sure that theres only ONE slot thats either empty or has one of the 2 possible domain spells in it. I'm not sure if you have access to reading what is in the domains.2da file .You cannot have duplicates of

Domains.2da will need to be redone and filled out with close-to canon list of spells for all domains level 1-9.

e.g. Burning hands is in the canon fire domain, if the search finds more than one burning hands the other ones are considered illegal and are cleared and the rest stops. A yellow message is sent to the player telling them the problem.

For this to be implemented also, it would require ALL clerics to have an override domains.2da that is equivalent to the canon domain spell list. Also the new added domains like darkness would also need to be re-selected for example, instead of getting darkness any number of times at level 1 you simply get one of your second level slots having the spell (or the spell from your other domain).

You would also need to run this script as clerics log-on to make sure they didnt select an illegal selection and log out before resting This isnt normally a problem except for when they come in after a server reset , logging on after server reset re-energies all slots.

I imagine the algorithm working by counting up the number of domain spells (either from domain one or domain two) in a spell level. Condition: If there is NO domain spells in that level and there is not one empty slot in this spell level then this is illegal.

Condition: If there is exactly one domain spell this is legal.

Condition: If there is more than 1 non-thislevel-cleric spell in the spell level this is illegal.

How possible is this? and is it desirable? I know a lot of people complain about the power level of clerics mostly because of the domain spells, this would restore them to canon. It all depends on what you can get access to from the server. Can you look to see what a player has memorised (or marked to be memorised when they rest)

I don't think this is technically possible, but even if it is, it seems like a huge amount of work for very little (if any) gain.

It allows the server to have domains closer to canon D&D rules. (which results in a lowering of cleric power overall, and an increase in the flavour of domains) You can finally have things like burning hands in fire domain level 1 (as per canon), and not be afraid of it being overpowered because they'll only be able to cast one per day max.

I'd be willing to do the filling out of the domains.2da file if thats the long slog. I'd also be happy to select the spells the specialist wizards get at various levels in place of sphere spells that dont exist. If you can write the addendum to the rest script to do the checking. (again if it's possible to examine what a player has memorised or selected for memorising)

I'd also be happy to help test it whenever is convenient for you.

Of course, clerics do get in PnP domain spells at every level, which is not the case in NWN, so I fail to see the point of this suggestion. Even some wizard levels don't have spells of every category.

The difference is that PnP has a vast choice of spells, where NWN doesn't. In the end, clerics and wizards will end up with similar spells.

I believe this is impossible to do for specialist wizards, but possible for domain spells.

And yet, even if it is, the variety of spells is low, compared to pnp dnd

You should leave the domains alone. It's impossible to get each and every spell available in PnP on Neverwinter Nights, and there's enough complication as there is. NWN doesn't have to be exactly like PnP anyways.

I dont know if it's possible for the server to LOOK at the spells a player has selected for memorisation, thats the thing that's needed.

I suggested for specialist wizards that specific substitute spells could take the place of the sphere spell for that level if none existed in the correct sphere. This is what would get over the "not-enough" spells problem.

For cleric domains this is a suggestion to "lower" the power of clerics; a darkness sphere cleric will no longer be able to fill their level one slots with darkness spells. I thought you'd be more in support of it actually.

The vast majority of canon domain spells are simply cleric spells. theres usually only a few spells from other classes in there.

For example canon healing sphere just has cure light wounds at level 1 as the selectable domain spell, cure mod at level 2, etc.

Considering these are all empowered anyway by the domain ability it would go a long way to balance the healing domain, having heal at level 5 and cure serious wounds at level 2 is out of wack.

It's definitely NOT impossible theoretically to put true cleric domains in, you can always substitute a cleric spell of that level for the domain spell for spells that arent in the game. (this all depends on if the script can look at a players selected spells)

Spell stripping/adding/forcing slots is by far the most difficult thing to do in the toolkit.

Let's put it this way: If you can figure out how to script it, send it to us, and we'll have a look. But, while it would be cool, it looks to be very, very difficult, if even possible.

-Cross

Don't forget priests represent their gods. Power they bound to have, in a way. (That's why they are bound to the gods, they have power, with restrictions by the gods, and I think that makes the scales even)

Syrus greycloak who's written a fairly extensive patch for nwn has a solution supposedly in his grimoire , though this may require a hak I dont know yet, I'll have to investigate a bit.

I'm still not sure how he'd get the information from the character on what domains (or specialist school) they have selected (other than looking to see if they have the particular domain feat)

He references it at the last post in this thread here:

http://nwn2forums.bioware.com/forums/viewtopic.html?chl=it&topic=470498&forum=98&sp=0

Ok I've been doing a little research on it, syrus's solution is based around his entire system but it isnt that far from what would need to be done.

Currently the server can tell what domains you are because it's validating that on entry with your deity to see if you're legal. You need these 2 bits of information to validate their spells.

What you need to create is a server side only 2da. This lists domains and spells much like domains.2da except that NO space is vacant. Lets call it "cdomains.2da". The rows down are for all domains, the columns are the spell levels 1-9.

You then check to see just after REST if they have the spell memorised from domain1 or domain2.. They can only have 1 memorised from domain1 or domain2. (if it's a non-cleric spell) use GetHasSpell which returns how many uses they have of this spell.

It's not possible to test the EMPTY slot case (which would normally not be ok) so you force all clerics to allocate a slot each level to the domain spell from domain1 or domain2.. anything else is illegal.

It's important to tell the player WHY the rest failed (ie. "you need a VALID domain spell in your level 1 slots") . you need to UNDO the rest somehow also and let them choose again (and rest again)

The complication comes with metamagic and multiclasses that can cast these spells anyway. But if you make it clear that if you are a cleric then THAT is the class that uses that spell not your wizard or other class. If the wizard side has true strike memorised for example, and your cleric of luck side has that memorised also.. it's going to return 2 for the number of uses. (which is illegal)

Metamagiced uses of these spells in your alternate class would also cause a "too many domain spells memorised" error.

I'll work on a pseudoscript program of this to see if I can explain how it would be coded (I havent scripted in nwn before).

I'll post this next.


/* Domain1 = the ref number for domain1, Domain2= the ref number for domain2 */
/* cdomains.2da is a file like domains.2da  but includes fillers for all  levels */

String SpellString; Int Dom1, Dom2, Special1, Special2, X, Y, Lev;

For Lev =1 to 9;

Dom1= StrtoInt( Get2daString ("cdomains.2da",Lev, Domain1) ); Dom2 = StrtoInt( Get2daString ("cdomains.2da",Lev, Domain2)); Special1 = StrtoInt( Get2daString ("domains.2da", Lev+5 ,Domain1)); Special2= StrtoInt( Get2daString ("domains.2da", Lev+5 ,Domain2)); X= GetHasSpell( Dom1 ,oPC); Y= GetHasSpell (Dom2, oPC);

/* First if you dont find either of the domain spells they have probably got all slots full of non-domain spells which is illegal or an

empty slot which though normally legal we cant test for */ If X=0 and Y=0 then WriteMessage ("Illegal domain spell for level : ", Lev); Break;

/* Theres 4 cases you could have: You could have many Domain1 spells that are valid cleric, and domain2 is a non-cleric spell or vice-versa ==== Valid You could have one non-cleric domain1 spell and another non-cleric domain2 spell === Illegal You could have more than one non-cleric domain spell on either side == illegal You could have duplicate HIGHER level cleric spells on a lower level === Ilegal but we cant tell the different between that and

validly memorised spells of a higher slot level so we have to make it legal.*/

If (Special1>0 and Special2>0) then X=0; WriteMessage( "Too many non-cleric domain spells for level ",Lev); Break;

if X=0 and Y<>0 then { X=Y, Special1=Special2 }; /* if you find the domain2 and not the domain1 use that */ If ( X>1 and Special1>0) then /* if you find more than one non-cleric domain spell */ { SpellString= Get2daString ("Spells.2da", 2, Special1), X=0; WriteMessage ("Duplicate "+SpellString+ " spell in level ", Lev); Break; } X=1; Next Lev;

If X=0 then UNDOREST(); /* we found a problem , clear all their spell slots, undo the rest and wait for them to rest again */

Heres some pseudocode I hope it's understandable.

Specialist Wizards:

/* 8 files on the server called SPECIALISTX.2da where X= the letter of the corresponding school */ /* Each row is the spell level from 1 to 9 , and columns are the 5 spells that any of them there is legal for that level specialist */ /* Theres probably only a MAX of 5 spells of any one school on any level if there are more than 5 on any level , increase the columns to 6 or more */ /* if a class does not HAVE a spell of the right school in that level a substitute spell can be placed in the SPECIALISTX files */

/* Call this with WIZLEV equal to the maximum spell level this wizard can cast , ie level 5 wizard, WIZLEV = 3 */


String OurSchool = "X";
Int X, Lev, CurrSpell, SpellNo;

/* If theres no way to determine the casters specialism you'll need a feat to describe them */

if GetHasFeat (SPELL_FOCUS_NECROMANCY,oPC) OurSchool = "N"; if GetHasFeat (SPELL_FOCUS_DIVINATION,oPC) OurSchool = "D"; if GetHasFeat (SPELL_FOCUS_ILLUSION,oPC) OurSchool = "I"; if GetHasFeat (SPELL_FOCUS_EVOCATION,oPC) OurSchool = "V"; if GetHasFeat (SPELL_FOCUS_TRANSMUTATION,oPC) OurSchool = "T"; if GetHasFeat (SPELL_FOCUS_CONJURATION,oPC) OurSchool = "C"; if GetHasFeat (SPELL_FOCUS_ABJURATION,oPC) OurSchool= "A"'; if GetHasFeat (SPELL_FOCUS_ENCHANTMENT,oPC) OurSchool= "E";

If (OurSchool= "X") break; /* Not a specialist, go away */

/* We start at low level and work up, because metamagic is always higher level this should get past that problem */

For Lev=1 to WIZLEV; X=0; For CurrSpell =1 to 5; if (SpellNo = StrToInt (Get2daString ("Specialist"+OurSchool+".2da",CurrSpell, Lev)) >0) { if (GetHasSpell(SpellNo, oPC)>0) X=1; break; } Next CurrSpell; If X=0 then WriteMessage("You do not have your specialist school spell at level "+Lev); Break; Next Lev; If X=0 then WipeAllSpells(); UndoRest(); /* Missing spell? then clear all spell uses and undo the rest */

Unfortunately gethaspell doesnt seem to be able give any information on if any are metamagic or not, so you'll need to STILL have your non-metamagiced spell at level X to be considered legal.

.i.e. Empowered Magic missile at level 3.. would not count, you'd still need ONE of ( fireball, lightning bolt, Scintillating Sphere or Gust of Wind ) at level 3 as an evocation specialist.

Spell Focus doesn't equal spell school. There are tons of characters who have multiple spell focuses across the different spell schools. I seem to recall seeing GetHasSpell being able to return specific values based on whether or not a spell is a domain spell or metamagic, too, just so you know.

Well it can only be one or the other, does it return the NUMBER of uses left?

Or a non-zero value based on what the spell it found was metamagic/domain wise. Nwnlexicon doesnt explain which, it contradicts itself.

Your'e right exile, I'm only using spell focus as a way to find out what sphere they are, if there's a better way then that would be the way to do it.

And yes people could have spell-focus in many schools if they wished but it would be one of the limitations required , you'd enforce that for specialist wizards of a particular school that they'd HAVE to have that feat at level 1, and couldnt have any other spell focus feats. It would also force generalists to not even pick spell focus which isnt desirable . You could you ASK the player at character creation and store it in a character variable which may be a better way to decide that value. Much like the deity panel. It might seem a bit redundant but it'd be a better way to do it certainly.

Actually people can become specialist wizards at any time. (multiclassers)

It's probably better having the "booth" inside the spellguard tower so people are "spell failured" till they talk to the booth (or person) about what they specialise in. That way current wizards would simply need to go to the spellguard tower, have a chat with the "registration officer" or talk to the booth and they'd be good to go.

The booth or person could still be in the start area for those characters that are wizards from the start.

GetHasSpell is certainly confusing >_>

Returns an integer indicating how many instances of a particular nSpell are left on oCreature, or FALSE (0) if no more instances of that spell remain.

The following factors determine the value of the return of GetHasSpell:

No metamagic feat applied: 1 Cleric domain spell, no metamagic feat applied: 2 Silent metamagic feat applied: 3 Still metamagic feat applied: 3 Extended metamagic feat applied: 3 Quickened metamagic feat applied: 1 Maximized metamagic feat applied: 1 Empowered metamagic feat applied: 1

Maybe they're saying it no-longer returns how many uses..

It simply returns a non-zero value if the spell is available for use with a few different values for "some" of the possibilities.

The fact that empower, quicken and maximise dont have their own values is annoying (especially empower which gets used a lot)

If this is the case you'd need to use "decrementspelluses()" and gethasspell again to count how many spells they actually have (which is a pain).

Then if they're legal you'd need to force an auto rest to replenish their spells.

Since GetHasSpell doesn't seem to return the number of spells anymore, What's no fun is that you'd have to do this N*M times where N is the number of total spells in nwn and M is the number of spells prepared on a character. You have to force rest then, because there is no way to increment spells.

(802 * ~15) is a moving into the area of a non-trivial check.

Also, I think it may be impossible to determine if a character has extra spell slots through items. If that's the case, I can't think of a way to determine if a character has not prepared a domain spell (filling up the slots with non-domain spells instead).

All in all, this seems to be moving to a realm of impossibility. We'll just have to live with clerics casting four stoneskins. :)

You dont have to do it that often.

All you need do is test for the SPECIFIC domain spells. (you get values out of cdomains.2da which is just an extended domains.2da with no blank values)

If you find one, then you test for more. (with the decrement spell uses thing) if you find a metamagic version instead then you ignore that as being legal.

If they have more then they're either legal with multiple cleric based domain spells (lets say hold person is the level 2 domain spell for their domain, they could fill their level 2 slots with hold persons legally) or they're illegal with more than one non-cleric spell.

If you DONT find either of the domain spells at the level you're looking then they're illegal since they NEED to devote a slot to one domain spell or another.

I still dont think this is impossible, but maybe you WANT it to be :)

I know my code above isnt very elegant, and maybe not very legible but can you see what I was aiming at.

p.s. extra slots are not a problem because you're looking for the existance of the domain spells, you dont care what they fill the extra slots with or if they're empty.. you only care if they have at least ONE domain spell and if that spell is a non-cleric one that they dont have MORE than one of them.

'if that spell is a non-cleric one that they dont have MORE than one of them.'

Define non-cleric? Bull's strength for a non-strength domain? So suddenly we can only buff one person?

I don't quite get what you're getting at with all this stuff. Do you want clerics to only cast domain spells (Which makes them incredibly sucky) or to only be able to cast one domain spell (which makes no sense, as surely the more spells you cast that specifically honour your god the better?)

I don't personally think clerics are particularly over or under powered, myself. What exactly are you trying to get to? In simple words. I'm tired.

spawnofweevil
'if that spell is a non-cleric one that they dont have MORE than one of them.'

Define non-cleric? Bull's strength for a non-strength domain? So suddenly we can only buff one person?

I don't quite get what you're getting at with all this stuff. Do you want clerics to only cast domain spells (Which makes them incredibly sucky) or to only be able to cast one domain spell (which makes no sense, as surely the more spells you cast that specifically honour your god the better?)

I don't personally think clerics are particularly over or under powered, myself. What exactly are you trying to get to? In simple words. I'm tired.

Go to sleep weevil.. :D Sleep is good yes

On canon strength domain you get bull's strength at level 2 as a domain spell.

What this means is for your DOMAIN slot you HAVE to have bull's strength or the spell thats is your level 2 domain slot for your other selected domain.

This doesnt stop you having MORE than one bulls strengths in your other level 2 spell slots.

If however you had say TRUE STRIKE as your level 1 domain spell, you would ONLY be able to pick ONE level one slot for true strike. Because this spell is not a normal cleric spell.

What i'm trying to do is to simulate the canon CLERIC DOMAIN slots and wizard specialist SLOTS.

That way we can then re-do all the cleric domain spells to be like canon, because the player would be limited to ONE a day of the special spells which would brings things in to balance which is the main reason why we havent re-done the standard domains.

chaosprism
spawnofweevil I don't quite get what you're getting at with all this stuff. Do you want clerics to only cast domain spells (Which makes them incredibly sucky) or to only be able to cast one domain spell (which makes no sense, as surely the more spells you cast that specifically honour your god the better?)

I don't personally think clerics are particularly over or under powered, myself. What exactly are you trying to get to? In simple words. I'm tired.

On canon strength domain you get bull's strength at level 2 as a domain spell.

What this means is for your DOMAIN slot you HAVE to have bull's strength or the spell thats is your level 2 domain slot for your other selected domain.

This doesnt stop you having MORE than one bulls strengths in your other level 2 spell slots.

If however you had say TRUE STRIKE as your level 1 domain spell, you would ONLY be able to pick ONE level one slot for true strike. Because this spell is not a normal cleric spell.

What i'm trying to do is to simulate the canon CLERIC DOMAIN slots and wizard specialist SLOTS.

That way we can then re-do all the cleric domain spells to be like canon, because the player would be limited to ONE a day of the special spells which would brings things in to balance which is the main reason why we havent re-done the standard domains.

Clarification.

Same thing for specialist wizards, as he said.

What it means is, a conjurer will have to have a Conjuration spell memorized for each spell level, and a level 8, 18 Wis cleric with the Earth, Good, or Magic domain won't be able to memorize Stoneskin four times (but he would still have to memorize either that or a spell from his other domain).