[(BGEE, BG2) Bug] Barb/monk movement speed/free action issues
We've already touched on this one a bit already, and this is another fix in the free action vs. movement speed issues.
Background: Free action works by blocking any effects with opcode 126, movement rate bonus, which is used by spells like entangle and grease to set movement rate to 0. Unfortunately, it's also used by the kit spells that increase the inherent speed increases of monks and barbarians--meaning that a barb/monk under the influence will lose their inherent speed increase or, even worse, permanently miss their speed increase if they're under the influence of free action at level up.
BG2FP worked around this by using the identical opcode 176 for movement rate changes that is not affected by free action and patched the barb/monk speed increases to use it, like so:
Background: Free action works by blocking any effects with opcode 126, movement rate bonus, which is used by spells like entangle and grease to set movement rate to 0. Unfortunately, it's also used by the kit spells that increase the inherent speed increases of monks and barbarians--meaning that a barb/monk under the influence will lose their inherent speed increase or, even worse, permanently miss their speed increase if they're under the influence of free action at level up.
BG2FP worked around this by using the identical opcode 176 for movement rate changes that is not affected by free action and patched the barb/monk speed increases to use it, like so:
// kit innate speed increases should not be prevented by free action
COPY_EXISTING ~spcl151.spl~ ~override~ // barbarian
~spcl812.spl~ ~override~ // monk i
~spcl813.spl~ ~override~ // monk ii
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
READ_SHORT ("%fx_off%" + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "opcode"
PATCH_IF ("%opcode%" = 126) BEGIN // movement rate bonus
WRITE_SHORT ("%fx_off%" + (0x30 * ("%abil_fx_idx%" + "%index2%"))) 176
END
END
END
BUT_ONLY_IF_IT_CHANGES
Post edited by Bhryaen on
4
Comments
Maybe add Monk and Barbarian to the title so its more clear what this bug is about?
I've been organizing some illegal races in Candlekeep to test this:
- Ring of Free Action does not nullify the faster movement rate of Monks.
- Ring of Free Action does not prevent the increase of movement rate of Monks when they level up.
- Ring of Free Action does not nullify the faster movement rate of Barbarians.
Lingering issues:
- Sometimes equipping/unequipping the Ring of Free Action on my Monk or Barbarian actually sped them for a few seconds. But I think this effect is negligible.
Note: I hope that the Ring of Free Action is a suitable way of testing this.
Monk with RING09 on still manages to outpace Coran and Kivan while also being unaffected by Web traps in AR2100. Might be useful to have a Message box notification on that though: In vBG1 it seems to be the same, showing either successful saves or nothing at all.
Same success for Barbarians.
Yes it is.
If you meant that the icon should be enough feedback to know why Web/ Entangle/ etc isn't working, fair enough. I was just looking for confirmation in the bottom message bar for the purposes of confirmation of a successful test and not finding it, so I made the suggestion. After all you get messages like Magic Resistance when a spell fails even though it should be clear with monk resistance or maybe AMUL17 or what-have-you. Or the Cleric feedback for Turning- obvious by the lit Turn tab but still- good to know is working.
As it was, you can see that when you fail the save, nothing shows up, and since the web traps keep forcing the Save on a regular interval, and since no failed Save ever shows up, one can presume it's working when only 2 successful Saves show up during one trap's duration and 5 during another's, and never a Hold. But, well, I've been doing my best to be less sloppy that way and not presume... As it is a half hour standing in web traps with no effect while Coran and Kivan got Held repeatedly probably means it was successful. :-)