Demivrgvs Posted February 2, 2011 Share Posted February 2, 2011 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
Galactygon Posted February 4, 2011 Share Posted February 4, 2011 (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
Recommended Posts
Archived
This topic is now archived and is closed to further replies.