Users browsing this thread: 1 Guest(s)
Comprehensive ATB Enhancement hack
03-22-2024, 12:05 AM
(This post was last modified: 12-13-2024, 10:51 AM by RoSoDude.
Edit Reason: Update to v1.03
)
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:
The patch is attached, also available on RomHackPlaza.org: https://romhackplaza.org/romhacks/final-...ment-snes/
Deprecated RHDN stuck at v1.02 for reference: https://www.romhacking.net/hacks/8513/
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.03
by RoSoDude https://rosodudemods.wordpress.com/
Final Fantasy 6's ATB system has some notable flaws compared to other entries in the series. ATB is always running in the background regardless of battle animations, so commands can quickly pile up on the queue. This functionally caps the effectiveness of the Agility stat. Furthermore, it enables "Wait tricking" abuse with the Wait mode config setting, where the player enters a command submenu to pause ATB during player animations, but lets ATB resume during enemy 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 make 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 hack supports the Active/Wait mode config setting instead of defaulting to Wait. Since the original ATB fill rate was balanced around battle animation timing, pausing 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 2x faster than the original on Battle Speed 1, and roughly equal to the original 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 battle animation timing, 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. Enemy Agility values are quadratically damped (e.g. 30->29, 99->80, 255->128) for use with difficulty hacks that increase monster Agility stats above 99, since higher Agility now makes a massive difference in turn rate.
The hack is for non-headered US ROMs (v1.0 or v1.1). It is compatible with other hacks like C.V. Reynolds' 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
-ATB fill rate formula now quadratically damps enemy Agility values for use with difficulty hacks that increase monster Agility stats above 99
-Battle Speed config setting now affects status effect timers, so they act in direct proportion to ATB fill rate regardless of setting
-Doom countdown timer starts at 2x reduced time
-Success chance for fleeing from battles builds up 2x more quickly
-Poison ticks 2x more often and regen/sap tick 3x more often
-Reflect/stop/sleep/freeze status timers tick 3x more quickly
-Morph (a.k.a. Trance) decays 2x more quickly
-Battle timers for AI scripts tick 3x more often
-HP drain from seize (tentacle boss) ticks 2x more often
-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 for battle timers related to poison/regen/sap, reflect/stop/sleep/freeze, and AI scripts
-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 72 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)
1.03
-Fixed tentacle boss never draining HP during seize. Now HP from seize ticks 2x faster
-ATB fill rate formula now quadratically damps enemy Agility values for use with difficulty hacks that increase monster Agility stats above 99
The patch is attached, also available on RomHackPlaza.org: https://romhackplaza.org/romhacks/final-...ment-snes/
Deprecated RHDN stuck at v1.02 for reference: https://www.romhacking.net/hacks/8513/
03-27-2024, 02:16 PM
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.
The updated patch should be ready on RHDN shortly.
03-27-2024, 02:56 PM
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.
03-27-2024, 03:31 PM
Sure, I've added it to the first post.
03-27-2024, 10:01 PM
Pretty cool patch!
05-06-2024, 12:58 PM
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.
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.
Updated to v1.03. I had considered this hack essentially complete, however in my efforts to make a custom version for Lightning Hunter's ASC overhaul I discovered that I had broken the Tentacles bossfight as the HP drain from seize was never allowed to occur (instead, player characters would be grabbed but never lose have any health drained). I have now fixed that issue.
Early beta tests with ASC revealed that my hack led to unbalanced fights when they were used together, since ASC gives some monsters Agility stats exceeding 99 and the Agillity stat is extremely impactful now (in vanilla ATB, 200 Agility is barely different than 100 Agility). To help mitigate this and also to make the hack more naturally compatible with any difficulty hack that uses high Agility for monsters, I have applied a quadratic damping to the monster ATB formula. Lower Agility values are barely reduced (e.g. 30->29), but larger Agility values get reduced by up to half (e.g. 99->80, 255->128). This should make Comprehensive ATB Enhancement a systemic improvement to FF6's battles that leaves the difficulty intact, whether used with a vanilla ROM or alongside an overhaul mod. Speaking of which, I would love to know if it is compatible with T-Edition, Return of the Dark Sorcerer, Divergent Paths, General Leo Edition, etc. Let me know if you are a fan/developer of those hacks! Brave New World need not apply as it has its own ATB overhaul, of course.
Off topic: I have applied the XP I gained from developing this FF6 hack towards the development of a sister hack for FF9 which remedies its identically flawed ATB system. Stay tuned for that!
Early beta tests with ASC revealed that my hack led to unbalanced fights when they were used together, since ASC gives some monsters Agility stats exceeding 99 and the Agillity stat is extremely impactful now (in vanilla ATB, 200 Agility is barely different than 100 Agility). To help mitigate this and also to make the hack more naturally compatible with any difficulty hack that uses high Agility for monsters, I have applied a quadratic damping to the monster ATB formula. Lower Agility values are barely reduced (e.g. 30->29), but larger Agility values get reduced by up to half (e.g. 99->80, 255->128). This should make Comprehensive ATB Enhancement a systemic improvement to FF6's battles that leaves the difficulty intact, whether used with a vanilla ROM or alongside an overhaul mod. Speaking of which, I would love to know if it is compatible with T-Edition, Return of the Dark Sorcerer, Divergent Paths, General Leo Edition, etc. Let me know if you are a fan/developer of those hacks! Brave New World need not apply as it has its own ATB overhaul, of course.
Off topic: I have applied the XP I gained from developing this FF6 hack towards the development of a sister hack for FF9 which remedies its identically flawed ATB system. Stay tuned for that!
« Next Oldest | Next Newest »
Users browsing this thread: 1 Guest(s)