Patches

These patches are for HEADERED ROMs only unless otherwise specified!


Title
Applies to
Last Updated
Description
Silver Sheath fix
(Beta 0.25)
 SoE:
  • USA
  • Europe: English, French, German, Spanish
02 Aug 2004
(We gone global!)
The Silver Sheath charm is supposed to increase "the strength of the holder's sword-type weapon", as described by the game.  Specifically, the weapon's battle power is boosted by 25% before being used to calculate the wielder's Attack stat.  However, due to an omitted check for Silver Sheath, swords ALWAYS get the bonus.

This patch inserts a check for Silver Sheath, so sword-type weapons will only get the 25% bonus if you possess the charm.

Comes with three patches: one for the U.S. version, one for the English and German European versions, and one for the French and Spanish European versions.  Also includes detailed disassemblies for the code Square wrote and my fixes.
Erratic levelling fix
(Beta 0.20)

w/ Experience per Level list
 SoE:
  • USA
  • Europe: English, French, German, Spanish
09 May 2005
There are two distinct bugs here, so I'll explain them separately.

BUG #1:

Each character needs a certain amount of total experience to reach each level.  Unfortunately, a wrong instruction was used in comparing the dog's current experience to the amount needed to attain its next level.  As a result, when the dog is level 39 or higher, he'll sometimes gain a level sooner than he should (e.g. after having gained one very recently).  This can happen on 34 of the dog's 99 levels.  However, things will usually even out pretty quickly: he'll have to wait that much longer to level-up again, as the bug doesn't alter his current experience.  The bug doesn't occur in reaching level 99, so the total amount of experience needed to "max out" the dog is unchanged.

On very rare occasions, this bug can delay the dog's levelling as opposed to hastening it.  See the Readme's FAQ section for more details.
------------------------------------

BUG #2:

If a defeated enemy gives a character (the boy or the dog) enough experience to make him gain multiple levels, he'll still just gain one.  Then the character'll gain a level for each subsequent enemy killed (even if it's a paltry mosquito or flower; it doesn't matter), until he's at the proper level for his experience.  In the meanwhile, the (Experience) "Needed" on the STAT screen will show up as some huge number (because the game thinks it's negative, but whatever displays the number isn't programmed to handle negative values).  This bug results from the fact that the "Gain experience and level up if necessary" routine is only called once for each enemy you defeat, and the level can only be boosted once per call.
------------------------------------

This patch fixes the first bug by making the game compare current and needed experience for the dog in the same way as it does for the boy, who experiences no such bug.  It fixes the second bug by allowing a single enemy defeat to result in as many level gains as necessary.

Comes with five pairs of patches and anti-patches: one for the U.S. version, and one for each of the English, Spanish, French, and German European versions.  Also includes detailed disassemblies of Square's bad code and my fixes.  Finally, it includes a list of the experience the characters need for each level, which is handy even if you don't use this patch.
Infinite Bazooka Ammo fix
(Beta 0.20)
 SoE USA
17 May 2005
When you fire Particle Bombs or Cryo-Blasts from the Bazooka, the ammunition is never actually consumed.  Hence an infinite supply.  That shouldn't happen.  Thunder Ball works fine.

The cause is that a routine which sets up attacks will only check and decrement the ammunition count if the attack type is Thunder Ball.

The European versions of SoE fixed things by expanding that test to also include Particle Bomb and Cryo-Blast.  I followed Square's example for this USA patch.

Comes with a patch and anti-patch for the U.S. version.  Also includes detailed disassemblies of Square's bad code, Square's good code, and my fix.
Zero-level Bazooka and Bazooka Befuddlement fixes
(Beta 0.20)
 SoE:
  • USA
  • Europe: English, French, German, Spanish
06 July 2013
Two bugs involving the Bazooka here:

BUG #1:

At the start of the game, a Level of 1:0 is assigned to nearly all of the Boy's weapons, and to the Dog's attack.  However, the Bazooka is skipped, so it keeps its default level of 0:0.  This isn't a problem for normal, player-controlled use, but it does cause a couple of issues:

1) When assigning a charge level to the non-player-controlled character on the Action menu, you won't have any options above 0 for a Boy with the Bazooka.  This means that such a character could swing the Bazooka at nearby enemies, rather than necessarily waiting for it to charge to 100%.
2) Energize won't work properly with the Bazooka.  Instead of filling to 100%, the charge bar will cycle repeatedly or stay at 0%, the weapon won't be fireable, and you won't be able to run with it.
--------------------

BUG #2:

Many of the routines that load a pointer to weapon/ammunition data take the subtype of the currently chosen shell (Thunder Ball, Particle Bomb, or Cryo-Blast) into account when Bazooka's in use.  However, three do not, so they'll just use the first pointer under the Bazooka, which indexes Thunder Ball's data.  These three cases are:

1) Displaying the existing weapon's Battle Power on the main weapon ring (the Bazooka subring is fine).
2) and 3) Displaying the ammunition name and icon on the Stats menu.
--------------------

This patch fixes the first bug by setting the Bazooka to Level 1:0 at the start of the game.  (If you're further along, you'll need a PAR code; see the Readme.)  It fixes the second bug by accounting for currently selected ammunition when loading a weapon pointer in three instances.

Comes with four pairs of patches and anti-patches: one for the U.S. version, one for the English European and German versions, one for the French version, and one for the Spanish version.  Also includes detailed disassemblies of Square's bad code and my fixes.
Overeager Speed timer fix
(Beta 0.25)
 SoE:
  • USA
  • Europe: English, French, German, Spanish
29 August 2013
The game has numerous timed statuses given by alchemy such as Defend, Atlas, Speed, and Barrier.  Upon a status' reception, its timer starts at 1, then counts upward each frame, until reaching a pre-determined limit and expiring.  However, Speed's timer is set to a starting value of (Dog's Defense + 1), due to misordered code in its handler.  This means you'll get an average of a handful fewer seconds of benefit from Speed than the intended 45.

This patch fixes things by reordering code so function calls won't overwrite a register before it's incremented and saved.

Comes with two pairs of patches and anti-patches: one for the U.S. version, and one for all four European versions (Spanish, German, French, and English).  Also includes detailed disassemblies of Square's bad code and my fix.
Unsaved stat boosts fix
(Beta 0.20)
 SoE:
  • USA
  • Europe: English, French, German, Spanish
13 November 2013
When saving and loading the game, the wrong bank (30h instead of 7Eh) is used to address the active copy of certain variables, including the overall modifiers to Attack, Defense, Evade %, and Hit % from status-granting alchemy or items (namely, Atlas, Defend, and Speed), and an unused boost for Magic Defense.  So after a reload, the *real* modifiers just keep the value they were given at reset, apparently zero, and contribute nothing to the overall stats.  Worse yet, when the status expires, the modifier still drops by what it *should* have been, making the statistic lower than it was pre-spell.  Taking off equipment can even drive it into negative territory, causing it to be treated as some giant value like 65,500+.

This patch makes the game use the proper bank on saving and loading, thus ensuring that alchemy-based stat modifiers are retained through the process.

Comes with three pairs of patches and anti-patches: one for the U.S. version, one for the German, Spanish, and English European versions, and one for the French European version.  Also includes detailed disassemblies of Square's bad code and my fix.
Death-defying stat boosts fix
(Version 0.20)
 SoE:
  • USA
  • Europe: English, French, German, Spanish
28 April 2017
When a character is killed, the game removes their statuses, of which they can have up to four at a time.  Status "clean up" functions are also called, to do tasks like clearing timers and flags, and undoing related statistic boosts.

However, a pointer isn't altered between calls.  Thus, when reducing the "overall alchemy/item boost to statistic" variables, held outside of the character's four status slots, the game always subtracts whatever remains in the "boost" variable of the first slot.

Generally, this value will be a zero (see the Readme for why), resulting in any statistic elevation caused by former Statuses 2-4 simply lingering.  Some cases can cause stranger results.  For Poison, Corrosion, and Slow Burn, which give no boost, the value subtracted is the number of frames since the last damage interval.  This is often large enough to push a statistic into negative territory after death, making it behave like a huge positive number.  For Plague, it's an unknown value (or 5 if done from an enemy Special, like Mad Monk's), that's used as a damage base.

The Dog is more readily affected by the bug, as his fall doesn't make the game reload, while the Boy will need Pixie Dust or Regenerate in effect (which is a status of its own).

This patch varies the status slot pointer to properly undo statistic boosts upon dying.

Comes with two pairs of patches and anti-patches: one for the U.S. version, and one for all four European versions (French, English, Spanish, and German).  Also includes detailed disassemblies of Square's bad code and my fix.