aVENGER_(RR) Posted February 28, 2010 Share Posted February 28, 2010 The recent discovery of the fields which regulate spells schools and secondary types in an item's extended header, we might be able to finally fix a couple of longstanding issues. In some way, this is more of a standardization since the Bioware developers used these flags sporadically, though a pattern can be observed in several cases. Here are some suggestions for things that can reasonably be considered as bugfixes: // Standardize the school and secondary type of items which cast illusionary spells COPY_EXISTING ~ring28.itm~ ~override~ // Ring of Air Control ~sw1h26.itm~ ~override~ // Ilbratha +1 READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" FOR (index = 0; index < "%abil_num%"; index = index + 1) BEGIN // parse each ability READ_BYTE ("%abil_off%" + ("%index%" * 0x38)) "abil_type" // determine ability type PATCH_IF ("%abil_type%" = 3) BEGIN // only patch the magical ability header READ_ASCII ("%abil_off%" + 0x04 + ("%index%" * 0x38)) "icon" // use icon (BAM name) PATCH_IF (("%icon%" STRING_EQUAL_CASE ~SPWI212B~) OR ("%icon%" STRING_EQUAL_CASE ~SPWI405B~)) BEGIN // Mirror Image or Improved Invisibility WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "5" // school: Illusionist WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "3" // secondary type: Illusionary Protections END END END BUT_ONLY_IF_IT_CHANGES // Standardize the school and secondary type of items which cast abjuration spells COPY_EXISTING ~staf11.itm~ ~override~ // Staff of the Magi ~wand18.itm~ ~override~ // Wand of Spell Striking READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" FOR (index = 0; index < "%abil_num%"; index = index + 1) BEGIN // parse each ability READ_BYTE ("%abil_off%" + ("%index%" * 0x38)) "abil_type" // determine ability type PATCH_IF ("%abil_type%" = 3) BEGIN // only patch the magical ability header READ_ASCII ("%abil_off%" + 0x04 + ("%index%" * 0x38)) "icon" // use icon (BAM name) PATCH_IF ("%icon%" STRING_EQUAL_CASE ~SPWI902B~) BEGIN // Spell Trap WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "1" // school: Abjurer WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "1" // secondary type: Spell Protections END PATCH_IF (("%icon%" STRING_EQUAL_CASE ~SPWI513B~) OR ("%icon%" STRING_EQUAL_CASE ~SPWI608B~)) BEGIN // Breach or Pierce Magic WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "1" // school: Abjurer WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "4" // secondary type: Magic Attack END END END BUT_ONLY_IF_IT_CHANGES // Assign the proper school and secondary type to the special ability of the Shield amulet COPY_EXISTING ~amul15.itm~ ~override~ // Shield Amulet READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" FOR (index = 0; index < "%abil_num%"; index = index + 1) BEGIN // parse each ability READ_BYTE ("%abil_off%" + ("%index%" * 0x38)) "abil_type" // determine ability type PATCH_IF ("%abil_type%" = 3) BEGIN // only patch the magical ability header WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "6" // school: Invoker WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "7" // secondary type: Combat Protections END END BUT_ONLY_IF_IT_CHANGES OTOH, this batch is more likely a candidate for a tweak mod. Heh, I might even include it in some future version of aTweaks. // Standardize the school and secondary type of items which cast offensive spells COPY_EXISTING ~staf13.itm~ ~override~ // Staff of Thunder and Lightning ~wand03.itm~ ~override~ // Wand of Magic Missiles ~wand05.itm~ ~override~ // Wand of Fire ~wand06.itm~ ~override~ // Wand of Frost ~wand07.itm~ ~override~ // Wand of Lightning ~wand11.itm~ ~override~ // Wand of the Heavens ~wand13.itm~ ~override~ // Wand of Cloudkill READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" FOR (index = 0; index < "%abil_num%"; index = index + 1) BEGIN // parse each ability READ_BYTE ("%abil_off%" + ("%index%" * 0x38)) "abil_type" // determine ability type PATCH_IF ("%abil_type%" = 3) BEGIN // only patch the magical ability header READ_ASCII ("%abil_off%" + 0x04 + ("%index%" * 0x38)) "icon" // use icon (BAM name) PATCH_IF NOT (("%icon%" STRING_EQUAL_CASE ~SPWI103B~) OR ("%icon%" STRING_EQUAL_CASE ~SPWI104B~)) BEGIN // not Burning Hands or Charm WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "6" // school: Invoker WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "10" // secondary type: Offensive Damage END PATCH_IF ("%icon%" STRING_EQUAL_CASE ~SPWI103B~) BEGIN // Burning Hands WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "8" // school: Transmuter WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "10" // secondary type: Offensive Damage END PATCH_IF ("%icon%" STRING_EQUAL_CASE ~IWAND13~) BEGIN // Wand of Cloudkill WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "6" // school: Invoker WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "9" // secondary type: Battleground END END END BUT_ONLY_IF_IT_CHANGES // Standardize the school and secondary type of items which cast alteration spells COPY_EXISTING ~brac16.itm~ ~override~ // Bracers of Blinding Strike ~boot12.itm~ ~override~ // Gargoyle Boots ~ring29.itm~ ~override~ // Ring of Earth Control ~ring39.itm~ ~override~ // Ring of Gaxx ~staf16.itm~ ~override~ // Staff of Earth +2 ~sw1h27.itm~ ~override~ // Arbane's Sword +2 ~sw1h36.itm~ ~override~ // Namarra +2 READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" FOR (index = 0; index < "%abil_num%"; index = index + 1) BEGIN // parse each ability READ_BYTE ("%abil_off%" + ("%index%" * 0x38)) "abil_type" // determine ability type PATCH_IF ("%abil_type%" = 3) BEGIN // only patch the magical ability header READ_ASCII ("%abil_off%" + 0x04 + ("%index%" * 0x38)) "icon" // use icon (BAM name) PATCH_IF (("%icon%" STRING_EQUAL_CASE ~SPWI305B~) OR ("%icon%" STRING_EQUAL_CASE ~SPWI613B~) OR ("%icon%" STRING_EQUAL_CASE ~SPWI625B~)) BEGIN // Haste, Improved Haste or Stone to Flesh WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "8" // school: Transmuter WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "13" // secondary type: Non-Combat END PATCH_IF ("%icon%" STRING_EQUAL_CASE ~SPWI408B~) BEGIN // Stoneskin WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "8" // school: Transmuter WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "7" // secondary type: Combat Protections END PATCH_IF ("%icon%" STRING_EQUAL_CASE ~SPPR211B~) BEGIN // Silence 15' Radius WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "8" // school: Transmuter WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "11" // secondary type: Disabling END END END BUT_ONLY_IF_IT_CHANGES // Standardize the school and secondary type of items which cast divination spells COPY_EXISTING ~sw1h32.itm~ ~override~ // Dragonslayer ~sw1h34.itm~ ~override~ // Albruin +1 READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" FOR (index = 0; index < "%abil_num%"; index = index + 1) BEGIN // parse each ability READ_BYTE ("%abil_off%" + ("%index%" * 0x38)) "abil_type" // determine ability type PATCH_IF ("%abil_type%" = 3) BEGIN // only patch the magical ability header READ_ASCII ("%abil_off%" + 0x04 + ("%index%" * 0x38)) "icon" // use icon (BAM name) PATCH_IF ("%icon%" STRING_EQUAL_CASE ~SPWI203B~) BEGIN // Detect Invisibility WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) "3" // school: Diviner WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) "5" // secondary type: Divination Attack END END END BUT_ONLY_IF_IT_CHANGES For reference, this code assigns schools and secondary types only to items which clearly state that they duplicate the respective spell in their description. Items which may confer similar effects through other means (i.e. the Jansen Spectroscopes Detect Invisibility ability) were deliberately left untouched. Similarly, items which cast the actual spells, rather than mimic their effects were not altered. Link to comment
devSin Posted February 28, 2010 Share Posted February 28, 2010 You may want to test that reverting the wand of spellstriking works (make sure it behaves correctly with spell shield). Otherwise, I'd include all of that. Note that these should allow us to completely drop the staff of magi spelltrap and similar changes (the old "un-breachable protections" issues, since we can now set the type correctly for all the effects) where we switch to casting a spell just to get the school/type. That probably means just that and the Staff of Power, and the Wand of Spellstriking if it works; I don't remember any others right now. Link to comment
aVENGER_(RR) Posted February 28, 2010 Author Share Posted February 28, 2010 You may want to test that reverting the wand of spellstriking works (make sure it behaves correctly with spell shield). Otherwise, I'd include all of that. Sure thing. For reference, here's a comparison between several item abilities as they appear in the unmodded game and after applying the abovementioned code: Ilbratha +1 Before: Mirror Image cast by the sword cannot be removed by Detect Illusions, Oracle and True SightAfter: Mirror Image cast by the sword is properly removed by Detect Illusions, Oracle and True Sight Staff of the Magi Before: Spell Trap cast by the Staff of the Magi cannot be removed by Spell StrikeAfter: Spell Trap cast by the Staff of the Magi is properly removed by Spell Strike Wand of Spell Striking Before: Both abilities of the wand bypass Spell ShieldAfter: Both abilities of the wand are stopped by Spell Shield Wand of Fire Before: Both abilities of the wand bypass Spell Immunity: Evocation and/or the Cloak of MirroringAfter: Both abilities of the wand are stopped by Spell Immunity: Evocation and/or by the Cloak of Mirroring Wand of Frost Before: The wand's ability is stopped by Spell Immunity: Evocation but it bypasses the Cloak of MirroringAfter: The wand's ability is stopped by Spell Immunity: Evocation and/or by the Cloak of Mirroring Staff of Power I thought about that, but I'd rather retain the current Staff of Power fix than rebuild the Globe of Invulnerability within the item simply due to the sheer complexity of the spell in question. Link to comment
devSin Posted February 28, 2010 Share Posted February 28, 2010 Oh, yeah, we add a bunch of crap to Globe, you're right. Good call. Link to comment
Guest Marcellus Caesar Posted March 6, 2010 Share Posted March 6, 2010 I'm actually following this thread closely... any estimate on when this bugfix can be implemented, and if the fixes for the wands can also apply to Tutu? I have little WeiDU knowledge, so I'd apply these changes myself otherwise seeing as this seems like a pretty big fix for a number of items. Link to comment
aVENGER_(RR) Posted March 7, 2010 Author Share Posted March 7, 2010 I'm actually following this thread closely... any estimate on when this bugfix can be implemented, The abovementioned material (or at least a part of it) is going to be implemented in the next version of the fixpack. We are working on that right now, but there's no official release date. By my rough estimate, it will take us at least a few more months. and if the fixes for the wands can also apply to Tutu? The BG2 Fixpack is not applicable on Tutu. Its author would have to implement the fixes manually in the next version of that mod. However, after the item school/secondary type fixes are finalized (several parts are still under review) I could release them in a form which would work on Tutu as well. Link to comment
Guest Marcellus Caesar Posted March 7, 2010 Share Posted March 7, 2010 I'm actually following this thread closely... any estimate on when this bugfix can be implemented, The abovementioned material (or at least a part of it) is going to be implemented in the next version of the fixpack. We are working on that right now, but there's no official release date. By my rough estimate, it will take us at least a few more months. and if the fixes for the wands can also apply to Tutu? The BG2 Fixpack is not applicable on Tutu. Its author would have to implement the fixes manually in the next version of that mod. However, after the item school/secondary type fixes are finalized (several parts are still under review) I could release them in a form which would work on Tutu as well. Great! Thank you for your and everyone else's work in continuing to patch one hell of a good game! I'll be waiting for the next edition of the fixpack with bated breath! Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.