A very simple patch that converts the 'Not used' button of both control schemes into a Sprint button. Pressing or holding this button will place the player in a running state. Note that double-tapping a direction continues to also place the player in a running state.
=============
Run Button
=============
This patch is for the US version of Illusion of Gaia, unheadered.
It works by changing an input which apparently toggles run mode.
This button originally only checked for an attack input, but it now checks
for the (formerly) unused button slot in the control type.
This patch is provided as-is and without guarantees.
I am not responsible for any damage caused by applying the patch
to the wrong file. If you haven't used a patcher before, I
recommend 'soft-patching' instead with a compatible emulator like SNES-9X.
To soft patch, simply place the patch in the same folder as your game and give it the same name.
Version 1 had a bug that allowed the player to run up hills with the sprint button.
Version 2 fixed this bug but made the sprint button awkward to use.
Version 3 also fixes this bug, but restores the smooth sprinting of Version 1.
This patch uses 20 bytes ($14) of freespace at $82FC08
Below, the workings of the patch are explained in detail.
-----
Input
-----
org $82C5FF
Vanilla:
02 40 00 80 14 C6 [If attack is pressed, branch]...
IE
COP #$40, dw $8000, dw $C614 [This is Illusion of Gaia's button branch instruction]
[COP #$40 tells it to check if the button is pressed.]
[This particular button prompt puts the character into a running state if it succeeds]
[The data value $8000 is the SNES controller button mask.]
[Adding $0001 to it would require the button be held since the previous frame.]
[The Type 2 controller bitmask is the SNES default BYSTUDLRAXLR0000.]
[Type 1 controls rotate the right-side buttons BYAX, so A becomes B, B becomes Y, Y becomes X, and X becomes A]
[Note that Illusion of Gaia zeroes out any X button input. To use X, this button must first be reenabled...]
[by changing both $8BE6A9 and $8BE6B6 to NOP #3, EA EA EA.]
[The last data value, $C614, tells the game where in the bank to go...]
[...provided the check succeeded. This value should remain intact]
[unless you really know what you're doing.]
Altered:
02 40 C0 80 08 FC [Checks for A, B, and Y. The result is that Y starts a run for Type 1 controls and A starts one for Type 2 controls]
IE
COP $40, dw $80C0, dw $FC08 [Checks if A, B, Y, or Attack are pressed and goes to freespace.]
[Picked a freespace location that is not used by ability shuffle or Bagu's randomizer as of 1/22/2023]
org $82FC08
Freespace:
02 40 00 80 14 C6 [If attack is pressed, jump to set run mode]
AD AE 09 [Load Will's action flags]
89 00 10 [Is Will currently running (Action bit #$1000)?]
D0 03 [Branch past the next command if so]
4C 14 C6 [Make Will start running]
4C 05 C6 [Do not allow him to run again while he's still running, to preserve hill behavior]
IE
COP #$40, dw $8000, dw $C614
LDA $09AE
BIT #$1000
BNE $03
JMP $C614
JMP $C605
-----
Label
-----
Change Settings Label:
org $8BF5A4
Vanilla:
4D 8E A4 AC A5 A3 84 83 ["Not used"]
[This is simply encoding data to draw the text string]
Altered :
63 A0 A2 88 8D A4 AC AC ["Sprint"]
New Game Label:
org $0BF61C
Vanilla:
4D 8E A4 AC A5 A3 84 83 ["Not used"]
Altered:
63 A0 A2 88 8D A4 AC AC ["Sprint"]
-----
Special thanks to Raeven0 for all of the information about Illusion of Gaia's processes.
Database match: Illusion of Gaia (USA)
Database: No-Intro: Super Nintendo Entertainment System (v. 20210222-050638)
File/ROM SHA-1: 38DE0C84DD2BC3BDFC0A3D7AB0220C79B70887C3
File/ROM CRC32: 1C3848C0