Jump to content

Burning Hands can only target one creature


Recommended Posts

Per the spell's description, Burning Hands should target any creature within a 60 degree arc of the caster. Unfortunately, in BG2, the spell can currently only target one creature which makes it fairly useless. I guess it needs a new projectile assigned to it, probably something similar to the Color Spray spell, which has the same description for its area of effect (60 degree arc).

 

For reference, Burning Hands was properly implemented in IWD1 and is actually a fairly useful spell in that game, especially for finishing off a clumped pack of trolls.

Link to comment

There tends to be a second or so of caster freeze when casting cone shaped, secondary projectile spells; I never did figure out a way to skip over it. Something like this would probably do the trick if you want it:

COPY_EXISTING ~cspray.pro~   ~override/burnhand.pro~
 WRITE_BYTE  0x0217 0x00
ADD_PROJECTILE ~override/burnhand.pro~
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) - 0x20) 0x0f
  WRITE_BYTE  ("ho" + ("hc" * 0x28) - 0x1c) 0x04
  WRITE_SHORT ("ho" + ("hc" * 0x28) - 0x02) "burnhand"
END
 END
BUT_ONLY

 

/edit

 

Lag which doesn't happen with Cone of Cold. Perplexity, thy name is fireball.ids.

Link to comment

I had some fun playing around with this. The projectile also needed its range adjusted, and the Burning Hands scroll needed to be changed to accommodate the new targeting (four copies, as it would be added to the existing copy blocks).

 

COPY_EXISTING ~cspray.pro~   ~override/burnhand.pro~
 WRITE_SHORT 0x206 64 // range (5')
 WRITE_BYTE  0x217  0 // no explosion

ADD_PROJECTILE ~override/burnhand.pro~

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

// scroll fixes: effects target
COPY_EXISTING ~scrl68.itm~ ~override~ // burning hands
 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 // loops through abilities
READ_SHORT  ("%abil_off%" + 0x1e + ("%index%" * 0x38)) "abil_fx_num"
READ_SHORT  ("%abil_off%" + 0x20 + ("%index%" * 0x38)) "abil_fx_idx"
FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN // searches through fx for cast spell
  READ_SHORT ("%fx_off%" +		(("%abil_fx_idx%" + "%index2%") * 0x30)) "opcode"
  PATCH_IF (("%opcode%" = 146) OR ("%opcode%" = 148)) BEGIN // cast spell
	WRITE_BYTE  ("%fx_off%" + 0x02 + (("%abil_fx_idx%" + "%index2%") * 0x30)) 1   // target: self
  END
END
 END
 BUT_ONLY_IF_IT_CHANGES

// scroll fixes: casting opcode
COPY_EXISTING ~scrl68.itm~ ~override~ // burning hands
 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 // loops through abilities
READ_SHORT  ("%abil_off%" + 0x1e + ("%index%" * 0x38)) "abil_fx_num"
READ_SHORT  ("%abil_off%" + 0x20 + ("%index%" * 0x38)) "abil_fx_idx"
FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN // searches through fx for cast spell
  READ_SHORT ("%fx_off%" +		(("%abil_fx_idx%" + "%index2%") * 0x30)) "opcode"
  PATCH_IF ("%opcode%" = 146) BEGIN // cast spell
	WRITE_SHORT ("%fx_off%" +		(("%abil_fx_idx%" + "%index2%") * 0x30)) 148 // opcode: cast spell (scroll)
  END
END
 END
 BUT_ONLY_IF_IT_CHANGES

// scroll fixes: ability targeting
COPY_EXISTING ~scrl68.itm~ ~override~ // burning hands
 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 // loops through abilities
READ_SHORT  ("%abil_off%" + 0x1e + ("%index%" * 0x38)) "abil_fx_num"
READ_SHORT  ("%abil_off%" + 0x20 + ("%index%" * 0x38)) "abil_fx_idx"
FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN // searches through fx for cast spell
  READ_SHORT ("%fx_off%" +		(("%abil_fx_idx%" + "%index2%") * 0x30)) "opcode"
  PATCH_IF (("%opcode%" = 146) OR ("%opcode%" = 148)) BEGIN // cast spell
	WRITE_BYTE  ("%abil_off%" + 0x0c + ("%index%" * 0x38)) 4 // target: any point in range (ability header)
  END
END
 END
 BUT_ONLY_IF_IT_CHANGES

// scroll fixes: range
COPY_EXISTING ~scrl68.itm~ ~override~ // spook
 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 // loops through abilities
READ_SHORT  ("%abil_off%" + 0x1e + ("%index%" * 0x38)) "abil_fx_num"
READ_SHORT  ("%abil_off%" + 0x20 + ("%index%" * 0x38)) "abil_fx_idx"
FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN // searches through fx for cast spell
  READ_SHORT ("%fx_off%" +		(("%abil_fx_idx%" + "%index2%") * 0x30)) "opcode"
  PATCH_IF (("%opcode%" = 146) OR ("%opcode%" = 148)) BEGIN // cast spell
	WRITE_SHORT ("%abil_off%" + 0x0e + ("%index%" * 0x38)) 5 // range (ability header)
  END
END
 END
 BUT_ONLY_IF_IT_CHANGES

 

And a screenshot of Imoen torching the PC, Jaheira, and Imoen with her newfangled Burning Hands:

burning_hands.jpg

Link to comment

I must ask you guys a question because I don't think I really understand.

 

Let's say that we have an item or spell that has certain properties and then we have a description that omits them or reports them incorrectly.

 

In this case, can't we say that one of the two is definitely at fault and that should be changed?

 

Or should we think that a similar situation should be preserved or at most, patch it with an OBC component, implying that it was developer's intent? :)

Link to comment

I didn't really have a logical reason for suggesting it to be an OBC component, just a feeling/inclination. Someone can probably argue a lot stronger case one way or the other, and their arguments should take precedence over my 'gut feelings'.

Link to comment

It doesn't pass the "it would be nice" test. Looking at the "fix," the only reason that can be argued for it is that "It would be nice if burning hands targeted multiple characters, but it doesn't."

 

The spell works fine. The projectile works fine. Descriptions largely have no bearing on anything in the game (copy/paste from the PHB, and routinely edited poorly), so it doesn't fly as a reason for anything. We'd be changing this only because it would have been nice had they implemented it this way.

 

We're certainly able to change the description so it doesn't allude to incorrect functionality, but just because the amulet mentions that it blocks ESP doesn't mean there's a bug for us to fix by adding ESP to the game.

 

But, like Caedwyr, I mostly just make decisions based on feeling at this point. This doesn't feel like a fix, so a fix it cannot be! ;)

Link to comment

I probably shoulda clarified in my first post playing around with this. In conflicts between actual effects of spells and their descriptions, I'm typically inclined to go for the spell itself. I was looking at this, honestly, more for an addition to devSin's maze animation changes (OBC Spell Animations).

Link to comment

Archived

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

×
×
  • Create New...