CamDawg Posted August 1, 2012 Share Posted August 1, 2012 The potion of fiery burning damage patch doesn't work (reading a byte instead of a short) but this will: // thrown oil of fiery burning shouldn't say 'gulp!', fix power levels // oil of fiery burning damage incorrect COPY_EXISTING ~potn13.itm~ ~override~ LAUNCH_PATCH_FUNCTION ~DELETE_ITEM_EFFECT~ INT_VAR opcode_to_delete = "139" // kills 'gulp' effect END 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 // cycle thru abilities READ_SHORT (0x1e + "%abil_off%" + ("%index%" * 0x38)) "abil_fx_num" READ_SHORT (0x20 + "%abil_off%" + ("%index%" * 0x38)) "abil_fx_idx" FOR (index2 = 0 ; index2 < abil_fx_num ; index2 = index2 + 1) BEGIN READ_SHORT ("%fx_off%" + (("%abil_fx_idx%" + "%index2%") * 0x30)) "opcode" WRITE_BYTE ("%fx_off%" + 0x03 + (("%abil_fx_idx%" + "%index2%") * 0x30)) 0 // should bypass spell protections PATCH_IF ("%opcode%" = 12) BEGIN // as long as we're here, fix duration READ_LONG ("%fx_off%" + 0x24 + (("%abil_fx_idx%" + "%index2%") * 0x30)) "save" WRITE_BYTE ("%fx_off%" + 0x0e + (("%abil_fx_idx%" + "%index2%") * 0x30)) 0 // instant/perm effects should have 0 duration PATCH_IF ("%save%" = 0) BEGIN // if not subject to save WRITE_LONG ("%fx_off%" + 0x1c + (("%abil_fx_idx%" + "%index2%") * 0x30)) 2 // two rolls... WRITE_LONG ("%fx_off%" + 0x20 + (("%abil_fx_idx%" + "%index2%") * 0x30)) 6 // of 6-sided die END END END END BUT_ONLY_IF_IT_CHANGES Also, I've better centered the BAMs for the spell scroll icons that were cut off (attached). Color spray's range is changed to 30 feet, but the projectile still won't reach that far (h/t Avenger_TeamBG): // color spray distance fix COPY_EXISTING ~cspray.pro~ ~override~ WRITE_SHORT 0x206 426 BUT_ONLY_IF_IT_CHANGES bams2.zip Link to comment
CamDawg Posted August 4, 2012 Author Share Posted August 4, 2012 S'more Garren Windspear stuff One of the fun things with re-writing the docs and working on BGEE is that you discover that fixes included way back in alpha 3 don't work. // cavalier resist fear COPY_EXISTING ~spcl222.spl~ ~override~ 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 READ_SHORT ("%abil_off%" + (0x28 * "%index%")) "type" PATCH_IF ("%type%" = 1) BEGIN // melee READ_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) "abil_fx_num" READ_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "abil_fx_idx" FOR (index2 = 0 ; index2 < abil_fx_num ; index2 = index2 + 1) BEGIN WRITE_BYTE ("%fx_off%" + 0x0d + (0x30 * ("%abil_fx_idx%" + "%index2%"))) 3 // dispel/bypass MR END END END BUT_ONLY_IF_IT_CHANGES Oh Chromatic Orb, I wish I knew how to quit you. Sure, we've fixed your durations, magic resistance, and lack of combat feedback, but do we really know you? Chromatic Orb is supposed to cause blindness at level one but instead causes -4 penalties to AC, THAC0, and saves. COPY_EXISTING ~spwi118.spl~ ~override~ ~spdr101.spl~ ~override~ PATCH_FOR_EACH "deleteme" IN 34 35 36 37 BEGIN LPF DELETE_SPELL_EFFECT INT_VAR opcode_to_delete = %deleteme% END END READ_LONG 0x64 "abil_off" ELSE 0 READ_LONG 0x6a "fx_off" ELSE 0 READ_SHORT ("%abil_off%" + 0x20) "abil_fx_idx" // lev 1 READ_SHORT ("%abil_off%" + 0x1e) "abil_fx_num" // lev 1 FOR (index = 0 ; index < abil_fx_num ; index = index + 1) BEGIN READ_SHORT ("%fx_off%" + (0x30 * ("%abil_fx_idx%" + "%index%"))) "opcode" PATCH_IF ("%opcode%" = 0) BEGIN // change ac bonus to blindness WRITE_SHORT ("%fx_off%" + (0x30 * ("%abil_fx_idx%" + "%index%"))) 74 // blindness END PATCH_IF ("%opcode%" = 54) BEGIN // change thac0 bonus to blind icon WRITE_SHORT ("%fx_off%" + (0x30 * ("%abil_fx_idx%" + "%index%"))) 142 // display portrait icon WRITE_LONG ("%fx_off%" + 0x08 + (0x30 * ("%abil_fx_idx%" + "%index%"))) 8 // blindness END PATCH_IF ("%opcode%" = 33) BEGIN // change one of the saves to blinded string WRITE_SHORT ("%fx_off%" + (0x30 * ("%abil_fx_idx%" + "%index%"))) 139 // display string WRITE_LONG ("%fx_off%" + 0x04 + (0x30 * ("%abil_fx_idx%" + "%index%"))) 14674 // 'blinded' WRITE_BYTE ("%fx_off%" + 0x0c + (0x30 * ("%abil_fx_idx%" + "%index%"))) 1 // instant/perm WRITE_LONG ("%fx_off%" + 0x0e + (0x30 * ("%abil_fx_idx%" + "%index%"))) 0 // duration END END BUT_ONLY_IF_IT_CHANGES Link to comment
CamDawg Posted August 4, 2012 Author Share Posted August 4, 2012 torgal3.cre needs to be cycled through the immunity batches for stun and sleep. Link to comment
CamDawg Posted August 4, 2012 Author Share Posted August 4, 2012 EFFs are 272 bytes (0x110) so this // display string effs with incorrect timing COPY_EXISTING ~SPCL906B.EFF~ ~override~ ~SPIN935D.EFF~ ~override~ ~STUNSTRG.EFF~ ~override~ PATCH_IF (SOURCE_SIZE > 0x2d3) BEGIN WRITE_LONG 0x24 0x1 // Instant/Permanent END BUT_ONLY_IF_IT_CHANGES does nothing and should be // display string effs with incorrect timing COPY_EXISTING ~spcl906b.eff~ ~override~ ~spin935d.eff~ ~override~ ~stunstrg.eff~ ~override~ PATCH_IF (SOURCE_SIZE >= 0x110) BEGIN WRITE_LONG 0x24 1 // Instant/Permanent WRITE_LONG 0x28 0 // duration END BUT_ONLY_IF_IT_CHANGES Link to comment
CamDawg Posted August 7, 2012 Author Share Posted August 7, 2012 h/t to Avenger_TeamBG on the BGEE beta testing forum for this one. Holy Smite and Unholy Blight are supposed to be doing 1-4 damage per level (save for half), but were actually doing 2d2 (2-4 damage, save for 1d2). I've rewritten this to split the damage per dice, like Fireball and all the other save-for-half-damage spells (i.e. level 13 will be 13d4, save for only 7d4). sp313l20.eff is no longer needed, and this will need to go after the existing sppr313 patch. // holy smite/unholy blight damage fixes, part 1 COPY_EXISTING ~sp313l05.eff~ ~override~ ~sp313l06.eff~ ~override~ ~sp313l07.eff~ ~override~ ~sp313l08.eff~ ~override~ ~sp313l09.eff~ ~override~ ~sp313l10.eff~ ~override~ WRITE_LONG 0x3c 4 // dice size 2 > 4 BUT_ONLY // holy smite/unholy blight damage fixes, part 2 OUTER_SET "dicethrown" = 2 COPY_EXISTING ~sp313l05.eff~ ~override/sp313l02.eff~ ~sp313l06.eff~ ~override/sp313l03.eff~ ~sp313l07.eff~ ~override/sp313l04.eff~ WRITE_LONG 0x38 "%dicethrown%" // # dice SET "dicethrown" = ("%dicethrown%" + 1) // holy smite/unholy blight damage fixes, part 3 COPY_EXISTING ~sppr313.spl~ ~override~ // holy smite ~sppr314.spl~ ~override~ // unholy blight 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 READ_SHORT ("%abil_off%" + 0x10 + (0x28 * "%index%")) "level" READ_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) "abil_fx_num" READ_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "abil_fx_idx" PATCH_IF ("%level%" = 1) BEGIN SET "level" = 5 END FOR (index2 = 0 ; index2 < abil_fx_num ; index2 = index2 + 1) BEGIN READ_ASCII ("%fx_off%" + 0x14 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "eff_file" PATCH_IF ("%eff_file%" STRING_COMPARE_REGEXP "SP313L[012][0-9]" = 0) BEGIN // if damage eff READ_LONG ("%fx_off%" + 0x24 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "save" SET "efflev" = (("%level%" + "%save%") / 2) PATCH_IF ("%efflev%" = 10) BEGIN WRITE_ASCIIE ("%fx_off%" + 0x1a + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "%efflev%" END ELSE BEGIN WRITE_ASCIIE ("%fx_off%" + 0x1a + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "0%efflev%" END END END END BUT_ONLY Link to comment
CamDawg Posted August 8, 2012 Author Share Posted August 8, 2012 One of the more anal-retentive fixes ever: Protection from Evil doesn't make your armor glow when cast at level one. // armor glow missing at level one COPY_EXISTING ~spwi113.spl~ ~override~ LPF ADD_SPELL_EFFECT INT_VAR opcode = 9 // color glow target = 2 // preset target power = 1 // power parameter1 = 0x5d6f0000 // pulse, RGB parameter2 = 0x00140005 // armor, cycle speed duration = 12 // duration resist_dispel = 3 // dispel/bypass MR header = 1 // add to first header END Link to comment
CamDawg Posted August 13, 2012 Author Share Posted August 13, 2012 Whoever ID'd and wrote the original Cursed Scroll of Clumsiness (scrl11.itm) patch needs to be dropped from the Fixpack team. It inserts a spell failure icon, but the miscast rate is only 50%, so it should be a miscast icon instead. Drop the current hot mess and instead // add miscast icons COPY_EXISTING ~scrl11.itm~ ~override~ // cursed scroll of clumsiness LAUNCH_PATCH_FUNCTION ~ADD_ITEM_EFFECT~ INT_VAR opcode = 142 // display portrait icon target = 1 // target self resist_dispel = 1 // dispel/bypass MR duration = 600 // duration parameter2 = 105 // miscast magic power = 4 // power END BUT_ONLY Also, the Cursed Scroll of Foolishness doesn't induce arcane spellcasting failure. (Every other spell/item that causes miscast effects treats arcane and divine spells equally, save this item and the wizard slayer's miscast effects.) // add arcane spell failure COPY_EXISTING ~scrl12.itm~ ~override~ // disable arcane spells, too LAUNCH_PATCH_FUNCTION ~ADD_ITEM_EFFECT~ INT_VAR opcode = 60 // spell failure target = 1 // target self duration = 600 // duration resist_dispel = 1 // dispel/bypass MR parameter1 = 50 // 50% spell failure power = 4 // power END BUT_ONLY And finally, the Cursed Scroll of Stupidity sets no portrait icons, so we give it an icon for feeblemind to go with its existing feeblemind effect. // add feeblemind icons COPY_EXISTING ~scrl18.itm~ ~override~ // cursed scroll of clumsiness LAUNCH_PATCH_FUNCTION ~ADD_ITEM_EFFECT~ INT_VAR opcode = 142 // display portrait icon target = 1 // target self resist_dispel = 1 // dispel/bypass MR duration = 45 // duration parameter2 = 48 // feeblemind power = 4 // power END BUT_ONLY And some effing eff fixes and dispellable junk from Wisp. Link to comment
CamDawg Posted August 13, 2012 Author Share Posted August 13, 2012 In the spell scroll fixes, the range fixes are not accounting for fixes elsewhere. We're patching color spray scrolls to ranges of 15' even though the spell works properly at 30' now (drop the scrl70.itm patch), and we should be patching burning hands (scrl68) to 5' of range. Link to comment
CamDawg Posted August 13, 2012 Author Share Posted August 13, 2012 Defensive spin vs. free action, round 73: COPY_EXISTING ~spcl522.spl~ ~override~ LPF ADD_SPELL_EFFECT INT_VAR opcode = 176 target = 1 parameter2 = 1 resist_dispel = 2 duration = 24 insert_point = 0 END Link to comment
CamDawg Posted August 14, 2012 Author Share Posted August 14, 2012 Spook is still letting the 'panic' string past magic resistance: // spook's 'panic' string not properly quashed by MR COPY_EXISTING ~spwi125.spl~ ~override~ 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 READ_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) "abil_fx_num" READ_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "abil_fx_idx" FOR (index2 = 0 ; index2 < abil_fx_num ; index2 = index2 + 1) BEGIN WRITE_BYTE ("%fx_off%" + 0x0d + (0x30 * ("%index2%" + "%abil_fx_idx%"))) 1 // change to dispel, no bypass MR END END BUT_ONLY_IF_IT_CHANGES Link to comment
CamDawg Posted August 15, 2012 Author Share Posted August 15, 2012 Some quick fixes for the bard's Magic Flute. The resist fear spell had a sound effect at the wrong power level and lacked school & secondary. // power/school/secondary for resist fear on magic flute COPY_EXISTING ~brdflute.itm~ ~override~ READ_LONG 0x64 "abil_off" ELSE 0 READ_SHORT 0x68 "abil_num" ELSE 0 READ_LONG 0x6a "fx_off" ELSE 0 FOR (index = 0 ; index < abil_num ; ++index) BEGIN READ_ASCII ("%abil_off%" + 0x04 + ("%index%" * 0x38)) "icon" READ_SHORT ("%abil_off%" + 0x20 + ("%index%" * 0x38)) "abil_fx_idx" READ_SHORT ("%abil_off%" + 0x1e + ("%index%" * 0x38)) "abil_fx_num" PATCH_IF ("%icon%" STRING_COMPARE_CASE "spwi201b" = 0) BEGIN // resist fear WRITE_BYTE ("%abil_off%" + 0x17 + ("%index%" * 0x38)) 1 // school: abjuration WRITE_BYTE ("%abil_off%" + 0x19 + ("%index%" * 0x38)) 2 // secondary: specific protections FOR (index2 = 0 ; index2 < abil_fx_num ; ++index2) BEGIN WRITE_BYTE ("%fx_off%" + 0x03 + (("%abil_fx_idx%" + "%index2%") * 0x30)) 2 // power level END END END BUT_ONLY aVENGER had a pretty good roundup of spell schools for items; I found a few stragglers with schools set but no secondaries: // match to underlying spell COPY_EXISTING ~misc7n.itm~ ~override~ // wand of lightning (unused?) READ_LONG 0x64 abil_off READ_SHORT 0x68 abil_num FOR (index = 0 ; index < abil_num ; ++index) BEGIN WRITE_BYTE (abil_off + 0x19 + (index * 0x38)) 10 // secondary: offensive damage END BUT_ONLY // match to underlying spell COPY_EXISTING ~wand02.itm~ ~override~ // wand of fear ~wand04.itm~ ~override~ // wand of paralyzation ~wand08.itm~ ~override~ // wand of sleep READ_LONG 0x64 abil_off READ_SHORT 0x68 abil_num FOR (index = 0 ; index < abil_num ; ++index) BEGIN WRITE_BYTE (abil_off + 0x19 + (index * 0x38)) 11 // secondary: disabling END BUT_ONLY // match to underlying spell COPY_EXISTING ~wand10.itm~ ~override~ // wand of monster summoning READ_LONG 0x64 abil_off READ_SHORT 0x68 abil_num FOR (index = 0 ; index < abil_num ; ++index) BEGIN WRITE_BYTE (abil_off + 0x19 + (index * 0x38)) 6 // secondary: conjuration END BUT_ONLY Link to comment
CamDawg Posted August 17, 2012 Author Share Posted August 17, 2012 The skillrac changes means we need to bump down move silently scores for joinable humans, elves, and half-elves (Imoen, Minsc, Nalia, Valygar, Yoshimo). edit: actually, I think skillrac might apply on the fly. Double-check this. Link to comment
lynx Posted August 17, 2012 Share Posted August 17, 2012 I'm pretty sure it does, just like skilldex. Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.