RoSoDude
Arcane
- Joined
- Oct 1, 2016
- Messages
- 754
Only caveat is that FF9's PC port has the Moguri mod which provides 1. true turn based combat if you want a more leisurely experience
Got you covered there:
I got halfway through Final Fantasy 9 before I lost my patience with its sluggish, broken ATB system. So I decided to dive into debugger to fix it myself. Yeah, I learned MIPS assembly code just for this shit, you better goddamn appreciate it.
Final Fantasy 9's combat is probably its most criticized aspect, with a general consensus that its battles are too slow, and the ATB system is very unresponsive due to a stuffed command queue. Since animations don't pause ATB, the speed stat barely matters, buffs and debuffs wear off too quickly to be useful, and poison and regen are overpowered.
While some of these issues can be rectified on PC with the Memoria Engine's options, the original PSX version of the game was left behind. I sought to fix this by making a ROMhack to comprehensively address all of these flaws. I previously made a very similar ROMhack for FF6 on the SNES to fix its similarly broken ATB system, so I got some help from the FFHacktics community to teach myself MIPS assembly and code the logic myself.
Hack features:
- 3D scene framerate is 33% faster (faster battle animations, faster camera swirl at battle start)
- ATB fills much faster
- ATB pauses during animations
- Monster speed formula adjusted to better match player speed ranges
- Optional "CTB Wait" addon patch to make battles fully turn-based when Wait mode is enabled
Download here
I programmed my "CTB Wait Addon" to work exactly the same same as the Memoria Engine's turn-based battles option: time stops if there is a menu open or if there is a command waiting on the queue, and the system reverts to ATB if you're running away. My version is in MIPS assembly code, here's their version in C#:
Code:
public Boolean FF9BMenu_IsEnableAtb()
{
if (!IsNativeEnableAtb())
return false;
if (Configuration.Battle.Speed != 2 || FF9StateSystem.Battle.FF9Battle.btl_escape_key != 0)
return true;
// Stops the ATB if any of these are true
Boolean isMenuing = _commandPanel.IsActive || _targetPanel.IsActive || _itemPanel.IsActive || _abilityPanel.IsActive;
//Boolean isEnemyActing = FF9StateSystem.Battle.FF9Battle.cur_cmd != null && FF9StateSystem.Battle.FF9Battle.cur_cmd.regist?.bi.player == 0;
Boolean hasQueue = btl_cmd.GetFirstCommandReadyToDequeue(FF9StateSystem.Battle.FF9Battle) != null;
if (ForceNextTurn && !hasQueue /*&& !isEnemyActing*/)
return true;
return !(isMenuing || hasQueue /*|| isEnemyActing*/);
}
However, unlike the Memoria Engine, I adjusted the monster speed formula so the many bosses with 50 speed don't get 3-4x as many turns as your party members with 20-30 speed, instead only getting 1.5-2x as many turns. I also edited enemy AI scripts to remove instant ATB fill gimmicks, which were present for Ozma, Hades, Kraken, and Tonberries. The Memoria Engine leaves these monster speed and ATB fill gimmicks in place (presumably because they don't want to alter the game data), and just reverts to normal ATB if you are facing Ozma. However, its developers seem to have not noticed that Hades has the same issue, and probably didn't notice for the Kraken or Tonberries either. So my ROMhack of the original PSX is actually more comprehensive if you want fully turn-based battles, plus the main hack fixes the problem of ATB running during animations which is not fixed in any of the PC mods.
Of course, the Memoria Engine does have a bunch of other noteworthy features (remove camera swirl at battle start, replace Tetra Master with Triple Triad, arbitrary framerate for battle/field animations, and an option to make ATB work like FFX-2 where characters can execute attacks simultaneously which fixes the ATB problem in another way). My point is just that emulating FF9 on PSX is now a great default experience as well thanks to yours truly
Last edited: