In FF3us/FF6j, there is a game-freezing memory bug with displaying status effect icons on the Skills page in the field menu.
Every time the player navigates to the top-level menu on the Skills page, the game renders or re-renders any applicable status effect icons for the selected character. A new instance of the icons is created whether or not the icons are already being displayed.
This behavior results in the following glitch & lockup scenario:
The bug could theoretically pose a problem for one or two chronically indecisive players out there.
This patch resolves the bug by skipping over the status effect icon display code whenever the player is navigating back to the main Skills menu from an ability list.
The fix applies to FF3us versions 1.0 & 1.1 (SNES) and FF6j (SFC).
The archive contains *.ips patches for both headered and unheadered ROMs.
Title: Status Icon Overflow
Author: SilentEnigma
Version: 1.2
Release Date: 2023-10-09
Applies to: Final Fantasy III (v1.0) (U)
Final Fantasy III (v1.1) (U)
Final Fantasy VI (J)
Archive Contents
-------------------------------
readme.txt = this file
StatusIconOverflow_J_H.ips = patch for headered FF6j ROMs
StatusIconOverflow_J_H_Anti.ips = anti-patch for headered FF6j ROMs
StatusIconOverflow_J_NH.ips = patch for unheadered FF6j ROMs
StatusIconOverflow_J_NH_Anti.ips = anti-patch for unheadered FF6j ROMs
StatusIconOverflow_U_H.ips = patch for headered FF3us ROMs
StatusIconOverflow_U_H_Anti.ips = anti-patch for headered FF3us ROMs
StatusIconOverflow_U_NH.ips = patch for unheadered FF3us ROMs
StatusIconOverflow_U_NH_Anti.ips = anti-patch for unheadered FF3us ROMs
ROM Addresses
-------------------------------
FF3us (SNES): C3/29B2 - C3/29B4, C3/4D27 - C3/4D39, C3/4EE5 - C3/4EF5
FF6j (SFC): C3/2A4D - C3/2A4F, C3/53E7 - C3/53F9, C3/55B4 - C3/55C4
Urgency
-------------------------------
Medium. The full effect of this bug is a frozen game, which some might argue
reduces player enjoyment. On the other hand, the bug seems to have gone
undiscovered for over a quarter century; it is not wreaking any *actual* havoc
on any *actual* players. No, the real inconvenience here is the knowledge that
the bug exists. In that vein, this patch is both the disease and the cure.
TABLE OF CONTENTS
-------------------------------
0. Description
1. Relevant Offsets & Disassembly
2. Credits
3. Revision History
4. Legal
________________________________________________________________________________
0. DESCRIPTION
________________________________________________________________________________
In FF3us/FF6j for SNES/SFC, there is a memory bug with displaying status effect
icons on the Skills page in the field menu. Every time the player navigates to
the top-level menu on the Skills page, the game renders or re-renders any
applicable status effect icons for the selected character. A new instance of the
icons is created whether or not the icons are already being displayed.
This behavior results in the following glitch & lockup scenario:
1) Inflict a character with a status effect such that a status icon appears on
the field menu
2) Open the character's Skills menu
3) Navigate back and forth between the Skills menu and an ability list (Espers,
Magic, etc.)
> After about 16 repetitions, the portrait graphics will become corrupt
> After about 38 repetitions, the menu will lock up
It takes fewer repetitions for the glitch to appear if the character has
more than one status effect.
This patch resolves the bug by skipping over the status effect icon display code
whenever the player is navigating back to the main Skills menu from an ability
list.
(For the savvy: The lockup occurs due to the game getting stuck on the
infinitely-looping branch instruction at HiROM address C3/11AD in FF3us, or
C3/1218 in FF6j.)
________________________________________________________________________________
1. RELEVANT OFFSETS & DISASSEMBLY
________________________________________________________________________________
Contents:
a. Final Fantasy III (U/SNES)
b. Final Fantasy VI (J/SFC)
==================================================
a. FINAL FANTASY III (U/SNES)
==================================================
; executed when returning to Skills menu from ability list
Original
C3/29B2: 20 27 4D JSR $4D27
Modified:
C3/29B2: 20 F0 4E JSR $4EF0 ; new alt entry point - skip icon display
Original:
C3/4D27: 20 15 6A JSR $6A15 ; clears data incl. ability list & main menu
C3/4D2A: 20 19 6A JSR $6A19 ; clears data incl. class name
C3/4D2D: A9 24 LDA #$24
C3/4D2F: 85 29 STA $29
C3/4D31: A2 81 5C LDX #$5C81
C3/4D34 A0 06 00 LDY #$0006
C3/4D37: 20 BA 69 JSR $69BA ; uses value written to $29
Modified:
C3/4D27: 20 19 6A JSR $6A19 ; moved original C3/4D2A
C3/4D2A: A9 24 LDA #$24 ; moved original C3/4D2D
C3/4D2C: 85 29 STA $29 ; moved original C3/4D2F
C3/4D2E: A2 81 5C LDX #$5C81 ; moved original C3/4D31
C3/4D31 A0 06 00 LDY #$0006 ; moved original C3/4D34
C3/4D34: 20 BA 69 JSR $69BA ; moved original C3/4D37
C3/4D37: 20 DD 4E JSR $4EDD ; moved original C3/4EE5
Original:
C3/4EE5: 20 DD 4E JSR $4EDD ; Set Y to character's formation ID
C3/4EE8: 84 67 STY $67
C3/4EEA: 4C ED 4E JMP $4EED ; 3 pointless bytes
C3/4EED: A0 DD 42 LDY #$42DD ; position of class name in Skills menu
C3/4EF0: A2 50 4F LDX #$4F50
C3/4EF3: 20 27 34 JSR $3427 ; Check status & display status icon
Modified:
C3/4EE5: 84 67 STY $67 ; moved original C3/4EE8
C3/4EE7: A0 DD 42 LDY #$42DD ; moved original C3/4EED
C3/4EEA: A2 50 4F LDX #$4F50 ; moved original C3/4EF0
C3/4EED: 20 27 34 JSR $3427 ; moved original C3/4EF3
C3/4EF0: 20 15 6A JSR $6A15 ; moved original C3/4D27, new alt entry
C3/4EF3: 20 A4 34 JSR $34A4 ; store #$20 (white) in $29 (text color)
==================================================
b. FINAL FANTASY VI (J/SFC)
==================================================
; executed when returning to Skills menu from ability list
Original:
C3/2A4D: 20 E7 53 JSR $53E7
Modified:
C3/2A4D: 20 BF 55 JSR $55BF ; new alt entry point - skip icon display
Original:
C3/53E7: 20 A9 71 JSR $71A9 ; clears data incl. ability list & main menu
C3/53EA: 20 AD 71 JSR $71AD ; clears data incl. class name
C3/53ED: A9 24 LDA #$24
C3/53EF: 85 29 STA $29
C3/53F1: A2 D6 62 LDX #$62D6
C3/53F4: A0 06 00 LDY #$0006
C3/53F7: 20 2C 71 JSR $712C ; uses value written to $29
Modified:
C3/53E7: 20 AD 71 JSR $71AD ; clears menu data
C3/53EA: A9 24 LDA #$24
C3/53EC: 85 29 STA $29
C3/53EE: A2 D6 62 LDX #$62D6
C3/53F1: A0 06 00 LDY #$0006
C3/53F4: 20 2C 71 JSR $712C ; uses value written to $29
C3/53F7: 20 AC 55 JSR $55AC ; Set Y to character's formation ID
Original:
C3/55B4: 20 AC 55 JSR $55AC ; Set Y to character's formation ID
C3/55B7: 84 67 STY $67
C3/55B9: 4C BC 55 JMP $55BC ; 3 pointless bytes
C3/55BC: A0 DB 42 LDY #$42DB ; position of class name in Skills menu
C3/55BF: A2 48 47 LDX #$4748
C3/55C2: 20 C2 34 JSR $34C2 ; Check status & display status icon
Modified:
C3/55B4: 84 67 STY $67 ; moved original C3/55B7
C3/55B6: A0 DB 42 LDY #$42DB ; moved original C3/55BC
C3/55B9: A2 48 47 LDX #$4748 ; moved original C3/55BF
C3/55BC: 20 C2 34 JSR $34C2 ; moved original C3/55C2
C3/55BF: 20 A9 71 JSR $71A9 ; moved original C3/53E7, alt entry point
C3/55C2: 20 3F 35 JSR $353F ; store #$20 (white) in $29 (text color)
________________________________________________________________________________
2. CREDITS
________________________________________________________________________________
Special Thanks:
Imzogelmo, for his disassembly of bank C3
http://www.angelfire.com/al2/imzogelmo/patches.html
Gi Nattak, for reporting bugs in v1.0 & v1.1.
________________________________________________________________________________
3. REVISION HISTORY
________________________________________________________________________________
2022-04-21 : Version 1.0 released
2022-04-23 : Version 1.1 released
- Fixed miscolored HP/MP/level values on Skills screen
2023-10-09 : Version 1.2 released
- Fixed additional instances of miscolored HP/MP/level values on Skills screen
________________________________________________________________________________
4. LEGAL
________________________________________________________________________________
Copyright (C) 2022, 2023 David R. Thompson (SilentEnigma).
The copyright holder ("author") permits the free use of the attributed work
referenced by this document exclusively for non-commercial purposes, provided
that the following conditions are met:
1. The author and all contributors credited in this readme document shall be
given credit for their respective contributions wherever the attributed work is
reused, redistributed, or modified.
2. This readme document shall accompany any of the files comprising the
attributed work wherever they are redistributed in unmodified form.
The work(s) and file(s) distributed with this document are provided "AS-IS",
WITHOUT ANY WARRANTY. The author shall not be held responsible for any damages
related to the use of work(s) and file(s) distributed with this document.
Database match: Final Fantasy III (USA)
Database: No-Intro: Super Nintendo Entertainment System (v. 20210222-050638)
File/ROM SHA-1: 4F37E4274AC3B2EA1BEDB08AA149D8FC5BB676E7
File/ROM CRC32: A27F1C7A