Jump to content

RFC: Haste


Recommended Posts

1 hour ago, Bartimaeus said:

Merely negating, whether you're casting Haste or Slow, feels too much like you're casting a really lousy dispel that only affects haste/slow - particularly problematic for Slow, which is already gated behind a saving throw.

I think it plays well. Enemy mages seem to like Slow spells, which due to saves or AoE might end up affecting half my party. And let’s be honest Slow is a major disadvantage. I cast Haste in response, and half my party gets Hasted (a fairly major advantage) and the other half are freed from the Slow effect. It’s a significant change in how the fight plays out. By the same token, if enemies are Hasted, the Slow spell gives me a good chance to remove their advantage. 

The vanilla behavior is too swingy IMO, and can incentivize holding onto your Haste or Slow spells, because whoever casts it last, wins. Of course, the AI will not consider such details. The AI will cast it whenever its script says to, allowing a patient player to completely override the AI’s spell. It is just another instance of the player having an incontestable advantage. By contrast, if Haste and Slow merely neutralize each other, then every casting has value - even if your Haste spell gets neutralized, you still have the benefit of not being Slowed. 

As far as implementation: I did it for EE only because it is a single CLONE_EFFECT line adding a 226 effect to the spells. Super easy. Doing it the SR way with subspells would take more effort, and I just don’t have the free time. It’s on my list, but not high on my list. 

I’ll be honest, I would not be above making this an install option. @Bartimaeus has included some install options in SRR which I think are nice. And Demi included some configuration options in IR, so it’s not like he is against it in principle. But at the same time, I also think it’s fine to have SR be one way and let users install another mod like mine, to change it.

@polytope It seems you prefer a long duration and single-target, versus short-duration and AoE. But how does a single-target Haste square with AoE Slow? Slow already seems quite strong; this would seem to make it even moreso. 

Link to comment

Yeah, Slow is brutal, which makes sense: the Slow opcode is the Haste opcode's opposite in all the worst ways.

40 minutes ago, subtledoctor said:

The vanilla behavior is too swingy IMO, and can incentivize holding onto your Haste or Slow spells, because whoever casts it last, wins. Of course, the AI will not consider such details. The AI will cast it whenever its script says to, allowing a patient player to completely override the AI’s spell. It is just another instance of the player having an incontestable advantage. By contrast, if Haste and Slow merely neutralize each other, then every casting has value - even if your Haste spell gets neutralized, you still have the benefit of not being Slowed. 

O.K., I think you've convinced me. I would definitely not be against it being an option, and I don't think either implementation would much change how the AI would approach situations (if at all), which makes it the perfect candidate for a "player's choice" setting/component. Implementation for the original engine, on the other hand...well, the slow and haste sectypes already exist in SR, it's just a matter of making them do what you want them to do. I, too, am not currently in a position to do much at this particular moment, but I will write in my to-do for now so I don't forget it entirely at least.

Though there's still the larger issue of how Haste should work in the first place...which I have not had much input on because I haven't loved any of the proposed solutions nor have I been able to think of anything I like better myself. I suspect, like a number of things over the years, it will become a matter of choosing "the least worst" option...

(e): How did SR players feel about single-target Haste back when it was a thing anyways? Though balance is important, if players at large don't like something, it's probably a bad idea to go through with it even if it means letting something stay poorly balanced. I would personally never even dream of changing Haste to single-target unless the official version of SR has already done the same - it's just too big of a change to a fundamental spell.

Edited by Bartimaeus
Link to comment

FWIW SCS v35 will have haste cancelling slow as (part of) an EE-only optional component. (I do it through spellstates and 321.) I think it's pretty clearly intended original-game behavior given the spell text. I haven't quite worked out how to interact with SR here - plausibly just skip if SR is installed, as I usually do for spell tweaks.

Link to comment
4 hours ago, Bartimaeus said:

Implementation for the original engine, on the other hand...well, the slow and haste sectypes already exist in SR, it's just a matter of making them do what you want them to do.

The way SR handles Spell Shield and Secret Word is an example. Something like:

  • Have all spells with the "k#haste" sectype move their effects into a subspell, and move the "k#haste" sectype off of the main spell and into that subspell
  • Add an op205 effect into that subspell, providing immunity to spells with the "k#slow" sectype
  • Create a second subspell with no sectype, with a single op221 effect removing the "k#slow" sectype

And do the reverse for all Slow spells:

  • Have all spells with the "k#slow" sectype move their effects into a subspell, and move the "k#slow" sectype off of the main spell and into that subspell
  • Add an op205 effect into that subspell, providing immunity to spells with the "k#haste" sectype
  • Create a second subspell with no sectype, with a single op221 effect removing the "k#haste" sectype
  • In this case, I suppose saving throws should stay in the main spell so that the Haste removal subspell only applies on a failed save

Should do it, and work fine on both the EE and old engines, and unlike my op226 modification it doesn't require messing with SPTURNI2.BAM.

Edited by subtledoctor
Link to comment
14 hours ago, subtledoctor said:

You made me doubt myself, so I just tested - you are mistaken. I created a character in unmodded BGEE v2.6.6, and had her cast Haste on herself. Then I attacked Phlydia, who I set to cast Slow instead of her usual Acid Arrow. My Hasted character failed her save, and went straight from Hasted to Slowed.

Another change between the original BG2 and the EE engine, frankly an unwelcome one for me as it's less granular (reversing rather than neutralizing).

I did say "vanilla game" back when SR was designed, before EE.

Link to comment
10 hours ago, subtledoctor said:

It seems you prefer a long duration and single-target, versus short-duration and AoE. But how does a single-target Haste square with AoE Slow? Slow already seems quite strong; this would seem to make it even moreso. 

I believe you shouldn't revert offensive spells from AoE to single target as the AI will fail to understand how these interact with things that protect from single target spells.

Note that the duration of Slow and Haste spells already didn't match in vanilla.

Link to comment

Yeah my point was that, if you make Haste single-target, then if your party gets Slowed you won’t be able to use Haste to remove the condition. (Unless you memorize it six times and spend six rounds casting it.)

Just curious if you don’t find it problematic to remove Haste’s ability to counter Slow. 

4 hours ago, polytope said:

Another change between the original BG2 and the EE engine, frankly an unwelcome one for me as it's less granular (reversing rather than neutralizing).

Listen, I will always be the first to say I could be mistaken. But so far here I have not been mistaken. And I definitely do not remember this being an EE change. I’m fairly sure Haste and Slow have always overridden each other. I don’t have a BGT install handy to run a quick test with Phlydia, and I’m not familiar enough with e.g. the Chateau Irenicus ogre mage to set up a quick BG2 test. But there are some pre-EE players around here, maybe they can confirm. 

But if it was a change, I agree it is unwelcome, and if it was always that way I agree that more granular behavior is better. 

Edited by subtledoctor
Link to comment

I just tested on a vanilla oBG2 install, and polytope is correct:

1. Haste + Slow = Normal

2. Slow + Haste = Normal

3. Haste + Slow + Slow = Slow

4. Slow + Haste + Haste = Haste

5. Haste + Slow + Haste + Slow = Normal

Though interestingly, simply installing the BG2 Fixpack will somewhat break the interaction as a result of introducing 206 opcodes (Protection from Spell), intended to prevent the stacking of the effects of spells but also incidentally preventing e.g. a Hasted character from being Slowed twice in order to both negate and replace the Haste.

Edited by Bartimaeus
Link to comment

Wow interesting! In that case I feel a bit more strongly that SR should perhaps implement the sectypes/subspells I outlined above. I would almost venture to say it should be in the BG2FixPack. (In fact maybe it should be in the EEFixPack, to restore the original behavior! Though, in that case it would miss a lot of mod-added Haste spells. So I guess SR and/or SCS would be better locations for the tweak. 

Link to comment
On 9/8/2023 at 7:28 PM, Bartimaeus said:

Though interestingly, simply installing the BG2 Fixpack will somewhat break the interaction as a result of introducing 206 opcodes (Protection from Spell), intended to prevent the stacking of the effects of spells but also incidentally preventing e.g. a Hasted character from being Slowed twice in order to both negate and replace the Haste.

Of course, you can't install an "un-fixpacked" EE, the interaction is problematic for this reason.

If Slow is to have an additional associated debuff (doesn't need one, really), it should be applied as a series of 1-round subspells rather than falling under the feature block of the main spell. This allows more seamless reversion of cumulative Slow and Haste effects whilst the THAC0/AC penalties don't stack, and standardization between the various Slow effects from spell or item.

Link to comment

So I am preparing a new game, and I re-read this thread to test out possible improvements here. As I see it, there seems to be some consensus around 1) using opcode 16 in Haste spells; and 2) either reducing the duration or limiting the number of targets; and 3) reverting to the pre-EE behavior where Haste and Slow cancel rather than override each other. 

The Boots of Speed seem problematic because they are easy to find and cost almost no resources to use for a permanent effect, which suggests they should be weaker than the spell; we don’t want the movement increase to stack with other sources; but we don’t want the Boots to make you immune from the spell’s temporary APR bonuses. 

So here is a proposal, and what I will probably test: 

1) The Boots of Speed will use op176 to SET your speed to 18. It should apply 101 immunity against op16, and (maybe?) against further application of op176. Monks can get targeted 206 immunity vs. the Boots in their own speed boost spells, if they are not already immune. Barbarians’ 2-point increase would take you from 18 to 20, which does not offend me. 

2) The Haste spell and its ilk will use op16 “weak haste” to double framerate and provide either +0 or +0.5 extra APR. And apply the STATE_HASTED state. On top of that, it will also grant a separate +0.5 APR bonus via op1. This way casting Haste on someone with Boots of Speed still gives them an APR bonus. Probably keep it AoE for the sake of negating Slow, maybe drop the duration to 5 or 10 rounds. 

3) For Improved Haste also apply “weak haste” for increased movement and +0 to +0.5 APR, and also… +2APR on top? Up to +2.5 APR is better than current SR IH, but as a single-target 6th-level spell, it should be good. And this way it would properly apply the STATE_HASTED state, and give a nice +2 APR to someone in Boots of Speed. I would probably have it override and replace a Slow condition, rather than merely canceling it.  

Link to comment

what the fakkk are ye doing? Haste and improved haste is totally fine and much needed in heavily tacticaly challenging installs. don't try to fuck them up. nobody will download this crap anyway so it is just a wasted effort.

better fix pathfinding instead.  

dc23b6209d550ddffcfd35a09dbca532.jpg

Link to comment
7 hours ago, InKal said:

what the fakkk are ye doing? Haste and improved haste is totally fine and much needed in heavily tacticaly challenging installs. don't try to fuck them up. nobody will download this crap anyway so it is just a wasted effort.

Yes, but long ago Demivrgvs decided Haste needed a nerf to be at the same power level as other 3rd level spells in SR. I don't actually agree because in spite of the power of Haste it's not a game-breaker in the same way that unmodded game Mislead, Project Image and Improved Alacrity are. And you can probably only use it once (and not more than twice) before your party ends up badly fatigued.

Still Haste has to be changed from what it was in SR (i.e. not really haste), as that causes bugs with AI being unable to detect it. The original bug of it doubling poison/disease/regeneration rate is usually trivial, the only way it can matter is with the 7th level spell Regeneration or the Shapechange option for greater wolfwere.

7 hours ago, InKal said:

better fix pathfinding instead. 

Needs a programmer to fix that one. It seems to be pretty ironed into EE.

17 hours ago, subtledoctor said:

2) The Haste spell and its ilk will use op16 “weak haste” to double framerate and provide either +0 or +0.5 extra APR. And apply the STATE_HASTED state. On top of that, it will also grant a separate +0.5 APR bonus via op1. This way casting Haste on someone with Boots of Speed still gives them an APR bonus. Probably keep it AoE for the sake of negating Slow, maybe drop the duration to 5 or 10 rounds.

Might as well revert both the spell and the boots to vanilla behavior at that point (i.e. spell grants opcode #16 type 0, boots opcode #16 type 2), at least that's inherently unstackable. Isn't it kind of odd for Haste to be less useful if you're wearing the boots?

Link to comment
7 hours ago, InKal said:

much needed in heavily tacticaly challenging installs

Lol, can't play without a security blanket? Maybe just put on Story Mode. :laugh:

4 minutes ago, polytope said:

Demivrgvs decided Haste needed a nerf to be at the same power level as other 3rd level spells in SR. I don't actually agree because in spite of the power of Haste it's not a game-breaker in the same way that unmodded game Mislead, Project Image and Improved Alacrity are

Mislead and Project Image are not game-breaking unless you exploit engine quirks unrelated to their spell descriptions. And regardless, I think you are wrong about Demi - he never came at this from the perspective of "let me swing my nerf bat in the name of game balance." He just wanted different spells of different schools to be on a relatively equal footing, so that player could adopt different tactics and employ different visions of what their caster is. Want to play an Evoker? Great, but here is Skull Trap doing 20d6 damage and Fireball with a worse damage type doing half the damage. Why would you use the one in your own school? Thinking about lore rather than gameplay, why would evokers have designed such an inferior spell? Demi's response was not that "Skull Trap is OP and should be nerfed." It was simply "how do we address this disparity?"

Edited by subtledoctor
Link to comment

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...