Final Fantasy Record Keeper Sprite Mods: Or How to Make Tyro Awesome
Hey so I’m finally writing up a tutorial on how to customise the sprites of your characters in Final Fantasy Record Keeper!
For the purpose of this Tutorial I will be replacing Tyro, as he (and other weirdly sized characters) are the most difficult to replace; but given that you can rename Tyro I feel like he has the most potential.
Disclaimer: This is not a flawless process, there are still a few things to figure out, but works relatively well.
Double Disclaimer: I don’t have access to an Android device so that part at least will be largely educated guesswork, but it should work in a roundabout way.
With that in mind this tutorial is primarily going to be based on iOS.
For iOS
- An iOS device pre-iOS 8.3.
or
- A Jailbroken iOS device with sandbox re-enabled via Cydia.
- A file explorer (For this I’ll be using iFunbox - it is free)
- The graphical editing program of your choice (Probably a little better than MSPaint, I recommend GraphicsGale free edition)
So a little preamble is required to explain why editing and replacing sprites in Final Fantasy Record Keeper is such an indirect pain in the ass.
Most sprite based games with standard(ish) character sprites you would expect a standard sprite sheet layout. The same frames of animation in the same place of every sprite sheet.
FFRK is too good for this method, and instead almost every sprite is laid out in a unique way and animated by instructions from a separate .JSON file that rotates/scales all areas as necessary.
An example can be seen when you compare these two sprites:
This generally leaves us with two scenarios:
1) Edit/Create/Palette swap a sprite using the character you want to replace as the template. This is the easiest method.
2) Edit/Create a sprite using any character as the template and replace both the sprite and the associated .JSON with that character.
Method 2 is required if you intend to replace short characters such as Eiko, Rydia or Tyro, with a normally proportioned sprite, otherwise the arm positions will be out of sync when attacks animate.
In addition to all this, FFRK only pulls through and caches sprites once they are required. This is especially problematic for all of the different fail state sprites when exiting a battle or losing with certain persistent status effects (petrificaton, blind, etc)
But I digress, let’s get into it.
For iOS users this is the part where it is probably most problematic.
- Plug your iOS device into your computer.
- Load up iFunbox
- Select Managing App Data from the top of the screen, followed by Show Apps under All My Apps, lastly click on FFRK and select Open Sandbox.
- In the newly opened folder view navigate to /Library/Caches/ddb_cache/ this will open a folder filled with every cached resource the game has pulled for you.
At this point I’m going to explain how the majority of the file formatting we’re going to deal with for sprite replacing works. This next section is considerably easier if you haven’t played long/haven’t accessed many dungeons/characters/etc.
All of the files in the cache are labeled with their full URL as pulled directly from DeNA’s website. As a result you’re going to want to sort the files by name and scroll down until you reach files with the path name starting:
“https%3a%2f%2fffrk.denagames.com%2fdff%2fstatic%2flang%2fww%2fcompile%2fen%2fab%2fcharacter%2fplayer%2fsab%2f”
The end of the first set of files you find will be labeled “100001” followed by a number of self evident suffixes. The ones we are interested in are img_char.png and img_char.json.
To identify which character we want I am going to break down the directory formatting of the file further into 3 sections:
The first 1 is irrelevent
The second set of numbers dictates which FF series the character belongs to - with 00 representing the Core world.
The third set of numbers dictates which character it is, based on the order they were added to the game.
100001 is Tyro - as he was the Core world’s 1st character.
107001 is Cloud - as he was the 7th world’s 1st character.
113005 is Hope - as he was the 13th world’s 5th character.
For the purpose of this tutorial I am going to be taking the Warrior of Light, editing it into my own character from Final Fantasy XIV, and replacing Tyro’s sprite in a move so self masturbatory it’s almost erotic.
With that in mind, take the sprite you wish to use/edit and copy it to your desktop some place, in this instance I would want 101001 as Warrior of Light is the 1st world’s 1st character, so:
“https%3a%2f%2fffrk.denagames.com%2fdff%2fstatic%2flang%2fww%2fcompile%2fen%2fab%2fcharacter%2fplayer%2fsab%2f101001%2fimg_chara”
(both the .png and the .json)
- Open your chosen sprite in your chosen graphics editing program and do your thing.
Its important to make sure to set a transparent colour (or preferably leave the default) and stay within the constraints of a restricted palette (I actually don’t know if that’s true, I’ve never tried saving it as anything other than a 256bit png file as that is what all of the game’s are formatted as)
I’ll assume that if you’ve made it this far you know how to make glorious pixel art but here’s a mini tutorial within a tutorial to help:
1) Get an idea of who/what you want to make. Maybe use a reference picture:
Now that we have our sprite made up and ready to put in the game we need to rename it appropriately.
- Rename the newly edited sprite appropriately, leaving all of the original DeNA games url formatting in place.
- Remember for this tutorial we’re replacing Tyro so we want to rename BOTH THE PNG AND THE JSON file 100001:
“https%3a%2f%2fffrk.denagames.com%2fdff%2fstatic%2flang%2fww%2fcompile%2fen%2fab%2fcharacter%2fplayer%2fsab%2f100001%2fimg_chara”
- Drag these files back into the ddb_cache directory in iFunbox to copy them on to your device.
- Restart the FFRK app on your device to find the jumping up and down home screen sprite, and combat sprite, should have changed if done correctly:
The menu sprites are named differently and again require you to order the ddb_cache folder and go digging, they can be found with the name:
“https%3a%2f%2fffrk.denagames.com%2fdff%2fstatic%2flang%2fww%2fcompile%2fen%2fimage%2fbuddy%2f”
The formatting of these files is somewhat different, but still fairly recognisable:
This, again, can be broken up into multiple chunks:
The first chunk is always 1 and means nothing.
The second chunk is the world, with 00 for core and etc.
the third chunk is the character order once again.
The fourth chunk is always 00 and means nothing.
So once again to use an example:
10100100 would be Warrior of Light as he is the 1st world’s 1st character.
10600100 would be Terra as she was the 6th world’s 1st character.
10800300 would be Quistis as she was the 8th world’s 3rd character and so on.
There is ONE EXCEPTION to this pattern.
For SOME REASON Tyro is listed as 002 this time around and there is no 001 in the Core world. Likewise the rest of the Core characters are thrown out of order because of this so double check them.
Either way you should be able to see a series of similarly sized and named images. To use Tyro as an example:
10000200%2f10000200.png
10000200%2fbase_dead.png
10000200%2base_fatal.png
10000200%2base_idle.png
and etc
These are all single images at 3x the resolution of the sprite sheets from earlier. Open them up, find out what pose to swap them with, resize your sprites to match and save them (remembering to maintain palette transparency where appropriate).
When you’re done making and saving them all with the correctly formatted file name go ahead and copy those over to your ddb_cache folder too and you’re basically done at this point!
Restart your app and enjoy your new character sprite, now with working menu and death/escape sprites.
- Roaming Wanderer Sprites will miss match to a different sprite in the sheet, when in battle, if the character you replaced is the RW also. For example here is a picture of Tyro’s SB with a frog from the sheet instead:
- Sometimes FFRK will flush your sprite cache resulting in you having to reinstall your custom sprites. But that is a simple case of copying it back into iFunbox.
Any questions feel free to shoot me a message and I’ll do what I can to help.