Jump to content

Sunfire to take MR into account... ?


ThreeQuarters

Recommended Posts

I feel that web should act as an improved entangle, rather than a "mass hold person with a save required every round" which is what it actually does, but I suspect that the web effect is hardcoded, at least I've seen creatures who are immune to "hold creature: 109" getting stuck in webs.
Actually it's doable. I suggested it some time ago, and I was thinking to try it for SR V4, but the main problem is that such change may cause compatibility issues with mod added creatures and items. Let's say it's not an easy tweak.

Web effect (157), seems to automatically hold the character - I guess if you wanted to make it an entangle type spell a new animation must be added.

I haven't work on spells since ages but I'm pretty sure opcode 157 is simply an overlay effect, it's opcode 109 that holds the targets. Tweaking Web spell per se is uber easy, the more difficult task is making creatures (e.g. spiders) and items/spells (e.g. Free Action) take such changes into account. Long story short I'd need a separate patching component installed after any other mod adding such creatures/items/spells.
Link to comment
(I don't have the time right now to code this, sorry)

 

Or maybe I do. I had to change the projectile type to the new fireball in order for this to work due to an engine inconsistency with "invisible traveling" explosion projectile. This has been tested to work, although it needs further testing on many machines if it's going to be added to fixpack.

 

COPY_EXISTING ~SPWI523.spl~ ~override~
 PATCH_IF (SOURCE_SIZE > 0x71) BEGIN
// Deleting the old effect (opcode 30)
FOR (___#delindex1 = 0; ___#delindex1 < (SHORT_AT 0x68); ___#delindex1 += 1) BEGIN
  READ_SHORT  ((LONG_AT 0x64) + 0x1e + (0x28 * ___#delindex1)) ___#abil_fx_num
  READ_SHORT  ((LONG_AT 0x64) + 0x20 + (0x28 * ___#delindex1)) ___#abil_fx_idx
  FOR (___#delindex2 = 0; ___#delindex2 < ___#abil_fx_num; ___#delindex2 += 1) BEGIN
	PATCH_IF ((SHORT_AT ((LONG_AT 0x6a) + (___#delindex2 + ___#abil_fx_idx) * 0x30)) = 30) BEGIN
	  SET ___#write_off = ((LONG_AT 0x6a) + (___#delindex2 + ___#abil_fx_idx) * 0x30)
	  DELETE_BYTES ((LONG_AT 0x6a) + (___#delindex2 + ___#abil_fx_idx) * 0x30) 0x30
	  SET ___#delindex2 -= 1
	  SET ___#abil_fx_num -= 1
	  WRITE_SHORT  ((LONG_AT 0x64) + 0x1e + (0x28 * ___#delindex1)) (___#abil_fx_num)
	  FOR (___#delindex3 = 0; ___#delindex3 < (SHORT_AT 0x68); ___#delindex3 += 1) BEGIN
		READ_SHORT ((LONG_AT 0x64) + ___#delindex3 * 0x28 + 0x20) ___#1effect_index
		PATCH_IF (___#1effect_index > ___#abil_fx_idx OR (___#delindex3 > ___#delindex1 AND ___#1effect_index > ___#abil_fx_idx - 1)) BEGIN //if ability after current effect
		  WRITE_SHORT (___#delindex3 * 0x28 + (LONG_AT 0x64) + 0x20) (___#1effect_index - 1) //decrease 1 effect ___#index1 by 1
		END
	  END
	END
  END
END
// Adding a new effect (opcode 206)
FOR (___#index1 = 0; ___#index1 < (SHORT_AT 0x68); ___#index1 += 1) BEGIN
  READ_SHORT  ((LONG_AT 0x64) + 0x1e + (0x28 * ___#index1)) ___#abil_fx_num
  READ_SHORT  ((LONG_AT 0x64) + 0x20 + (0x28 * ___#index1)) ___#abil_fx_idx
  WRITE_SHORT ((LONG_AT 0x64) + 0x1e + (0x28 * ___#index1)) (___#abil_fx_num + 1)
  FOR (___#index2 = 0; ___#index2 < (SHORT_AT 0x68); ___#index2 += 1) BEGIN
	READ_SHORT ((LONG_AT 0x64) + ___#index2 * 0x28 + 0x20) ___#1effect_index
	PATCH_IF (___#1effect_index > ___#abil_fx_idx OR (___#index2 > ___#index1 AND ___#1effect_index > ___#abil_fx_idx - 1)) BEGIN //if ability after current effect
	  WRITE_SHORT (___#index2 * 0x28 + (LONG_AT 0x64) + 0x20) (___#1effect_index + 1) //increase 1 effect ___#index1 by 1
	END
  END
  SET ___#write_off = ((LONG_AT 0x6a) + ( ___#abil_fx_idx) * 0x30)
  INSERT_BYTES 		((LONG_AT 0x6a) + ( ___#abil_fx_idx) * 0x30)		0x30
  WRITE_SHORT		  ((LONG_AT 0x6a) + ( ___#abil_fx_idx) * 0x30)		206
  WRITE_BYTE   		(((LONG_AT 0x6a) + ( ___#abil_fx_idx) * 0x30) + 0x02) 9
  WRITE_BYTE   		(((LONG_AT 0x6a) + ( ___#abil_fx_idx) * 0x30) + 0x12) 100
  WRITE_EVALUATED_ASCII 	(((LONG_AT 0x6a) + ( ___#abil_fx_idx) * 0x30) + 0x14) "%SOURCE_RES%" (8)
END
 END
 // Changing projectile type to new fireball - required for this to work.
 FOR (___#index1 = 0; ___#index1 < (SHORT_AT 0x68); ___#index1 += 1) BEGIN
WRITE_SHORT ((LONG_AT 0x64) + 0x26 + (0x28 * ___#index1)) 234
 END
BUT_ONLY

Link to comment

Archived

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

×
×
  • Create New...