I will keep the list as short as possible. In this case a FILE_EXISTS_IN_GAME is a better idea IMO, since there is both a "Setup-SpellPackB5.tp2" and a "Setup-SpellPackB5_Patch.tp2". With MOD_IS_INSTALLED, you will have to write everything twice (or more, since some people might still use B4).
Here is the list:
1.) Sanctuary can be cast to protect allies.
2.) Shillelagh gives you 2 attacks per round, more useful for druids.
3.) Call Lightning does not fire off automatically once per turn. Instead, you would have to cast SPIN193.spl every turn. Also, it is a very long range spell and can be tricky to pull off in a battle (casting time of 1 round). I might suggest something like this:
CODE
IF
AreaType(OUTDOOR)
HaveSpell(CLERIC_CALL_LIGHTNING) // Do this for SPIN193 as well
!See(NearestEnemyOf(Myself))
Range(LastSeenBy(Myself),100)
... // more triggers if necessary
// I would not do more elaborate checks, since the druid is too far to realistically evaluate resistances
THEN
RESPONSE #100
Spell(LastSeenBy(Myself),CLERIC_CALL_LIGHTNING)
END
IF
AreaType(OUTDOOR)
HaveSpell(CLERIC_CALL_LIGHTNING) // Do this for SPIN193 as well
!See(NearestEnemyOf(Myself))
OR(3)
Heard([0.ANIMAL],ALERT)
Heard([0.0.0.DRUID_ALL],ALERT)
Heard([0.0.WYVERN],ALERT)
!See(LastSeenBy(LastHeardBy(Myself)))
OR(2)
Allegiance(Myself,EVILCUTOFF)
Allegiance(Myself,GOODBUTRED)
OR(2)
Allegiance(LastSeenBy(LastHeardBy(Myself)),PC)
Allegiance(LastSeenBy(LastHeardBy(Myself)),ALLY)
... // more triggers if necessary
// I would not do more elaborate checks, since the druid is too far to realistically evaluate resistances
THEN
RESPONSE #100
Spell(LastSeenBy(LastHeardBy(Myself)),CLERIC_CALL_LIGHTNING)
END
IF
AreaType(OUTDOOR)
HaveSpell(CLERIC_CALL_LIGHTNING) // Do this for SPIN193 as well
!AttackedBy([ANYONE])
See(NearestEnemyOf(Myself))
... // more checks if necessary
THEN
RESPONSE #100
RunAwayFrom(NearestEnemyOf(Myself),15) // The druid would keep running away until it does not see any enemies and proceeds to call lightning bolts
END
// After a whole bunch of other blocks should druids resort to csating Call Lightning in combat
This can give the druids of cloakwood the reputation they deserve.
4.) Invisibility Purge is now an abjuration spell, and lasts for a long time. I have not made it detectable yet, but I will have a variable "INVPURGE" being set in B6 (but I can send you the files earlier).
5.) Mental Domination requires concentration to maintain, so I would not have the AI cast it.
6.) Flamestrike hsa a small area of effect, so place checks of
CODE
!Range(LastSeenBy(Myself),10)
!AttackedBy(LastSeenBy(Myself),MELEE)
7.) Like Call Lightning, Insect Plague is a very potent spell that takes 2 rounds to pull off, but has a long range. Druids should use it just like Call Lightning; ie not directly in battle.
8.) Colour Spray is a short range spell, but affects creatures of all hit die. Should be a favourite of low level mages (like the bounty hunters you meet), since characters below their level and level 6 recieve no saving throw.
9.) Armour lasts for 1 full week, so that means all mages have it as a buff. Speaking of Buffs, it wouldn't hurt to have some mages start with invisibility before combat.
10.) Detect Invsibility lasts for 2 rounds per level, and sets the stat SEEINVISIBLE.
11.) It is impossible to fire missile weapons on webbed creatures. Unfortunately stat ACMISSILEMOD is broken so you will have to look for WEB instead.
12.) Web summons a whole bunch of invisible creatures that react to fire damage. Their class is set to 41. Something your spellcasters could do is cast fireshield or flameblade if they are in the middle of a web, or run away (outdoor areas have enough space to circumvent webs). I wouldn't have them cast a fireball on webbed enemies.
CODE
IF
Detect([0.0.0.41])
Range(LastSeenBy(Myself),5)
!HasItemEquiped("ANTIWEB"Myself)
HaveSpell(WIZARD_FIRE_SHIELD_RED) // Do this for fireshield blue, aura of flaming death, and flameblade as well
... // more checks if necessary
IF
AreaType(OUTDOOR)
Detect([0.0.0.41])
Range(LastSeenBy(Myself),10)
!Range(LastSeenBy(Myself),5)
!HasItemEquiped("ANTIWEB"Myself)
... // more checks if necessary
THEN
... // more actions if necessary
RunAwayFrom(LastSeenBy(Myself),15)
END
IF
HaveSpell(WIZARD_FIREBALL)
See(NearestEnemyOf(Myself))
!CheckStatGT(LastSeenBy(Myself),0,WEB)
... // more checks if necessary
I imagine these blocks would appear very differently in SCSII scripts, but something like this works.
13.) Glitterdust sets the local variable ("GLITTER","LOCALS") to one. There is a bug in B5 that doesn't always reset the local variable back to zero when the spell ends/is dispelled. I simply forgot to include an .eff file. I have fixed this, and it will appear in B6.
But I can send you that .eff file so you could include that with SCSII in case you manage a new version earlier than I do.
14.) Otiluke's Resilient Sphere can be cast to protect allies, and they forego their saving throws and magic resistance
15.) Shadow Door has the potential to maze low-level creatures if they pursue the fleeing wizard through the door. Use this spell after Improved Invisibility, and when creatures are closing in on the wizard.
DavidW, if you are interested, I have a few script blocks somewhere that utilizes Dimension Door so that creatures can cast it to flee the party.
-Galactygon