Putting the 'role' back in role-playing games since 2002.
Donate to Codex
Good Old Games
  • Welcome to rpgcodex.net, a site dedicated to discussing computer based role-playing games in a free and open fashion. We're less strict than other forums, but please refer to the rules.

    "This message is awaiting moderator approval": All new users must pass through our moderation queue before they will be able to post normally. Until your account has "passed" your posts will only be visible to yourself (and moderators) until they are approved. Give us a week to get around to approving / deleting / ignoring your mundane opinion on crap before hassling us about it. Once you have passed the moderation period (think of it as a test), you will be able to post normally, just like all the other retards.

Icewind Dale The Icewind Dale Series Thread

Tigranes

Arcane
Joined
Jan 8, 2009
Messages
10,350
Get past.

The stuff you mention aren't wrong, but they're just not a big deal. For what it's worth, by BG2, the engine allows you to split parties across different areas when it comes to small houses and the like.
 

Sigourn

uooh afficionado
Joined
Feb 6, 2016
Messages
5,662
The stuff you mention aren't wrong, but they're just not a big deal. For what it's worth, by BG2, the engine allows you to split parties across different areas when it comes to small houses and the like.

Yeah, I'm not saying it ruins the game or anything, but it's very annoying when you are forced into difficult situations because of engine limitations or something.
 
Self-Ejected

IncendiaryDevice

Self-Ejected
Village Idiot
Joined
Nov 3, 2014
Messages
7,407
The stuff you mention aren't wrong, but they're just not a big deal. For what it's worth, by BG2, the engine allows you to split parties across different areas when it comes to small houses and the like.

Yeah, I'm not saying it ruins the game or anything, but it's very annoying when you are forced into difficult situations because of engine limitations or something.

Before entering the tower of archers, or similar situations, just make the ones you don't want fighting invisible (or all of them!). Both a common-sense tactic and a work-around depending on how you view these things. You have invisibility potions and loads of characters which can cast it, both individually and en-mass, plus characters that have a natural ability to stealth invisible. With games like this, that have oodles of variety in encounter choice, you really must learn to exhaust all possible 'choices' before declaring your 'consequences' on the game. I know it's patronising, but I have to include the obligatory winky here ;) Edit: there's the Sanctuary spell as well, as if the above was not enough.
 
Last edited:

Tigranes

Arcane
Joined
Jan 8, 2009
Messages
10,350
Level One Jansens have now reached Wyrm's Tooth.

Upper Dorn's Deep wasn't too difficult, mainly because the vast majority of the content is optional. We ignored just about every Ettin, for instance, though they are slow enough that I am sure we could have kited them.

The drow did pose a challenge; notably, the Drow Vanguard hit hard with their crossbows, and even when they are closed down, they are immune to normal missiles. Rene Jansen used up the entire stock of Arrows of the Hand felling the four Vanguards in the area. Mix in the Drow Mages, who I have to be careful to trigger their magic missiles using characters with Shield, and it's all a bit touch and go.

At this stage, though, I have to ask. The drow mages only ever seemed to cast Mirror Image, a couple of Magic Missiles, and one or two other spells that I forget, before turning to their daggers. Um, I swear that in normal playthroughs, the first battle of second level of Upper Dorn's Deep (where you approach a narrow bridge flanked by orc archers, drow mages) features at least several mid-level spells thrown at the party. So is my memory completely failing me, am I missing something obvious, or, um... are the mages being level-scaled to the Jansens, so that they only have first and second level spells? And we just never noticed because nobody is so deleveled as to force enemy mages to delvel this way? I know SOA featured a degree of controlled level scaling, but this is a whole new surprise. I didn't keep saves, but maybe I can go back, find a mage I haven't killed, and test it out.

In any case, the party was able to make it through to the Lich sequence. If you remember, you first fight the Lich in the room with many sarcophagi; then you push on through to a hall of tombs, where you find the phylactery and destroy it while the Lich chases you around. Well, in the first fight, we stayed back and lured in the undead pawns - but of course the Lich has seemingly infinite supplies of Animate Dead, and we eventually pushed through. (The script seems to depend on the summons dying off, so when we left some alive, the lich declined to summon more.) The initial buffs on the Lich made it difficult to make a dent on, but once they expired, Rene's Acid Arrows - I invested in the whole stock from the ghost in the upper levels of the Hand - and our Wand of Magic Missiles, still conserved from early game, did the job. But again, the lich seemed to throw a magic missile at Ludwig when he first marched in, he had scripted Animate Deads, he had the starting buffs - but seemed to throw no higher level spells at the party as we peppered them with arrows. What's going on?

YlOY4Sh.png


After that, of course, the phylactery was a breeze with a Jansen skulking around. With all of that done, and even passing on some of the optional fights and loot, the party is now able to boast a formidable set of gear.
  • Ludwig is -14AC with the Confusion proc sword and the Fortress Shield.
  • Rene Jansen, of the Sseth Bow fame, can now be a plausible melee option with Benorg's Truth (+4 Axe with 10% Stun proc), and -5AC or so.
  • Jean-Jacques Jansen is now officially our Utility Man: the Mantle of Hell's Furnace, bought from Orrick, gives us castings of Agannazar's Scorcher (finally an upgrade on Burning Hands!), as well as the Blessed Helm of Lathander from the tombs, which gives us Cure Moderate Wounds and Remove Paralysis. (Previously, a successful paralysis proc from, say, a Ghast meant a probable reload.)
At this rate, I don't foresee any big issues, though I'm quite worried about several endgame fights - the big respawning undead room with the badge containers, for example, or the final fight, where the party's THAC0 will probably let them down big time. I'm conserving Potions of Heroism, higher level spell scrolls and other tricks, but we shall see how it goes. The real question is whether I'm just confused or there's something going on with the mages, which I'll try to confirm next time I can play.
 

Sigourn

uooh afficionado
Joined
Feb 6, 2016
Messages
5,662
At this rate, I don't foresee any big issues, though I'm quite worried about several endgame fights - the big respawning undead room with the badge containers, for example, or the final fight, where the party's THAC0 will probably let them down big time. I'm conserving Potions of Heroism, higher level spell scrolls and other tricks, but we shall see how it goes. The real question is whether I'm just confused or there's something going on with the mages, which I'll try to confirm next time I can play.

Pretty sure the undead weren't respawning in that room you mention. I simply lured the spellcasters so I could kill all of them with arrows, and then melee'd the rest of the enemies. I took care never to engage multiple mummies at a time, though, as they could quickly immobilize my party.
 

Sigourn

uooh afficionado
Joined
Feb 6, 2016
Messages
5,662
So... I think it may be time to stop playing Icewind Dale. I've got a final on February and it's quite possibly the hardest final I'll face in my life. I continued exploring the Watchknight Crypts but I should be studying/watching the films I have to watch for the final, and time is short as it is. So yeah, hopefully on February 7th I'll be back to the game, free from the shackles of 1900s-1950s cinema.
 

hilfazer

Scholar
Joined
Jan 26, 2016
Messages
224
Rangers and Paladins rejoice! It's possible to kill neutral NPCs without loss of reputation.

If NPC dies when you are in another location you won't get reputation hit. IIRC you won't be getting XP as well but who really cares.
Ready your Melf's Acid Arrows!
Perhaps it's old but surely not for everyone. It was working with both expansions installed. Dunno if Raycat Beamdog enhanced this trick away.

People with nice items:
Ranger in HoW village has got stupidly good bow. IIRC he's related to some quest so you may prefer to finish this quest first.
Paladin in TotL has Morning Star of Defence +4. He actually wants to be killed.
Barbarian priest that teleports you to HoW content has cool hammer. I think it's safe to kill him right before sailing through The Sea of Moving Ice.
 

Tigranes

Arcane
Joined
Jan 8, 2009
Messages
10,350
Level One Jansens have now reached Lower Dorn's Deep.

I was able to check my earlier suspicions about mages againt Kontik, the usually high-level mage in the Frost Giant Caverns. The results are... well. Given sufficient time, Kontik at least is able to fire off Hold Person, Lightning Bolt and Cone of Cold:

ThroM8n.png


So, at the very least, he's got 5th level spells. The Level One Jansens have basically spent the entire game never/rarely getting webbed, fireballed (which would have taken out the whole party in most cases), and so on; indeed, Kontik is the first mage who - thanks to Mirror Image + Prot. Normal Missiles - survived long enough to actually Slow and even Paralyse a Jansen.

The Black Knights were the more problematic, as only one in about 15 arrows would even hit them, and they have a lot of health. Of course, even they can't reliably hit -14AC Ludwig, who I suppose stands there in his magical plate mail and a shield larger than a gnome's height looking smug.

The rest of the area really features no fighting; if you ignore the slaves (you don't need the XP) and trick Joril to take his badge, you are free to loot the many nice spell scrolls and items in the Caverns. I'm mostly spending my money now scooping up Orrick's inventory of useful spells; having one or two copies of Web, Fireball, even Chain Lightning, will be good, as now the time is finally approaching for using them. We also have Auril's Dagger now, which a Jansen can equip on the fly and use its 2x Cone of Cold charges, which might end up being a gamechanger - we will see. Are scrolls always cast at level of caster in IWD1? In vanilla BG2, for example, I seem to recall that it was set at default of Level 10. Cone of Cold cast at caster level 1 won't really do much.
 

hell bovine

Arcane
Joined
Sep 9, 2013
Messages
2,711
Location
Secret Level
The Jansens are amazing! :D

Regarding scroll spell level, I have no idea. Might be the same as in BG, where I recall items (wands, scrolls) used different (but fixed) levels, ignoring the caster level. You could look it up in near infinity.
 

agris

Arcane
Patron
Joined
Apr 16, 2004
Messages
6,828
Level One Jansens have now reached Wyrm's Tooth.

[...]

At this stage, though, I have to ask. The drow mages only ever seemed to cast Mirror Image, a couple of Magic Missiles, and one or two other spells that I forget, before turning to their daggers. Um, I swear that in normal playthroughs, the first battle of second level of Upper Dorn's Deep (where you approach a narrow bridge flanked by orc archers, drow mages) features at least several mid-level spells thrown at the party. So is my memory completely failing me, am I missing something obvious, or, um... are the mages being level-scaled to the Jansens, so that they only have first and second level spells? And we just never noticed because nobody is so deleveled as to force enemy mages to delvel this way? I know SOA featured a degree of controlled level scaling, but this is a whole new surprise. I didn't keep saves, but maybe I can go back, find a mage I haven't killed, and test it out.

[...]

The real question is whether I'm just confused or there's something going on with the mages, which I'll try to confirm next time I can play.


Level One Jansens have now reached Lower Dorn's Deep.

I was able to check my earlier suspicions about mages againt Kontik, the usually high-level mage in the Frost Giant Caverns. The results are... well. Given sufficient time, Kontik at least is able to fire off Hold Person, Lightning Bolt and Cone of Cold:

[...]

So, at the very least, he's got 5th level spells. The Level One Jansens have basically spent the entire game never/rarely getting webbed, fireballed (which would have taken out the whole party in most cases), and so on; indeed, Kontik is the first mage who - thanks to Mirror Image + Prot. Normal Missiles - survived long enough to actually Slow and even Paralyse a Jansen.


Fucking de-cline indeed. And this is the first game Sawyer is designing on, eh? I don't hate on the guy like others around here, I understand a lot of his motivations. But he wants to swaddle the player in a nice comfy woolen blanket and never ask too much of them, and that's how you make an experience entirely forgettable.

I love IWD, and if it weren't for this experiment, I don't think this would have come to light. I wonder what the specifics of the scaling are? Would the .ARE's BCS file contain the level scaling info, or would it be in the individual AI packages of the monsters in question?

And yes yes, I know BG1/2 had some form of level scaling - but nothing like this. Level scaling in and of itself isn't always bad, but like so many things, it's all about the execution.
 

Tigranes

Arcane
Joined
Jan 8, 2009
Messages
10,350
agris Josh Sawyer was only a junior designer on IWD1, not a lead, I believe. It would be a reactionary stretch to claim that this is his ideological vision at work.

I don't think I can say for sure what's going on, yet. My memory of the kind of spell loadouts these enemies had is poor, and Kontik at least could cast up to 5th level spells (though shouldn't he be able to do more?). So we've still to see what exact mechanism is in place.

I expect the key will be Malavon, and I'll try and run that battle, then level up the Jansens and run it again, to see.

There's also a small chance that something is being fucked up with AI Scripts or whatnot because I was too lazy to reinstall IWD, and I have a few mod components installed. It's hard to see what that would be, though - the components in question include the Fixpack, Unfinished Business, Widescreen Mod, and some G3Tweaks components like Unlimited Stacking.
 

agris

Arcane
Patron
Joined
Apr 16, 2004
Messages
6,828
Tigranes fair enough. Going from my IWD install (EE plus some mods), there's no evidence of level scaling. What I do see is a lot of AI conditions that your party wouldn't have met, i.e. the ability to detect certain protections and remove them (invis, PfMW, stoneskin, spell turning, etc).

Code:
IF
   HaveSpell(WIZARD_MINOR_GLOBE_OF_INVULNERABILITY) // SPWI406.SPL (Minor Globe Of Invulnerability)
   See(NearestEnemyOf(Myself))
THEN
   RESPONSE #100
       Spell(Myself,WIZARD_MINOR_GLOBE_OF_INVULNERABILITY) // SPWI406.SPL (Minor Globe Of Invulnerability)
       Wait(2)
END

IF
   HaveSpell(WIZARD_SPIRIT_ARMOR) // SPWI414.SPL (Spirit Armor)
   See(NearestEnemyOf(Myself))
THEN
   RESPONSE #100
       Spell(Myself,WIZARD_SPIRIT_ARMOR) // SPWI414.SPL (Spirit Armor)
       Wait(2)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   HaveSpell(WIZARD_TRUE_SIGHT) // SPWI609.SPL (True Sight)
   CheckStat(Myself,0,TRUE_SIGHT)
   See([GOODCUTOFF.0.0.0.0.ILLUSIONARY])
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !StateCheck(Myself,STATE_SILENCED)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(Myself,WIZARD_TRUE_SIGHT) // SPWI609.SPL (True Sight)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   HaveSpell(WIZARD_ORACLE) // SPWI515.SPL (Oracle)
   CheckStat(Myself,0,TRUE_SIGHT)
   See([GOODCUTOFF.0.0.0.0.ILLUSIONARY])
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !StateCheck(Myself,STATE_SILENCED)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(Myself,WIZARD_ORACLE) // SPWI515.SPL (Oracle)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
   See(Player1)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(4)
       CheckStat(LastSeenBy(Myself),1,MINORGLOBE)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_DEFLECTION)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
   See(Player2)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(4)
       CheckStat(LastSeenBy(Myself),1,MINORGLOBE)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_DEFLECTION)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
   See(Player3)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(4)
       CheckStat(LastSeenBy(Myself),1,MINORGLOBE)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_DEFLECTION)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
   See(Player4)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(4)
       CheckStat(LastSeenBy(Myself),1,MINORGLOBE)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_DEFLECTION)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
   See(Player5)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(4)
       CheckStat(LastSeenBy(Myself),1,MINORGLOBE)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_DEFLECTION)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
   See(Player6)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(4)
       CheckStat(LastSeenBy(Myself),1,MINORGLOBE)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_DEFLECTION)
       CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SPELL_THRUST) // SPWI321.SPL (Spell Thrust)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
   See(Player1)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
   See(Player2)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
   See(Player3)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
   See(Player4)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
   See(Player5)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
   See(Player6)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_SECRET_WORD) // SPWI419.SPL (Secret Word)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
   See(Player1)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),8,WIZARD_SPELL_IMMUNITY)
   OR(6)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TRAP)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !StateCheck(Myself,STATE_SILENCED)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
   See(Player2)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),8,WIZARD_SPELL_IMMUNITY)
   OR(6)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TRAP)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !StateCheck(Myself,STATE_SILENCED)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
THEN
   RESPONSE #100
       SetInterrupt(FALSE)
       SetGlobalTimer("OH_Cast","LOCALS",6)
       DestroyItem("SCRL8G") // Ruby Ray of Reversal
       DisplayStringHead(Myself,40811) // *uses a scroll*
       SpellNoDec(LastSeenBy(Myself),WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
       SetInterrupt(TRUE)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
   See(Player3)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),8,WIZARD_SPELL_IMMUNITY)
   OR(6)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TRAP)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !StateCheck(Myself,STATE_SILENCED)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
   See(Player4)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),8,WIZARD_SPELL_IMMUNITY)
   OR(6)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TRAP)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !StateCheck(Myself,STATE_SILENCED)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
   See(Player5)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),8,WIZARD_SPELL_IMMUNITY)
   OR(6)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TRAP)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !StateCheck(Myself,STATE_SILENCED)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
   See(Player6)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),8,WIZARD_SPELL_IMMUNITY)
   OR(6)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TRAP)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_DEFLECTION)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_TURNING)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_SHIELD_OF_THE_ARCHONS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_SPELL_IMMUNITY)
       CheckStatGT(LastSeenBy(Myself),0,MINORGLOBE)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !StateCheck(Myself,STATE_SILENCED)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_RUBY_RAY_OF_REVERSAL) // SPWI704.SPL (Ruby Ray of Reversal)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_BREACH) // SPWI513.SPL (Breach)
   See(Player1)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_CHAOTIC_COMMANDS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_ENERGY)
       CheckStatGT(LastSeenBy(Myself),0,STONESKINS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_FIRE_SHIELD)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_BREACH) // SPWI513.SPL (Breach)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_BREACH) // SPWI513.SPL (Breach)
   See(Player2)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_CHAOTIC_COMMANDS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_ENERGY)
       CheckStatGT(LastSeenBy(Myself),0,STONESKINS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_FIRE_SHIELD)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_BREACH) // SPWI513.SPL (Breach)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_BREACH) // SPWI513.SPL (Breach)
   See(Player3)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_CHAOTIC_COMMANDS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_ENERGY)
       CheckStatGT(LastSeenBy(Myself),0,STONESKINS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_FIRE_SHIELD)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_BREACH) // SPWI513.SPL (Breach)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_BREACH) // SPWI513.SPL (Breach)
   See(Player4)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_CHAOTIC_COMMANDS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_ENERGY)
       CheckStatGT(LastSeenBy(Myself),0,STONESKINS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_FIRE_SHIELD)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_BREACH) // SPWI513.SPL (Breach)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_BREACH) // SPWI513.SPL (Breach)
   See(Player5)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_CHAOTIC_COMMANDS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_ENERGY)
       CheckStatGT(LastSeenBy(Myself),0,STONESKINS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_FIRE_SHIELD)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_BREACH) // SPWI513.SPL (Breach)
END

IF
   Allegiance(Myself,EVILCUTOFF)
   OR(2)
       !GlobalTimerNotExpired("OH_Cast","LOCALS")
       CheckStatGT(Myself,0,AURACLEANSING)
   !GlobalTimerNotExpired("OH_TStop","LOCALS")
   HaveSpell(WIZARD_BREACH) // SPWI513.SPL (Breach)
   See(Player6)
   !StateCheck(LastSeenBy(Myself),STATE_NOT_TARGETABLE)
   !CheckStat(LastSeenBy(Myself),1,WIZARD_SPELL_IMMUNITY)
   OR(5)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
       CheckStatGT(LastSeenBy(Myself),0,CLERIC_CHAOTIC_COMMANDS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_PROTECTION_FROM_MAGIC_ENERGY)
       CheckStatGT(LastSeenBy(Myself),0,STONESKINS)
       CheckStatGT(LastSeenBy(Myself),0,WIZARD_FIRE_SHIELD)
   CheckStatLT(Myself,50,SPELLFAILUREMAGE)
   !CheckStatGT(Myself,0,CLERIC_INSECT_PLAGUE)
   !StateCheck(Myself,STATE_SILENCED)
THEN
   RESPONSE #100
       SetGlobalTimer("OH_Cast","LOCALS",6)
       Spell(LastSeenBy(Myself),WIZARD_BREACH) // SPWI513.SPL (Breach)
END

IF
   HaveSpell(WIZARD_GHOUL_TOUCH) // SPWI218.SPL (Ghoul Touch)
   See(NearestEnemyOf(Myself))
   Range(NearestEnemyOf(Myself),5)
   RandomNumLT(100,10)
THEN
   RESPONSE #100
       Spell(LastSeenBy(Myself),WIZARD_GHOUL_TOUCH) // SPWI218.SPL (Ghoul Touch)
       Wait(2)
END

IF
   HaveSpell(WIZARD_HOLD_PERSON) // SPWI306.SPL (Hold Person)
   See(NearestEnemyOf(Myself))
   !StateCheck(LastSeenBy(Myself),STATE_HELPLESS)
   !Global("CREATURE_STATE_VARBit4","LOCALS",1)
THEN
   RESPONSE #100
       SetGlobal("CREATURE_STATE_VARBit4","LOCALS",1)
       Spell(LastSeenBy(Myself),WIZARD_HOLD_PERSON) // SPWI306.SPL (Hold Person)
       Wait(2)
END

IF
   HaveSpell(WIZARD_HOLD_PERSON) // SPWI306.SPL (Hold Person)
   See(NearestEnemyOf(Myself))
   !StateCheck(LastSeenBy(Myself),STATE_HELPLESS)
   RandomNumLT(100,5)
THEN
   RESPONSE #100
       Spell(LastSeenBy(Myself),WIZARD_HOLD_PERSON) // SPWI306.SPL (Hold Person)
       Wait(2)
END

IF
   See(NearestEnemyOf(Myself))
THEN
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_COLOR_SPRAY) // SPWI105.SPL (Color Spray)
       Wait(2)
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_MAGIC_MISSILE) // SPWI112.SPL (Magic Missile)
       Wait(2)
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_LARLOCH_MINOR_DRAIN) // SPWI119.SPL (Larloch's Minor Drain)
       Wait(2)
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_HORROR) // SPWI205.SPL (Horror)
       Wait(2)
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_LIGHTNING_BOLT) // SPWI308.SPL (Lightning Bolt)
       Wait(2)
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_SLOW) // SPWI312.SPL (Slow)
       Wait(2)
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_ICE_STORM) // SPWI404.SPL (Ice Storm)
       Wait(2)
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_BELTYNS_BURNING_BLOOD) // SPWI422.SPL (Beltyn's Burning Blood)
       Wait(2)
   RESPONSE #100
       ForceSpell(LastSeenBy(Myself),WIZARD_CONE_OF_COLD) // SPWI503.SPL (Cone of Cold)
       Wait(2)
   RESPONSE #100
       ForceSpell(Myself,WIZARD_BLUR) // SPWI201.SPL (Blur)
       Wait(2)
   RESPONSE #100
       ForceSpell(Myself,WIZARD_PROTECTION_FROM_NORMAL_MISSILES) // SPWI311.SPL (Protection From Normal Missiles)
       Wait(2)
   RESPONSE #100
       ForceSpell(Myself,WIZARD_LUCK) // SPWI209.SPL (Luck)
       Wait(2)
   RESPONSE #100
       ForceSpell(Myself,WIZARD_MIRROR_IMAGE) // SPWI212.SPL (Mirror Image)
       Wait(2)
END

IF
   AttackedBy([GOODCUTOFF],DEFAULT)
THEN
   RESPONSE #100
       Enemy()
       Continue()
END

IF
   NumTimesTalkedTo(0)
   See([PC])
   !Allegiance(Myself,ENEMY)
   !StateCheck(Myself,STATE_REALLY_DEAD)
THEN
   RESPONSE #100
       StartCutSceneMode()
       ClearAllActions()
       MultiPlayerSync()
       StartDialogueNoSet(PartySlot1)
END

IF
   ActionListEmpty()
   !NearSavedLocation(Myself,"#savedloc",36)
THEN
   RESPONSE #100
       MoveToSavedLocationn("#savedloc","LOCALS")
END

IF
   ActionListEmpty()
THEN
   RESPONSE #100
       RandomWalk()
       Wait(5)
END

In addition to the scripted spells near the bottom of that list, and despite being a level 18 mage (via her .CRE), the known spells are only Hold Person, Spell Thrust, Minor Globe of Inulvn, Spirit Armor, Secret World, Breach, Oracle, True Sight and Ruby Ray of Reversal. Most of those you wouldn't have qualified for, and the few scripited spells she has you might have gotten lucky weren't cast on you (Ice Storm, Beltyn's Burning Blood)
 

Tigranes

Arcane
Joined
Jan 8, 2009
Messages
10,350
I don't know if EE changes anything, but that sounds right. On one occasion, when I had left Kontik long enough, she did cast Ice Storm and Beltyn, finishing the Jansens off. So the only things I've not seen are the protection debuffs, because the Jansens are never buffed. (So the question is why this enemy, an optional fight in a late game dungeon, doesn't have a better spell loadout in the locker.)

I am very skeptical that there's any kind of flat level scaling, yeah, and it is more likely that I've been getting lucky with incidents like the lich, but we shall see with Malavon.

Funnily enough, for a long period with these Jansens, I thought it is a great thing and a tribute to AD&D / IE games that the Jansens can be so competitive with good gear, good tactics and a dollop of metaknowledge. I still think that, but I think this experience also reveals some of the weaknesses or oddities of IWD's encounters that are usually concealed in proper runs. Mages and spellcasters, in general, are too trivial and appear too infrequently; I know not everyone loves the BG2 mageduels, but IWD is mostly characterised by monsters swinging axes and appendages at you rather than doing anything particularly interesting, which is one of the reasons that Haste is the most powerful spell for the party. There are nice touches with opponents that poison you, specific encounters where enemies assail you from difficult positions, etc., but for the most part encounter design involves plopping down some mooks that lumber at you from the front. As flawed as IWD2 is in numerous ways, that's why I really appreciate its effort to spice up encounters.
 

Sigourn

uooh afficionado
Joined
Feb 6, 2016
Messages
5,662
I know not everyone loves the BG2 mageduels, but IWD is mostly characterised by monsters swinging axes and appendages at you rather than doing anything particularly interesting, which is one of the reasons that Haste is the most powerful spell for the party. There are nice touches with opponents that poison you, specific encounters where enemies assail you from difficult positions, etc., but for the most part encounter design involves plopping down some mooks that lumber at you from the front. As flawed as IWD2 is in numerous ways, that's why I really appreciate its effort to spice up encounters.

I haven't played BG2, but this is my experience with IWD so far. I'm doing Trials of the Luremaster, and the only enemies that have been a significant pain in my ass have been magic-users, or enemies too strong for my early-game party (which only had two damage dealers).
 

Tigranes

Arcane
Joined
Jan 8, 2009
Messages
10,350
OK, so, Level One Jansens v. Malavon.

In terms of the challenge, it is a ridiculous one. After a while, I settled on an opening: Francis Jansen sneaks up and experiments with poison in the bloodsystem to start us off:

xN4kwN6.png


And then we throw in an oil of fiery burning and, most importantly, a Chaos Scroll, which as we all know gets the Umber Hulks almost every time. (Sometimes it even gets Malavon.) Between all of that, Malavon (the Simulacrum) is usually dead without ever seeing the rest of the Jansens. We assume that he curses the Invisible Army of Gnomes that have assailed him this day.

The problem comes with the Iron Golems. Snakeoiled Ludwig at -16AC is still hti reliably; every hit does around 25-35 damage, when Ludwig is our most hale at 22; and we ourselves, with THAC0s averaging around 17, can only hit them infrequently. They are of course effectively immune to most forms of magic, not that we can cast a whole lot. Without ranged damage, the party is reduced to kiting like a motherfucker relying on Beginner's Luck; it might be possible to bring them down, but really I don't see any non-tedious way to do it.

Obviously, the answer was to loot Malavon's body then get the hell out of there. Or so you think, until you realise the true Malavon is scripted to appear only after the Golems are killed, and the area transition is sealed off during the fight. Ugh. I tried Ctrl+Y'ing the golems, because it seemed clear to me that the Jansens either give up here, or spend a couple of hours microkiting and drinking a hundred healing potions, and I don't really look forward to that. I'm open to suggestions on tackling them better.

The real Malavon does not disappoint, however, and seems to confirm that there's no level scaling, just weak ass mages. Malavon finally provides overwhelming magical superiority. Buffed until he is practically untouchable by the party's attacks, his spinning roulette took out the entire party and left Rene Jansen at one health:

FEBCR9M.png


The plucky Rene persisted, and even ran circles around Malavon's own acid fog to get rid of the summoned Earth Elementals, but was promptly turned into Stone.

It took several reloads to take care of Malavon - but perhaps because the Jansens themselves are so limited in what they can do, the enemies in this run have tended to follow a pretty strict script. Dodge the webs and acid fogs (at one point, he stood in his own); quickly bring down his summons; expend some of our summon scrolls to attract the Flesh to Stone and even Malavon's Rage spells.

In the end, because our single dispel magic scroll rarely dispelled anything, we could never really hit Malavon, and were reduced to expending scrolls (a single Flame Arrow, which I had kept for hours), the Aganazzar's Scorcher rounds from the Cloak. And, finally, with the rest of the party removed from the fight by Web, and poor Ludwig turned to stone, Baruch Spinoza equips the Breath of Auril - cursed, if you remember - and activates its two daily charges of Cone of Cold. The 14 damage seems to confirm that the ability, at least, fires at higher than Baruch's spellcasting level of one.

So Malavon is beatable, but the Iron Golems are not, at least not without very tedious cheesing? What am I forgetting?
 

As an Amazon Associate, rpgcodex.net earns from qualifying purchases.
Back
Top Bottom