Toggle Background Color
Game Mechanics: Action Speed
One thing that's important to keep in playing these games is how fast your party members are. Being able to act before the enemy is a pretty huge advantage in these games. The last thing you want to happen is something like a monster killing one of your front liners, and then having your healer waste their time healing a dead guy. Action Speed is primarily determined by the AGI stat, but it can be adjusted by a few other things. In EO1 speed was only determined by a character's AGI stat, and the speed modifier on their skills, which were multipliers in that game. The system remained mostly the same in EO2, with one big change. The weapons a class could equip now had speed modifiers of their own. However, they had extreme multipliers affecting speed a lot, almost making it so that the turn order would play out the same way every time.
While the devs realized that while giving weapons different speed modifiers could be an interesting idea to spice things up, making speed modifiers that extreme wasn't ideal. The idea stuck around, but the speed system pretty much got reworked. Speed modifiers were changed from multipliers to be additive values in EO3. (While equipment speed modifiers stayed as additive values in the Untold games, skill speed modifiers reverted back to multipliers.) And all pieces of equipment affected your character's action speed, not just weapons.
The speed formula is as follows:
Action Speed Formula posted:
Speed = AGI + Total Equipment Speed + Skill Action Speed + Priority Modifier + SPD Forge Power + A Random Number From 0 to 4 + 2000
If Speed is less than 1, then Speed = 1.
If Speed is greater than 32767, then Speed = 32767.
Skill Action Speed is the Action Speed modifier within skills, and SPD Forge Power is dependent upon how many SPD Forges your character has on their equipment, with a value of +2 being added for each SPD Forge. Equipment speed is determined by these values:
Weapons:
- Knife: +3
- Rapier: +2
- Katana: +1
- Sword: +0
- Fist: +0
- Gun: -1
- Tome: -1
- Crossbow: -2
- Spear: -3
- Club: -4
Equipment:
- Boots: +4
- Clothing: +2*
- Glove: +1
- Helmet: +0
- Accessory: +0
- Light Armor: -1
- Shield: -1
- Heavy Armor: -2
*While the Summer Tweed and Bikini Armor are classified as Clothing, they actually give an action speed bonus of +0 and +10, respectively.
The equipment speed modifiers on a character are then added up and applied to the formula. It can be worth it just to give a Knife to a slow character who barely makes use of their regular attacks (i.e. a Hoplite or a Zodiac) just to ensure that they move faster. Boots are pretty much the best way to increase a character's action speed, which is why people like putting those on their characters, despite the fact they don't provide as much defense as other pieces of equipment. Speeds are then randomized a bit by adding a random number from 0 to 5. And then a constant of 2000 is added on to prevent negative numbers, as the function that determines speed cannot handle those. In the event that your speed is still negative after that, it's just set to 1. There's also another cap in case you go over 32767 speed, but it's impossible to reach that in normal gameplay.
There's also another aspect to Action Speed, Priority Modifiers. To ensure that some skills go first or last, they are given priority over other skills. However, the game handles this a bit weirdly compared to the previous games. Instead of a hard priority bracket, it opts to add or subtract a ton of action speed instead. The exception to this are Limit Skills, and certain skills that go at the end of the turn. They will always go first or last, but if two or more people are using the hardcoded priority skills in the same priority bracket, then the game simply just runs the speed code again to determine the turn order in those brackets.
As for the Priority Modifiers themselves, they are as follows:
- Start of the Turn: Cross Slash, Indomitable, Charge Tactic, Mumyouken, Guard Tactic, Lethal Tactic, Aegis Defense, Wind Tactic, Aegis Barrier, Sungrazer, Regroup Tactic, Aegis Shield, Star Smasher, and Uroboros Guard.
- +10000: Casting Knighthood.
- +6000: Player units that are the target of Knighthood.
- +5000: Quick Draw, Fore Honor's buff.
- +1000: Enemy units that are the target of Knighthood.
- 0: All other skills.
- -700**: Cloudbuster's attack.
- -10000: Player units that are the target of Rear Dignity, enemy units that are the target of Rear Dignity, Rear Dignity's buff.
- Near the end of the turn: Second Wind, Hellfire, Absolute Zero, Typhoon Bolt, Quintessence, Lucky Hammer, and Immortal.
- End of the turn: Snipe's attack, Sharpshooter's attack, Strange Seeds sprouting.
**While Cloudbuster's damage component has a negative priority modifier, it actually sets the user's speed to 1 in practice due to being factored in after the speed formula has finished running.
The same priority bracket cannot apply to a given action more than once. So while Quick Draw can stack with Knighthood, it cannot stack with Fore Honor.
If units somehow actually get into a speed tie, which will likely go unnoticed unless everyone has the Rear Dignity buff, the tie is broken in a bit of a weird way. For one thing, it's not entirely random, as the order is set due to how the game handles sorting in its code, but the order will not differ unless the number of party members or enemies in the battle change. I will not be documenting this, as there are far too many possible combinations of tiebreakers to humanly keep track of.
Enemies don't have access to priority... normally. However, you may have noticed that in some cases, enemies can get a priority modifier applied to them. This is due to a rather nasty bug that can cause enemies to benefit from Knighthood, or get set back by Rear Dignity.
Remaster notes: The bugs with Knighthood and Rear Dignity no longer apply in the HD version. They all function properly.
If you cast Knighthood or Rear Dignity on the top left and top center slots, it works like normal. Nothing to worry about. However, if you cast Knighthood or Rear Dignity on the character in slot number 1, the character will still be granted the massive action speed bonus and go first. But then the enemy in their slot 1 will be granted +1000 action speed if Knighthood was cast, or -10000 action speed if Rear Dignity was cast. In Knighthood's case, that can screw you over, and mess up your strategy depending on the situation. Using it on party slot number 2 affects enemy slot number 2 and so on. The rest of the turn proceeds as normal.
However, if there's no matching enemy slot, like if there's no enemy in slot number 4, those skills are completely safe to cast on the corresponding party slot. So if you're fighting one enemy, like most FOEs and bosses, then the back row is completely safe to use those skills on. Oh, and the bug depends on which slot you cast it on, not how many party members are in the row. So if you've arranged your party that the 2 backrow members are in slots 2 and 4, you can't ever get enemy slot number 3 to be affected by the bug.
As for why this bug exists and how it works, here's the speed code dug out by user violentlycar. Just a warning, you're about to witness a very big mess.
EO3's Speed Code posted:
Turn order:
- Check all characters to see if they are casting Knighthood. If so, enable the "using knighthood" flag on these characters and store +1,000 speed in memory pointing to the target of Knighthood.
- Check all characters to see if they are casting Quick Draw. If so, enable the "act first" flag on these characters.
- Check all characters to see if they have the Fore Honor flag active. If so, enable the "act first" flag on these characters.
- Check all characters to see if they are casting Rear Dignity. If so, store -10,000 in memory pointing to the target of Rear Dignity.
- (Check all characters to see if they are casting a skill with unused subheader 0x138. If so, store +1,000 speed in memory pointing to each ally that the skill's targeting type is targeting.)
- Check all characters to see if they are casting Knighthood. If so, enable the "act first" flag on the target of Knighthood. (This is a separate step from the first Knighthood step).
- Count the number of Speed forges on each character and add 2 speed for each forge on that character (max 100 extra speed - this is mathematically impossible to reach).
- Add the speed modifier from the skill.
- Add the speed modifier from the gear.
- Add the total AGI.
- Add a random number between 0 and 4.
- Add 0.
- Add 0 again. (lol)
- Check if the character has the "using knighthood" flag set. If so, add 10,000 speed.
- Check if the "act first" flag is set. If so, add 5,000 speed.
- Check if the Rear Dignity flag is set. If so, subtract 10,000 speed. (This is separate from the -10,000 speed from Rear Dignity above.)
- Add the stored speed value from memory for Knighthood and Rear Dignity. (This is bugged - will explain shortly)
- (Roll for 1st Hit - if successful, add 17,000 speed. This is a leftover skill from EO1 and 2 in the code, so it is unused.)
- Check skill for the Limit-specific act first subheader. If found, add 23,000 speed. (This is never used - will explain shortly)
- Check skill for the Limit-specific act last subheader. If found, subtract 1,000 speed. (Also never used)
- (Load a speed value from memory and add it - as far as I know, this is not used)
- (Load subheader 0xED, which speeds up skills 0x15C and 0x15E, which, as far as I can tell, are NONEs that the game never uses. Perhaps this was debug code?)
- (Load subheader 0xEE, which is identical to 0xED, except it subtracts speed from from 0x15C and 0x15E. This definitely seems like debug code)
- Add 2,000 speed. This is to prevent negative numbers.
- If the speed value is less than 1, set it to 1.
- If the speed value is greater than 32,767, set it to 32,767.
- After all speeds are set, sort the list by fastest to slowest.
The Limit skill checks are never used in the previous code because the previous code only checks skills being used through standard skill use. Limit skills are checked in separate code which check only for the Limit-specific act first or act last subheaders, and then it pushes the limits to either the front or the back of the skill queue depending on which they have.
The bug with Knighthood and Rear Dignity is caused due to mistakes in memory addressing. Initially, the game allocates 56 bytes (14 integers) for storing the temporary values which correspond to these skills. This is meant to be one integer for each potential unit a battle can have - 7 player characters (this is what's supported by code despite being impossible) and 7 monsters. However, the way these values are accessed is completely wrong. Here is a chart of each character slot and which bytes they are supposed to match up with:
- P0 - 0-3
- P1 - 4-7
- P2 - 8-11
- P3 - 12-15
- P4 - 16-19
- P5 - 20-23
- P6 - 24-27
- M0 - 28-31
- M1 - 32-35
- M2 - 36-39
- M3 - 40-43
- M4 - 44-47
- M5 - 48-51
- M6 - 52-55
The correct way to do it would be to take the character's position and multiply it by 4, then add 28 to it if the character is a monster. For example, a monster in slot 2 would have the math (2 * 4) + 28, leading us correctly to bytes 36-39. EO3, instead, adds only 8 if it's a monster, meaning in this case, we would get bytes 16-19, which instead correspond to the data for a player character in slot 4. This is what creates the staggered effect, where player slot 2 corresponds to monster 0, and player slot 3 corresponds to monster 1, and so on. The way these values are originally stored in memory are also wrong for monsters but in a different way, but that is irrelevant here because no monster skills store values in memory this way.
So to sum this... monstrosity up, it honestly reeks of them putting in a different speed system in place initially, and then changed their minds later. As evidenced by the fact that there are 2 functions that add 0. Which likely had something else in there and they just opted to dummy those out. And then there's the entire mess with the game memory. So instead of opting to create new code from scratch, they decided to try to edit the old codebase to fix it up, resulting in this mess, and causing those glitches with Knighthood and Rear Dignity.