FINAL FANTASY II RESTORED Release Notes Final Fantasy II Restored is a project that was born of a desire to do a comprehensive bug fix of the game, as well as make some improvements to seemingly flawed design, and began when I, Red Mage Joe, decided to roll up my sleeves and seek out a disassembly. abw was kind enough to begin work on disassembling and then analyzing, commenting, and maintaining the first full disassembly of the game, without being approached to do so and completely on his own time and generosity. This project would not have ever been possible were it not for abw's continued contributions to it and even outright fixes of the bugs that I either hadn't even begun to look at or didn't at the time have the experience with ASM to begin pursuing, as well as polishing my Learning As I Go (TM) fixes into something more appropriate for a project of this scale. Below is a list of all well-known bugs in Final Fantasy II, as well as some that only seem to have been discovered and documented here as a result of abw's disassembly of the game. Many of these may have continued to go undiscovered for years. Fortunately, they are not only documented here now, but have been fixed with the Final Fantasy Restored (Bug Fix Only) Patch. For the sake of making all of this effort available to use as a base for future ROM hacks, the main release does not contain any of Restored's tweaks and only fixes the bugs rife throughout the game. Any ROM hacker is free to use this patch as a base for their own hacks. Please give credit to myself and abw if you do so, as we put a lot of time and energy into this project. Both the Bug Fix and Restored patches are intended to be compatible with Chaos Rush's English translation and with Demi's older translation (including Parasyte's title screen fix). Lenophis's Jade editor should probably work too, though that has not been well tested. These patches should also be compatible with saved games; emulator save states outside of battle are likely to continue to load without issue after applying one of these patches, but due to the extensive rewriting of the battle code, save states inside battle may produce a corrupted game. THIS PROJECT IS CURRENTLY ON HIATUS. Due to limited time and energy between myself and abw, this project is being released as-is. If you would like to contribute to the continuation of the project, or see what is left to be done, please follow the project thread at http://www.romhacking.net/forum/index.php?topic=29704.0. There you can also view improvements made to the Restored version and view detailed discussion on the progress of the project to inform any efforts to move the project forward. Credits: * abw Primary hacking and ASM work; without abw this project would never have gotten as far as it did, who carried it on his back. Thank you abw for being such an awesome dude! * Red Mage Joe Minor hacking and ASM work; this was my first real project working with ASM edits and my inexperience hindered my ability to make more major contributions, but there's some fixes in here. * Jiggers Big props go out to Jiggers for putting her work on the Final Fantasy I engine to use to help track down resources necessary for this project. You were a huge help in SRAM mapping, locating map data and deciphering strange battle routines. * Leviathan Mist Playtesting and Restored contributions; Leviathan's work with the sound engine of Final Fantasy I and advice for BGM tweaks, as well as extensive playtesting, helped further the ambitious itinerary for the Restored project. * Cyneprepou4uk Special thanks goes out to Cyne for his experience and advice, as well as provided resources to help get me unstuck when my inexperience showed. * Disch Huge special thanks to Disch whose thorough disASM of Final Fantasy I helped disassemble Final Fantasy II, as well as his own active participation in the discussion. There were a number of places we'd still be stuck in the mud were it not for Disch's interest in the project. Special thanks to Demiforce and ChaosRush, whose translations were used during the course of this project, the latter of which I am now continuing with Chaos's blessing. Version Info: 1.0d released 2022-12-28 "FF2R - Bug Fix.ips" changes: > Every single character in the game had discrepancies between their initial stats when they join the party and what their stats became after being recalculated for the first time (e.g. your first new party member starts with 10 damage according to their initialization data, but getting into a battle or touching their equipment will update their calculated damage to 9); each character's initial stats have been updated to match their calculated stats. > At the beginning of every battle, a list of monster groups present in the battle is displayed, but in battles where more monsters were intended to be added than were able to fit on the battlefield (e.g. a battle against 2 DualHeads + 3 DualDeads + 1 Stalagmite, where after adding the DualHeads and DualDeads, there isn't enough room left on the screen for the Stalagmite), the names of groups that ended up with no monsters in them were still displayed. > The Killer Fish and Sea Dragon monsters had different palettes assigned to them based on which monster formation they appear in. Based on their graphics in remakes and later games in the series, Killer Fish have been assigned their green palette (originally seen when encountered on their own) in all formations, and Sea Dragons have been assigned their white palette consistently. > One of the blank tiles in the interior graphics for the final boss was using the blank background tile ID instead of the equally blank tile ID in the monster graphics. It makes no visible difference when using the original graphics, but the monster graphics tile is now used instead, making graphics editing slightly easier. > Damage values over 999 prevented the "ダメージ" ("DMG") text from being displayed. The display code has been adjusted to use the "HP" string instead and to display up to 5-digit damage values. > The Ripper Knife was meant to do 20 non-reducible damage per hit to the target in addition to its normal attack damage. While the game displayed this bonus damage, it was not actually subtracted from the target's HP. This has been fixed so that Rippers do inflict their bonus damage. > The Heal Staff is a weapon that was meant to do 0 damage to non-Undead targets and heal them by +30-60 HP per hit, while doing its normal attack damage to Undead targets and +30-60 non-reducible bonus damage per hit. Both effects were bugged: >> When used against non-Undead targets, the Heal Staff would first deal its normal damage and then heal its normal damage + heal amount; if the normal damage killed the target, the net effect was that the target would be healed by the heal amount + any excess normal damage. This has been fixed so that now only the heal amount is applied. >> When used against Undead targets, the Heal Staff suffered from the same bug as the Ripper Knife, displaying the sum of its normal and bonus damage but only dealing its normal damage. This has been fixed so that the bonus damage is now also applied. > Drain/Osmose effects on physical attacks, such as from the Blood Sword, could drain more than the target's current HP/MP. This has been fixed so that the drain amount is capped at the target's current HP/MP. > If a monster was killed by the drain bonus damage from a Blood Sword (not by its normal damage), the monster simply disappeared without displaying its usual death message. This has been fixed so that monsters killed by bonus damage also display their usual death message. > The game's top-tier lance, the Holy lance, could be used as an item in battle to cast a multi-target Holy 8 spell, but doing so had a 100% chance to consume the item (Holy lances re-used the effect of Holy spell tomes, which are always consumed upon use); Holy lances now have a 0% chance to break. > Increases to a character's base damage per hit due to their weapon's family or element bonus can push their modified damage per hit over 1 byte, but the part of the damage algorithm that calculates a random number between 0 and the modified damage per hit only used the low byte of the modified damage per hit, which resulted in significantly reduced damage output. E.g., a character with a modified damage per hit of 256 would always have their damage per hit increased by 0 instead of by an average of 128. > Equipment that grants a bonus to some stat would allow that stat to exceed 99, in which case the stat's tens digit would be displayed as "A" in menus, e.g. "A9" instead of "109". This was obviously a bug and a cap of 99 has been imposed in this patch. > Equipment that granted bonuses to the same stat were supposed to stack, but the code was written in a way that would not allow for more than one bonus per stat, resulting in only one bonus being applied to the same stat from multiple equipment pieces. This patch changes the behaviour to allow stacking bonuses, making it possible to wear multiple pieces to gain a +10/20/30 bonus to Strength or Agility. > Increases to a character's core stats from the 4 orbs atop the Mysidian Tower would not be reflected in their calculated stats until the start of the next battle or an attempt to change the character's equipment. > The Evasion success % calculation was capable of overflowing but only the low byte was used and capped at 99%, resulting in characters with between 256% and 354% Evasion receiving 0% to 98% instead of 99%. > There was no overflow protection on the counters in combat for keeping track of actions taken by and performed against a character in combat that are used for determining stat level ups at the end of battle. Though extremely unlikely to occur in normal game play, it was possible for these values to overflow back to 0 in a particularly long battle, robbing characters of deserved stat increases. All counters were capped at 128, far higher than is necessary to gain a level. > Overflowing a character's black magic usage counter also incremented that character's white magic usage counter. > Due to an addressing oversight, enemies who targeted the entire party with a spell would add credit to Firion's white magic use counter (for increasing Spirit at the end of battle), rather than to each party member's "hit by enemy magic" counter for raising Magic Defense, which resulted in Firion gaining undeserved Spirit points and all characters being robbed of Magic Defense experience. This patch corrects the addressing error, so that Firion has to earn his own stats and enemy spells targetting the entire party now properly give each of them Magic Defense experience. > The combat action counters were incremented as soon as a target was selected and were not decremented if that action was cancelled, leading to the infamous "target/cancel" bug where a player could artificially inflate the physical, white, black, and per-spell usage counters for all but the last party member. The same logic also leads to the less famous "get credit for stuff that never happened" bug where party members' physical and/or magical defense counters were artificially inflated by including attacks from monsters that were prevented from carrying out their planned attack (e.g. due to the monster being killed before it could act). These closely related bugs have all been fixed by moving the incrementing of combat action counters from when a target is selected to when an action is performed. > The original random number generator uses a "multiply and round" algorithm that produces non-uniform results, causing the lowest and highest possible values to be only half as likely to be selected as other values. This patch substitutes a "multiply and truncate" algorithm that produces a significantly more uniform random distribution. This change has wide-reaching effects, most of which have a minor impact on the game. The most noticeable result of the updated RNG is that all party members are now equally likely to be targetted by enemies instead of the middle 2 characters receiving a disproportionate number of the enemy's attacks. Other effects include but are not limited to increased odds of: >> gaining stats after battle; >> losing stats after gaining stats after battle; >> obtaining a monster's most or least rare drops; >> surprising or being surprised by the monster party; >> encountering the largest and smallest allowable number of each enemy type per formation; >> Firion or monster #8 being selected by effects that choose a completely random target; >> multiple-use items breaking after use in battle; >> a monster deciding to flee; >> a monster using its most or least common attack; >> a confused monster targetting monster #1 or #8; >> a character succeeding to flee; >> recovering from temporary ailments; >> dealing a critical hit. > The probability of monsters deciding to flee from battle increases based on the difference in total current HP between your party and the monster party, but the related code suffered from multiple overflow errors, resulting in the probability periodically resetting to 0. E.g., a lone Goblin at full health has an 85% chance to flee from a party with 2437 total current HP, but had a 0% chance to flee from a party with 2438 total current HP. Each monster's chance to flee is now capped at 85% and will no longer "wrap around" to 0%. > The code for printing "しょうひMP" (MP Cost) in the battle magic menu didn't set the variable for line length before displaying the string, so any diacritic marks had about a 90% chance to show up in the wrong spot. This bug isn't triggered in the Japanese version since "しょうひMP" doesn't contain any diacritics and is unlikely to affect translations into scripts that only use 1 row for their characters, but it's been fixed anyway. > The code for determining whether a weapon can be used in battle to cast a spell took the weapon's spell index, looked it up in a table of spell effects, and then checked to see whether the spell effect is usable. This worked out well for weapons that could be used in battle, but for weapons that could not be used in battle, the spell effect table lookup still happened but overflowed the end of the table and started reading from monster data, specifically the byte controlling Adamantoise's spell list index, which by pure chance just happened to contain the value that the weapon use code interprets as indicating an unusable weapon. This has been fixed so that the weapon use code checks for unusable weapons directly before performing the spell effect table lookup. > There was a 1/256 chance for "non-breakable" items (e.g. equippable items that can be used as items in battle to cast spells) to be destroyed anyway when used in battle, including unique and valuable items such as the Masmune. "Non-breakable" items are now truly non-breakable. > If a character used an item that broke and the monster with the same index as the character within the monster party used a spell, the last character to act before the monster that cast a spell would lose the item in the same slot as the item that broke. E.g. if Firion used his right-hand item and it broke, Maria took her turn, and then monster #1 cast a spell, Maria's right-hand item would also break. > If a character used an item (regardless of whether it broke) and the monster with the same index as the character within the monster party used a spell, the monster would not lose any MP. > Drain effects initiated by characters did not update that character's critical HP status, leading to incorrect battle poses. > Characters who committed suicide did not have their battle pose updated. > Poison/Venom damage at the end of a round did not update the afflicted entity's critical HP status. > Poison/Venom damage at the end of a round can reduce the afflicted entity's HP to 0; monsters killed in this way were left in a half-dead state: the monster itself was marked as dead but was not removed from battle until the following round. > The logic for determining which one of a character's various ailments would be displayed preferred new ailments over old ailments, resulting in e.g. changes to a character's critical HP status making it look like they had been cured of confusion. Each character's most severe status is now always displayed. > KO'd characters did not have their battle command cleared; if they were revived before their turn came up, even in a later round, they would execute their previously selected command. > KO'd characters did not have their other ailments cleared, resulting in e.g. sleeping characters who were killed and then revived still being asleep. >> Clearing other ailments on death avoids another bug where dead characters still had the same random chance to recover from temporary ailments as living characters. > At the end of each command execution, the game loops through each character, setting their command to nothing until it finds one that isn't KO/Stone/Toad, and you lose the game if all characters are KO/Stone/Toad. This has been fixed to remove Toad from the list of statuses to check, which corrects multiple bugs: >> The player received a premature Game Over when all characters were Toads despite Toads still being able to win battles; >> Toads that didn't act before the first non-KO/Stone/Toad character didn't act at all; >> Multi-target effects triggered by Toads stopped working after their first target. > The code for ensuring that Toads and Minis get 0 successes in battle was always based on the actor's ailments even when calculating successes for the target. The target's ailments are now checked instead when appropriate. > Confused characters choose a party member to attack randomly but unlike monsters they did not check to see if the target was valid, resulting in confused characters attacking characters that were KO/Stone or even not in the party. > After being afflicted with Confuse during a round, both characters and monsters would carry out their original command and Confuse would not take effect until the next round, assuming it did not wear off at the end of the current round. This has been changed so that confusion is also checked when commands are executed, so Confuse now takes effect immediately, with newly confused actors choosing a random valid target at the time of command execution. > The entire level up routine code has been optimized and shifted to free up space for bug-fixing, and contains all of the below-listed fixes: >> There was previously nothing preventing HP and MP from going above 9,999 and 999 or even overflowing beyond their 2 byte range, which eventually could result in an entire party permanently stuck with 0 max HP and MP. This patch properly caps HP at 9,999 and MP at 999. >>> Capping maximum HP/MP avoids multiple bugs where the Inn cost calculation routine, which operates on 16-bit values, was subject to many overflow errors when maximum HP/MP were able to use their full 16-bit ranges. >> There was no attempt made to prevent stats from attempting to increase at the end of battles when they were maxed (99). While the stats could never go above 99, the code still allowed the message to display saying they had increased and allowed the code for determining the corresponding stat decreases to fire. This patch prevents any attempts to run stat increase/decrease code on a stat that is already at its cap. >> Skill levels were capped at 16, but would continue to gain experience and, in the case of weapons and spells, erroneously display a message on "level up" at the end of battle. This patch prevents any experience growth (including experience for spells cast outside of battle) or level up messages from appearing on maxed skills. >> The skill experience calculation suffered from an underflow bug when high-level skills were activated with low usage in low battle rank fights, resulting in enough experience gain to guarantee a level up at the end of battle. This patch corrects the logic to check for underflow and prevent experience gain when underflow occurs. >> Increases to a character's core stats would not be reflected in their calculated stats until the start of the next battle or an attempt to change the character's equipment. Calculated stats are now automatically updated at the end of every battle. >> The code for updating calculated stats ignored Magic Power due to an off-by-one error. > The entirety of the code for handling in-battle spell behaviours has been rewritten to make the code more concise/efficient and to fix a gross number of bugs including: >> When determining their action for the next round, monsters were able to choose spells that they didn't have enough MP to cast. >> Magic use did not check for the caster having sufficient MP at the start of their turn, which resulted in targets that had their MP drained away by Osmose/Swap still being able to cast spells despite no longer having enough MP to do so. >> Magic use did not check for ailments that prevent the caster from using magic at the start of their turn, which resulted in targets that acquired the Amnesia/Mute/Toad ailments still being able to cast their previously selected spell. >> Magic use deducted the cost of spells from the caster's MP after completing its effects, which resulted in Osmose/Swap never being able to completely restore the caster's MP. >> Levels 8+ of Aura and Barrier did not grant their 8th level benefit, due to a math error by the developers. This patch corrects that error, allowing Aura to grant bonus damage to Undead enemies and Barrier to grant Ice resistance as originally intended. >> Aura, Barrier, and Dispel display messages announcing which effects they modified, but the messages were displayed in opposite order to the effects, i.e. the level 1 effect displayed the level 8 message, the level 2 effect displayed the level 7 message, etc. These spells' messages now correctly correspond to their effects. >> When Basuna/Esuna cured multiple status ailments in battle, only the message for the last-cured ailment was displayed. This patch converts the relevant code into a loop so that Basuna/Esuna now display messages for each Ailment that was cured. >> Basuna would always clear the "Critical HP" ailment. >> Casting Basuna on a target with only the "Critical HP" ailment would result in displaying the message for successfully casting Fear. >> Basuna would always cure Poison, even with 0 successes. >> If Basuna/Esuna failed to clear the highest-ranked ailment present on a character, they would display their failure message even if they did clear other ailments. >> The bonus amounts from Berserk/Fear/Protect could overflow before being added to the target's associated stat, resulting in low or no effect. >> Berserk/Blink/Fear/Protect/Shell displayed their failure message whenever the stat they increased became >= 255, even if it was < 255 before. >> Berserk/Blink/Fear/Protect/Sap/Shell did not display a failure message when they failed to affect their associated stat. >> Cyclone/Quake/Tsunami were fairly messed up. Their original code has multiple nested bugs, so it's hard to be sure what their intended behaviour was. Based on their behaviour in later remakes, they have been updated to deal double damage to certain monster families and be completely ineffective against certain other monster families. >> Dispel failed to write the target's modified resistances back to RAM, resulting in the spell doing nothing. >> As with draining weapon effects, the Drain/Osmose spells were capable of draining more than the target's current HP/MP; Osmose was even able to drain MP from creatures with 0 max MP. >> Casting Esuna in battle on a dead target with enough successes to clear the KO ailment would revive the target with 0 HP, resulting in them staying dead. >> Esuna/Life could be cast on monsters that had been removed from battle to temporarily revive them until the end of the round, including monsters that were removed because they fled. >>> Removing the ability to revive monsters avoids another bug where casting Life in battle on a target with less than 16 maximum HP would result in the target being revived with 0 HP. >> Fear/Haste/Slow were slightly too powerful, not failing with 0 net successes like other spells. >> Imbibe decreases the target's evasion % by 1, but there was no check for underflow, so after enough castings the target could end up going from 0% to 255% evasion. >> After calculating how much HP to restore, Life only wrote the low byte of the value, which could result in the target being revived with 0 HP and immediately pronounced dead again. >> Protect determined its effect multiplier by checking the target's spell power, but this value was only calculated for the caster when the spell was used. As such, each target other than the caster ended up with an effect multiplier of 0. This patch correctly checks the caster's stat rather than the target's so that all targets now benefit from Protect's defense bonus. >> Sap only acted on the least significant byte of the target's current MP rather than the whole value, significantly decreasing its performance against targets with more than 255 MP. >> Wall could be exploited by casting it on monsters to ensure that instant death spells would work on them. >> As the story goes, Ultima was intentionally bugged. It did not scale with its own level like every other spell, it did not scale with the caster's other skill levels as in later remakes, it did not scale at all (aside from the boosts to success rate and power coming from the caster's applicable magic stat that are applied to all spells). Based on its behaviour in later remakes, this patch makes Ultima scale with both its own level and the caster's other skill levels. >> The code for using status-curing items in battle failed to set a key variable before determining which message to display, which could result in incorrect messages being displayed (e.g. if a character suffered from both Amnesia and Curse, curing Curse in battle with a Cross would incorrectly display the message for curing Amnesia). >> Characters affected by Toad or Mini always get 0 spell successes in combat, including for the "spells" that power items, which made the Maiden's Kiss and Mallet items ineffective in combat. This has been fixed so that status-curing items now always succeed. > While Square attempted to cap Gil at 9,999,999 when gaining Gil from selling items, their branching code was done incorrectly, resulting in Gil being set to 9,999,999 ($98967F) as soon as it reached 9,961,472 ($980000). > Square did not even attempt to cap Gil when gaining Gil from battle. Gil is now properly capped at 9,999,999. > If you were already in possession of a ferry ticket but said you wanted to take a ride, ferry ticket agents would quite happily take your money but give you nothing in return. This behaviour has been updated to no longer deduct funds when you already have a ticket. > The Ask/Learn/Item window was displayed even for NPCs that would not react to any key terms or key items. > Depending on the data used to define a scrollable list, upwards scrolling in a scrollable list that triggered an update to the displayed list would scroll upwards incorrectly in some cases, generally to the line containing the 15th item in the list if the current scroll position was greater than 15; this was most noticeable in the 2-column item list displayed when selling an item or showing an item to an NPC, where scrolling 1 line up from the top of the bottom page would scroll 4 lines (1 page) up instead of 1 line up. > You were prevented from interacting with any NPC that triggers the removal of a party member if each of your 3 main party members had some combination of the KO/Stone/Toad ailments; since a full Toad party is no longer considered an automatic game over, this logic has been updated to no longer check for the Toad ailment. > When a character leaves the party without being replaced, they were set to the back row, and when that character rejoins the party later, they were also set to the back row. Characters capable of rejoining the party now have their row preserved. > When a character leaves the party without being replaced, if each remaining party member has some combination of the KO/Stone/Toad ailments, your lead character was automatically cured of KO/Stone/Toad, potentially resulting in them being alive with 0 HP. Two changes were made to this behaviour: >> Since a full Toad party is no longer considered an automatic game over, the Toad ailment is no longer checked or cleared. >> If your lead character ends up getting revived in this way, they now revive with 1 HP. > When a character rejoins the party, all of their ailments are cleared; if the character had 0 HP when they left the party, clearing the character's KO flag left them alive with 0 HP. Characters now rejoin with full HP/MP. > When a character leaves or rejoins the party, there was no check to ensure that at least 1 character is in the front row, making it possible to have your entire party in the back row. This missing check has been added. >> Patching this gap in the game's logic avoids a soft lock when battling any monster that chooses to physically attack the party, which occurred due to the game getting stuck in an infinite loop of trying to target a random non-KO/Stone front row character when there are no front row characters at all. > When opening the row menu while you have at least 1 character in the back row, all back row characters incorrectly appeared in the front row for 1 frame. > Sprites that would be covered by an opening dialogue window had their background priority set to appear behind the background, but this allowed portions of the sprite to show through sections of the background that were transparent, resulting in glitched appearance during the window open/close animations; if the dialogue window also contained transparent sections, the sprites would continue showing through and affect the window display (e.g. the black mage at magic shops was partially visible through the 4th spell book icon in the Buy menu); sprites are now hidden by moving them off-screen instead. > The treasure room on B4 of the Mysidia cave used the forest battle background instead of the cave battle background used by battles throughout the rest of the dungeon. "FF2R - Restored.ips" changes: > Everything from "FF2R - Bug Fix.ips". > Originally, the order in which you name the 4 main characters differed from the order in which those characters appear in battles and menus, i.e. Firion/Leon/Maria/Guy instead of Firion/Maria/Guy/Leon. The naming order of the characters now matches their battle/menu order. > The B-button can now be held down while moving to move faster (at Chocobo speed) in both towns/dungeons and on the world map. > Originally, the notification for your party surprising the monster party would not appear until *after* you had finished issuing commands for the first round of combat, denying you the opportunity to make the most of your free turn. Surprise notifications are now displayed before you begin entering battle commands. > If your party surprises the monster party in a battle where running is allowed, choosing to run on the first turn of the battle will now always succeed as it did in Final Fantasy. > Originally, front row characters who were dead at the end of battle were automatically moved to the back row, forcing you to manually return them to the front row after reviving them; forgetting to do so before your next battle would result in the character being trapped in the back row and unable to use melee attacks (unless they happened to have a bow in their inventory). Dead characters now have their row preserved after battle, so that they revive in the same rank as they ended the last battle. > Weapons and spells can now gain skill experience even when they are not used in battle. This partially alleviates one of the primary complaints about the original game, namely that levelling weapon and spell skills up to a useful point required too much grinding, and addresses a secondary concern that melee characters effectively became locked in to their first weapon type due to the prohibitive drop in combat effectiveness associated with switching from a weapon type with which the character has a high skill level to a weapon type with which the character has a low skill level. > Originally, key items that are no longer useful would remain in your party inventory, consuming 10 to 12 of your 32 inventory slots. Key items are now removed after their last relevant use, freeing up valuable party inventory space. Some key items are kept, however, since they have associated special effects (e.g. the Ring grants you access to the world map). > Originally, ticket agents for the ferry that runs between Paloom and Poft would offer you tickets from whichever town the ferry was currently in to the other town, and if you bought a ticket in the town the ferry wasn't in, you would have to walk all the way to the other town to catch the ferry, which would then ferry you back to the town you bought the ticket in. Talking to a ticket agent now makes the ferry appear outside of the current town. > Originally, each stat increase from the 4 Mysidian Tower orbs would be independently applied to a randomly-selected character. These stat increases are now applied to the entire party. > Originally, Holy lances cast Holy 8 when used as an item in battle (and were then guaranteed to break; see above bug fix). Holy lances now cast Holy 16 instead, making them slightly less underwhelming for a top-tier weapon. > Originally, battles against an Iron Giant (Final Fantasy II's analogue to Final Fantasy's WarMECH) were escapable, and this applied to both the Iron Giant (which in the original game could choose to run away from a party with high HP) and to your party (who might want to run away because Iron Giants can *hurt*). Battles against Iron Giants are now to the death.