Luke Hubmayer-Werner
80d65d2a76
Also attempt to hot reload it on new ROMs |
||
---|---|---|
3rd_party/sysfont | ||
data | ||
scripts | ||
shaders | ||
test | ||
theme | ||
web | ||
widgets | ||
.gitignore | ||
PC.gd | ||
PC.tscn | ||
README.md | ||
box.tscn | ||
default_bus_layout.tres | ||
default_env.tres | ||
export_presets.cfg | ||
globals.gd | ||
main.gd | ||
main.tscn | ||
palette_mat.tres | ||
project.godot | ||
push | ||
test.srm | ||
test_scene.gd | ||
test_scene.tscn | ||
update_subtree.sh | ||
update_web_build.sh | ||
worldmap_palette_mat.tres |
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) (didn't have to hardcode it! just need to hook it into the script system 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 on looped samples, possible Godot bug to investigate)
- 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.