Skip to content

Creating and publishing a mod

Tirlititi edited this page Dec 8, 2024 · 12 revisions

This page is for modders who want to create a mod and add it in the mod catalog.

Mod folder structure

Installed mods are each in a folder inside the Final Fantasy IX folder. Typically, they have the following contents :

  • FF9_Data (folder)
    • (files that will replace content in \x64\FF9_Data)
  • StreamingAssets (folder)
    • (files that will replace content in \StreamingAssets)
      • The folder structure can also replace files inside p0dataX.bin archives, following their internal path (use Hades Workshop to export files, and they'll be exported with their full internal path
  • ModDescription.xml
    • See *Mod description
  • Memoria.ini
    • An optional file that contains settings that will overwrite the value in \Final Fantasy IX\Memoria.ini
The CONTENT of the mod folder (without the folder itself) can be packaged in a zip/rar/7z/tar and added to the Mod Catalog for automatic download and installation.

Mod description

ModDescription.xml (in the root of the mod folder) contains the information of a mod (name, version, incompatibilities...). This is the information displayed in "Installed Mods", This is better if the content corresponds to the Mod Catalog, which is what's displayed in the "Catalog" tab. If the mod is only downloadable through the catalog, and ModDescription.xml is missing from your mod, the mod manager will create one from Mod Catalog upon downloading it.

A typical description file looks like this:

 <Mod>
 	<Name>My Mod</name>
 	<Version>1.0</version>
 	<InstallationPath>MyModFolder</installationpath>
 	<Author>My Name</author>
 	<Description>This mod enhances the game to a point never attained before.
 Be sure to try it.</description>
 	<Category>Various</category>
 	<Website>https://www.example.com</website>
 	<DownloadUrl>https://www.example.com/file.zip?optionA=1&amp;optionB=2</downloadurl>
 	<PreviewFileUrl>https://www.example.com/image.png</previewfileurl>
 </mod>

Attention: the character '&' is not valid and needs to be replaced by '&amp;', for example in mod download links

The fields Name and InstallationPath are required while the others are optional, although some of them are strongly recommended. Here are the possible fields that can provide informations to the tool:

Field Description
Name The name of the mod
Required
InstallationPath The name of the mod folder
Required
Author The author(s) of the mod
Recommended
CurrentVersion The current version of the mod, in the format major.minor[.build[.revision]], eg. 1.2.0
Recommended
Category The category of the mod
Recommended, It is better to use existing categories: Gameplay, Visual, Audio, Story, Translation or Various
DownloadUrl A download URL to the mod
Recommended
It has to be a permanent direct download link (most likely of a ZIP file) with no extra step. e.g. for dropbox, have 'dl=1' at the end. '&' is not valid and needs to be replaced by '&'
ReleaseDateOriginal The date at which the first version of the mod was released
Preferably in YYYY-MM-DD format
ReleaseDate The date at which this version of the mod was released
Preferably in YYYY-MM-DD format
Description A description of the mod that can be multi-lined
Make sure to escape special characters with the equivalent valid XML codes
Recommended
PatchNotes A description of the changes in your latest version
Website The URL of the mod's front page, typically giving more detailed information about it
Recommended
DownloadFormat The expected format of the file downloaded
Archive Type: Zip (the default) also support, Rar, Tar, GZ, BZip, 7z or SingleFileWithPath:{path} where {path} is the asset path of the unique asset of the mod (eg. SingleFileWithPath:FF9_Data/EmbeddedAsset/UI/Atlas/Face Atlas)
PreviewFile The relative path to a preview file (typically a jpg/png) inside the mod folder, to display as a header in the preview in Installed Mods. If absent, PreviewFileUrl with be used instead. For Sub-mods this will be displayed in the tooltip when hovering the option (max display size: 550x300px).
PreviewFileUrl Direct URL to a remote preview file (typically a jpg/png)
If you upload your image to imgur, make sure it's permanent by being logged-in, right click on it, copy image link. e.g. https://i.imgur.com/yz2cgYv.jpeg
IncompatibleWith A list of mod names that are not compatible with your mod (separated by ',')
When both mods are active, they'll both display a red icon and the launcher will show a red cross on the mod manager
SubMod A list of optional features
From players' perspective: each option can be toggled on/off depending on their preference
From modders' perspective: a sub-mod is a mod folder contained in the main mod folder. The assets related to the optional feature of the mod must be placed in that sub-mod folder and the sub-mod must be registered with the relevant informations, typically:
<Mod>
	<Name>My Mod</name>
	<InstallationPath>MyMod</installationpath>
	<SubMod>
		<Name>Optional music</name>
		<InstallationPath>MusicSubMod</installationpath>
		<Description>Use the optional musics of the mod.</description>
	</submod>
</mod>
In this example, the main mod folder is MyMod and the music sub-mod folder is MyMod/MusicSubMod. Sub-mod informations can include a Priority field, specifying the priority of the sub-mod compared to the main mod's priority.
Default Sub-mod tagged with Default will be active by default when the mod gets activated for the first time
Group Only one sub-mod of a group can be active at the same time.
Additionally if a sub-mod is tagged with Default (optional) it will be selected if no other sub-mods in the group are active, ensuring there is always one sub-mod in the group active. Only one of the sub-mods of the group should have this tag. If none of the sub-mods of the group have this tag, it will be possible to deactivate all of them.
<Mod>
	<Name>My Mod</name>
	<InstallationPath>MyMod</installationpath>
	<SubMod>
		<Name>Option A</name>
		<InstallationPath>OptionA</installationpath>
		<Description>This is option A</description>
		<Group>MyGroup</group>
		<Default/>
	</submod>
	<SubMod>
		<Name>Option B</name>
		<InstallationPath>OptionB</installationpath>
		<Description>This is option B</description>
		<Group>MyGroup</group>
	</submod>
</mod>
ActivateWithMod Activate sub-mod automatically when all the specified mods are active.
If any of the mods specified is inactive so will the sub-mod.
Sub-mods tagged in this fashion will be hidden from the user in the launcher
	<SubMod>
		<Name>Hidden option</name>
		<InstallationPath>HiddenOption</installationpath>
		<ActivateWithMod>Other Mod A, Other Mod B</activatewithmod>
	</submod>
ActivateWithoutMod Activate sub-mod automatically when all the specified mods are inactive.
If any of the mods specified is active the sub-mod will be inactive.
Sub-mods tagged in this fashion will be hidden from the user in the launcher
	<SubMod>
		<Name>Hidden option</name>
		<InstallationPath>HiddenOption</installationpath>
		<ActivateWithoutMod>Other Mod A, Other Mod B</activatewithoutmod>
	</submod>
Header Allows you to display a header in the mod manager mod options panel.
<Mod>
    ...
    <Header>Header 1</header>
    <SubMod>...</submod>
    <SubMod>...</submod>
    <SubMod>...</submod>
    <Header>Header 2</header>
    <SubMod>...</submod>
    <SubMod>...</submod>
    <SubMod>...</submod>
    ...
</mod>
DownloadSize The size of the file to download (taking the eventual compression into account)
Not yet implemented
FullSize The size of the mod folder once installed
Not yet implemented
HasPriorityOverMods Mods that should be lower than your mod
Not yet implemented
CompatibilityNotes Precision about the compatibility of this mod with other mods
It is possible to specify the other mod concerned by these compatibility informations by specifying the attribute OtherModLow or OtherModHigh (eg. <CompatibilityNotes OtherModHigh="MoguriFiles">Notes about the Moguri Mod if it is placed with higher priority than the mod containing this description</compatibilitynotes>)
Multiple CompatibilityNotes fields can be used
Currently unused

Publishing a Mod

Modders that have created a mod inside a mod folder and have written a ModDescription.xml for it can publish them in Memoria's Mod Manager fairly easily:

  1. Pack the mod folder inside a archive (various tools can do that: Windows's embedded zipper, WinRAR, 7zip, etc...). The root of the archive should either contain your mod folder or be that mod folder itself directly. Note currently we support compression formats Zip, Rar, Tar, Bzip, Gzip, 7-Zip.
  2. Upload your mod somewhere online such that it has a static public download link (eg. with Dropbox, Mediafire, etc...). Note that the website "Nexus Mods" doesn't provide such static links and is not supported yet as a valid download source. Moddb links are supported and should look like this https://www.moddb.com/downloads/start/123456/
  3. Open Memoria's remote mod catalog and click on "Edit this file": it allows to open a pull request that modifies that catalog. Add a copy of your ModDescription.xml's content inside the complete catalog and wait for one of the devs to check and validate your pull request.
Since the Mod Manager fetches its catalog online, your mod will be available to other players as soon as the pull request is accepted.

The Mod Manager is accessible from the launcher


In the manager, you can (un)install, (de)activate and configure mods that rely on the Memoria Engine to function