Jump to content

Detect Evil


Kish

Recommended Posts

The three separate Detect Evil topics have been merged, so the thread may seem a bit disjointed. For the record, Baldurdash changes the 'Detect Evil' effect to mode 3, dispel/bypass MR. devSin changes this to 0, no dispel/bypass MR.

 

There are going to be a few problems regardless. The statues and other creatures which are immune to low-level spells are always going to return the Spell Ineffective message short of not being targeted. I was considering ways around the MR message at least--perhaps we could try the LMD/Vampiric Touch trick where we use a spell to cast a spell, with the former bypassing MR and the latter checking it. The problem is that we're still going to get an MR check notice in the window at some point, but it would at least be for a blank spell name.

Link to comment

Isn't the string applied to the object instead of the spell? It would still say EvilCreName - Magic Resistance, even if you used some nameless spell. So all the resistance is really doing is pointing out that a creature is evil *and* has some amount of magic resistance, whereas the change to bypassing resistance simply changes the string and adds the stupid glow.

Link to comment

Yeh, if the MR message only shows up on evil creatures, then that's a problem and the check may as well be removed completely for the sake of clarity. If it shows up on all creatures then that still sucks because it shouldn't be able to scout the area for magic-resistant creatures (same with True Sight), but there's probably not really anything we can do. I forget which is the case now.

Link to comment

OK, I've finally got a working solution to this. I've created a new projectile so that Detect Evil now only works in visual range, per the description. We need to decide if the MR check stays or goes:

 

Leave MR check

All creaures (good and evil) with MR can potentially return 'Magic Resistance'. This is, IMO, not a big issue as the spell no longer works over the entire area. An evil magic resistant creature only returns evil if the MR check fails.

 

Remove MR check

All evil creatures in visual range return 'Evil' strings. The bonus here is that no Magic Resistance information is learned.

 

Of the two, I much favor leaving in the MR check. Thoughts?

 

edit: added code.

 

ADD_PROJECTILE ~bg2fixpack/pro/CDDETEVL.pro~

// this spell only needed if we're checking MR
COPY ~bg2fixpack/spl/CDDETEVL.spl~ ~override~
 SAY NAME1 #-1
 SAY NAME2 #-1

COPY_EXISTING ~spcl212.spl~ ~override~ // detect evil (paladin innate)
             ~spin120.spl~ ~override~ // detect evil (bhaalspawn innate)
             ~spin696.spl~ ~override~ // moon dog sight
             ~sppr104.spl~ ~override~ // detect evil (cleric spell)
             ~spwi202.spl~ ~override~ // detect evil (mage spell)
 READ_LONG   0x64 "abil_off"
 READ_SHORT  0x68 "abil_num"
 READ_LONG   0x6a "fx_off"
 FOR (index = 0; index < abil_num; index = index + 1) BEGIN // loop through abilities
   WRITE_BYTE  ("%abil_off%" + 0x0e + ("%index%" * 0x28)) 5            // target: caster
   WRITE_SHORT ("%abil_off%" + 0x26 + ("%index%" * 0x28)) "%CDDETEVL%" // custom projectile
   READ_SHORT  ("%abil_off%" + 0x1e + ("%index%" * 0x28)) "abil_fx_num"
   READ_SHORT  ("%abil_off%" + 0x20 + ("%index%" * 0x28)) "abil_fx_idx"
   FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN // looks for effects for abilities
     READ_SHORT  ("%fx_off%" +        (("%abil_fx_idx%" + "%index2%") * 0x30)) "opcode"
     PATCH_IF ("%opcode%" = 115) BEGIN // detect alignment; only target change is needed if we drop the MR check
       WRITE_SHORT ("%fx_off%" +        (("%abil_fx_idx%" + "%index2%") * 0x30)) 146        // opcode: cast spell
       WRITE_BYTE  ("%fx_off%" + 0x02 + (("%abil_fx_idx%" + "%index2%") * 0x30)) 2          // target: preset target
       WRITE_BYTE  ("%fx_off%" + 0x03 + (("%abil_fx_idx%" + "%index2%") * 0x30)) 1          // power
       WRITE_LONG  ("%fx_off%" + 0x04 + (("%abil_fx_idx%" + "%index2%") * 0x30)) 1          // cast at level
       WRITE_LONG  ("%fx_off%" + 0x08 + (("%abil_fx_idx%" + "%index2%") * 0x30)) 1          // cast instantly: yes
       WRITE_ASCII ("%fx_off%" + 0x14 + (("%abil_fx_idx%" + "%index2%") * 0x30)) ~cddetevl~ // spell to cast
     END
   END
 END
 BUT_ONLY_IF_IT_CHANGES

 

cddetevl.spl is a spell that just has the Detect Alignment opcode. Projectiles naturally bypas MR, so using a spell to a spell is the only way we can use a projectile and check MR. Anyone know the proper radius value for a 60' circle in a .pro file? 256 is a 30' radius, but I can't determine if it scales linearly or not--512 seems to yield a slightly larger radius than visual (60').

Link to comment

I guess wether or not the MR check should stay depends on how the spell works. If it's "smelling" the evil that wafts off someone, then it should go, but if it's looking into a person, I'd say leave it. But unless the spell description has anything to say on that, I'd say take it out. Some stuff in 3rd Edition indicates that evil/good can be considrered as an aura, rather than as something completely internal and that's the view I've always taken for these things.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...