Jump to content

More stuff for v10


Recommended Posts

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

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

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

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

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

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

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

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

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

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

Archived

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

×
×
  • Create New...