- Title: Final Fantasy Pixel Remaster
- Release Date: April 19, 2023
- Developer: Square Enix
- Publisher: Square Enix
Welcome to the advanced armor modding guide for Final Fantasy Pixel Remaster. In this tutorial, we will delve into the intricacies of modifying existing armor or introducing new armor into the game.
Before we begin, it’s important to mention that the Pixel Remaster series uses the Unity engine, and many files are shared between the games. Therefore, the knowledge gained here will be very helpful when adding armor to the Pixel Remaster versions of FFII-VI. However, we will focus specifically on the first installment.
To embark on this modding journey, you’ll need the specialized software Memoria, carefully crafted by Albeoris. For your convenience, you can access the version tailored for the Pixel Remasters, originally developed for FFIX, via this link. Follow the instructions provided for installation, or for a more user-friendly experience, consider using KiameV’s Moogle Mod Manager.
It’s worth noting that there are two primary methods for modding the Pixel Remasters, the second being Magicite. While Magicite is preferred when adding new assets, such as files, to a mod, Memoria takes precedence when editing existing assets. In our case, Memoria is the tool of choice because we will only be making changes to existing files. For example, if we were to add a new weapon or shield with graphical sprites, we would probably use both Magicite to integrate the new assets and Memoria to edit the existing files.
After successfully installing Memoria, let’s move on to the next phase.
Export game data
To get started, it is imperative to create a duplicate of the current game data, both as a reference and as the basis for the material you will be modifying. Fortunately, Memoria serves this purpose admirably. Your first task is to export your game data.
To initiate this process, you must first modify Memoria’s configuration file to indicate your intention to export files. To begin, navigate to the location where Steam is installed, and within the /steamapps/common/FINAL FANTASY PR directory, you will find a folder named BepinEx, which serves as the framework used by both Memoria and Magicite. Inside the BepinEx directory is a config folder, which contains the Memoria.FFPR directory.
In that specific directory, you can find a file named Assets.cfg. This is the file that requires your attention for editing purposes. Access it using a suitable text editor (I personally recommend Notepad++), and you will observe an array of various configuration options present within it.
To export your game data, you need to configure three key settings at a formal level of 7: ExportEnabled, ExportText, and ExportAutoDisable.
Let’s delve into the significance of these settings:
- ExportEnabled: This setting dictates whether the game runs normally or initiates the data export process upon selection. By default, it is set to “false” to prevent exporting data with each playthrough. However, when you specifically want to export game data, you must adjust it to “true.”
- ExportText: This setting controls the export of textual resources, primarily in .txt, .csv, and .json formats, using Memoria. Since you’ll be modifying several game files in .txt and .csv formats, it is essential to set this option to “true” to ensure the proper export of those resources.
- ExportAutoDisable: After a successful data export, this setting automatically switches ExportEnabled back to “false.” Consequently, after exporting your game data, the export function deactivates (allowing you to play the game instead of exporting data) until you manually reactivate it.
Additionally, you have the option to set ExportTextures to “true” to export game visuals, encompassing character sprites, weapon/shield sprites, map tiles, etc. Likewise, setting ExportBinary to “true” enables the export of binary files, including music files. Be cautious with ExportOverwrite; if set to “true,” existing files will be overwritten. Unless you specifically desire this action (and assuming you’ve made changes to those files), it is advisable to keep ExportOverwrite set to “false.”
Upon applying these configuration changes, execute the game. Instead of commencing the game, a progress display indicating the export status will appear. Once it reaches 100% and successfully completes the data export, the program will close. If ExportAutoDisable is set to “true,” the export function will deactivate, allowing you to resume playing the game.
Give your armor a name and description
Okay! You’ve now got a shiny new copy of the game data. (Or the text-based parts, at least, depending on what options you selected in the config.) It will be under the FINAL FANTASY PR/FINAL FANTASY_Data/StreamingAssets/Assets folder.
Within that folder, navigate to the GameAssets/Serial/Data/Message directory. There you should find a file called system_en.txt.
This serves as the English localization file, containing various elements such as names, descriptions, and other relevant content, excluding dialog, music player, and gallery. It serves as a reference point for all textual aspects of armor names and descriptions in the game, and provides a place to enter details for newly introduced armors.
To maintain consistency, armors should be named using the convention “MSG_ARMOR_NAME_XX”, where XX is a unique identifier number for each armor. Similarly, their descriptions should follow the format “MSG_ARMOR_INF_XX”.
As a precaution for optimal mod compatibility, it is advisable to assign a number higher than 75 to your armor. This is because I have developed a mod that restores cut content from previous versions of the game to the Pixel Remaster, and any number below 76 may cause conflicts with that mod. For additional security against potential conflicts with other mods, you could even consider using a higher number, such as 100 or 500, without encountering any problems.
In this instance, we shall designate our novel armor as “Number 76” to impart a distinctive identity. Simultaneously, we shall bestow upon our virtual personas headgear resembling a classic top hat, aptly titled “Top Hat.”
Observe that in the coding provided, the reference MSG_ARMOR_NAME_76 is employed. It is apparent that a peculiar segment preceding the designated name, represented by “”, serves the purpose of prompting the game to position the headgear icon ahead of its denomination, mirroring the approach adopted for other in-game headwear. By doing so, players engaging with your modification will readily discern its classification as a hat.
The corresponding description will be MSG_ARMOR_INF_76; here we’ve made that description say “A fine gentleman’s top hat.”
Once you’ve made these edits, save system_en.txt, and we’ll move to the next step!
Add your armor to content.csv
For the next few parts, you’ll be working with comma-separated values worksheets, or .CSVs. These can be opened either in a text editor or in a spreadsheet program like Excel.
(Note that I haven’t had much luck editing csv files in Excel and putting them back into the game; theoretically it should be possible, but I do my editing of these files manually using Notepad++.)
I’ve also set up a Google Sheets here where I’ve started uploading some of the game files as spreadsheets with explanations and aids, which should make it easier if (like me) you’re editing using a text editor. It currently includes the vanilla versions of all the files discussed in this tutorial (armor.csv, content.csv, and product.csv), with explanations of some of the less obvious things.
Anyway, the file you’ll want is called content.csv. You can find it if you go into the Master directory instead of the Message directory (where system_en.txt was). The Master directory has various .csv files that govern most of the game’s content. Items, monsters, music, sprites…all of those are changeable using these .csv files.
This particular file – content.csv – is a general file that serves as a repository for several different kinds of content (hence the name). Specifically, it includes consumable items, equipment, and abilities (like spells and monster attacks). It doesn’t have a ton of info on each of these, as there’s very little info they share; it mostly gives each list item a name and description, tells you what kind of content it is, and gives you the specific number within that content.
Again, give your new item a high number, as the vanilla game has quite a few items and my content restoration mod fills in many of those numbers and adds a few. Here we’ve decided on 330 for our Top Hat. Add a new line at the end and then we’re ready to input our hat’s data! Each item is separated by a comma (hence “comma-separated values”).
Info in content.csv:
- id: The ID of your piece of content. In this case, we decided on 330.
- mes_id_name: The string in system_en.txt that correlates with your content’s name. In this case, it’s MSG_ARMOR_NAME_76, which correlates with “Top Hat.”
- mes_id_battle: The string in system_en.txt that correlates with some kind of battle-related content (I think perhaps a description in-battle, or if an ability has a special name in-battle?). It must be used by one of the later FF Pixel Remasters, as it’s unused in this one.
- mes_id_description: The string in system_en.txt that correlates with your content’s description. Again, it’s MSG_ARMOR_INF_76, which correlates with “A fine gentleman’s top hat.”
- icon_id: An identifier for the icon your item uses. This is unused in this game, but it may be used in the later PRs.
- type_id: An identifier for what kind of content it is. The identifier for armor is 3, so you’ll want to put a 3 here.
- type_value: An particular identifier within that type of content. It’s armor, and I’ve put it at 81 so it won’t interfere with existing content or content from my restoration mod. So the Top Hat will be armor #81.
Make your changes, then save content.csv.
Add your armor to armor.csv
So you’ve got your top hat in content.csv. Unfortunately, as that file is so broad and encompasses different kinds of info, it doesn’t have very specific information on any of that content, and so there’s nothing to tell the game how your hat is functioning as actual armor. Fortunately, the game has another file specifically for that: armor.csv (in the same directory as content.csv).
This file works the same way as content.csv, but it has a lot more information.
Info in armor.csv:
- id: Again, a unique identifier… in this case, the armor identifier. We assigned it 81 in content.csv, so we’ll keep that the same here to link the two.
- type_id: Type of armor. This has two values: 1 for regular armor and 2 for the “empty” armor it assigns to slots where you have no armor equipped. Keep it at 1.
- equip_job_group_id: What jobs can equip your armor. The possible groups are listed in job_group.csv. Anyone can wear a top hat, so we’ll assign this 13, which corresponds with the group containing all jobs (so any job, from a Warrior to a Black Mage, can equip our Top Hat).
- parts_group_id: What equip slot your armor is equipped to. This should be equipped to the head slot, so we’ll give it a 4 here, like the other helmets.
- defense: As the name suggests, this is the defense provided by the armor. Let’s give it a 2; some defense, but not a ton.
- ability_defense: Presumably defense against magic or abilities in other FF PR games, but it goes unused in this particular game.
- weight: The weight of the item, which affects things like evasion, IIRC. Let’s put it at 1, which is where most of the hat items fall. Some weight, but not enough to make a huge difference like a metal helm might.
- evasion_rate: How does this affect the equipped character’s evasion rate? Note that this can include negative numbers, so a -2 would mean that equipping it lowers the equipper’s evasion by 2.
- ability_evasion_rate: Again, unused here.
- ability_disturbed_rate: Unused.
- destroy_rate: Mostly used for consumable items; how likely is it to be destroyed when used, as a percentile chance. Most consumable items have 100 here, so when you use them they always disappear.
- magnetic_force: Unused (I think this is for whether equipment is magnetic or not in FFIV).
- invalid_reflection: When used as an item, does it bypass Reflect status?
- trigger_ability_id: If this is used as an item, what ability does it have? There are several basegame equipment that cast a spell when used as an item (the White Robe, for example, casts the Invisira spell, and the Healing Helm casts Heal). The number corresponds with an ability in the ability.csv file.
- wear_function_group_id: Unused.
- wear_condition_group_id: Unused.
- resistance_attribute: What attributes does this armor resist? It draws from the attribute_group.csv file.
- resistance_condition: What status conditions does this armor resist? It draws from the condition_group.csv file.
- resistance_species: What type of creatures does this armor resist? Unused in the base game.
- strength: How much the armor increases the wearer’s Strength.
- vitality: How much the armor increases the wearer’s Vitality.
- agility: How much the…you get the picture. Our top hat gives a +3 boost here, because who doesn’t feel more like Fred Astaire when they look more like Fred Astaire?
- intelligence: Again, our top hat gives a +3 here, as who doesn’t look and feel smarter in a freaking top hat?
- spirit: Unused. (I accidentally forgot that Spirit doesn’t exist in the first FF and gave the Top Hat a +3 here as well, so it will have a random +3 for a nonexistent attribute when we do finally see it. Oops!)
- magic: Unused.
- max_hp_up: When worn, the armor will increase the wearer’s HP by this amount. Unused in the base game, but works fine.
- max_mp_up: Presumably the MP equivalent of the previous one, but as this game has a Vancian charge-based magic system rather than an MP-based one, I’m not sure whether this would have an effect.
- battle_effect_asset_id: Not sure what this does; I’m guessing that if you want your armor to have a different effect when used as an item than the base effect of the assigned ability, you can do that here?
- guard_icon: For shields, what graphic will be shown when you block with it. In the basegame, all shields except for the Protect Cloak use the same graphic (what was the Leather Shield in previous versions); my content restoration mod has restored the individual looks of each shield that previous versions had.
- se_asset_id: Presumably something relating to sound effects; not sure what this does, if anything, in this game.
- buy: The cost to buy this from a store, if it’s available at a store.
- sell: The gil you’ll receive when selling this back to a store. Usually half of the buying cost, though not always.
- sales_not_possible: Presumably some setting to make something unable to be sold.
- process_prog: Unused.
Assign your values for your item, save armor.csv, and now our Top Hat is in the game! However, we’ve also got to put some way into the game for us to actually get said hat. This is where our next file comes in, and our final step in modding it in.
Add your armor to product.csv
Still in our Master directory, let’s go to our final CSV file, product.csv. This contains a list of stores and their inventory. Let’s add our Top Hat to the Cornelia Armor Shop, so it’s nice and easy for us to access it for testing.
This file has considerably less info than armor.csv, so it’s a much easier addition to make.
Info in product.csv:
- id: Shop ID. As long as each item has a distinct one, this doesn’t really matter, as nothing else uses it that I’m aware of. 300 is what we’re going with here.
- content_id: The Content ID of your item. Remember back in content.csv? We assigned it 330, so we’ll put that here.
- group_id: The ID of your store. 1 is the Cornelia Weapon Shop, 2 is the Cornelia Armor Shop, 3 is the Cornelia Item Shop, and so on until 38 (the Caravan shop after buying the Bottled Faerie). We want the Cornelia Armor Shop, so we’ll assign it a 2.
- coefficient: Used in other games to raise/lower prices, I believe; this game doesn’t really use them.
- purchase limit: A limit on the number you can purchase. The only basegame use of this is the Bottled Faerie, since you can only buy the one.
Again, once you’ve entered your data, save product.csv. You should be done, and now all that’s left is the testing!
Step 6: Purchase your armor in-game!
Time to test it out!
Fire up the game and go to Cornelia’s armor shop.
And there it is, the Top Hat helmet! As you can see, it has the stats we assigned to it (including the +3 to the nonexistent Spirit stat, oops!)…
…and the description.
Purchase it, and it now shows up in our inventory. (Keep in mind that it won’t sort properly at the moment; that requires a little more effort than we put in here, and usually requires shuffling basegame equipment around in a way that will definitely reduce compatibility.)
Biggs the Thief is currently sporting a stylish leather cap…
…but maybe he needs something a bit more dapper.
Behold, an exquisite top hat crafted to adorn the visage of our cunning thief.
The implementation of weapons and shields proves to be more complicated, requiring the use of Magicite to incorporate new image files, especially when deviating from pre-existing sprites. While much of the focus has been on creating new armor, these skills can also be used to modify the basic armor found in the base game.
An important consideration in the introduction of new items is to ensure that the mod remains active during gameplay with modified items. Based on past experience, the mod’s exclusion of these changes may render the save file containing the modified items inoperable until the mod is re-activated. Care must be taken not to compromise the only save file available.
In conclusion, it is my sincere hope that this tutorial has proven to be instructive. In anticipation of future opportunities to provide additional guidance, this basic tutorial should provide you with rudimentary modding skills that will allow you to make various transformative changes. Good luck and happy efforts in your modding endeavors!
That's everything we are sharing today for this Final Fantasy Pixel Remaster guide. This guide was originally created and written by yosituna. In case we fail to update this guide, you can find the latest update by following this link.