Jump to content

Sword Coast Stratagems v34 (edit: 34.3) now available


Recommended Posts

54 minutes ago, Guest Morgoth said:

if you installed dark side kobolds, it's intended. 

But SCS documentation states:

"Kobold commandos get an enhanced Dexterity score and an extra pip in Shortbow (low-level humanoids are only normally allowed 1 pip) to compensate for the decrease in their abilities from standardising THAC0 and toning down elemental arrows. (They should now be about back up to vanilla power)."

Link to comment

So just had my first run-in with Kangaxx.

Readme states he's supposed to be level 35 in demilich form, but he's 30, same as in his regular lich form. On top of that, he never once used trap the soul. Literally sat the whole party around him with no protections console healing them until he ran out of spells, and he didn't use it once. Oh yeah, and low level anti magic spells like secret word work on him even in demilich form.

Latest bg2ee and scs versions.

On a related note, can anyone recommend a game and scs version combo that is really solid? Because honestly, I'm finding problems with this one daily and it's starting to drain me.

Edited by boof
Link to comment

That would be the "spellcasting demiliches" component changing things on you. The component intentionally removes their blanket immunity to level 6+ spells, though they still have a number of specific immunities. In addition, it removes the script that previously used Trap the Soul, and doesn't include the spell in the new spellcaster script that replaces it - that part might be an oversight.

You're not necessarily immune to imprisonment in that fight; Kangaxx gets level 9 spells which can include the mage version.

As for Secret Word working, that hits as a level 5 spell, and the component that makes Breach work on liches and the like removes blanket level 5 immunity. There are a number of specific immunities that get added to replace it, but protection-breakers like Secret Word and Breach are allowed through. The one spell breaker that doesn't work is Spell Thrust (hits as level 4); all that does against a lich or demilich is trade with a Spell Shield.

Link to comment

Trap the Soul is included in the Override script though, which should be there even if Spellcasting Demiliches is installed, but if Iook closer to my script, that !PC and NEUTRAL is probably the problem.

IF
	!GlobalTimerNotExpired("castspell","LOCALS")
	!See([PC])
	See([NEUTRAL])
THEN
	RESPONSE #100
		SetGlobalTimer("castspell","LOCALS",ONE_ROUND)
		ForceSpell(LastSeenBy(Myself),DEMILICH_TRAP_SOUL)  // SPIN788.SPL (Trap the Soul)
	RESPONSE #100
		SetGlobalTimer("castspell","LOCALS",ONE_ROUND)
		SpellNoDec(LastSeenBy(Myself),WIZARD_FLAME_ARROW)  // SPWI303.SPL (Flame Arrow)
	RESPONSE #100
		SetGlobalTimer("castspell","LOCALS",ONE_ROUND)
		SpellNoDec(LastSeenBy(Myself),WIZARD_SKULL_TRAP)  // SPWI313.SPL (Skull Trap)
END

 

Link to comment
9 hours ago, boof said:

On top of that, he never once used trap the soul.

Some time ago I was looking for the same thing and I found that the trap soul ability is includ in the dw#lich.ssl file that is installed once you choose component 6030 (smarter mages):

\stratagems\mage\ssl\combatblocks\dw#lich.ssl:
 

Spoiler

//////////////////////////////////////////////////////////////////////////////////////
///    demilich soul trap
///////////////////////////////////////////////////////////////////////////////////

INCLUDE FILE(%MOD_FOLDER%/mage/ssl/combatblocks/trap_the_soul.ssl)

however this file (trap_the_soul.ssl) is empty... so the trap soul ability is not created as it should.

In v33.7 the file (trap_the_soul.ssl) was:

Spoiler

//////////////////////////////////////////////////////////////////////////
////  Trap the Soul
/////////////////////////////////////////////////////////////////////////

IF TRIGGER
    IgnoreBlock(SafeImprisonment)
         !GlobalTimerNotExpired("trapsoul","LOCALS")
    TargetBlock(PCsInOrder)
    TargetBlock(Celestials)
    !GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    !GlobalTimerNotExpired("timestop","LOCALS")
    TriggerBlock(SpellTurn|Enemy|Helpless)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        !CheckStat(scstarget,1,WIZARD_SPELL_IMMUNITY)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        CheckStatGT(scstarget,0,SAVEVSDEATH)
    OR(2)
        !InPartySlot(scstarget,0) // isn't Player 1
        Global("DMWWImprisonPlayer","GLOBAL",1)
THEN DO
    Combine()
    SetGlobalTimer("trapsoul","LOCALS",6)
    Action(ReallyForceSpell,DEMILICH_TRAP_SOUL)
END

IF TRIGGER
    IgnoreBlock(SafeImprisonment)
         !GlobalTimerNotExpired("trapsoul","LOCALS")
    TargetBlock(PCsInOrder)
    TargetBlock(Celestials)
    !GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    !GlobalTimerNotExpired("timestop","LOCALS")
    TriggerBlock(SpellTurn|Enemy|Helpless)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        !CheckStat(scstarget,1,WIZARD_SPELL_IMMUNITY)
    OR(2)
        !InPartySlot(scstarget,0) // isn't Player 1
        Global("DMWWImprisonPlayer","GLOBAL",1)
THEN DO
    Combine()
    SetGlobalTimer("trapsoul","LOCALS",6)
    Action(ReallyForceSpell,DEMILICH_TRAP_SOUL)
END

IF TRIGGER
    RequireBlock(SafeImprisonment)
         !GlobalTimerNotExpired("trapsoul","LOCALS")
    TargetBlock(PCsInOrder)
    TargetBlock(Celestials)
    !GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    !GlobalTimerNotExpired("timestop","LOCALS")
    TriggerBlock(SpellTurn|Enemy|Helpless)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        !CheckStat(scstarget,1,WIZARD_SPELL_IMMUNITY)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        CheckStatGT(scstarget,0,SAVEVSDEATH)
THEN DO
    Combine()
    SetGlobalTimer("trapsoul","LOCALS",6)
    Action(ReallyForceSpell,DEMILICH_TRAP_SOUL)
END

IF TRIGGER
    RequireBlock(SafeImprisonment)
         !GlobalTimerNotExpired("trapsoul","LOCALS")
    TargetBlock(PCsInOrder)
    TargetBlock(Celestials)
    !GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    !GlobalTimerNotExpired("timestop","LOCALS")
    TriggerBlock(SpellTurn|Enemy|Helpless)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        !CheckStat(scstarget,1,WIZARD_SPELL_IMMUNITY)
THEN DO
    Combine()
    SetGlobalTimer("trapsoul","LOCALS",6)
    Action(ReallyForceSpell,DEMILICH_TRAP_SOUL)
END

I thinks it is an overview, so if you choose to reinstall Stratagems you should use the above file "trap_the_soul.ssl" (copy/past).

As I am at it, There are two other empty file : fleecloud_fm.ssl (marter mage) and gohostile.ssl (smarter priest).

For fleecloud_fm.ssl it should be  :

Spoiler

DEFAULT TRIGGER( OR(2) ActionListEmpty() !GlobalTimerExpired("castspell","LOCALS"))
BEGIN LOOP(scscloudmelee|| )
BEGIN LOOP(scscloudresponse|| RunAwayFrom(LastHeardBy(Myself),30))
INCLUDE FILE(%MOD_FOLDER%/genai/ssl/fleecloud.ssl)
END LOOP
END LOOP

DEFAULT TRIGGER( OR(2) ActionListEmpty() !GlobalTimerExpired("castspell","LOCALS"))
BEGIN LOOP(scscloudmelee||See([PC]) )
BEGIN LOOP(scscloudresponse|| MoveToObject([PC]))
INCLUDE FILE(%MOD_FOLDER%/genai/ssl/fleecloud.ssl)
END LOOP
END LOOP
DEFAULT TRIGGER()

For gohostile.ssl it should be:

Spoiler

/// strictly the "go hostile" block, but here we incorporate various
/// other combat-related things to be done before sighting the foe

//////////////////////////////////////////////////////////////////
///////   Top of chase block
//////////////////////////////////////////////////////////////////

INCLUDE FILE(%MOD_FOLDER%/genai/ssl/chase_top.ssl)

//////////////////////////////////////////////////////////////////
///////    Record created-in-sight status
//////////////////////////////////////////////////////////////////

IF TRIGGER
    Global("created_out_of_sight","LOCALS",0)
    OR(2)
        !Allegiance(Myself,ENEMY)
        !See(NearestEnemyOf(Myself))
THEN DO
      Action(Literal)
      SetGlobal("created_out_of_sight","LOCALS",1)
      Continue()
END

//////////////////////////////////////////////////////////////////
///////    Go hostile
//////////////////////////////////////////////////////////////////

IF TRIGGER
    !Allegiance(Myself,ENEMY)
    TriggerBlock(AttackedByPlayer)
    IgnoreBlock(NeverGoHostile)
THEN DO
      Action(Literal)
      Enemy()
      Continue()
END

///////////////////////////////////////////////////
////    If attacked by an unseen foe, mill around
////    in confusion. You never know, you might
////    bump into them!
//////////////////////////////////////////////////

IF TRIGGER
      Allegiance(Myself,ENEMY)
      RequireBlock(EasyPlus)
    OR(12)
      AttackedBy([GOODCUTOFF.0.0.0.0.SUMMONED],DEFAULT)
      AttackedBy([PC],DEFAULT)
      AttackedBy([FAMILIAR],DEFAULT)
      AttackedBy([ALLY],DEFAULT)
      AttackedBy([CONTROLLED],DEFAULT)
      AttackedBy([CHARMED],DEFAULT)
      SpellCastOnMe([GOODCUTOFF.0.0.0.0.SUMMONED],0)
      SpellCastOnMe([PC],0)
      SpellCastOnMe([FAMILIAR],0)
      SpellCastOnMe([ALLY],0)
      SpellCastOnMe([CONTROLLED],0)
      SpellCastOnMe([CHARMED],0)
!GlobalTimerNotExpired("whatthe","LOCALS")
  !See(NearestEnemyOf(Myself))
THEN DO
    Action(Literal)
    SetGlobalTimer("whatthe","LOCALS",12)
    SetGlobal("inafight","LOCALS",1)
    Continue()
END

IF TRIGGER
  RequireBlock(EasyPlus)
  !See(NearestEnemyOf(Myself))
  !Heard([ANYONE],404)
  GlobalTimerNotExpired("whatthe","LOCALS")
THEN DO
    Action(Literal)
    RandomWalkContinuous()
END

/////////////////////////////////////////////////////////////////
///    Handle Cloud Kill spells
/////////////////////////////////////////////////////////////////

IF
    Heard([ANYONE],404)
    !General(Myself,UNDEAD)
    !Race(Myself,RAKSHASA)
    !Race(Myself,DEMONIC)
    !See([PC])
    Range(LastHeardBy(Myself),20)
THEN
    RESPONSE #100
        SetInterrupt(FALSE)
        RunAwayFrom(LastHeardBy(Myself),45)
        SetInterrupt(TRUE)
END

/////////////////////////////////////////////////////////////////
///    Block to prevent neutrals prebuffing
/////////////////////////////////////////////////////////////////

IF    
    !Allegiance(Myself,ENEMY)
    !HasItem("dw#mally",Myself)
    !Global("DMWWNeutralPrebuff","GLOBAL",1)
THEN
    RESPONSE #100
        NoAction()
END

 

Edited by TotoR
Link to comment
3 hours ago, jmerry said:

As for Secret Word working, that hits as a level 5 spell

Hm ok, that's news to me. Didn't see that documented anywhere.

 

3 hours ago, TotoR said:

Some time ago I was looking for the same thing and I found that the trap soul ability is includ in the dw#lich.ssl file that is installed once you choose component 6030 (smarter mages):

\stratagems\mage\ssl\combatblocks\dw#lich.ssl:
 

  Reveal hidden contents

//////////////////////////////////////////////////////////////////////////////////////
///    demilich soul trap
///////////////////////////////////////////////////////////////////////////////////

INCLUDE FILE(%MOD_FOLDER%/mage/ssl/combatblocks/trap_the_soul.ssl)

however this file (trap_the_soul.ssl) is empty... so the trap soul ability is not created as it should.

In v33.7 the file (trap_the_soul.ssl) was:

  Reveal hidden contents

//////////////////////////////////////////////////////////////////////////
////  Trap the Soul
/////////////////////////////////////////////////////////////////////////

IF TRIGGER
    IgnoreBlock(SafeImprisonment)
         !GlobalTimerNotExpired("trapsoul","LOCALS")
    TargetBlock(PCsInOrder)
    TargetBlock(Celestials)
    !GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    !GlobalTimerNotExpired("timestop","LOCALS")
    TriggerBlock(SpellTurn|Enemy|Helpless)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        !CheckStat(scstarget,1,WIZARD_SPELL_IMMUNITY)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        CheckStatGT(scstarget,0,SAVEVSDEATH)
    OR(2)
        !InPartySlot(scstarget,0) // isn't Player 1
        Global("DMWWImprisonPlayer","GLOBAL",1)
THEN DO
    Combine()
    SetGlobalTimer("trapsoul","LOCALS",6)
    Action(ReallyForceSpell,DEMILICH_TRAP_SOUL)
END

IF TRIGGER
    IgnoreBlock(SafeImprisonment)
         !GlobalTimerNotExpired("trapsoul","LOCALS")
    TargetBlock(PCsInOrder)
    TargetBlock(Celestials)
    !GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    !GlobalTimerNotExpired("timestop","LOCALS")
    TriggerBlock(SpellTurn|Enemy|Helpless)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        !CheckStat(scstarget,1,WIZARD_SPELL_IMMUNITY)
    OR(2)
        !InPartySlot(scstarget,0) // isn't Player 1
        Global("DMWWImprisonPlayer","GLOBAL",1)
THEN DO
    Combine()
    SetGlobalTimer("trapsoul","LOCALS",6)
    Action(ReallyForceSpell,DEMILICH_TRAP_SOUL)
END

IF TRIGGER
    RequireBlock(SafeImprisonment)
         !GlobalTimerNotExpired("trapsoul","LOCALS")
    TargetBlock(PCsInOrder)
    TargetBlock(Celestials)
    !GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    !GlobalTimerNotExpired("timestop","LOCALS")
    TriggerBlock(SpellTurn|Enemy|Helpless)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        !CheckStat(scstarget,1,WIZARD_SPELL_IMMUNITY)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        CheckStatGT(scstarget,0,SAVEVSDEATH)
THEN DO
    Combine()
    SetGlobalTimer("trapsoul","LOCALS",6)
    Action(ReallyForceSpell,DEMILICH_TRAP_SOUL)
END

IF TRIGGER
    RequireBlock(SafeImprisonment)
         !GlobalTimerNotExpired("trapsoul","LOCALS")
    TargetBlock(PCsInOrder)
    TargetBlock(Celestials)
    !GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    !GlobalTimerNotExpired("timestop","LOCALS")
    TriggerBlock(SpellTurn|Enemy|Helpless)
    OR(2)
        GlobalTimerNotExpired("seeabjuration","LOCALS")
        !CheckStat(scstarget,1,WIZARD_SPELL_IMMUNITY)
THEN DO
    Combine()
    SetGlobalTimer("trapsoul","LOCALS",6)
    Action(ReallyForceSpell,DEMILICH_TRAP_SOUL)
END

I thinks it is an overview, so if you choose to reinstall Stratagems you should use the above file "trap_the_soul.ssl" (copy/past).

As I am at it, There are two other empty file : fleecloud_fm.ssl (marter mage) and gohostile.ssl (smarter priest).

For fleecloud_fm.ssl it should be  :

  Reveal hidden contents

DEFAULT TRIGGER( OR(2) ActionListEmpty() !GlobalTimerExpired("castspell","LOCALS"))
BEGIN LOOP(scscloudmelee|| )
BEGIN LOOP(scscloudresponse|| RunAwayFrom(LastHeardBy(Myself),30))
INCLUDE FILE(%MOD_FOLDER%/genai/ssl/fleecloud.ssl)
END LOOP
END LOOP

DEFAULT TRIGGER( OR(2) ActionListEmpty() !GlobalTimerExpired("castspell","LOCALS"))
BEGIN LOOP(scscloudmelee||See([PC]) )
BEGIN LOOP(scscloudresponse|| MoveToObject([PC]))
INCLUDE FILE(%MOD_FOLDER%/genai/ssl/fleecloud.ssl)
END LOOP
END LOOP
DEFAULT TRIGGER()

For gohostile.ssl it should be:

  Reveal hidden contents

/// strictly the "go hostile" block, but here we incorporate various
/// other combat-related things to be done before sighting the foe

//////////////////////////////////////////////////////////////////
///////   Top of chase block
//////////////////////////////////////////////////////////////////

INCLUDE FILE(%MOD_FOLDER%/genai/ssl/chase_top.ssl)

//////////////////////////////////////////////////////////////////
///////    Record created-in-sight status
//////////////////////////////////////////////////////////////////

IF TRIGGER
    Global("created_out_of_sight","LOCALS",0)
    OR(2)
        !Allegiance(Myself,ENEMY)
        !See(NearestEnemyOf(Myself))
THEN DO
      Action(Literal)
      SetGlobal("created_out_of_sight","LOCALS",1)
      Continue()
END

//////////////////////////////////////////////////////////////////
///////    Go hostile
//////////////////////////////////////////////////////////////////

IF TRIGGER
    !Allegiance(Myself,ENEMY)
    TriggerBlock(AttackedByPlayer)
    IgnoreBlock(NeverGoHostile)
THEN DO
      Action(Literal)
      Enemy()
      Continue()
END

///////////////////////////////////////////////////
////    If attacked by an unseen foe, mill around
////    in confusion. You never know, you might
////    bump into them!
//////////////////////////////////////////////////

IF TRIGGER
      Allegiance(Myself,ENEMY)
      RequireBlock(EasyPlus)
    OR(12)
      AttackedBy([GOODCUTOFF.0.0.0.0.SUMMONED],DEFAULT)
      AttackedBy([PC],DEFAULT)
      AttackedBy([FAMILIAR],DEFAULT)
      AttackedBy([ALLY],DEFAULT)
      AttackedBy([CONTROLLED],DEFAULT)
      AttackedBy([CHARMED],DEFAULT)
      SpellCastOnMe([GOODCUTOFF.0.0.0.0.SUMMONED],0)
      SpellCastOnMe([PC],0)
      SpellCastOnMe([FAMILIAR],0)
      SpellCastOnMe([ALLY],0)
      SpellCastOnMe([CONTROLLED],0)
      SpellCastOnMe([CHARMED],0)
!GlobalTimerNotExpired("whatthe","LOCALS")
  !See(NearestEnemyOf(Myself))
THEN DO
    Action(Literal)
    SetGlobalTimer("whatthe","LOCALS",12)
    SetGlobal("inafight","LOCALS",1)
    Continue()
END

IF TRIGGER
  RequireBlock(EasyPlus)
  !See(NearestEnemyOf(Myself))
  !Heard([ANYONE],404)
  GlobalTimerNotExpired("whatthe","LOCALS")
THEN DO
    Action(Literal)
    RandomWalkContinuous()
END

/////////////////////////////////////////////////////////////////
///    Handle Cloud Kill spells
/////////////////////////////////////////////////////////////////

IF
    Heard([ANYONE],404)
    !General(Myself,UNDEAD)
    !Race(Myself,RAKSHASA)
    !Race(Myself,DEMONIC)
    !See([PC])
    Range(LastHeardBy(Myself),20)
THEN
    RESPONSE #100
        SetInterrupt(FALSE)
        RunAwayFrom(LastHeardBy(Myself),45)
        SetInterrupt(TRUE)
END

/////////////////////////////////////////////////////////////////
///    Block to prevent neutrals prebuffing
/////////////////////////////////////////////////////////////////

IF    
    !Allegiance(Myself,ENEMY)
    !HasItem("dw#mally",Myself)
    !Global("DMWWNeutralPrebuff","GLOBAL",1)
THEN
    RESPONSE #100
        NoAction()
END

 

Interesting, thanks for that.

So I'd have to reinstall for this to work? Can't just copy paste into the empty files now?

Link to comment
On 1/14/2022 at 11:06 AM, TotoR said:

As I am at it, There are two other empty file : fleecloud_fm.ssl (marter mage) and gohostile.ssl (smarter priest).

Files bodhi/ssl/bodhi_setup.ssl and caster_shared/clericmage/ssl/cmraksh.ssl are also empty.  I'm not sure what effect that has.

Link to comment

Those two were already empty as of SCS 33.7 - not sure whether it would be wise to go digging and adding their contents from an even earlier version.

Edit: bodhi_setup.ssl has been empty since SCS v31 at least; cmraksh.ssl didn't exist back then, checking. Perhaps they've always been empty as a quick repository search indicated.

While checking I saw that caster_shared\clericmage\druid_mages.2da is empty as well. Maybe they're all unused at the moment and might serve a purpose later down the line/haven't been scrapped.

I'm pretty new to this thus might be missing something evident.

Edited by Gordian
Link to comment
16 hours ago, Gordian said:

Those two were already empty as of SCS 33.7 - not sure whether it would be wise to go digging and adding their contents from an even earlier version.

Edit: bodhi_setup.ssl has been empty since SCS v31 at least; cmraksh.ssl didn't exist back then, checking. Perhaps they've always been empty as a quick repository search indicated.

While checking I saw that caster_shared\clericmage\druid_mages.2da is empty as well. Maybe they're all unused at the moment and might serve a purpose later down the line/haven't been scrapped.

I'm pretty new to this thus might be missing something evident.

I found content for cmraksh.ssl as recent as v33.4.  Here you go.

Spoiler
VARIABLE(IsRakshasa=True)
VARIABLE(ImmuneToNormal=True)


//////////////////////////////////////////////////////////////////////////////////
///
///   Define actions
///
////////////////////////////////////////////////////////////////////////////////////////

BEGIN LOOP(AttackReevaluate(scstarget,30)||AttackOneRound(scstarget))
INCLUDE FILE(%scsroot%/caster_shared/caster_definitions.ssl)
END LOOP
////////////////////////////////////////////////////////////////
/// Labelling, break-invisibility, hostile-undead, panic, etc
////////////////////////////////////////////////////////////////////////////////////////


INCLUDE FILE(%scsroot%/mage/ssl/main/preamble.ssl)

//////////////////////////////////////////////////////////////////////////////////
////    Setup, prep
//////////////////////////////////////////////////////////////////////////////////

INCLUDE FILE(%scsroot%/caster_shared/clericmage/ssl/clericmage_setup.ssl)

//////////////////////////////////////////////////////////////////////////////////
////    If non-hostile, closedown - this script doesn't pretend to fight bad guys
//////////////////////////////////////////////////////////////////////////////////

IF
        !Allegiance(Myself,ENEMY)
        IgnoreBlock(IsPartyAlly)
THEN
        RESPONSE #100
                NoAction()
END


//////////////////////////////////////////////////////////////////////
///CPU saver
//////////////////////////////////////////////////////////////////////

IF
        !Detect(NearestEnemyOf(Myself))
        !HPPercentLT(Myself,100)
        !Global("inafight","LOCALS",1)
THEN
        RESPONSE #100
                NoAction()
END

////////////////////////////////////////////////////////////////////////////
///     Contingencies renew defences
////////////////////////////////////////////////////////////////////////////

INCLUDE FILE(%scsroot%/mage/ssl/generalblocks/contingency.ssl)

///////////////////////////////////////////////////////////////////////////
//      Turn undead
///////////////////////////////////////////////////////////////////////////

IF
        IgnoreBlock(IsDruid)
        See([GOODCUTOFF.UNDEAD])
        !StateCheck(LastSeenBy(Myself),STATE_DISABLED)
        !GlobalTimerNotExpired("castspell","LOCALS")
        !GlobalTimerNotExpired("turninitialise","LOCALS")
THEN
        RESPONSE #100
                SetGlobalTimer("turninitialise","LOCALS",30)
                SetGlobalTimer("turning","LOCALS",4)
                Continue()
END

IF
        IgnoreBlock(IsDruid)
        See([GOODCUTOFF.UNDEAD])
        !StateCheck(LastSeenBy(Myself),STATE_DISABLED)
        !GlobalTimerNotExpired("castspell","LOCALS")
        OR(2)
                !GlobalTimerNotExpired("turninitialise","LOCALS")
                GlobalTimerNotExpired("turning","LOCALS")
THEN
        RESPONSE #100
                Turn()
END

///////////////////////////////////////////////////////////////////////////
//      Melee
///////////////////////////////////////////////////////////////////////////


INCLUDE FILE(%scsroot%/mage/ssl/generalblocks/melfsetup.ssl)
INCLUDE FILE(%scsroot%/priest/ssl/meleeblocks/touchattack.ssl)
INCLUDE FILE(%scsroot%/mage/ssl/meleeblocks/fmmelee.ssl)

//////////////////////////////////////////////////////////////////////////
// Renew and retreat
//////////////////////////////////////////////////////////////////////////

DEFAULT TRIGGER()
INCLUDE FILE(%scsroot%/mage/ssl/generalblocks/renew.ssl)
INCLUDE FILE(%scsroot%/priest/ssl/generalblocks/renew.ssl)

//////////////////////////////////////////////////////////////////////////
// Easiest-level block
//////////////////////////////////////////////////////////////////////////

DEFAULT TRIGGER()
INCLUDE FILE(%scsroot%/caster_shared/clericmage/ssl/easy.ssl)

//////////////////////////////////////////////////////////////////////////
// Look for PCs
//////////////////////////////////////////////////////////////////////////

DEFAULT TRIGGER(!GlobalTimerNotExpired("castspell","LOCALS"))

INCLUDE FILE(%scsroot%/mage/ssl/generalblocks/chase.ssl)

////////////////////////////////////////////////////////////////////////////
// Core magic block
///////////////////////////////////////////////////////////////////////////

DEFAULT TRIGGER()
INCLUDE FILE(%scsroot%/caster_shared/clericmage/ssl/standard_clericmage.ssl)


INCLUDE FILE(%scsroot%/mage/ssl/generalblocks/closedown.ssl)

 

As you say bodhi_setup.ssl has been empty for a long time, since 2018 at least according to the time stamps.

Edited by Angel
Link to comment
On 1/14/2022 at 3:43 AM, boof said:

 

On a related note, can anyone recommend a game and scs version combo that is really solid? Because honestly, I'm finding problems with this one daily and it's starting to drain me.

If you are looking for decent builds of SCS i would recommend something along with 32 version or early varieties of 33 version (for instance v 33.3 was pretty ok). I personally find v 32 a very solid and stable build and even with some very minor tweaks you can fix couple of bugs on your own. However if you use any other additional mods you might want to run a check for compatibility. I only use IRR and SRR as additional mods anlongside SCS and last time i checked (last summer) they were ok with v 32 SCS. But both IRR and SRR been updated regularly (which is pretty commendable) so again you better check for compatibility. Also i have heard that Tweaks had some issues with last v of SCS but i am not sure about it. Also, probably, its a good option, after all, to wait for next version of SCS since the current one been a complete mess.

Link to comment
Guest
This topic is now closed to further replies.
×
×
  • Create New...