Sign in to follow this  
Nowea

Speed Rebalance Patch

7 posts in this topic

Obligatory plug of a reflect graphic patch that needs testing

For an updated patch and code, click here!

So after much discussion, algebra, spreadsheet work, and help/advice from many others we've made a patch that changes the ATB formulas. These are very tiny patches that simply tweak the formula used to fill ATB gauges.

Current BNW formula: (1.5 * (75 * (SPD + 20)) / 16)
New Formula: (1 * (75 * (SPD + 51)) / 16)

(Slow changes the 75 to 60 and Haste changes the 75 to 90, those numbers are unchanged)

This results in ATB gauge fill times, for both enemies and party members, being "pushed" toward a base value of 42. Characters with a speed of 42 would remain unchanged. Characters with speed below 42 should play faster than before (without actually being faster than a 42 speed character) and characters with speed above 42 should play slower than before, with higher speeds being heavily affected.

This does not do any of the following:

  • Change status timers
  • Change the effect of haste or slow
  • Put a cap on speed in any way
  • Change enemy scripts or stats at all


Seibaby's patch below remedies this.

This last point is very important point. Enemies that use global timers risk having scripts that don't work properly anymore, as the global timers are not adjusted to account for the enemy's new attack rate. In addition, there are potential balance issues for enemies with more extreme speeds being notably stronger (in the case of low-speed enemies) or weaker (in the case of high-speed enemies).

These notes (enemy balance and enemy scripts breaking) are a major reason why these patches would need to be tested before being fully implemented. While status timers are unchanged, it's worth looking and seeing if Sap, Regen, Poison, or any other status that is based on a timer is made too significantly stronger or weaker thanks to the relative changes in speed.

Credit to Seibaby for actually making the patch (My contribution was algebra and testing to find a formula that doesn't make speed TOO weak)

For a quick idea of how this would look. Each character was timed for how many turns they'd get compared to 31 speed Strago's 4 turns. 

VANILLA BNW
---
Strago (31 speed) == 4 turns
Terra (48 speed) == 5.33 turns
Celes (71 speed) == 7 turns
Shadow (126 speed) == 10.66 turns

REBALANCED PATCH
---
Strago (31 speed) == 4 turns
Terra (48 speed) == 5 turns
Celes (71 speed) == 6 turns
Shadow (126 speed) == 8.4 turns 

Edited by Nowea

Share this post


Link to post
Share on other sites

This is obviously up to BTB since he's in charge of his downloads section.  But if he approves then this might be best to include in the BNW download section.  One of the goals here is that all of this type of stuff (providing it's legal to host) will be hosted on this site so nothing is lost.  I always hate it when a download disappears from dropbox or another hosting site.

 

But to keep things on topic, this definitely seems like it tightens the total range of speed possible.  Out of curiosity were there problems with speed being OP before?

Share this post


Link to post
Share on other sites

It was a common agreement that speed was too strong. Of course, BTB can move it to the download section (I didn't know that was a thing) and he helped with measuring the number of turns after talking about how much weaker speed should be. A lot of algebra happened and my incessant rambling proceeded to eventually have the patch made.

Share this post


Link to post
Share on other sites

The needs a lot of testing before it's an official part of the mod, so I don't think it really ought to go in the downloads section yet.

Share this post


Link to post
Share on other sites

I feel like there should be a "beta" tag and/or section of the downloads section.

Share this post


Link to post
Share on other sites
1 hour ago, BTB said:

I feel like there should be a "beta" tag and/or section of the downloads section.

Created.  "[Beta] Add Ons" Under BNW category.  Tagging would also be a good idea.  I'll update the tagging guidelines.

Share this post


Link to post
Share on other sites

Update: I've made a new version of the patch that doesn't affect monsters at all, to guarantee compatibility with current monster scripts.

The patch is available for testing here:
Headered version (for BNW 1.8.5)
Non-headered version (for BNW 1.8.5)

The code rewrites the Battle Time Counter function at C2/09D2 and incorporates changes previously made to that function by Synchysi. Everything should be nice and compatible.
Code:

 

;For Brave New World

;concept: Nowea
;coding: Seibaby

;Original formula: (ATB multiplier) * 1.5 * (Speed + 20) / 16
;New formula: (ATB multiplier) * (Speed + 51) / 16

;xkas 0.06
hirom         ;don't change this
;header       ;uncomment if headered ROM

;ATB multipliers
!slow = 60
!normal = 75
!haste = 90
;Universal Speed bonus
!bonus = 51


org $C209D2
atb:
;Set ATB multipliers
PHP
LDY.b #!slow    ;ATB multiplier = 60 if slowed
LDA $3EF8,X
BIT #$04
BNE .skip       ;Branch if Slow
LDY.b #!normal  ;ATB multiplier = 75 normally
BIT #$08
BEQ .skip       ;Branch if not Haste
LDY.b #!haste   ;ATB multiplier = 90 if hasted
.skip
TYA 
STA $3ADD,X     ;save the ATB multiplier
PHA 

;Check if monster or character
CPX #$08
BCC .character

;For monsters: Multiply ATB multiplier by 1.5
LSR
CLC
ADC $01,S
STA $01,S
;For monsters: add 20 Speed 
LDA #$14
CLC
BRA .addSpeed

.character
LDA #!bonus     ;Universal Speed bonus

;Add 51 to Speed
.addSpeed
ADC $3B19,X     ;Speed
XBA             ;Speed + Bonus in top byte of Accumulator

;Multiply by Slow/Normal/Haste constant
PLA             ;bottom byte of A is now Slow/Normal/Haste Constant
JSR $4781       ;Let C be the Slow/Normal/Haste constant, equal to
               ; 60, 75, or 90, respectively.
               ; for characters and enemies:
               ; A = (Speed + 51) * C
REP #$20

;Divide by 16
LSR 
LSR 
LSR 
LSR             ;A = A / 16
;Result = (Speed + 51) * ATB multiplier / 16
STA $3AC8,X     ;Save as amount by which to increase ATB timer.
PLP 
NOP #2         ;2 bytes padding
RTS
print bytes
Edited by seibaby

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this