Jump to content

Hotfixes for V6


Recommended Posts

Now: Is there a chance of a fixpack version 7 within the next month?
Fixpack is a dead mod (well, judging from the lack of postings here from Cam, Nythrun or any other Fixpackers). To get around this, I've been including any relevant fixes in whatever I package (PnP Free Action is one example of this, that restores some missing icons and effects from certain spells and items). Of course, that's no replacement for a properly-maintained fixpack though.
Link to comment
Seems the attachments were broken with the forum update or something. Hopefully, someone can put it somewhere official, or if not I could probably upload it somewhere.

 

I think this is also in the BWP Fixpack on SHS, if you want to get it from there.

There are several references to a 6.2 - do they refer to these hotfixes? What's the latest on this, if isn't currently being developed any further? Also, I'm not locating the BWP fixpack you mention on SHS...

Link to comment

Hmm... Could you please compress it differently, such as winzip or 7z? WinRAR is only free for a limited time trial. I would really like to apply the fix, as my character hurts himself everything he picks up Mace of Disruption or Crom Faeyr. :) Thanks very much.

Link to comment
Hmm... Could you please compress it differently, such as winzip or 7z? WinRAR is only free for a limited time trial. I would really like to apply the fix, as my character hurts himself everything he picks up Mace of Disruption or Crom Faeyr. :) Thanks very much.

 

IZarc is a freeware program that will uncompress .rar files. It's at http://www.izarc.org. I've used it for several years without problems.

 

John

Link to comment
WinRAR is only free for a limited time trial.

Has things changed? I have a old WinRAR (maybe 1 year or more) and it works perfectly fine even after the trial time ended -- when it tells me that the time is over, I just click "remind me later" or what ever it says and it goes on to do what I tell it. So unless things have changed since then I think that your WinRAR should be just fine.

 

Plus 7z can open *.rar files any way, so...

Link to comment

The Fixpack's OBC component "Improved Spell Animations" erroneously increases the casting speed of the Burning Hands spell (SPWI103.SPL) to 5 due to a typo in the code. To fix that, change this block:

 

COPY_EXISTING ~spwi103.spl~  ~override~
 PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN
READ_LONG  0x64 "ho"
FOR (READ_SHORT 0x68 "hc"; "hc" > 0x00; "hc" -= 0x01) BEGIN
  WRITE_SHORT ("ho" + ("hc" * 0x28) - 0x16) 5
  WRITE_BYTE  ("ho" + ("hc" * 0x28) - 0x1c) 4
  WRITE_SHORT ("ho" + ("hc" * 0x28) - 0x02) "burnhand"
END
 END
 BUT_ONLY_IF_IT_CHANGES

 

to this:

 

COPY_EXISTING ~spwi103.spl~  ~override~
 PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN
READ_LONG  0x64 "ho"
FOR (READ_SHORT 0x68 "hc"; "hc" > 0x00; "hc" -= 0x01) BEGIN
  WRITE_SHORT ("ho" + ("hc" * 0x28) - 0x16) 1
  WRITE_BYTE  ("ho" + ("hc" * 0x28) - 0x1c) 4
  WRITE_SHORT ("ho" + ("hc" * 0x28) - 0x02) "burnhand"
END
 END
 BUT_ONLY_IF_IT_CHANGES

 

In short, you just need to replace the 5 with a 1 in the first WRITE_SHORT line of the block.

Link to comment

There's a typo in the Mace of Disruption +2 fix which erroneously makes its undead destroying effects require a save vs. polymorph and a save vs. spells in addition to its proper save vs. death. The typo also makes those effects operate with a +17 and +19 bonuses to saves, respectively which pretty much guarantees that the effects will never occur. Here's the faulty block:

 

// level drain now handled by batch fixes
// changes the icon from generic mace to MoD's one. Also see macedisu.eff.
// new for v4; fix ^&% damage v opcode no-die bug
COPY_EXISTING ~blun25.itm~ ~override~
 WRITE_ASCII 0x3a ~iblun12~ #8 // use MoD BAM
 WRITE_ASCII 0x44 ~gblun06~ #8 // use MoD BAM
 WRITE_ASCII 0x58 ~cblun12~ #8 // use MoD BAM
 READ_LONG   0x64 "abil_off"
 READ_SHORT  0x68 "abil_num"
 READ_LONG   0x6a "fx_off"
 READ_SHORT  0x70 "fx_num"
 SET "fx_delta" = 0
 FOR (index = 0; index < fx_num; index = index + 1) BEGIN
READ_SHORT ("%fx_off%" +		("%index%" * 0x30)) "type"
READ_ASCII ("%fx_off%" + 0x14 + ("%index%" * 0x30)) "eff_file"
PATCH_IF (("%type%" = 177) AND ("macedisr" STRING_COMPARE_CASE "%eff_file%" = 0)) BEGIN // change use macedisr eff to colorglow pulse
  WRITE_SHORT ("%fx_off%"		+ ("%index%" * 0x30)) 9	// colorglow pulse
  WRITE_BYTE  ("%fx_off%" + 0x02 + ("%index%" * 0x30)) 1	// target self
  WRITE_BYTE  ("%fx_off%" + 0x06 + ("%index%" * 0x30)) 202  // green
  WRITE_BYTE  ("%fx_off%" + 0x07 + ("%index%" * 0x30)) 255  // blue
  WRITE_SHORT ("%fx_off%" + 0x08 + ("%index%" * 0x30)) 21   // weapon head/blade minor
  WRITE_SHORT ("%fx_off%" + 0x0a + ("%index%" * 0x30)) 0x6e // cycle speed
  WRITE_BYTE  ("%fx_off%" + 0x0c + ("%index%" * 0x30)) 2	// instant/while equipped
  WRITE_LONG  ("%fx_off%" + 0x0e + ("%index%" * 0x30)) 0	// duration
  WRITE_BYTE  ("%fx_off%" + 0x12 + ("%index%" * 0x30)) 100  // probability 1
  WRITE_LONG  ("%fx_off%" + 0x24 + ("%index%" * 0x30)) 0	// blank save, just in case
END
 END
 FOR (index2 = 0; index2 < abil_num; index2 = index2 + 1) BEGIN
READ_BYTE   ("%abil_off%" +		("%index2%" * 0x38)) "type"
READ_SHORT  ("%abil_off%" + 0x1e + ("%index2%" * 0x38)) "abil_fx_num"
READ_SHORT  ("%abil_off%" + 0x20 + ("%index2%" * 0x38)) "abil_fx_idx"
SET "abil_fx_idx" = ("%abil_fx_idx%" + "%fx_delta%")
WRITE_SHORT ("%abil_off%" + 0x20 + ("%index2%" * 0x38)) ("%abil_fx_idx%")
PATCH_IF ("%type%" = 1) BEGIN // melee ability check
  SET "eff_count" = 0
  WRITE_ASCII (0x04 + "%abil_off%" + ("%index2%" * 0x38)) ~iblun12~ #8 // use MoD BAM
  FOR (index3 = 0; index3 < abil_fx_num; index3 = index3 + 1) BEGIN
	READ_SHORT ("%fx_off%" +		(("%abil_fx_idx%" + "%index3%") * 0x30)) "opcode"
	READ_ASCII ("%fx_off%" + 0x14 + (("%abil_fx_idx%" + "%index3%") * 0x30)) "resref"
	// first fix misordered effects bug
	PATCH_IF (("%opcode%" = 177) AND (("mesdie" STRING_COMPARE_CASE "%resref%" = 0) OR ("die" STRING_COMPARE_CASE "%resref%" = 0))) BEGIN
	  PATCH_IF ("%eff_count%" = 0) BEGIN
		WRITE_ASCII ("%fx_off%" + 0x14 + (("%abil_fx_idx%" + "%index3%") * 0x30)) "mesdie" #8
		SET "eff_count" = 1
	  END ELSE BEGIN
		WRITE_ASCII ("%fx_off%" + 0x14 + (("%abil_fx_idx%" + "%index3%") * 0x30)) "die" #8
	  END
	  WRITE_LONG	("%fx_off%" + 0x24 + (("%abil_fx_idx%" + "%index3%") * 0x30)) 0 // save handled by EFF
	  WRITE_LONG	("%fx_off%" + 0x28 + (("%abil_fx_idx%" + "%index3%") * 0x30)) 0 // save handled by EFF
	END
  END
  // then add new effect for undead damage
  WRITE_SHORT ("%abil_off%" + 0x1e + ("%index2%" * 0x38)) ("%abil_fx_num%" + 1)
  INSERT_BYTES  ("%fx_off%" +		("%abil_fx_idx%" * 0x30))	   0x30 // new effect
	WRITE_SHORT ("%fx_off%" +		("%abil_fx_idx%" * 0x30))		177 // use eff
	WRITE_BYTE  ("%fx_off%" + 0x02 + ("%abil_fx_idx%" * 0x30))		  2 // target: preset target
	WRITE_LONG  ("%fx_off%" + 0x04 + ("%abil_fx_idx%" * 0x30))		  4 // UNDEAD from...
	WRITE_LONG  ("%fx_off%" + 0x08 + ("%abil_fx_idx%" * 0x30))		  3 // general.ids
	WRITE_BYTE  ("%fx_off%" + 0x0c + ("%abil_fx_idx%" * 0x30))		  1 // instant/permanent
	WRITE_BYTE  ("%fx_off%" + 0x12 + ("%abil_fx_idx%" * 0x30))		100 // probability
	WRITE_ASCII ("%fx_off%" + 0x14 + ("%abil_fx_idx%" * 0x30)) ~macedisu~ // resref
  SET "fx_delta" = ("%fx_delta%" + 1)
END
 END
 BUT_ONLY_IF_IT_CHANGES

 

 

and here's the fixed version:

 

 

// level drain now handled by batch fixes
// changes the icon from generic mace to MoD's one. Also see macedisu.eff.
// new for v4; fix ^&% damage v opcode no-die bug
COPY_EXISTING ~blun25.itm~ ~override~
 WRITE_ASCII 0x3a ~iblun12~ #8 // use MoD BAM
 WRITE_ASCII 0x44 ~gblun06~ #8 // use MoD BAM
 WRITE_ASCII 0x58 ~cblun12~ #8 // use MoD BAM
 READ_LONG   0x64 "abil_off"
 READ_SHORT  0x68 "abil_num"
 READ_LONG   0x6a "fx_off"
 READ_SHORT  0x70 "fx_num"
 SET "fx_delta" = 0
 FOR (index = 0; index < fx_num; index = index + 1) BEGIN
READ_SHORT ("%fx_off%" +		("%index%" * 0x30)) "type"
READ_ASCII ("%fx_off%" + 0x14 + ("%index%" * 0x30)) "eff_file"
PATCH_IF (("%type%" = 177) AND ("macedisr" STRING_COMPARE_CASE "%eff_file%" = 0)) BEGIN // change use macedisr eff to colorglow pulse
  WRITE_SHORT ("%fx_off%"		+ ("%index%" * 0x30)) 9	// colorglow pulse
  WRITE_BYTE  ("%fx_off%" + 0x02 + ("%index%" * 0x30)) 1	// target self
  WRITE_BYTE  ("%fx_off%" + 0x06 + ("%index%" * 0x30)) 202  // green
  WRITE_BYTE  ("%fx_off%" + 0x07 + ("%index%" * 0x30)) 255  // blue
  WRITE_SHORT ("%fx_off%" + 0x08 + ("%index%" * 0x30)) 21   // weapon head/blade minor
  WRITE_SHORT ("%fx_off%" + 0x0a + ("%index%" * 0x30)) 0x6e // cycle speed
  WRITE_BYTE  ("%fx_off%" + 0x0c + ("%index%" * 0x30)) 2	// instant/while equipped
  WRITE_LONG  ("%fx_off%" + 0x0e + ("%index%" * 0x30)) 0	// duration
  WRITE_BYTE  ("%fx_off%" + 0x12 + ("%index%" * 0x30)) 100  // probability 1
  WRITE_LONG  ("%fx_off%" + 0x24 + ("%index%" * 0x30)) 0	// blank save, just in case
END
 END
 FOR (index2 = 0; index2 < abil_num; index2 = index2 + 1) BEGIN
READ_BYTE   ("%abil_off%" +		("%index2%" * 0x38)) "type"
READ_SHORT  ("%abil_off%" + 0x1e + ("%index2%" * 0x38)) "abil_fx_num"
READ_SHORT  ("%abil_off%" + 0x20 + ("%index2%" * 0x38)) "abil_fx_idx"
SET "abil_fx_idx" = ("%abil_fx_idx%" + "%fx_delta%")
WRITE_SHORT ("%abil_off%" + 0x20 + ("%index2%" * 0x38)) ("%abil_fx_idx%")
PATCH_IF ("%type%" = 1) BEGIN // melee ability check
  SET "eff_count" = 0
  WRITE_ASCII (0x04 + "%abil_off%" + ("%index2%" * 0x38)) ~iblun12~ #8 // use MoD BAM
  FOR (index3 = 0; index3 < abil_fx_num; index3 = index3 + 1) BEGIN
	READ_SHORT ("%fx_off%" +		(("%abil_fx_idx%" + "%index3%") * 0x30)) "opcode"
	READ_ASCII ("%fx_off%" + 0x14 + (("%abil_fx_idx%" + "%index3%") * 0x30)) "resref"
	// first fix misordered effects bug
	PATCH_IF (("%opcode%" = 177) AND (("mesdie" STRING_COMPARE_CASE "%resref%" = 0) OR ("die" STRING_COMPARE_CASE "%resref%" = 0))) BEGIN
	  PATCH_IF ("%eff_count%" = 0) BEGIN
		WRITE_ASCII ("%fx_off%" + 0x14 + (("%abil_fx_idx%" + "%index3%") * 0x30)) "mesdie" #8
		SET "eff_count" = 1
	  END ELSE BEGIN
		WRITE_ASCII ("%fx_off%" + 0x14 + (("%abil_fx_idx%" + "%index3%") * 0x30)) "die" #8
	  END
	  WRITE_LONG	("%fx_off%" + 0x24 + (("%abil_fx_idx%" + "%index3%") * 0x30)) 0 // save handled by EFF
	  WRITE_LONG	("%fx_off%" + 0x28 + (("%abil_fx_idx%" + "%index3%") * 0x30)) 0 // save handled by EFF
	END
  END
  // then add new effect for undead damage
  WRITE_SHORT ("%abil_off%" + 0x1e + ("%index2%" * 0x38)) ("%abil_fx_num%" + 1)
  INSERT_BYTES  ("%fx_off%" +		("%abil_fx_idx%" * 0x30))	   0x30 // new effect
	WRITE_SHORT ("%fx_off%" +		("%abil_fx_idx%" * 0x30))		177 // use eff
	WRITE_BYTE  ("%fx_off%" + 0x02 + ("%abil_fx_idx%" * 0x30))		  2 // target: preset target
	WRITE_LONG  ("%fx_off%" + 0x04 + ("%abil_fx_idx%" * 0x30))		  4 // UNDEAD from...
	WRITE_LONG  ("%fx_off%" + 0x08 + ("%abil_fx_idx%" * 0x30))		  3 // general.ids
	WRITE_BYTE  ("%fx_off%" + 0x0c + ("%abil_fx_idx%" * 0x30))		  1 // instant/permanent
	WRITE_BYTE  ("%fx_off%" + 0x12 + ("%abil_fx_idx%" * 0x30))		100 // probability
	WRITE_ASCII ("%fx_off%" + 0x14 + ("%abil_fx_idx%" * 0x30)) ~macedisu~ // resref
  SET "fx_delta" = ("%fx_delta%" + 1)
END
 END
 BUT_ONLY_IF_IT_CHANGES

 

 

In short, the numbers before the comments in these two lines from that block should be changed to zeros:

 

WRITE_LONG	("%fx_off%" + 0x24 + (("%abil_fx_idx%" + "%index3%") * 0x30)) 17 // save handled by EFF
WRITE_LONG	("%fx_off%" + 0x28 + (("%abil_fx_idx%" + "%index3%") * 0x30)) 19 // save handled by EFF

 

like so:

 

WRITE_LONG	("%fx_off%" + 0x24 + (("%abil_fx_idx%" + "%index3%") * 0x30)) 0 // save handled by EFF
WRITE_LONG	("%fx_off%" + 0x28 + (("%abil_fx_idx%" + "%index3%") * 0x30)) 0 // save handled by EFF

Link to comment

Archived

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

×
×
  • Create New...