Thank you, samurai goroh. I made several mistakes.
The way is that first I check if Lvl, HP, MaxHP and MonsterParty are appropriate values. Then if these values are appropriate, I display.
BGM seems to be determined by 7E1D05, so there might be another method.
The cause is that MonsterPT was wrong. “if MonsterPT <= 0x1B0 then” around 211th line should be “if MonsterPT <= 0x1B0 or within ( 0x1B5, MonsterPT, 0x1FF ) then”.
And the elseif block from around 218th to around 223th is no longer necessary.
This is just a quick post to say that I've borrowed your script and added some things to it, mostly for my own purposes. Beyond that though there are a number of additions I've worked in. First, some clarifications:
-While 7E003A and 3B are both RNG addresses, they are only used in battle. There are some other addresses that are used for out-of-battle purposes. The selector bit is also not 7E0033, but 7E7C55.
-The RNG counters used for encounter group (7E0B50) and encounter chance (7E0B4F) are fairly straightforward, but require some calculations to use effectively. I added pieces to the script to display the next 3 battle types in addition to the number of steps before the next encounter.
-I changed around the code for the battle RNG counters and have it now display the next 6 RNG values. Effectively using it is will be something else entirely, but it's a start.
-I added a short listing of enemy weaknesses to an additional line below the other enemy info. I also wanted to dig up the name and display that as well, but I didn't manage to find it. Not that important, but maybe something for a HUD reorganization.
Just wanted to give an update while I could. The trickier part will be finding a way to properly process the battle RNG values, but just having them is enough for now. I will gradually figure it out as I go through my FJF in the coming week.
Copypasta of my post on SDA:
EDIT: Nitrodon pointed out some inconsistencies/corrections. I'll edit them in soon.
====================
Still looking into the full effects, but I'll at least discuss some of the basics. These pieces have been "known" for a while, but as best as I could find a full explanation is not available in English.
First off: the game's RNG is based on a look-up table (LUT) at 0xC0FEC0 that has 256 entries. This means that it doesn't ever "calculate" any random numbers per se, it just keeps tracks of some values and uses those to as an index into the table. This also means that there is no strict RNG address; the values the game uses as its RNG are only ever present in the accumulator and are not stored elsewhere. Think of it as looking up a phone number and then throwing it out after you call.
Determining if you trigger an encounter:
There are a number of values at work for this, but the main ones to remember are your step counter (aka danger counter) at 0x7E16A8 and the encounter index at 0x7E0B4F. There's also a danger offset at 0x7E0B60 that is incremented by 0x11 every time the encounter index overflows; it is used during the calculations.
The process proceeds as such:
1. Begin to take a step. At the end of the step, the step counter will increment by 0x100 on the world map and some other number in dungeons (it's an annoying algorithm).
2. Increment the encounter index by 1. Use the index to pull a value from the RNG table.
3. Add the value in the danger offset to the obtained RNG value; regard the result as one byte (ignore overflows).
4. Take the sum obtained from 3 and compare it with the high byte of your step counter (0x7E16A9). If the sum is less than your steps, start random encounter.
There are still some oddities with this process. For example, not every tile in an encounter space will increase your step counter. Karnak castle only increments the step counter in certain locations of the castle, or only once per every 3 or 4 steps. On the World Map you can also reset your step counter to 0 by viewing the map or by opening the menu; this will not always save you, but should keep you safe from most battles. Entering rooms or viewing scenes will also reset the step counter to 0.
Determining encounter type:
This process is a bit more straightforward. There is a group counter at 0x7E0B50 that increments whenever you enter into a random battle, and an additional offset at 0x7E0B5F. The offset increases by 0x17 every time the group counter overflows.
1. Determine if a random encounter takes place. If so, increment the group counter and use it to grab a value from the RNG table.
2. Add the sum of the obtained value with the offset at 0x7E0B5F.
3. If the sum is less than 90, use enemy group 1. If between 90 and 179 (inclusive), use group 2. If between 180 and 239, group 3. Group 4 for between 240 and 255.
There may be some other minor instances that cause the counter to increment, but otherwise it is not touched. For example, it might increment when entering a boss battle or other scripted battle.
Battle RNG:
This is the one I understand the least in terms of how the values are used, but I at least know what it's doing. Key addresses are 0x7E003A (counter A), 0x7E003B (counter B), and 0x7E7C55 (selector).
1. Clear and initialize counters A and B at the start of battle. I don't yet know how it initializes them, but it's somewhat consistent.
2. If selector is 1, increment counter A and use it for the necessary RNG operations. Else, increment and use counter B.
3. Toggle the selector between 0 and 1.
4. Repeat from step 2 until the end of battle.
This sequence is particularly tricky since there are two separate counter values that alternate. While no character or enemy is taking action, the counters are incremented at a frequency determined by the battle speed. With battle speed 6 it will perform steps 2 and 3 once per frame. At battle speed 1, it only performs them on average once every 4 or 5 frames. This activity freezes any time the ATBs are frozen (during enemy attacks, menus), but it will still advance any time it needs a random value for some portion of its calculations. For example, a typical enemy attack will cause both counters to increase by 1 (meaning it used 2 random numbers). These sequences are also used for determining drops after you kill an enemy, whether you are able to steal and the resulting rarity, and other similar effects.
I still don't know some other potentially helpful RNG counters, such as back attack/first strike. I also know it uses a frame counter at address 0x7E0B3F to index the RNG table a bunch, but I have no idea what the results are used for. I will look into these things eventually, but probably not until after I finish up my FJF.
My brother went to Japan last year and brought me a copy of this game (obviously a Super Famicom cartridge) with the box included (unfortunately no manual, although not sure if it existed in the first place), which brought me interested on playing it again since quite a long time...
I decided to create a playlist of bugs, which contains the more relevant ones (still planning to do a few more, but haven't found a good way to show them), update my Lua script & even update the TAS (which I finished a few hours ago), that I'll be posting soon, probably over the weekend (if you're wondering about the timing, well I was right that you could sub 3 and a half hours; the input last for 3hrs, 25 min, 57.201 sec).
All that's left to do on it (which is not mandatory) is to create subtitles. It looks so troublesome that I'm thinking that maybe I could stream it and answer questions as the run goes, although I don't like to talk to the mic :P (or maybe just answer the questions in the forum when the run gets submitted and be done with it...)
Hi. Long time no see.
It is too late to say, but thanks for posting useful information, Omnigamer.
And I'm satisfied with samurai goroh's new run. Well manipulated boss battles. Skipping Mua is a genius idea. If I had made a new run, I would not have these features.
Possible improvements are running away in random battles:
-Select !flee with holding LR is very fast.
-Also minimal inputs of LR are sometimes one or two frames faster.
I don't plan a new run, but new route without statues might be possible, according to these RTAs.
http://www.speedrun.com/ff5
It might be possible to run away a few frames earlier in a few random battles. I didn't had these addresses I found after finishing the run:
7E7C5F XX Escape wait counter
7E7BDE XX Escape flag (set it to 1 to escape immediately, even from boss battles)
The wait counter goes from 0 to 19, it advances once per frame (or so) if you're holding L+R. What happens is that some times it doesn't advance in a 1:1 relation, hence you may get different results. Monitoring this should make it possible to get the best outcome (if there's one as luck manipulation is not as flexible as I initially though).
Using !Flee was slower as far as I remember because you have to wait for your turn, while pressing L+R can be triggered a bit sooner. Also, it takes away an ability slot which translates to having to open the menu to change it afterwards.
As mentioned before, I didn't had the addresses mentioned above, but the outcome I got from practice was that it was irrelevant to press L+R the minimum necessary or simply keeping them pressed as I ended using.
As far as the strats used in RTA, I was watching their runs while doing the TAS and even explaining some players about step manipulation and why/how it can get shifted. The biggest change in strats I'd say is that they get to level 14 (IIRC) before Sandworm, that allows them to skip 1 turn. However, they need +3 battles & in the TAS I don't need those levels, so is not useful. Other strats are just used because they don't rely on luck.
I told some speedrunners about getting more levels with mix in order to increase chances of connecting a magic, which they have gave it a chance. (for Catastroph & Ex-Death). Is not that reliable as their normal strat, but with a bit of luck it can be faster even with a few misses with Dark Shock...
I see. Still, minimal input looks good for a tas.
Well, I don't mean using !Flee independently. Sorry for my bad English comprehension, but which do you mean, holding L+R from the beginning of the battle and selecting !Flee continueing pressing L+R or just holding L+R without choosing !Flee? The former way is the fastest, IIRC. Though opening the menu to change ability slots takes some time, if there are many randam battles or it is necessary to change jobs, it might be eventually faster.
The advantages of RTA's strategy are skipping learning deathcrow and 3 times of battles against statuex5. They take time. The animation of deathcrow itself is slow. However, if RTA's strategy is adopted, skipping 3rd Gilgamesh's dialogue is impossible. Honestly, I stick to a strategy including learning deathcrow and statue battles, but RTA's strategy might have some possibility.
Well, using the ability !Flee takes some time due to waiting for your turn to come up. Using !Flee while looking to the right (by pressing L+R) makes sense to be faster. However, I remember that it wasn't faster to use the command than is to run with L+R. Probably depends on how fast your character is, but with no Haste on your character (Hermes Shoes) or Quick Start (Masamune) I recall it was still a few frames faster to run away with L+R with the correct manipulation. Maybe it needs to be tested again, but that's what I recall and left in my notes.
This are the notes for the RTA route, not sure if they are the latest though:
https://docs.google.com/document/d/1GWyRQQHlMuwcb4EdCivePBxplgp0sZO_uoB3pe2vcHs/edit
I think you would have (w/o testing) better chances to improve the run with the notes I left in the TAS. But I guess if anyone wants to give it a try and improve the run, it doesn't hurt to take into account the RTA strategies.
I do wonder how would a TAS of the RTA yields out. Obviously it won't be faster by itself than the current TAS due to the settings used to reduce luck chances, but how far it is in comparison makes me curious. There's supposedly one run like that (TAS of a RTA) but it uses and old path. Also there's no luck manipulation. You can find about it here:
http://rpgspeedruns.wikia.com/wiki/Final_Fantasy_V
I found two time savers.
-Lonely Zombie Dragon battle is not necessary. Zombie Dragon, Sting Eagle, and Drippy give enough EXP with statues and Gabbledegak for Butz to learn Lvl 2 old. Infinite item stolen glitch should be done in these three enemies battle.
-When you go in and out submarine after Zezae died, waiting time becomes short. It is about 247 frames faster than just waiting.
I never would had though about Zeza's scene. Just tried and you do seem to cut like 6 secs on the timer, minus the transition (and heck did I disliked the time-outs...). Funny it works there but not on Moogle's Forest (at least from what I remember).
As for the Zombie Dragon, I think that since I had a different enemy formation from the Dual TAS, I didn't checked far enough to see which formations I could get depending whether or not I manipulate steps. So yea, it was a slip (and boy did it has hard to steal and also avoid his attack w/o needing preemptive)
Calofisteri's OLD could be missed without aegis shield.
I came up with another idea and tested. At the battle against Sand Worm, one character without ability !Black should throw Shuriken or something instead of throwing water scroll. Shuriken's damage was over 600.
Or with four Ninja, one water scroll boosted by !Black and Shirikenx3 might be possible.
I'm thinking about avoiding statues battles. One way I hit upon is to take advantage of SkullEaters at the end of the world one. If two battles are reduced from the current published run, five out of six battles are SkullEaters. If Faris is thief just before Sol Cannon, she learns dash. (If she is thief at the battle against Karlabos, she learns it earlier.) Making Butz and Faris Chemist, (Faris with dash), and Lenna Bard, just manipulating to let SkullEaters run away.
Btw, I'm also thinking about save and reset is not so slow. If two or more than two battles are reduced by save and reset, it ends in faster. The problem is there seems infinite RNG pattern, it is beyond me.
Some more ideas:
I think battle speed three is good. I tested some battles and there seemed no problem except for BlackFlames and Atomos. (It seemed odd that I couldn't manipulate BlackFlames on battle speed four.) Accurately, I could manipulate it, but it's suboptimal. I could not prevent a few BlackFlames from attacking.
On battle speed three, the ally's defense just before the enemy the behavior of which you'd like to manipulate hardly seemed to affect it (, not 100% sure). So, I had to attack Atomos in order to manipulate their third behavior.
About BlackFlames, that was RNG issue, not battle speed thing.
Neither battle speed one nor two are tested.
If it is good RNG, Karlabos can be defeated by thunderx5 and an attack with dagar.
Shopping strategy can be improvable. You can skip an item shop at Lix and Karnak. Instead, let's go shopping at Val. PhoenixDawn for Tyrasaurus can be obtained by ChimeraBrain. Potions and antidotes are not necessary.
MythrilShields might not be necessary.
For SkullEaters strategy, I think defeating MogEaters by GPToss in order to get enough EXP. Though, I don't know whether it is faster or not than Statues strategy.
edit: Lonely ZombieDragon might be faster.
With a different walking strategy, you could defeat SandKiller and SandPorkyx2 (205 EXP each) by thunderScroll boosted with !Black instead of Bombx4 (225 EXP each).
Sorry, I was wrong. Infinite item stolen glitch should be done in lonely ZombieDragon battle. Defeating it is not necessary.
EDIT: For skullEaters strategy,
ABP: (statuex5)x3=24 is to puroboros+(skullEater)x4=25
EXP: (statuex5)x3=375 is to zombieDragon=412
I think every members should be in the front row at the final battle.
As for front/back row thing, in the next run, almost all the battles will be done in front row.
When you buy at the armor shop in Karnak, pressing Up key works. This reduces the number of cursor movements and is a few frames faster.
At the beginning of the battle against Sandworm, the timing of opening the first command window is variable. There are nearly 100 frames difference between the fastest timing and the slowest timing.
When only one character is alive if you choose !Hide, you automatically run away. This trick is not so well-known, I think, though, it might be irrelevant to speedrunnings.
I have a slightly different job change strategy. I'm thinking about more usage of thief. With double thief with !Mix, Gargoyles can no longer move. One less attacks of Seal Guardians are possible. Although the number of job changes is larger, the battles look good. On my job change strategy, Butz learns !Blue at Atmos. After that, Butz is always theif. Changing ability slots is slightly faster than changing jobs.
I wish I could make a run including these new features. Also, I'd like to perform a music game when I wait at TwinTania battle. It'll be more entertaining.
But it's a long way. Optimizing extra steps and save and reset are tough work.
How's so? Having all your members on the back saves a couple of frames (8 to be exact) when running away (as you're closer to the border). Does having them on the front save more due to the attacks connecting faster? I doubt it as there are more battles you run away from than fight & the ones you fight normally doesn't last much.
I guess I might didn't do it on the newer TAS since I was looking at the dual TAS as reference, I also forgot you could "run" while in the airship when fighting the Ronka Airship...
Manipulating the Sandworm was, I think, the hardest part of the game. Lots of variables to consider. I couldn't get a pattern where both counters missed due to the gap in RNG (the timing of the counters is always the same, so there's not much you can do there...)
Is not when 1 character is alive, is when all your party members who are alive use Hide, they will run away if it's possible to do so (If there are no deaths, then all 4 must use Hide). I know it very well but it might only be useful for the last part after Twintaina in a speedrun since all conditions are met (Hide is equipped and other party members are dead).
I was more focused on my last run to avoid changing jobs that I didn't learned some useful abilities on time, not sure how that pan out, so it's good you're aware of it.
Music game? Sounds interesting
I had the idea to have a program that knows the route and with a set of rules could calculate the best path to take. That would take an immense amount of work so I decided to scratch out that idea. I would like to mention that when you're working on the route take into account that sometimes you want to save steps (by opening the menu while the walking animation is still going) or waste steps by waiting a frame. I did that early on to save a few steps (I think it was 4) before fighting Magissa. When in world 2, I had to open the menu 1 extra time just to be able to avoid a battle inside Exdeath's Castle and still encounter the needed battle w/o having to wander around.
About !Hide thing, you're right!
This is also applied to SolCannon. Its difference is not as significant as SandWorm's case. It is about 40 frames difference. It might be applied to other battles.
About Sandworm, one WaterScroll and Shurikenx3 by four Ninjas or two WaterScroll and one Shuriken will be the strategy in the next run. So, it will be a little easier. About the battle itself, four Ninjas strategy is the fastest.
Major improvements of the next run will be:
-Battle speed three through the game
-Fewer random battles
-SkullEaters instead of Statues
Some more tested battles:
-When I defeated CrayClaw, throwing ThunderScrollx2 was faster. Ninjas were quick, so TailScrew message was skipped. BlueMage and selecting ThunderRod and its animation were slower.
-At the battle against Adamantium on battle speed three, just waiting at the first theif's turn and making two Ninjas wounded and skipping their turns were the fastest. So, MythrylShield is not necessary.
In any battles, there are random lags. Ultimately and idealistically, every RNG pattern even in easy battles should be tried and then the fastest pattern has to be adopted. But it's up to TASers. What is important is that the fastest timing of opening the fastest character's command window or no-waiting frame to manipulate is not always the fastest.
Skipping the next character's command window or not can be manipulated by waiting some frames in inputting the prior character's command window.
I think random battles on BigBridge are determined by NPC's RNG, 7E16A7.
As for NPC's manipulation, there are only limited places, I think. Pushing Moogle in Moogle Village and Moogle Cave.
I accidentally found a new Catastroph strategy. Just slashing with AncientSword. OLD works.
When I pressed LR for one frame just at the end of the battle, victory message appeared one frame faster. But this trick seldom works. Pressing LR at the end of the battle almost always causes delaying the battle.
My new test run is now almost finished. The expected time is 3hh20mm.
I watched this video today.
http://www.nicovideo.jp/watch/sm20412346
According to this video, whip works against Ifrit.
However, this video was published in 2013. And the video uploader is a registered member in our site. And judging from over 500k viewers, other japanese tasers may have watched this video. What I can't understand is why they didn't notify us of this trick. If they are bad at English, they only had to make a japanese thread.
Or are they making a new run? I believe tasing should be done publicly. Route and strategy should be well-discussed, especially if the run is submitted. However, because of the above event, I'm thinking whether I should post a new test run publicly or just PM it to samurai goroh and other members who asked me to. A lot of new techniques are found by me this month. The re-recording counts of my new test run are nearly 60k. I would not like to waste my time and efforts. Maybe, starting making the to-be-submitted run quickly and complete it rapidly are the best solution, but I can't now. Please suggest what I should do.
Interesting stuff there neo. I saw the Pyramid NPC skip (Mecha Head) happen in a stream of the 4JF long after I did my TAS, good catch!
I was wondering if you're using my Lua script & if you think it misses anything.
Also in the comparison was the testrun done in the same emulator or in Bizhawk? Because due to the difference in lag it was hard to end being faster sometimes (when you had to use the same pattern) but it didn't seem the case here. Well not that it really matters because it's obviously faster, just if it's not the same emulator used as with the dual TAS, then is even a bit faster than it seems :)
Not sure why I was thinking of Liquid Flame when you said Ifrit... You can look into my Editor for all the Enemy status. I'll list all the bosses that can be affected with Paralyze starting from Garula (since it's when you get the whip) & also include Aging (Old) after getting the Slumber Sword (Ronka Ruins).
Paralyze:
Garula, Iron Claw (plus Sergeant and Wild Nak), Ifrit, Byblos, Crayclaw, Titan, Gargoyle, Merugene (All forms), Catastrophe.
Aging (Old):
Chim. Brain, Puroboros, Abductor (Both), Gilgamesh (Dungeon), Gilgamesh (Big Bridge), Tyrasaurus, Hiryuu Plant, Gilgamesh (Zexat's Fleet), Antlion, Gargoyle, Mummy, Calofisteri, Catastrophe, Halicarnaso.
Thank you for a feedback and researching paralyzing and aging things, samurai goroh.
As you predicted it, I re-recorded on snes9x, sorry. The quality of the testrun is insane. The route and strategy are fixed. There are few points to improving. Basically, to make a to-be-submitted run will be to copy inputs. The movie length of a to-be-submitted run might be longer because of many lags.
input file:
http://dehacked.2y.net/microstorage.php/info/203594161/ff5-tas-v3-sklEtr-chart-testRun.smv
savestatesPack:
http://www.mediafire.com/download/10w34y7ue91dpgb/
The number of total battles(7E09C0): 110.
The number of saves and resets: 3.
I'll write about this run in detail below.
Item arrangement at the end of Alcheoavis battle was wrong. Shuriken, ThunderRod, ThunderScroll, etc. should be put below. Not selling these items are faster. And the reason I equipped Butz with AncientSword at that time was he was sometimes faster than Lenna in the battle against ChimeraBrain. Rod's attack animation is slower than sword's. Plus, I delayed closing an item window in order to reduce lag.
When you run away, there is always one frame difference. I've not noticed this in the world one, so running aways in the first world might be improvable.
Magic and special attacks from enemies should be taken by upper character. It's slightly faster. I showed in Karlabos's tailScrew, Siren's libra, etc.
I've not fully understood this trick in the early part. So it might be improvable.
The segment from the first cave to the savepoint in the FireShip, I encountered a few unavoidable battles on the world map. Maybe, the save should be loaded in different timing and a different walking plan should be made.
In Magisa battle, Fire is faster than Thunder. But making Lenna faster than Butz was more faster.
Using Hi-potion to Faris just after Garula enables you to be in front row in the battle against LiquidFlame. You only have to make Faris defend and LiquidFlame act an normal attack to Faris. The reason I didn't do that was I miscalculated money. Still, battle RNG is initialized by reset and I tried LiquidFlame battle in front row but I couldn't get the ideal pattern. (Front row should be tried in making a to-be-submitted run.)
The problems on battle speed three are Abductor at Bal and Atmos. But changing battle speeds may be slower.
Buying Ether at Bal is not necessary because I didn't use DarkShock to Catastroph. Ten frames were lost. Using Elixir from HiryuPlant to Krile just before final Ex-Death is enough. If DarkShock works against final Ex-Death very early, Lenna's second turn is faster than Faris, but in that case it's slower because of many cursor movements from DarkShock to select Lvl.5 Death and one more item usage to restore Lenna's MP on the menu before the battle.
At Seal Guardians battle, making Lenna attacked and wounded and then to skip her turn might be faster. I tried it, but in that case, thief characters were not faster than enemies with bad RNG.
I once dodged Antlion's special attack without AegisShield animation, but this time I couldn't.
This trick is shown at Carfisteri.
With bad RNG, I had to wait some frames in Krile's turn in the battle against Halicarnas.
At TwinTania, I thought AtomicRay was faster in its animation itself, but in the end, Blizzard was faster. I may have mismeasured it.
At the final Ex-Death, missing WhiteHole without AegisShield is faster than no-action. So, Apanda battle might be improvable.
The main reasons I am not motivated to make a to-be-submitted run are that BizHawk is very heavy on my computer and I'm not up-to-date with BizHawk, especialy such as new syntax of luaScript and Macro and so on.
Still, battle speed one and two, and Active have not been tested at all.
I though the run was going to be a test run with no improved frames in battles & such, but is not the case.
I remember when I did my first run, I did a test run on Zsnes because I could run it at 100% speed & when I switched to Snes9x, my old computer could handle like up to 60% speed and it was painful since I couldn't fast-forward to move faster and test stuff ahead...
When I did the current submission on Bizhawk, Lua scripts I made to try to find the best solution (like to escape the fastest, or steal the soonest and so on), it took many hours to run while in Snes9x it would take me barely an hour to try all possibilities. That said, currently I wouldn't want to adapt your path and "convert" it to Bizhawk, because among all things, lag was one of them that I didn't liked at all optimizing. Maybe hopefully someone else decides to take it and work over it (and co-author you, of course).
Anyway, as far as your run it seems really well done. Although I have my doubts on the seeds used when you reset, it seemed it took you many steps to get the battle to learn Goblin Punch and there was another part where (I think was around Karnak) you have to open the menu like 4 times very close to each other to avoid some battles. Other than that, it really seemed to came out really well.
The waiting on Twin Tania was great and since you don't move the cursor (more like you can't, I suppose) you shouldn't have added any lag frames, nice :)
It's funny that the current published run has the in-game timer when you reach Exdeath at the void (before all the cinematic) is about the same as your time when you actually enter the final battle (Of course you can't directly compare times, but I found that peculiar since it's almost 3 minutes of cinematic).
As a side note, have you contemplated on doing a run on the GBA version (VBA is still allowed and should run faster than Bizhawk). Or if not, maybe trace a route for it. I had my thoughts on making a run but because I would need to make a new route for it (no infinite money glitch), I discarded that idea.
I see. Well, everyone is tasing on BizHawk without complaining it if it's heavy. I think I should make a run. But not now.
Lvl.5 Death Learing Battle is improvable. Getting 2000GP at the basement when escaping Karnak Castle. And buying two more thunderRods and then use them in the battle. Getting 2000GP is a detour, but in the end, it's nearly 200 frames faster on snes9x.
EDIT: Making 32 page attack Lenna and making her wounded and then skipping her turn is faster than making 32 page attack defensing Faris. So it is more faster.
No.
Ah, I now remember that there is a heavy glitch on the GBA version.
http://ffdic.wikiwiki.jp/?%CE%A2%B5%BB%A1%A6%A5%D0%A5%B0%2F%A1%DA%A5%A2%A5%A4%A5%C6%A5%E0%CA%D1%B2%BD%A1%DB#FF5GBA
The principal of the glitch is swapping an item and the fourth command of the monster. Item ID and monster's special attack ID are corresponding.
For example, you can get runningShoes from Aegir. You can also learn specific Blue Magics if you restore the enemy's MP by Ether after or before you swap the IDs. Blue Magics automatically target the lowest character.
Method:
1. The lowest character controls a monster.
2. The character with !Throw or !Mix or !Drink or !Combine opens the item window, puts the cursor on the top-right, press L and cancel.
3. Select !Throw or !Mix or !Drink or !Combine and cancel.
4. Open the item window and swap top-right and top-left and then press Up and press Down and then cancel.
And infinite item stolen glitch on the GBA version is available with a different method.
http://ffdic.wikiwiki.jp/?%CE%A2%B5%BB%A1%A6%A5%D0%A5%B0%2F%A1%DA%A5%A2%A5%A4%A5%C6%A5%E0%C1%FD%BF%A3%A1%DB#FF5GBA
Infinite item stolen glitch on the GBA version is not available once the lowest character controls a monster.
Method:
1. Put the item which you want to increase on the top-left. Or put a blank on the top-left if you don't have the item which you want to increase.
2. The character with !Throw opens the item window, puts the cursor on the top-right, press L and cancel.
3. Select !Throw and cancel.
4. Open the item window and swap top-right and top-left and then press Up and press Down and then cancel.
5. Throw the top-left blank twice.
6. Steal.
Unfortunately, !Hide is no longer used in TwinTania battle. Instead of !Hide, Lenna is also going to learn !Mix.
Here is the plan of Lenna's Chemist ABP:
SkullEaterx4(20ABP)+PutiChariotx3(1ABP)+TyraSaurus(9ABP)+Abductor(2ABP)+GabbleDegack(2ABP)+Atmos(12ABP)=46ABP
Here are the differences from my testRun.
Lenna is TimeMage with !Mix in the SealGuardians battle, so the battle is slightly faster. This offsets additional job-changing time of Lenna.
Lenna is Blue with !Mix from ExDeath Castle.
Faris is Blue with !Mix from just before Meryugene.
It is not necessary to make Butz Thief with !Mix before Catastroph.
Elixir is used to Krile before Catastroph.
EDIT3: I think swapping Faris's job change plan for Lenna's from Puroboroses to the meeting with Gido. By doing so, I can dash after Zeza died because Faris is Chemist with Dash at that time.
Faster TwinTania battle
Lenna: Samson Power to TwinTania (a little wait in order to make Faris faster than Lenna)
Krile: DarkShock
Butz: Lvl.2 OLD
TwinTania: Attack Butz
Faris: Lvl.5 Death
(Note: One AntiDote is to be bought.)
More faster TwinTania battle
Lenna: Samson Power to TwinTania as fast as possible
Krile: Wait and DarkShock
TwinTania: Attack Butz to skip his turn
Lenna: Lvl.2 OLD
Faris: Lvl.5 Death
(Note: AntiDotes are to be bought.)
Before FinalExDeath, Menu is no longer opened. Butz is not alive in the final ExDeath battle. The battle is going to be that.
Lenna: DarkShock (as fast as possible)
Krile: Lvl.2 OLD
ExDeath: WhiteHole(missed)
Lenna/Faris: Kiss of Blessing
Faris/Lenna: Lvl.5 Death
EDIT3: Hope Lenna is faster than Faris in order to avoid many cursor movements from DarkShock to Lvl.5 Death.
I learned faster TwinTania battle from Yu-ki(Hs), thanks. I hope he will visit here someday. So, please give him a warm welcome.
EDIT: Samson Power's animation is faster than DarkShock's, so Apanda battle with Samson Power is theoretically faster, even considering the time of changing Butz's ability slot. (He is the fastest character in the battle.) Still, it seems up to the number of evasion without AegisShield. If this is adopted, Butz is Thief with !Mix after Meryugene.
EDIT2: I successfully defeated Adamantium without being attacked. Silver Armlet has to be removed from Butz.
http://dehacked.2y.net/microstorage.php/info/1074509462/ff5-adamantium.smv