Users browsing this thread: 1 Guest(s)
Comprehensive ATB Enhancement hack

#1
Posts: 6
Threads: 2
Thanks Received: 5
Thanks Given: 4
Joined: Mar 2024
Reputation: 0
Status
None
Hi all, first time posting here. I've done a lot of modding for other games, but this is my first time ROMhacking. Halfway through my first ever playthrough of FF6, aspects of the ATB system bothered me enough to seek out a patch that would stop the gauges from filling during battle animations. After some digging around I found Think0028's simple nATB patch, but didn't like how it enforced Wait mode. C-Dude was helpful enough to revise a version that would allow the Active/Wait mode config setting to be functional once more, but I noticed that the ATB pause also had knock-on effects on status effect timers, checks for fleeing, the jump command, and even AI battle scripts.

After studying some SNES assembly references and the impressive patches made by other FF6 hackers (Leet Sketcher, assassin, HatZen08), I believe I have addressed all of these issues. Here is the readme:

Quote:Final Fantasy 6 -- Comprehensive ATB Enhancement v1.02
by RoSoDude https://rosodudemods.wordpress.com/

Final Fantasy 6's ATB system has some notable flaws compared to other entries in the series. In particular, ATB is always running in the background regardless of battle animations, so commands can quickly pile up on the queue as gauges fill up during animations. This functionally caps the effectiveness of the Speed stat. Furthermore, this can be abused by "Wait tricking" with the Wait mode config setting, where the player enters a command submenu to pause ATB during player character battle animations, but lets ATB resume during enemy character battle animations to gain a turn order advantage. Additionally, most commands have a short delay (0.53-1.07 seconds) before executing which is irrelevant if the delay coincides with a battle animation, but can also makes the timing of commands less responsive, often at the cost of strategic depth. Finally, the Battle Speed config setting only serves to make enemy ATB speed slower relative to the player, instead of adjusting the actual pace of battles as the player would expect.

This hack is intended to redress all of these flaws. As such, it alters gameplay balance to some degree, but the end result should be a more tactical and robust ATB system which can be tweaked to the user's preference using the in-game config settings.

This hack makes ATB gauges and other battle timers (status effect counters, poison/regen ticks, success checks for fleeing) pause during battle animations, similar to the "nATB" system implemented by Think0028 for Brave New World, also available as a standalone "simple nATB" patch. However, this version of the system supports the Active/Wait mode config setting instead of defaulting to Wait. Since the original ATB fill rate was originally balanced around running during the battle animations, pausing the ATB without other changes leads to excessively slow paced battles. To remedy this, a new ATB fill rate formula is implemented, which equally uses the Battle Speed config setting for both player and enemy characters. This fill rate is roughly 2.5x faster than the original on Battle Speed 1, and roughly 1.5x faster on Battle Speed 6. The formula is identical to HatZen08's Even Gauge, however in this hack the Battle Speed setting is also applied to status effect timers, so their effects are consistent with the turn order regardless of the config setting.

The poison/regen/sap tick rate, the duration of status effects like reflect/freeze/stop/sleep/doom countdown, the success chance for fleeing, the morph command duration, the jump command duration, and AI battle timers were also originally balanced around running during battle animations, and thus acted too slowly with the ATB pause. All of these have been increased in frequency or decreased in duration to account for this discrepancy. The execution delay on several basic commands is removed to increase responsiveness during battle, but is maintained for other commands as an element of gameplay balance since the delay can no longer take place during battle animations.

The hack is for non-headered US ROMs (v1.0 or v1.1). It is compatible with other hacks like C.V. Reynold's Bug-Fix Compilation patch or Revised Old-Style Edition. This hack should be patched on top of those.

Hack features:
-ATB pauses during all battle animations (Active/Wait config setting still works). This also pauses status effect timers and all other elements of battle timing
-ATB fill rate formula rewritten so that battle speed config setting affects the gauge fill rate for the player (not just enemies) and is generally faster to account for the ATB pause. Fill rate no longer overflows for Speed stat above 235
-Battle speed config setting also now affects status effect timers, so they act in direct proportion to ATB fill rate regardless of setting
-Reflect/stop/sleep/freeze status timers tick 3x more quickly
-Doom countdown timer starts at 2x reduced time
-Poison ticks 2x more often and regen/sap tick 3x more often
-Success chance for fleeing from battles builds up 2x more quickly
-Battle timers for AI scripts tick 3x more often
-Morph (a.k.a. Trance) decays 2x more quickly
-Execution delays for the fight, item, steal, mug, runic, leap, row, defend, and gil toss commands are removed
-Casting delay for summon command is doubled to match the casting delay for magic, lore, pray, and shock commands
-The jump command lands after 3.73 seconds of (elapsed) air time, rather than 7.47 seconds
-Assassin's Premature Continuation v0.20 patch, Leet Sketcher's Rock Bottom v1.3 patch, and Leet Sketcher's Death Row v1.2 patch are included to maintain compatibility with bugfix patch collections which include them

Assembly code is provided in the following files as a reference for other modders:
-ATB_enhanced.asm: implements most of the features of the hack except poison/regen ticks and AI script battle timers
-patches_compat.asm: implements the remaining features on top of Premature Continuation/Rock Bottom/Off Death Row (asm for these not included)
NOTE FOR HACKERS: This hack uses 58 bytes of ROM freespace located at $C4B4D9 and makes use of 1 byte of RAM at $ECF1

Acknowledgements:
-Think0028 for creating the original "simple nATB" hack
-C-Dude for revising "simple nATB" to reinstate the Active/Wait config setting
-Lightning Hunter for correcting the patch to work with 1.1 ROMs
-Assassin for Premature Continuation v0.20
-Leet Sketcher for Rock Bottom v1.3 and Death Row v1.2
-HatZen08 for Even Gauge v1.1d

Changelist:
v1.00 
-Initial Release
1.01
-Fixed compatibility with 1.1 US ROMs
-Increased morph decay rate by 2x
1.02
-Reflect/stop/sleep/freeze timers now tick 3x faster for compatibility with any hack that rebalances their durations for vanilla ATB (previous releases overwrote the duration values)
-Doom countdown timer now starts at 2x reduced time instead of 4x reduced time
-Jump command delay reduced from 128 frames to 112 frames (originally 225 frames)

The patch is attached, also available on RHDN: https://www.romhacking.net/hacks/8513/


Attached Files
.zip  Comprehensive ATB Enhancement_v1.01.zip (7.66 KB, 3 downloads)
.zip  Comprehensive ATB Enhancement_v1.02.zip (8.71 KB, 11 downloads)
Quote  
[-] The following 3 users say Thank You to RoSoDude for this post:
  • C-Dude (03-22-2024), Gi Nattak (03-22-2024), jack5881 (03-23-2024)

#2
Posts: 6
Threads: 2
Thanks Received: 5
Thanks Given: 4
Joined: Mar 2024
Reputation: 0
Status
None
Lightning Hunter alerted me that the patch did not actually work with 1.1 ROMs, so I have corrected that. Also, I forgot to increase the Morph (a.k.a. Trance) decay rate along with the other battle timer changes, so I have done that now as well.

The updated patch should be ready on RHDN shortly.
Quote  

#3
Posts: 2,570
Threads: 99
Thanks Received: 160
Thanks Given: 170
Joined: Aug 2009
Reputation: 52
Status
Nattak\'d
Right on, if you'd like we could host it here on our server as well.


We are born, live, die and then do the same thing over again.
Quote  

#4
Posts: 6
Threads: 2
Thanks Received: 5
Thanks Given: 4
Joined: Mar 2024
Reputation: 0
Status
None
Sure, I've added it to the first post.
Quote  

#5
Posts: 3,974
Threads: 279
Thanks Received: 240
Thanks Given: 62
Joined: Oct 2011
Reputation: 65
Status
Tissue-aware
Pretty cool patch!
  Find
Quote  
[-] The following 1 user says Thank You to madsiur for this post:
  • RoSoDude (03-28-2024)

#6
Posts: 6
Threads: 2
Thanks Received: 5
Thanks Given: 4
Joined: Mar 2024
Reputation: 0
Status
None
Updated to v1.02. Besides some balance adjustments to the Condemned timer (now 2x shorter instead of 4x shorters) and Jump command delay (now 112 frames instead of 128 frames), the main reason I wanted to update the hack was for greater compatibility with other rebalance hacks. In particular, I originally overwrote the reflect/sleep/stop/freeze duration values directly, which meant that there would be a conflict with any other hack that adjusted those. I'm not sure which, if any, hacks do this (besides BNW which has its own timer rebalancing for nATB), but I want my hack to be as compatible as possible.

In v1.02, I no longer overwrite those duration values to be 3x shorter, but instead code the associated timers to decrement 3x more quickly. I accomplished this by combining the stop and reflect/sleep/freeze timer decrement logic into a single function, which decreases the value by 3 at every status timer update. This is based on Leet Sketcher's condensing of the reflect and sleep timer code, but goes further by pushing the timer addresses onto the stack for use with the stack relative indirect indexed addressing mode, which to my knowledge is never used in the entire FF6 ROM! Fitting the logic into the original byte space was a technical achievement I'm quite proud of, so feel free to check out patches_compat.asm as a reference.
Quote  



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite