Jump to content

AoE spells


Ardanis

Recommended Posts

Alright, testers may give it a try if they wish.

 

The list is most certainly NOT complete, I only have put there what I could catch quickly. Many projectiles are hardcoded into engine, which makes it a little hard to autodetect non-friendly AoE spells. Meaning that the list has to be built manually. Sorry.

 

Only AoE spells (whether defined as self-centered in the ability header or not) that may hurt both party and enemies fall in the category of exploitable. Horror, Slow, Malison, Chaos, etc. don't affect party and are clean. Web, Fireball, etc. are another matter.

 

Personally, I kind of agree that the MR bypassing glitch is a pure exploit, so why to care if someone wants to cheat...

 

During the tests I've discovered an interesting thing - if the secondary spell is single-targeted then it becomes a subject to Spell Deflecting/Turning/Trap. In other words, those spells now protect against modified AoE as well. I'm unsure if it's avoidable, but honestly I didn't even try to find out. Because a thought had suddenly struck me - it just builds a great feature on the bones of the cheese-removal. Usually no one in their sanity would try to waste a spell onto protected target, be that some pathetic Minor Spell Deflection or the almighty Spell Trap. Therefore there's little point in ever using high-level spell protections, as they would simply tell the opponent 'hit me with anti-magic instead of damage'. But if such protection may stop ~50 HP strong Abi-Dalzim (centered at someone else, at that), then suddenly having the Spell Deflection active makes a great difference. Moreover, the exploit-free spells like Slow/Chaos may now be stopped as well.

 

In terms of balance, it shouldn't hurt in any way. First, spell protections can finally have their significant power recognized as it should have been from the start. Second, no more choking a lich/high-level wizard with Abi-Dalzims (that IS an exploit if you ask me).

 

// AoE spells with MR issue

 

~spwi213~ // stinking cloud

~spwi215~ // web

~spwi304~ // fireball

~spwi313~ // skull trap

~spwi404~ // ice storm

~spwi502~ // cloud kill

~spwi503~ // cone of cold

// ~spwi523~ // sunfire

~spwi614~ // death fog

~spwi712~ // delayed blast fireball

~spwi714~ // prismatic spray

~spwi810~ // incendiary cloud

~spwi911~ // meteor swarm

 

~spwi922~ // dragon breath

~spwi925~ // comet

 

// ~sppr304~ // glyph of warding

~sppr313~ // holy smite

~sppr314~ // unholy blight

~sppr503~ // flame strike

~sppr705~ // fire storm

// ~sppr720~ // earthquake

 

// AoE spells without MR issues

 

~spwi205~ // horror

~spwi224~ // glitterdust

~spwi306~ // hold person

~spwi324~ // hold undead

~spwi312~ // slow

~spwi411~ // emotion

~spwi412~ // greater malison

~spwi421~ // teleprot field

~spwi507~ // hold monster

~spwi508~ // chaos

~spwi605~ // death spell

~spwi615~ // chain ligthning

~spwi711~ // sphere of chaos

~spwi720~ // control undead

// ~spwi811~ // symbol fear

~spwi812~ // abi-dalzim

// ~spwi816~ // symbol stun

// ~spwi817~ // symbol death

~spwi913~ // wail of banshee

 

~sppr105~ // entangle

~sppr208~ // hold person

~sppr305~ // hold animal

~sppr416~ // cloak of fear

~sppr517~ // insect plague

~sppr609~ // false dawn

~sppr704~ // nature's beauty

// ~sppr706~ // symbol fear

~sppr707~ // sunray

~sppr709~ // cunfusion

~sppr710~ // holy word

~sppr715~ // unholy word

~sppr717~ // creeping doom

// ~sppr718~ // symbol stun

// ~sppr719~ // symbol death

 

~sppr722~ // storm of vengeance

 

EDIT Have removed the old code.

Link to comment

AoE spells with MR issue

I wonder why Flame Strike, Dragon's Breath and Comet are in this list. They are party-friendly, aren't they?

 

Spell deflection/turing protects from single-target AoE spells

I assume when referring to single-target AoE spells you mean spells like Hold xxx and Flame Strike, etc. Personally I'm not for this tweak, because it is unfair to spells subject to the tweak: players can (I guess AI cannot) wisely cast FB or Horric Wilting at somewhere near the target to avoid deflection/turning.

Besides, I think there's no need to worry about the secondary single-target-AoE spell deflection/turning issue - can you think up a single-target-AoE spell that affects both friends and foes?

 

EDIT:

 

I've took a glance at your code, and seems you are using the following mechanism:

Primary spell:

-AoE projectile triggering secondary spell, cast at creature

Secondary spell:

(multiple) p2p projectile cast upon creatures caught within the AoE of the primary spell

 

Now I have a better understanding of your AoE turning/deflection idea. However:

1. If a FB catches multiple targets with Turning on them, then the original caster of FB would get multiple feedback!

2. I don't know how Taimon's exe patch handles MI. If he solves the issue by letting AoE projectile ignore MI, then your mechanism should take MI issue into account.

3. Will AI stop casting AoE at players with Turning on them?

 

After all, I prefer the "primary spell has secondary AoE spell cast at point" mechanism

 

PS: You forgot to set name and description of the secondary spell to "no index".

 

PSS: Some AoE spells have effect "Script: Set Global Variable [265]". Please keep them from the primary spell and delete them from the secondary spell, if necessary.

Link to comment
I wonder why Flame Strike, Dragon's Breath and Comet are in this list. They are party-friendly, aren't they?
My bad, apparently.

 

1. If a FB catches multiple targets with Turning on them, then the original caster of FB would get multiple feedback!

2. I don't know how Taimon's exe patch handles MI. If he solves the issue by letting AoE projectile ignore MI, then your mechanism should take MI issue into account.

3. Will AI stop casting AoE at players with Turning on them?

1. Most certainly :) Don't shoot Fireballs in the midst of wizards ;)

2. If they were marked as AoE earlier then that flag will automatically transfer into the secondary spell. Otherwise, the MI code I sent to Demi will need one more line to add Otherwise let me know if that's the case.

3. IIRC they don't cast anything at protected PCs, save antimagic. Sure, they may accidently hit someone standing near and suffer a backlash, but there're two points here:

a) they most likely have their own spell protections on

b) players may experience the same effect, not to mention the inability to easily kill a well protected enemy by casting a couple of powerful AoE spells nearby

 

After all, I prefer the "primary spell has secondary AoE spell cast at point" mechanism
Strangely enough, it didn't quite worked for me though I might have merely missed a detail ;)

Does it bypass spell protections?

 

PS: You forgot to set name and description of the secondary spell to "no index".

 

PSS: Some AoE spells have effect "Script: Set Global Variable [265]". Please keep them from the primary spell and delete them from the secondary spell, if necessary.

Done.

 

 

 

// removing 'bypassing MR' exploit and making spells affectable by spell protections

ACTION_FOR_EACH spell IN
... // long list of spells to patch
BEGIN

 ACTION_IF FILE_EXISTS ~%spell%b.spl~ BEGIN
PRINT ~The %spell%b.spl already exists in your game. Take measures.~
 END

 COPY_EXISTING ~%spell%.spl~ ~override/%spell%b.spl~ // cloning original into the secondary spell
WRITE_ASCII 0x8 ~~ (8) // clearing out the name
READ_LONG 0x64  ab_off
READ_SHORT 0x68 ab_num
READ_LONG 0x6a  ef_off
READ_SHORT 0x70 cast_num // global effects aka casting features

// deleting 'Set Global Variable [265]' opcodes
deleted=0
FOR (i=0;i<cast_num;i+=1) BEGIN
  READ_SHORT (ef_off+(i - deleted)*0x30) opcode
  PATCH_IF opcode=265 BEGIN
	DELETE_BYTES (ef_off+(i - deleted)*0x30) 0x30
	deleted+=1
  END
END
WRITE_SHORT 0x70 (cast_num - deleted)
FOR (i=0;i<ab_num;i+=1) BEGIN
  inner_deleted=0
  READ_SHORT  (ab_off+i*0x28+0x1e) ef_num  // effect number
  READ_SHORT  (ab_off+i*0x28+0x20) ef_ind  // effect index
  WRITE_SHORT (ab_off+i*0x28+0x20) (ef_ind - deleted)
  FOR (j=0;j<ef_num;j+=1) BEGIN
	READ_SHORT (ef_off+(ef_ind+j - deleted)*0x30) opcode
	PATCH_IF opcode=265 BEGIN
	  DELETE_BYTES (ef_off+(ef_ind+j - deleted)*0x30) 0x30
	  deleted+=1
	  inner_deleted+=1
	END
  END
  WRITE_SHORT (ab_off+i*0x28+0x1e) (ef_num - inner_deleted)

  WRITE_SHORT (ab_off+i*0x28+0x0c) 1 // target = creature
  WRITE_SHORT (ab_off+i*0x28+0x26) 1 // projectile = none
END

 COPY_EXISTING ~%spell%.spl~ ~override~			  // modifying the original
READ_LONG 0x34  level
READ_LONG 0x64  ab_off
READ_SHORT 0x68 ab_num
READ_LONG 0x6a  ef_off
READ_SHORT 0x70 cast_num // global effects aka casting features


total_eff=cast_num
FOR (i=0;i<ab_num;i+=1) BEGIN
  READ_SHORT  (ab_off+i*0x28+0x1e) ef_num  // effect number
  READ_SHORT  (ab_off+i*0x28+0x20) ef_ind  // effect index
  total_eff+=ef_num
END

DELETE_BYTES ef_off ((total_eff - 1)*0x30)
DELETE_BYTES ab_off ((ab_num - 1)*0x28)
WRITE_SHORT 0x68 1
WRITE_LONG 0x6a  (ef_off - (ab_num - 1)*0x28)
WRITE_SHORT 0x70 0
WRITE_SHORT (ab_off+0x1e) 1
WRITE_SHORT (ab_off+0x20) 0

// ability header
WRITE_SHORT (ab_off+0x10) 1 // level required

// effect
offset=(ef_off - (ab_num - 1)*0x28)
WRITE_SHORT (offset+0x00) 146	 // opcode = cast spell on creature
WRITE_BYTE  (offset+0x02) 2	   // target = pre-target
WRITE_BYTE  (offset+0x03) level   // power level = spell level
WRITE_LONG  (offset+0x04) 0	   // parameter 1 = caster's level
WRITE_LONG  (offset+0x08) 1	   // parameter 2 = instant
WRITE_BYTE  (offset+0x0c) 1	   // timing mode = permanent
WRITE_ASCII (offset+0x0d) ~~ (5)  // clearing out the space
WRITE_BYTE  (offset+0x12) 100	 // probability 1 = 100%
WRITE_BYTE  (offset+0x13) 0	   // probability 2 = 0%
WRITE_ASCIIE (offset+0x14) ~%spell%b~ (8) // resource
WRITE_ASCII (offset+0x1c) ~~ (20) // clearing out the space

END // ACTION_FOR_EACH

Link to comment
1. Most certainly Don't shoot Fireballs in the midst of wizards

2. If they were marked as AoE earlier then that flag will automatically transfer into the secondary spell. Otherwise, the MI code I sent to Demi will need one more line to add ...

3. IIRC they don't cast anything at protected PCs, save antimagic. Sure, they may accidently hit someone standing near and suffer a backlash, but there're two points here:

a) they most likely have their own spell protections on

b) players may experience the same effect, not to mention the inability to easily kill a well protected enemy by casting a couple of powerful AoE spells nearby

You have successfully convinced me for its feasibility. :)

 

Strangely enough, it didn't quite worked for me though I might have merely missed a detail

Does it bypass spell protections?

As Demi recently said,

Primary spell (e.g. spwi913.spl Wail of the Banshee):

- target type 'caster'

- projectile 'none'

- cast spell at point (148) set to cast secondary spell instantly on self

 

Secondary spell (e.g. spwi913d.spl):

- if I'm not wrong this spell do exactly what the original spell did

For arbitrary-centered AoE spells, things are a little different:

Primary spell (e.g. spwi304.spl Fireball):

- target type 'area'

- projectile 'none'

- cast spell at point (148) set to cast secondary spell instantly by self (in DL it is the field "target" that is set to self, while the "real" target of the secondary spell is automatically inherited from the primary spell, i.e. the cursor position)

 

Secondary spell (e.g. spwi304d.spl):

- this spell do exactly what the original spell did

Above are examples of fixed AoE spells. With such fix, MR bypassing exploit will be solved, but AoE spells will not be turned/deflected (as in vanilla game). I've test the "fixed Fireball": it didn't bypass GoI or SI or MR, and ignored Spell Turning/Deflection as expected.

 

This solution is for those who don't like to see AoE spells get turned/deflected, and I believe its implemention is similar to and easier than your original one. So now we can wait for others to vote and decide which one to use ;)

Link to comment
I wonder why Flame Strike, Dragon's Breath and Comet are in this list. They are party-friendly, aren't they?
My bad, apparently.
Well, I'm not sure but considering its 5' radius Flame Strike may still be exploited to bypass magic resistance if self targeted. I don't know about the other two spells, unless we decide we don't want them to do so they already bypass magic resistance normally, no exploit needed.

 

If a FB catches multiple targets with Turning on them, then the original caster of FB would get multiple feedback!
Most certainly :) Don't shoot Fireballs in the midst of wizards ;)
Well, this is unacceptable imo, even if improving the effectiveness of spells like Spell Deflection/Turning has always been my dream.

 

After all, I prefer the "primary spell has secondary AoE spell cast at point" mechanism
Strangely enough, it didn't quite worked for me though I might have merely missed a detail ;)

Does it bypass spell protections?

Yeah, the solution we recently discussed with Mercurier should work fine in every situation and handle Spell Deflection/Turning as always, because it doesn't involve any single target projectile anymore.

 

Sorry for not being able to help much for a while, I'm really busy. ;)

Link to comment
I wonder why Flame Strike, Dragon's Breath and Comet are in this list. They are party-friendly, aren't they?
My bad, apparently.
Well, I'm not sure but considering its 5' radius Flame Strike may still be exploited to bypass magic resistance if self targeted. I don't know about the other two spells, unless we decide we don't want them to do so they already bypass magic resistance normally, no exploit needed.
Flame Strike is all right even cast via sequencer. :)
Link to comment

AoE and spell protections

Well, this is unacceptable imo
Why???

 

 

MR bypassing exploit

Projectiles that don't affect party members seem to be clean in the 'bypassing MR when self-centered' regard. So I presume that Flame Strike and Wail of Banshee don't need to be included. Though I doubt that including them may cause any ill side effect either.

 

- projectile 'none'

- cast spell at point (148) set to cast secondary spell instantly by self

Well, I was dumb. That's exactly how scrolls work...

 

// removing 'bypassing MR' exploit, without making spells affectable by spell protections

ACTION_FOR_EACH
... // list of spells
BEGIN

 ACTION_IF FILE_EXISTS ~%spell%b.spl~ BEGIN
PRINT ~The %spell%b.spl already exists in your game. Take measures.~
 END

 COPY_EXISTING ~%spell%.spl~ ~override/%spell%b.spl~ // cloning original into the secondary spell
WRITE_ASCII 0x8 ~~ (8) // clearing out the name
READ_LONG 0x64  ab_off
READ_SHORT 0x68 ab_num
READ_LONG 0x6a  ef_off
READ_SHORT 0x70 cast_num // global effects aka casting features

// deleting 'Set Global Variable [265]' opcodes
deleted=0
FOR (i=0;i<cast_num;i+=1) BEGIN
  READ_SHORT (ef_off+(i - deleted)*0x30) opcode
  PATCH_IF opcode=265 BEGIN
	DELETE_BYTES (ef_off+(i - deleted)*0x30) 0x30
	deleted+=1
  END
END
WRITE_SHORT 0x70 (cast_num - deleted)
FOR (i=0;i<ab_num;i+=1) BEGIN
  inner_deleted=0
  READ_SHORT  (ab_off+i*0x28+0x1e) ef_num  // effect number
  READ_SHORT  (ab_off+i*0x28+0x20) ef_ind  // effect index
  WRITE_SHORT (ab_off+i*0x28+0x20) (ef_ind - deleted)
  FOR (j=0;j<ef_num;j+=1) BEGIN
	READ_SHORT (ef_off+(ef_ind+j - deleted)*0x30) opcode
	PATCH_IF opcode=265 BEGIN
	  DELETE_BYTES (ef_off+(ef_ind+j - deleted)*0x30) 0x30
	  deleted+=1
	  inner_deleted+=1
	END
  END
  WRITE_SHORT (ab_off+i*0x28+0x1e) (ef_num - inner_deleted)
END

 COPY_EXISTING ~%spell%.spl~ ~override~			  // modifying the original
READ_LONG 0x34  level
READ_LONG 0x64  ab_off
READ_SHORT 0x68 ab_num
READ_LONG 0x6a  ef_off
READ_SHORT 0x70 cast_num // global effects aka casting features

total_eff=cast_num
FOR (i=0;i<ab_num;i+=1) BEGIN
  READ_SHORT  (ab_off+i*0x28+0x1e) ef_num  // effect number
  READ_SHORT  (ab_off+i*0x28+0x20) ef_ind  // effect index
  total_eff+=ef_num
END

// wiping the needless stuff out and resetting to new values
DELETE_BYTES ef_off ((total_eff - 1)*0x30)
DELETE_BYTES ab_off ((ab_num - 1)*0x28)
WRITE_SHORT 0x68 1
WRITE_LONG 0x6a  (ef_off - (ab_num - 1)*0x28)
WRITE_SHORT 0x70 0
WRITE_SHORT (ab_off+0x1e) 1
WRITE_SHORT (ab_off+0x20) 0

// ability header
WRITE_SHORT (ab_off+0x10) 1 // level required
WRITE_SHORT (ab_off+0x26) 1 // projectile = none

// effect
offset=(ef_off - (ab_num - 1)*0x28)
WRITE_SHORT (offset+0x00) 148	 // opcode = cast spell on point
WRITE_BYTE  (offset+0x02) 1	   // target = self
WRITE_BYTE  (offset+0x03) level   // power level = spell level
WRITE_LONG  (offset+0x04) 0	   // parameter 1 = caster's level
WRITE_LONG  (offset+0x08) 1	   // parameter 2 = instant
WRITE_BYTE  (offset+0x0c) 1	   // timing mode = permanent
WRITE_ASCII (offset+0x0d) ~~ (5)  // clearing out the space
WRITE_BYTE  (offset+0x12) 100	 // probability 1 = 100%
WRITE_BYTE  (offset+0x13) 0	   // probability 2 = 0%
WRITE_ASCIIE (offset+0x14) ~%spell%b~ (8) // resource
WRITE_ASCII (offset+0x1c) ~~ (20) // clearing out the space

END // ACTION_FOR_EACH

Link to comment
Guest amanasleep
1. If a FB catches multiple targets with Turning on them, then the original caster of FB would get multiple feedback!
1. Most certainly :rolleyes: Don't shoot Fireballs in the midst of wizards :)

 

Am I wrong to think that this behavior, if implemented, would be very exploitable?

Link to comment

AoE and spell protections

Well, this is unacceptable imo
Why???
Well, having a mage cast a single 10d6 fireball against two mages protected by Spell Turning and suffer 20d6 damage (instead of normally affect them) doesn't feel right to me. Is it?

 

 

Am I wrong to think that this behavior, if implemented, would be very exploitable?
It depends...if SCS is installed the AI will probably use anti protection spells...but players would be advantaged anyway as the AI can't take the change into account.

 

 

MR bypassing exploit

Projectiles that don't affect party members seem to be clean in the 'bypassing MR when self-centered' regard. So I presume that Flame Strike and Wail of Banshee don't need to be included. Though I doubt that including them may cause any ill side effect either.
Actually I'm quite sure Wail of the Banshee bypasses magic resistance without this tweak (at least it did in my tests), and it shouldn't. Am I wrong?
Link to comment

AoE and spell protections

Well, having a mage cast a single 10d6 fireball against two mages protected by Spell Turning and suffer 20d6 damage (instead of normally affect them) doesn't feel right to me. Is it?
Your point is that a 3rd lvl spell becomes 3*number_of_targets lvl one? Hmm... Well, lets say that not too often you can meet more than one Spell Turning active. Stripping three snake-mages of their protections by a couple of FBs (while having 100% fire res on yourself) may be an exploit. Not being able to Chaos/Insect/Sphere of Chaos/Symbol Stun/High Level Elemental Damage/Wail of Banshee them all at once is not.

 

MR bypassing exploit

I'm quite sure Wail of the Banshee bypasses magic resistance without this tweak (at least it did in my tests)
It didn't in mine. I used it near to a 100% MR dummy only to see the 'Magic Resistance' in the textbox.
Link to comment

MR bypassing exploit

I'm quite sure Wail of the Banshee bypasses magic resistance without this tweak (at least it did in my tests)
It didn't in mine. I used it near to a 100% MR dummy only to see the 'Magic Resistance' in the textbox.

In my test both WotB and Sunfire bypassed MR without the tweak. I guess this weird behavior is due to their target definition (target=self).

 

PS: The radius of WotB is 52', while in description it is 40'.

Link to comment

Okay, I'll try to convince once more :rolleyes:

 

How about switching Spell Turning's and Spell Trap's effect, so that only the 9th lvl spell will reflect back? Spell Trap, unlike (Minor) Spell Turning, is far less common to be in use, both among enemies and PCs, thus the amount of possible issue cases will be reduced greately. I kinda find the turning effect to be more powerful than the trap, in addition.

AI seems to relay exclusively on Detectable Spells, which doesn't care if the spell turns or traps, so regarding checks for defenses and antimagic usage there should be no problem. And since AI never casts on protected characters it won't try to exhaust PC's new lvl 9 Spell Turning while thinking it's a harmless Spell Trap.

 

As for 4 spells in a row - Minor Spell Deflection (3), Minor Spell Trap (5), Spell Deflection (6), Spell Trap (7) - having the same hardcoded animation, I'm happy to announce that 'Protection: Spell Trap [259]' doesn't have to use the same .bam that 201, 204, 205 and 223 opcodes use. I've made a small exe patch for that, so it can be fixed at any time, provided there's a new suitable .bam to use.

 

PS Ok, I lied about DS. Without opcodes present it won't mark three tweaked spells at all. It can be done manually, though.

Link to comment

IIRC some cowled wizards and liches use Spell Turing and Spell Trap just because they are high level mages and these two spells are more durable than their low level cousins. And when speaking Spell Turning and Spell Trap, I think the latter is no less powerful than the former: they both utilize the magic energy of incoming attacks, just in different ways.

 

Anyway, having a new bam for Spell Turing is a good news! I bet you can get some nice bams from IWD(2).

Link to comment
Guest amanasleep
Okay, I'll try to convince once more :rolleyes:

 

How about switching Spell Turning's and Spell Trap's effect, so that only the 9th lvl spell will reflect back?

 

So you want to make Spell Trap Level 7? That would allow you many exploits, for instance allowing you to recharge your spells with Project Image clones without having any 9th Level spells.

Link to comment

If this component causes this behaviour (AoE spells are returned at the caster and deplete SPell turning / spell mirroring / spell deflection) then i would say ; Scrap the modifications... A level 20 caster that recieves 40d6 damage when casting horrid writhing on two mages with spell reflection really doesn't feels right :rolleyes:

Link to comment

Archived

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

×
×
  • Create New...