Interactive save editor for Final Fantasy V, written in Godot 3.6
Go to file
Luke Hubmayer-Werner 7ccca74bc6 Remove PaletteOf555 type, make godot implementation automatically detect arrays of colors in general form 2024-06-27 14:41:12 +09:30
3rd_party/sysfont Tighten up font spacing 2023-08-06 18:03:55 +09:30
data Remove PaletteOf555 type, make godot implementation automatically detect arrays of colors in general form 2024-06-27 14:41:12 +09:30
scripts Remove PaletteOf555 type, make godot implementation automatically detect arrays of colors in general form 2024-06-27 14:41:12 +09:30
shaders Update Worldmap 2024-04-12 19:49:02 +09:30
test Update Worldmap 2024-04-12 19:49:02 +09:30
theme Enlarge border.png from 10x10 to 16x16 2023-12-07 02:02:13 +10:30
web Reorganize data folder some more 2024-06-26 20:07:20 +09:30
widgets Use long item names in inventory 2023-12-11 01:43:40 +10:30
.gitignore Changed paths for new data subtree 2024-06-26 20:43:37 +09:30
PC.gd Add punch frames 2023-12-08 21:24:06 +10:30
PC.tscn Save Slot UI 2023-08-02 19:50:50 +09:30
README.md Initial commit 2024-06-26 20:32:51 +09:30
box.tscn Partial menu theme 2023-07-31 17:25:37 +09:30
default_env.tres Haphazard progress 2023-07-25 14:21:10 +09:30
export_presets.cfg Reorganize data folder some more 2024-06-26 20:07:20 +09:30
globals.gd Refactor Debug menu, and add Party Menu for saves 2023-12-07 20:13:14 +10:30
main.gd Rename OK and Continue buttons to Load and Debug Menu 2023-12-09 22:29:50 +10:30
main.tscn Add punch frames 2023-12-08 21:24:06 +10:30
palette_mat.tres Update palette shader for 16x16 palettes (GLES2) 2023-07-26 22:49:17 +09:30
project.godot Refactor Debug menu, and add Party Menu for saves 2023-12-07 20:13:14 +10:30
push Switch from web update pre-push hook to push script that also updates the data subtree 2024-06-26 21:14:12 +09:30
test.srm Test savefile. 2023-07-29 01:54:18 +09:30
test_scene.gd Refactor Debug menu, and add Party Menu for saves 2023-12-07 20:13:14 +10:30
test_scene.tscn Refactor Debug menu, and add Party Menu for saves 2023-12-07 20:13:14 +10:30
update_subtree.sh Switch from web update pre-push hook to push script that also updates the data subtree 2024-06-26 21:14:12 +09:30
update_web_build.sh Add --no-window to web build script 2023-12-06 22:26:33 +10:30
worldmap_palette_mat.tres Minimap experimentation 2023-12-06 14:05:03 +10:30

README.md

Chocolate Bird

What?

Interactive Final Fantasy V save editor

Why?

Fun

How?

Godot 3.6, extracting resources from original or RPGe-translated SNES ROM.

How much?

tl;dr

You can currently load up your SNES ROM of Final Fantasy FFV and look at battle sprites, world map tiles, and listen to the instrument samples.

Full Feature List (WIP)

Following systems are ordered by vague overarching priority:

Save/Load System

  • SNES loading and saving
  • PSX Support (wasn't identical to SNES with different offset ;_; )
  • GBA Support (note, does not imply full asset ripping)
  • Steam Pixel Remaster Support (I haven't bought this yet so low prio) (note, does not imply full asset ripping)

Menu System

I have mostly solved parsing of SNES menus in a sister project, however there are so few of them that hardcoding better behaviour would be nicer anyway.

  • Main Menu and Load/New Game
  • Party Menu and submenus
  • Shops

Map Field System

  • Character sprites (solved problem, soon™)
  • NPC sprites (solved problem, soon™)
  • Vehicle sprites (solved problem, soon™)

World Maps (Fields?)

  • Tiles
  • Tilemaps
  • Dynamic changes (e.g. meteors, breaking seals, sinking island, pirate cave, voids) (might hardcode these later)
  • Pathing (Data is in place, just needs moving around with collisions)
  • Mode 7 Effects (...might hardcode these later)

Dungeon/Town/Zone Maps (idk what accepted terminology is)

  • Tiles (solved problem, soon™)
  • Tilemaps (solved problem, soon™)
  • Layer Effects and animated tiles (needs research, including water)
  • Pathing (I have vague recollections about this)

Battle System

  • Character sprites
  • Weapon sprites (solved problem, soon™)
  • Weapon animations (will hardcode these)
  • Enemy sprites
  • Enemy sprite separate shadows
  • Backgrounds
  • Enemy AI (needs research)
  • Abilities (will hardcode these, with fixes and extensions where appropriate)
  • Calculations (will hardcode these from Algorithms guide, with fixes and extensions where appropriate)

Script System

This will be an interpreter, I am not hardcoding the thousands of scripts.

  • Parser
  • Interpreter
  • API

Sound System

  • Instrument samples
  • Basic Music playing (currently loops correctly, but tuning is a bit off)
  • DSP stuff including ADSR envelopes

What's different?

A reimplementation is a lot of work compared to a romhack for small changes, so naturally, this is a good opportunity for larger changes.

Quality of Life

Screen

The first, most immediately noticeable, and hardest to achieve with romhacking change, is increasing the display resolution. The SNES and PSX versions of FF5 use a title-safe region of 240x208px, or 30x26 8x8px tiles. The GBA release is stuck with a noticeably smaller 240x160px (30x20). Later SDTV titles on the PSX like FF8 likely used 320x240px (40x30). Chocolate Bird currently targets 384x240px (48x30) as a base resolution, as this has good integer scaling factors for 720p, 1920x1200, 1440p and 2160p displays. 1080p is the only common resolution that has to settle for more black border (1536x960px at 4x scale). 640x360px would have been nicer for that, but it was a bit too massive for FF5. 384x240px gives 15% more rows than SNES/PSX and 50% more rows than GBA, and 60% more columns than them. This is a considerable bump in how much can be shown on-screen, fitting more closely to modern displays, and allows for UI redesigns that can cut back on the menu diving of the original.

Platform SNES/PSX GBA FFVIII PSX Chocolate Bird
Title-safe tiles (menus) 30x26 30x20 40x30 48x30
Expanded tiles 30x28 30x20 N/A 48x30

Font

Following on from this, the default font is slightly taller than the original RPGe english menu font. It is a clone of "Chicago", an old Macintosh system font which was used for the english version of FF6 on SNES (released as "Final Fantasy 3" at the time). The capital letters are 9px tall, while underhangs are 1-2px below the baseline and some characters go 1-2px above the ascent, for a total of 13px height. The original used 8px glyphs for menus, and slightly taller for dialog - in fact, the RPGe dialog font is practically identical to Chicago! Naturally, this means all menu text will take up more height than the original, taking back some of that 15% screen addition. It's a nice font though!

Menus

SNES Final Fantasies (ok PSX ones too, even PS2 ones...) involve a fair bit of menu diving to get things done. Want to know where you left a piece of equipment? Better scroll through the items menu, oh it's not there, Equip menu for character 1, nope, back out, equip menu for character 2, back out... ah there it is. Later ports added L/R buttons to switch characters in the Equip menu, very convenient. You can even romhack this into the SNES version! But we have more screen space now, so why don't we show all of our party members in the equip screen at once? Now it can be much more streamlined in swapping the pieces between characters.

We can also cut out trips to the Status menus by putting info we care about on the main party menu, such as EXP to levelup, equipped abilities.

In FF5, the magic inventory is party-wide. It doesn't make sense to select a character when opening it, but at the time it was a carryover from the previous four games which all had per-character magic inventories. Of course, you still have to select a character to cast it (use their magic stat and decrease their mp), but this could be deferred to after the spell is selected, which would solve the busywork of switching characters to find one that has the relevant spell command equipped.

Information

There are a number of mechanics with poor visibility, such as equipped abilities raising minimum stat values to that of the donor job. These should be nice and visible in the menus so that you don't have to change-and-check to see how your stats are affected. You should be able to see what job abilities will be learned, the stats a job change will give, etc.

Current plot status should have a reminder note somewhere. Think FF13 where you get a recap of where the save you're loading is up to. A cutscene replay library in the party menu should help with this too. That would also tie in nicely with the ability to skip cutscenes in the moment.

Multilingual Support

An old motivation for this was playing these games in the original japanese with the english script on hand for comparison of any tough lines. At worst, switching displayed language should be a hotkey away. At best, it should be possible to display two onscreen together. It should be possible to select pieces of text and copy them to the clipboard to paste into online dictionaries. A stretch goal could be integrating a japanese dictionary into the engine itself, depending on complexity.

Speed

Some things are just plain slow. Emulator speedup can make things more tolerable but then you ruin the lovely music. Fast-forward with regular music is a desired feature.

Mix and match

Maybe you care about the GBA english script. You should be able to have it with the SNES graphics and sounds. Maybe the PSX sounds instead. Of course, you should be able to load a save from any of them and change it to the format of any of the others, exclusive content notwithstanding. Ideally you'd never want to go back to them, but you should be able to.

Mechanical

This should serve as a testbed for fun ideas that are a bit too much messing around to romhack in for the potentially limited amount of fun they might provide. Some ideas:

  • Break damage and hp/mp limits
  • Allow FF7-tier command menus (think 20 commands to pick from at once in battle)
  • Auto-battling using FF12-style gambit configs
  • True Active Time Battle like FFX-2
  • True turn-based battles like FFX
  • Pincer formations from FF6, maybe with new abilities that enable characters to sneak around to the back of enemies mid-battle, or regroup
  • More party members. Maybe just the full 5, or maybe import some from other FFs.
  • Reimagine summons as FF8 GFs? Also turn most bosses into additional ones, like Siren, Garula, Wingraptor, etc. to have a larger arsenal of them to train up and equip to characters
  • Make jobs like FFX-2 where you swap them mid-battle
  • Make job abilities into skill trees that you unlock in your preferred order
  • Allow importing of other SNES/NES FF world maps and enemies to roam and fight
  • Nostalgic for All The Bravest? ...yeah probably not
  • Randomizers are cool. I don't think SNES FF randomizers will ever be as thematic as FF1 (the original no-nonsense fetch quest chain), but a platform like this should give a fair bit of flexibility.

Licensing

This is ultimately intended to be a personal project, shared to anyone interested. I intend to retain full ownership of it, and while I don't expect any contributions, that would be a condition for accepting any of them (i.e. handing rights over to me to do whatever I please with them, including later relicensing the contributions publicly or privately). Naturally, I may be relicensing parts or all of this to others privately.

  • The default license for the repository as a whole is AGPL3.
  • The data folder, containing tables of definitions, is CC0.
  • The 3rd_party folder, currently only containing the font, is subject to its own license included within the contained subdirectory.